VideoFlowcodeGitHubTry itCoreRenderersReact Video EditorPlaygroundExamplesDocscodeGitHubTry it
← Back to Blog

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

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.

A JSON tree composing a glowing 3D bar chart

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.

A multi-panel dashboard interface with glowing data nodes

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.

VideoFlow

Open-source toolkit for composing videos from code.

Product

CoreRenderersReact Video EditorPlayground

Learn

DocsAPI referenceExamplesvs. Remotionvs. FFmpeg

Project

GitHubLicenseContactTermsPrivacy

From the blog

All posts →Version-Controlled Video: How to Diff and Branch Your Motion GraphicsData in Motion: How to Build Animated Dashboards with VideoFlowAutomating E-commerce: Generating Product Videos from a JSON FeedZero-Cost Browser-Side Video Rendering with WebCodecsThe Art of the Reveal: 5 Cinematic Text Animations in VideoFlowHow to Build a High-Impact Caption Engine for Short-Form VideoHow to Build a Serverless Video Rendering Pipeline with AWS LambdaVideo as Code: Why Portable JSON is the Future of Video Pipelines
© 2026 VideoFlow. Apache-2.0 core.