Data in Motion: How to Build Animated Dashboards with VideoFlow
May 19, 2026 · By VideoFlowLearn how to build cinematic animated dashboards and charts using VideoFlow. Use code to transform raw JSON data into professional MP4 recaps for your SaaS users.
Data in Motion: How to Build Animated Dashboards with VideoFlow
Static dashboards tell you what happened. Animated dashboards show you how it felt. In the world of SaaS, delivering a "weekly recap" or a "performance digest" as a flat PDF is no longer enough. Users expect the high-production value of a cinematic recap, but building these manually is impossible at scale.
This is where animated dashboards created via code change the game. By treating chart elements as programmable layers, you can transform raw JSON data into professional-grade video content that your users actually want to share. In this tutorial, we’ll use VideoFlow to build a dynamic bar chart from scratch.
Why Your Data Needs Motion
Motion isn't just about aesthetics; it's about narrative. When a bar chart grows from zero to its final value, or a line graph draws itself across the screen, it guides the viewer's eye through the data. For developers, the challenge has always been the rendering pipeline. Chaining FFmpeg commands to move individual rectangles is a nightmare.
With the VideoFlow core builder API, we treat these visual elements as first-class citizens. Because VideoFlow is resolution-agnostic—using em units where 1em equals 1% of the project width—your dashboards will look identical whether they are rendered for a mobile app or a 4K display.

Building the Bar Chart Layer
To build a chart, we use the $.addShape method. Unlike image layers, shapes are defined by their shapeType (like 'rectangle' or 'ellipse') and allow for granular control over their dimensions and fill.
Here is how we define a single bar in our dashboard:
import VideoFlow from '@videoflow/core';
const $ = new VideoFlow({ width: 1920, height: 1080 });
// A single bar in our chart
const bar = $.addShape(
{
width: 8, // 8em wide
height: 0, // Start at zero height
fill: '#FF5A1F', // VideoFlow Orange
position: [0.3, 0.8], // Bottom-left anchored
cornerRadius: 0.5
},
{
shapeType: 'rectangle',
transitionIn: { transition: 'fade', duration: '500ms' }
}
);
Animating Data Transitions
To make the dashboard feel alive, we need to animate the height of these bars. We use the .animate() method to transition properties over time. To ensure all bars animate at once, we wrap them in a $.parallel() block.
const data = [40, 70, 55, 90, 30];
$.parallel(() => {
data.forEach((value, i) => {
const bar = $.addShape(
{
width: 6,
height: 0,
fill: '#FF5A1F',
position: [0.2 + (i * 0.15), 0.8]
},
{ shapeType: 'rectangle' }
);
// Animate height from 0 to the data value
bar.animate(
{ height: 0 },
{ height: value },
{ duration: '1s', easing: 'easeOut' }
);
});
});
$.wait('2s');
In this snippet, we use VideoFlow's timing primitives to handle the orchestration. The $.parallel call ensures that we don't wait for the first bar to finish its animation before starting the second; they all grow in unison, creating that classic "dashboard reveal" effect.
Adding Cinematic Context
No dashboard is complete without labels and effects. We can stack GLSL effects like bloom or glow directly onto our shapes to give them a premium, "tech-noir" aesthetic.

const title = $.addText({
text: 'Weekly Performance',
fontSize: 5,
color: '#ffffff',
position: [0.5, 0.1],
effects: [{ effect: 'glow', params: { strength: 0.5 } }]
});
title.fadeIn('1s');
From Code to MP4
Once your scene is built, VideoFlow provides three official renderers to get your video to the user. If you are building a SaaS where users want to download their recap instantly, you can use @videoflow/renderer-browser to export the MP4 directly in their tab using WebCodecs. This saves you thousands in server costs.
For batch processing, @videoflow/renderer-server runs in Node.js via headless Chromium, allowing you to generate thousands of personalized videos in the background without ever touching a line of FFmpeg.
Conclusion
Building animated dashboards with code allows you to bridge the gap between data and storytelling. By leveraging VideoFlow's portable VideoJSON and cinematic primitives, you can build scalable video pipelines that feel handcrafted.
Ready to start building? Head over to the VideoFlow Playground to see these shapes in action, or check out our guide on authoring resolution-agnostic videos to learn more about the power of em units.
For the full source and to contribute to the engine, visit the VideoFlow GitHub repository.