VideoFlowcodeGitHubTry itCoreRenderersReact Video EditorPlaygroundExamplesDocscodeGitHubTry it
← Back to Blog

Diffable Video: Versioning Your Media Pipeline with VideoJSON

May 22, 2026 · By VideoFlowLearn how VideoJSON turns video into portable, diffable data, enabling version-controlled media pipelines and seamless rendering across browser and server.Diffable Video: Versioning Your Media Pipeline with VideoJSON

Diffable Video: Versioning Your Media Pipeline with VideoJSON

For decades, video has been treated as a binary "blob." Whether it's an MP4, a MOV, or a proprietary project file from After Effects, video assets are notoriously difficult to track, diff, or version control. If you change a single pixel or move a title by ten frames, your version control system sees a completely new multi-megabyte file.

But what if you could treat video like source code? What if your entire media pipeline was defined by a single, portable, and human-readable schema?

This is the promise of VideoJSON, the core architecture behind VideoFlow. By shifting from binary blobs to structured data, we can finally bring the best practices of software engineering—versioning, CI/CD, and collaborative diffing—to the world of video production.

A technical diagram of a video timeline being composed from modular blocks of code

The Problem with Binary-First Video

In a traditional media workflow, the "source of truth" is often a heavy project file. For engineering teams building automated content factories, this creates a significant bottleneck. You can't easily git diff a binary file to see what changed between v1.1 and v1.2 of your automated template. You certainly can't store thousands of unique project files in a relational database without hitting storage and performance walls.

When video is "opaque," it’s hard to:

  • Audit changes: Who changed the brand color in the lower-thirds?
  • Automate reviews: Can we programmatically verify that every video includes the required legal disclaimer?
  • Scale generation: How do we send a video "template" to a fleet of worker nodes without sending massive asset bundles?

Enter VideoJSON: Video as Data

VideoFlow solves this by decoupling the description of a video from its rendering. When you use the @videoflow/core builder API, you aren't just calling commands; you are constructing a VideoJSON document.

VideoJSON is a resolution-agnostic, frame-accurate schema that defines every layer, property, and keyframe in your timeline. Because it's plain JSON, it is trivial to store in a JSONB column in Postgres, version-control in Git, or pass between microservices.

Here is what a minimal VideoJSON generation looks like in TypeScript:

import VideoFlow from '@videoflow/core';

const $ = new VideoFlow({ 
  width: 1920, 
  height: 1080, 
  fps: 30,
  backgroundColor: '#000'
});

// Add a title with a cinematic transition
const title = $.addText({
  text: 'The Future is Diffable',
  fontSize: 6, // 6% of project width
  color: '#FF5A1F',
  position: [0.5, 0.4]
}, {
  transitionIn: { transition: 'blurResolve', duration: '800ms' }
});

$.wait('3s');

// Compile the builder state into a portable VideoJSON object
const videoData = await $.compile();

// Now you can log it, save it to a DB, or send it to a renderer
console.log(JSON.stringify(videoData, null, 2));

By using core concepts like normalized coordinates and em-based sizing, this VideoJSON remains valid whether you render it at 720p for a preview or 4K for a final export.

The Three-Renderer Rule: Total Portability

The true power of a standardized schema like VideoJSON is portability. Because the schema is independent of the implementation, VideoFlow provides three official renderers that all consume the exact same JSON.

A visual representation of three identical film frames being processed by three different server icons

  1. @videoflow/renderer-dom: Used in the Playground and React apps for frame-accurate, 60fps live previews.
  2. @videoflow/renderer-browser: Exports high-quality MP4s directly in the user's browser using WebCodecs, eliminating server costs for client-side tools.
  3. @videoflow/renderer-server: A Node.js renderer for headless environments, allowing you to generate videos in your CI/CD pipeline or as part of a backend API.

This "write once, render anywhere" approach is what makes VideoFlow a true open-source alternative to Remotion. You aren't locked into a specific React runtime; you are building on a portable data standard.

How VideoFlow Handles Media Versioning

VideoFlow was designed from the ground up to treat video as a first-class citizen in the developer's toolkit. By using the @videoflow/core package, you can build complex, multi-layered compositions with cinematic primitives—like our 27 transition presets and 42 GLSL effects—without ever touching a shell script.

Because every property in a VideoFlow layer is animatable via keyframes, your VideoJSON becomes a complete record of the motion design. When you update a keyframe easing from linear to easeInOut, the change in your JSON file is clear, readable, and reversible.

Start Building Your Media Pipeline

If you are tired of wrestling with binary blobs and fragile FFmpeg strings, it’s time to move to a data-first video workflow. Whether you're building personalized recap videos for your SaaS or an automated social media factory, VideoJSON provides the stability and portability you need.

  • Explore the API: Check out the VideoFlow Core documentation to see the full list of layers and properties.
  • Try it live: Head over to the Playground to see VideoJSON in action.
  • Join the community: Star the project on GitHub and help us build the future of programmatic video.
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 →How to Automate Loom-style Product Demos with TypeScriptAutomated Podcast Audiogram Generator: Turning Audio into Viral Video with TypeScriptHow to Turn Markdown Changelogs into Automated Product Update VideosAutomating Personalized Onboarding Videos with VideoFlow and TypeScriptAutomating YouTube Shorts: Build a Vertical Video Factory in 30 Lines of TypeScriptCinematic 3D Video with TypeScript: A Guide to Perspective and RotationCinematic GLSL Effect Stacking: Building High-End Visuals with CodeDiffable Video: Versioning Your Media Pipeline with VideoJSON
© 2026 VideoFlow. Apache-2.0 core.