VideoFlowcodeGitHubStudioTry itCoreRenderersReact Video EditorPlaygroundExamplesDocscodeGitHubStudioTry it
Blog

Programmatic video — guides, tutorials, comparisons.

Long-form articles on building videos with code: VideoFlow tutorials, deep dives into transitions and GLSL effects, head-to-heads with Remotion and FFmpeg, and playbooks for shipping JSON-driven rendering pipelines.

Cinematic Code: How to Stack and Animate GLSL Effects in VideoFlowCinematic Code: How to Stack and Animate GLSL Effects in VideoFlowOctober 31, 2026Video Rendering Without FFmpeg: Inside the VideoFlow Server EngineVideo Rendering Without FFmpeg: Inside the VideoFlow Server EngineOctober 31, 2026Visualizing Git History: How to Build a Repository Timeline with VideoFlowVisualizing Git History: How to Build a Repository Timeline with VideoFlowOctober 31, 2026Headless Video as a Service: Building a Scalable Rendering API with Node.jsHeadless Video as a Service: Building a Scalable Rendering API with Node.jsOctober 31, 2026How to Build a YouTube Shorts Factory with TypeScript and VideoFlowHow to Build a YouTube Shorts Factory with TypeScript and VideoFlowOctober 31, 2026Programmatic Video Localization: Scaling Multilingual Content with VideoFlowProgrammatic Video Localization: Scaling Multilingual Content with VideoFlowOctober 31, 2026Scaling Programmatic Video: How to Architect Large-Scale ProjectsScaling Programmatic Video: How to Architect Large-Scale ProjectsOctober 31, 2026The Three-Renderer Rule: Preview, Export, and Batch Render with One JSONThe Three-Renderer Rule: Preview, Export, and Batch Render with One JSONOctober 31, 2026VideoFlow vs Remotion: Why Portable JSON is the Secret to LLM Video GenerationVideoFlow vs Remotion: Why Portable JSON is the Secret to LLM Video GenerationOctober 31, 2026From JSON to MP4 in the Browser: Zero-Server Video ExportFrom JSON to MP4 in the Browser: Zero-Server Video ExportOctober 31, 2026Animated Infographics as Code: Building a Reusable Data-Viz LibraryAnimated Infographics as Code: Building a Reusable Data-Viz LibraryOctober 3, 2026CI/CD for Video: Building a Diffable Asset Pipeline with VideoFlowCI/CD for Video: Building a Diffable Asset Pipeline with VideoFlowOctober 3, 2026Beyond Static Images: Generating Dynamic Social Share Videos from MetadataBeyond Static Images: Generating Dynamic Social Share Videos from MetadataOctober 3, 2026How to Embed a Full-Featured Video Editor in Your React AppHow to Embed a Full-Featured Video Editor in Your React AppOctober 3, 2026Stop Concatenating Strings: A Migration Guide from FFmpeg to VideoFlowStop Concatenating Strings: A Migration Guide from FFmpeg to VideoFlowOctober 3, 2026Headless Video Rendering: Generating MP4s on Node.js without FFmpegHeadless Video Rendering: Generating MP4s on Node.js without FFmpegOctober 3, 2026How to Give Your AI Agent a Video Tool: An LLM-to-Video PlaybookHow to Give Your AI Agent a Video Tool: An LLM-to-Video PlaybookOctober 3, 2026Composing Videos in Python and Go: The Power of Language-Agnostic VideoJSONComposing Videos in Python and Go: The Power of Language-Agnostic VideoJSONOctober 3, 2026Markdown to MP4: Automating Technical Explainer Videos with VideoFlowMarkdown to MP4: Automating Technical Explainer Videos with VideoFlowOctober 3, 2026Mastering GLSL Effects: Building Cinematic Pipelines with CodeMastering GLSL Effects: Building Cinematic Pipelines with CodeOctober 3, 2026Mastering Timing in VideoFlow: The Wait and Parallel PlaybookMastering Timing in VideoFlow: The Wait and Parallel PlaybookOctober 3, 2026One JSON, Three Renderers: Building a Seamless Video Pipeline with VideoFlowOne JSON, Three Renderers: Building a Seamless Video Pipeline with VideoFlowOctober 3, 2026Building Real-Time Stream Overlays with VideoFlow and the DOM RendererBuilding Real-Time Stream Overlays with VideoFlow and the DOM RendererOctober 3, 2026How to Render MP4 from Node.js Without FFmpegHow to Render MP4 from Node.js Without FFmpegOctober 3, 2026How to Render MP4s in Node.js Without FFmpegHow to Render MP4s in Node.js Without FFmpegOctober 3, 2026Resolution-Agnostic Video: Why Your Code Should Render 4K and 720p IdenticallyResolution-Agnostic Video: Why Your Code Should Render 4K and 720p IdenticallyOctober 3, 2026Responsive Video: Render 4K, 1080p, and 9:16 Clips from One JSON SourceResponsive Video: Render 4K, 1080p, and 9:16 Clips from One JSON SourceOctober 3, 2026Scaling Personalized Video with Zero Server CostScaling Personalized Video with Zero Server CostOctober 3, 2026Scaling Video Generation for $0: The Power of In-Browser ExportScaling Video Generation for $0: The Power of In-Browser ExportOctober 3, 2026The Serverless Video Playbook: Rendering MP4s in Cloud Functions without FFmpegThe Serverless Video Playbook: Rendering MP4s in Cloud Functions without FFmpegOctober 3, 2026Video-as-Code: Unit Testing Visual Timelines with VideoFlow and VitestVideo-as-Code: Unit Testing Visual Timelines with VideoFlow and VitestOctober 3, 2026VideoFlow: The Apache-2.0 Open Source Alternative to RemotionVideoFlow: The Apache-2.0 Open Source Alternative to RemotionOctober 3, 2026VideoFlow vs. Remotion: Why Portable JSON is the Future of Video-as-CodeVideoFlow vs. Remotion: Why Portable JSON is the Future of Video-as-CodeOctober 3, 2026Zero-Server Video Export: Mastering In-Browser MP4 GenerationZero-Server Video Export: Mastering In-Browser MP4 GenerationOctober 3, 2026Zero-Server Video Pipelines: The Case for In-Browser MP4 ExportZero-Server Video Pipelines: The Case for In-Browser MP4 ExportOctober 3, 2026The Zero-Server Video Stack: Client-Side MP4 Export with WebCodecsThe Zero-Server Video Stack: Client-Side MP4 Export with WebCodecsOctober 3, 2026Mastering Cinematic Compositing: A Guide to VideoFlow BlendModesMastering Cinematic Compositing: A Guide to VideoFlow BlendModesOctober 2, 2026JSON is the New MP4: Building a Video-First SaaSJSON is the New MP4: Building a Video-First SaaSOctober 2, 2026The Multi-Language Video Stack: Generating MP4s from Python, Go, and RustThe Multi-Language Video Stack: Generating MP4s from Python, Go, and RustOctober 2, 2026VideoFlow vs. Remotion: Why Portable JSON is the Future of Programmatic VideoVideoFlow vs. Remotion: Why Portable JSON is the Future of Programmatic VideoOctober 2, 2026The 27 Transitions: A Developer's Guide to Cinematic CodeThe 27 Transitions: A Developer's Guide to Cinematic CodeSeptember 19, 2026Building a "Canva for Video" with the @videoflow/react-video-editorBuilding a "Canva for Video" with the @videoflow/react-video-editorSeptember 19, 2026Cinematic JSON: Mastering GLSL Effects in VideoFlowCinematic JSON: Mastering GLSL Effects in VideoFlowSeptember 19, 2026Dynamic Lower Thirds: Building Reusable Social Overlays with GroupLayerDynamic Lower Thirds: Building Reusable Social Overlays with GroupLayerSeptember 19, 2026From FFmpeg Shell Scripts to TypeScript: A Migration GuideFrom FFmpeg Shell Scripts to TypeScript: A Migration GuideSeptember 19, 2026Headless Video Rendering in Node.js: Why You Don't Need FFmpegHeadless Video Rendering in Node.js: Why You Don't Need FFmpegSeptember 19, 2026Serverless Video: Rendering MP4s in AWS Lambda Without FFmpegServerless Video: Rendering MP4s in AWS Lambda Without FFmpegSeptember 19, 2026Stop Sending MP4s to Code Review: The Case for Diffable VideoStop Sending MP4s to Code Review: The Case for Diffable VideoSeptember 19, 2026The Browser is the GPU: Client-Side MP4 Export with WebCodecsThe Browser is the GPU: Client-Side MP4 Export with WebCodecsSeptember 19, 2026The Logic of Motion: Building Data-Driven Video Templates with TypeScriptThe Logic of Motion: Building Data-Driven Video Templates with TypeScriptSeptember 19, 2026The Three-Renderer Rule: How to Preview, Edit, and Export Video with One SchemaThe Three-Renderer Rule: How to Preview, Edit, and Export Video with One SchemaSeptember 19, 2026Testing Your Video Pipeline: Unit Testing and Visual Regression with VideoFlowTesting Your Video Pipeline: Unit Testing and Visual Regression with VideoFlowSeptember 19, 2026Video-as-Code: Why Your Marketing Assets Should Live in GitVideo-as-Code: Why Your Marketing Assets Should Live in GitSeptember 19, 2026The 1% Rule: Why VideoFlow Uses em Units for Resolution-Agnostic VideoThe 1% Rule: Why VideoFlow Uses em Units for Resolution-Agnostic VideoSeptember 19, 2026Automating Social Media Captions: A Developer's Guide to Frame-Perfect SubtitlesAutomating Social Media Captions: A Developer's Guide to Frame-Perfect SubtitlesSeptember 11, 2026Beyond Node: How to Render Cinematic Videos from Python and GoBeyond Node: How to Render Cinematic Videos from Python and GoSeptember 11, 2026Building a Video Rendering API with Node.js and VideoFlow (No FFmpeg Required)Building a Video Rendering API with Node.js and VideoFlow (No FFmpeg Required)September 11, 2026Mastering Programmatic Video Transitions: A Developer's GuideMastering Programmatic Video Transitions: A Developer's GuideSeptember 11, 2026Programmatic Video Storage: Why Your MP4s Should Live as Version-Controlled JSONProgrammatic Video Storage: Why Your MP4s Should Live as Version-Controlled JSONSeptember 11, 2026The Video Markdown Pattern: Turning Static Content into Automated MP4sThe Video Markdown Pattern: Turning Static Content into Automated MP4sSeptember 11, 2026Zero-Cost Video Rendering: How to Export MP4s Directly in the BrowserZero-Cost Video Rendering: How to Export MP4s Directly in the BrowserSeptember 11, 2026Building an AI Video Agent: How to Generate MP4s from LLM Prompts with VideoJSONBuilding an AI Video Agent: How to Generate MP4s from LLM Prompts with VideoJSONSeptember 1, 2026Automating E-commerce: How to Generate 1,000 Product Videos with TypeScriptAutomating E-commerce: How to Generate 1,000 Product Videos with TypeScriptSeptember 1, 2026The Blueprint for Automated Video: Building a Reusable Component LibraryThe Blueprint for Automated Video: Building a Reusable Component LibrarySeptember 1, 2026Automated Weekly Recaps: Building a Personalized Video Engine for Your SaaSAutomated Weekly Recaps: Building a Personalized Video Engine for Your SaaSSeptember 1, 2026Building a Video-First SaaS: Embed a Multi-Track Editor in 10 LinesBuilding a Video-First SaaS: Embed a Multi-Track Editor in 10 LinesSeptember 1, 2026Building Video Components: A Guide to Layer Grouping in VideoFlowBuilding Video Components: A Guide to Layer Grouping in VideoFlowSeptember 1, 2026The Art of Layering: Building Cinematic Programmatic Video with VideoFlowThe Art of Layering: Building Cinematic Programmatic Video with VideoFlowSeptember 1, 2026Design Once, Render Anywhere: The Developer's Guide to Resolution-Agnostic VideoDesign Once, Render Anywhere: The Developer's Guide to Resolution-Agnostic VideoSeptember 1, 2026Dynamic Lower Thirds: Animating Professional Overlays with CodeDynamic Lower Thirds: Animating Professional Overlays with CodeSeptember 1, 2026Beyond the Built-ins: A Guide to Custom Layer Types in VideoFlowBeyond the Built-ins: A Guide to Custom Layer Types in VideoFlowSeptember 1, 2026Beyond Previews: Building Interactive Video with @videoflow/renderer-domBeyond Previews: Building Interactive Video with @videoflow/renderer-domSeptember 1, 2026The Ladder of Fidelity: Mapping Programmatic Video to NLE ControlsThe Ladder of Fidelity: Mapping Programmatic Video to NLE ControlsSeptember 1, 2026The Math of Motion: Mastering Easings and Keyframes in VideoFlowThe Math of Motion: Mastering Easings and Keyframes in VideoFlowSeptember 1, 2026Goodbye Shell Scripts: Migrating Your FFmpeg Pipeline to Type-Safe JSONGoodbye Shell Scripts: Migrating Your FFmpeg Pipeline to Type-Safe JSONSeptember 1, 2026Stop Scripting, Start Composing: Migrating from FFmpeg to VideoFlowStop Scripting, Start Composing: Migrating from FFmpeg to VideoFlowSeptember 1, 2026Branding at Scale: Programmatic Video Overlays with VideoFlowBranding at Scale: Programmatic Video Overlays with VideoFlowSeptember 1, 2026The Remotion Alternative: Why Portable VideoJSON is the Future of Automated ContentThe Remotion Alternative: Why Portable VideoJSON is the Future of Automated ContentSeptember 1, 2026Write Once, Render Anywhere: Building Resolution-Agnostic Video PipelinesWrite Once, Render Anywhere: Building Resolution-Agnostic Video PipelinesSeptember 1, 2026Stop Calculating Pixels: Mastering Resolution-Independent Video with VideoFlowStop Calculating Pixels: Mastering Resolution-Independent Video with VideoFlowSeptember 1, 2026Scaling to Zero: Building Serverless Video Pipelines with VideoFlow and AWS LambdaScaling to Zero: Building Serverless Video Pipelines with VideoFlow and AWS LambdaSeptember 1, 2026Serverless Video Rendering: Deploying VideoFlow on AWS Lambda without FFmpegServerless Video Rendering: Deploying VideoFlow on AWS Lambda without FFmpegSeptember 1, 2026The Three-Renderer Rule: Why Portable VideoJSON is the Future of AutomationThe Three-Renderer Rule: Why Portable VideoJSON is the Future of AutomationSeptember 1, 2026The Three-Renderer Rule: Mastering Parity in Programmatic VideoThe Three-Renderer Rule: Mastering Parity in Programmatic VideoSeptember 1, 2026The 3-Renderer Rule: When to Render in the Browser, Server, or DOMThe 3-Renderer Rule: When to Render in the Browser, Server, or DOMSeptember 1, 2026The Three-Renderer Rule: How VideoFlow Ensures Consistency from Browser to ServerThe Three-Renderer Rule: How VideoFlow Ensures Consistency from Browser to ServerSeptember 1, 2026The Three-Renderer Strategy: How to Preview, Export, and Automate Video with One JSONThe Three-Renderer Strategy: How to Preview, Export, and Automate Video with One JSONSeptember 1, 2026Video CI/CD: How to Automate Video Previews in Your Pull RequestsVideo CI/CD: How to Automate Video Previews in Your Pull RequestsSeptember 1, 2026Zero-Server Video Export: Rendering MP4s in the Browser with WebCodecsZero-Server Video Export: Rendering MP4s in the Browser with WebCodecsSeptember 1, 2026Beyond FFmpeg: Why Your AI Agents Should Speak VideoJSONBeyond FFmpeg: Why Your AI Agents Should Speak VideoJSONAugust 22, 2026Beyond Static Images: Automating Open Graph Videos for Your BlogBeyond Static Images: Automating Open Graph Videos for Your BlogAugust 22, 2026How to Build a Video-as-a-Service (VaaS) API with VideoFlowHow to Build a Video-as-a-Service (VaaS) API with VideoFlowAugust 22, 2026How to Embed a Multi-Track Video Editor in Your React App in 15 LinesHow to Embed a Multi-Track Video Editor in Your React App in 15 LinesAugust 22, 2026The GLSL Effects Playbook: Mastering Cinematic Visuals with CodeThe GLSL Effects Playbook: Mastering Cinematic Visuals with CodeAugust 22, 2026The GLSL Power User: Stacking Effects for Cinematic Video as CodeThe GLSL Power User: Stacking Effects for Cinematic Video as CodeAugust 22, 2026Mastering Blend Modes: Creating Cinematic Visuals with CodeMastering Blend Modes: Creating Cinematic Visuals with CodeAugust 22, 2026Mastering the ShapeLayer: Programmatic Motion Graphics for SaaSMastering the ShapeLayer: Programmatic Motion Graphics for SaaSAugust 22, 2026Modular Video Generation: Using Groups to Build Complex AI-Driven TimelinesModular Video Generation: Using Groups to Build Complex AI-Driven TimelinesAugust 22, 2026Moving from Remotion to VideoFlow: The Complete Migration PlaybookMoving from Remotion to VideoFlow: The Complete Migration PlaybookAugust 22, 2026The Parallel & Wait Playbook: Mastering Complex Video TimelinesThe Parallel & Wait Playbook: Mastering Complex Video TimelinesAugust 22, 2026Render MP4s in Node without FFmpeg: A Guide to Headless WebCodecs RenderingRender MP4s in Node without FFmpeg: A Guide to Headless WebCodecs RenderingAugust 22, 2026The 3-Renderer Rule: A Modern Programmatic Video ArchitectureThe 3-Renderer Rule: A Modern Programmatic Video ArchitectureAugust 22, 2026The Three-Renderer Rule: Why Your Video Pipeline Needs a Browser, a Server, and a DOMThe Three-Renderer Rule: Why Your Video Pipeline Needs a Browser, a Server, and a DOMAugust 22, 2026Video as Code: Why Your Video Pipeline Should Be DiffableVideo as Code: Why Your Video Pipeline Should Be DiffableAugust 22, 2026The 27-Transition Catalogue: Cinematic Motion Without KeyframesThe 27-Transition Catalogue: Cinematic Motion Without KeyframesAugust 22, 2026Zero-Cost Video Export: Shipping MP4s from the Browser with WebCodecsZero-Cost Video Export: Shipping MP4s from the Browser with WebCodecsAugust 22, 2026Zero-Cost Video Infrastructure: Exporting MP4s in the Browser with WebCodecsZero-Cost Video Infrastructure: Exporting MP4s in the Browser with WebCodecsAugust 22, 2026The Zero-Server Video Export: Leveraging WebCodecs for Client-Side MP4sThe Zero-Server Video Export: Leveraging WebCodecs for Client-Side MP4sAugust 22, 2026Programmatic Video Ads: Scaling Creative Production with JSON TemplatesProgrammatic Video Ads: Scaling Creative Production with JSON TemplatesAugust 20, 2026Building a Canva for Video: Embeddable Editing in Your React AppBuilding a Canva for Video: Embeddable Editing in Your React AppAugust 18, 2026Responsive Video Design: Why Pixels Are the Wrong Unit for Video AutomationResponsive Video Design: Why Pixels Are the Wrong Unit for Video AutomationAugust 18, 2026Zero-Server-Cost Video Rendering: Exporting MP4s in the BrowserZero-Server-Cost Video Rendering: Exporting MP4s in the BrowserAugust 18, 2026The 50-Line YouTube Shorts Factory: Programmatic Video with VideoFlowThe 50-Line YouTube Shorts Factory: Programmatic Video with VideoFlowAugust 12, 2026Mastering Motion: How to Animate Effect Parameters in VideoFlowMastering Motion: How to Animate Effect Parameters in VideoFlowAugust 12, 2026Cinematic Code: How to Stack GLSL Effects in VideoFlowCinematic Code: How to Stack GLSL Effects in VideoFlowAugust 12, 2026Cinematic Code: A Guide to VideoFlow’s 42 GLSL EffectsCinematic Code: A Guide to VideoFlow’s 42 GLSL EffectsAugust 12, 2026Finish in the Suite: Exporting VideoFlow to Premiere and Final Cut ProFinish in the Suite: Exporting VideoFlow to Premiere and Final Cut ProAugust 12, 2026Git-Driven Video: Building a CI/CD Pipeline for Your MP4 AssetsGit-Driven Video: Building a CI/CD Pipeline for Your MP4 AssetsAugust 12, 2026JSON as the New MP4: Why Your Video Pipeline Should Be DiffableJSON as the New MP4: Why Your Video Pipeline Should Be DiffableAugust 12, 2026LLM-Driven Video: Giving Your AI Agent a VideoFlow ToolLLM-Driven Video: Giving Your AI Agent a VideoFlow ToolAugust 12, 2026Mastering BlendModes: How to Create Cinematic Overlays with CodeMastering BlendModes: How to Create Cinematic Overlays with CodeAugust 12, 2026Mastering Flow: How to Use $.wait, $.parallel, and $.group in VideoFlowMastering Flow: How to Use $.wait, $.parallel, and $.group in VideoFlowAugust 12, 2026Personalized Video at Scale: Build a SaaS Year in Review EnginePersonalized Video at Scale: Build a SaaS Year in Review EngineAugust 12, 2026Remotion vs VideoFlow: Why JSON-Portable Video is the Future of AutomationRemotion vs VideoFlow: Why JSON-Portable Video is the Future of AutomationAugust 12, 2026The Three-Renderer Rule: Why Your Video Pipeline Needs a Live PreviewThe Three-Renderer Rule: Why Your Video Pipeline Needs a Live PreviewAugust 12, 2026How to Unit Test Your Video Timelines with VideoFlow and TypeScriptHow to Unit Test Your Video Timelines with VideoFlow and TypeScriptAugust 12, 2026Parallel vs Sequential: Mastering the VideoFlow Timing ModelParallel vs Sequential: Mastering the VideoFlow Timing ModelAugust 12, 2026One JSON, Three Renderers: Mastering the VideoFlow LifecycleOne JSON, Three Renderers: Mastering the VideoFlow LifecycleAugust 10, 2026Generating Multi-Language Video at Scale: The Localization PlaybookGenerating Multi-Language Video at Scale: The Localization PlaybookJuly 8, 2026Browser-Side Video Export: Zero-Server Rendering with WebCodecsBrowser-Side Video Export: Zero-Server Rendering with WebCodecsJuly 8, 2026How to Build a Dynamic Video Editor in React in 10 MinutesHow to Build a Dynamic Video Editor in React in 10 MinutesJuly 8, 2026How to Build a Video Rendering API in Node.js (Without FFmpeg)How to Build a Video Rendering API in Node.js (Without FFmpeg)July 8, 2026Cinematic GLSL: Stacking Effects for a Retro VHS Look in VideoFlowCinematic GLSL: Stacking Effects for a Retro VHS Look in VideoFlowJuly 8, 2026Cinematic Text: Mastering Typography and Text Effects in VideoFlowCinematic Text: Mastering Typography and Text Effects in VideoFlowJuly 8, 2026How to Generate Personalized Video Ads from a CSV with TypeScriptHow to Generate Personalized Video Ads from a CSV with TypeScriptJuly 8, 2026The Git-Flow for Video: Why Your MP4s Should Be Diffable JSONThe Git-Flow for Video: Why Your MP4s Should Be Diffable JSONJuly 8, 2026Headless Video Rendering: Why VideoFlow Doesn't Need FFmpegHeadless Video Rendering: Why VideoFlow Doesn't Need FFmpegJuly 8, 2026Beyond the Play Button: Building Interactive Video Docs with VideoFlowBeyond the Play Button: Building Interactive Video Docs with VideoFlowJuly 8, 2026Beyond the Prompt: Why LLMs Need Portable VideoJSONBeyond the Prompt: Why LLMs Need Portable VideoJSONJuly 8, 2026From Markdown to MP4: Automate Your Documentation Video PipelineFrom Markdown to MP4: Automate Your Documentation Video PipelineJuly 8, 2026Mastering Responsive Video Design in VideoFlowMastering Responsive Video Design in VideoFlowJuly 8, 2026Prompt-to-MP4: How to Let AI Agents Compose Videos via JSONPrompt-to-MP4: How to Let AI Agents Compose Videos via JSONJuly 8, 2026How to Build a Frame-Accurate Video Preview in React with VideoFlowHow to Build a Frame-Accurate Video Preview in React with VideoFlowJuly 8, 2026How to Render MP4s in Node.js Without FFmpegHow to Render MP4s in Node.js Without FFmpegJuly 8, 2026How to Render MP4 Videos in Node.js without FFmpegHow to Render MP4 Videos in Node.js without FFmpegJuly 8, 2026How to Render MP4s in Node.js without FFmpeg: A Guide to Headless WebCodecsHow to Render MP4s in Node.js without FFmpeg: A Guide to Headless WebCodecsJuly 8, 2026Building Reusable Programmatic Video Components with Layer GroupsBuilding Reusable Programmatic Video Components with Layer GroupsJuly 8, 2026The Component Pattern: Encapsulating Motion with $.group()The Component Pattern: Encapsulating Motion with $.group()July 8, 2026Serverless Video Rendering: High-Scale Export without FFmpegServerless Video Rendering: High-Scale Export without FFmpegJuly 8, 2026The 3-Renderer Rule: Why Your Video Pipeline Should Be JSON-FirstThe 3-Renderer Rule: Why Your Video Pipeline Should Be JSON-FirstJuly 8, 2026The Three-Renderer Rule: Unifying Your Video Rendering PipelineThe Three-Renderer Rule: Unifying Your Video Rendering PipelineJuly 8, 2026The Three-Renderer Rule: Consistent Video from Preview to ProductionThe Three-Renderer Rule: Consistent Video from Preview to ProductionJuly 8, 2026The Three-Renderer Rule: Architecture for Portable Video PipelinesThe Three-Renderer Rule: Architecture for Portable Video PipelinesJuly 8, 2026The Three-Renderer Rule: Choosing the Right Engine for Your Video PipelineThe Three-Renderer Rule: Choosing the Right Engine for Your Video PipelineJuly 8, 2026Unit Testing Your Video: How to Assert on Motion and Timing with VideoFlowUnit Testing Your Video: How to Assert on Motion and Timing with VideoFlowJuly 8, 2026VideoFlow vs FFmpeg: Why You Should Stop Concatenating Shell CommandsVideoFlow vs FFmpeg: Why You Should Stop Concatenating Shell CommandsJuly 8, 2026VideoFlow vs Remotion: The Open Source Alternative for Video as CodeVideoFlow vs Remotion: The Open Source Alternative for Video as CodeJuly 8, 2026VideoFlow vs. Remotion: Why JSON Portability Changes EverythingVideoFlow vs. Remotion: Why JSON Portability Changes EverythingJuly 8, 2026VideoFlow vs. Remotion: The Case for Portable, Open-Source Video-as-CodeVideoFlow vs. Remotion: The Case for Portable, Open-Source Video-as-CodeJuly 8, 2026Why Your Video Pipeline Should Be Diffable: The Power of VideoJSONWhy Your Video Pipeline Should Be Diffable: The Power of VideoJSONJuly 8, 2026How to Automate Loom-style Product Demos with TypeScriptHow to Automate Loom-style Product Demos with TypeScriptMay 22, 2026Automated Podcast Audiogram Generator: Turning Audio into Viral Video with TypeScriptAutomated Podcast Audiogram Generator: Turning Audio into Viral Video with TypeScriptMay 22, 2026How to Turn Markdown Changelogs into Automated Product Update VideosHow to Turn Markdown Changelogs into Automated Product Update VideosMay 22, 2026Automating Personalized Onboarding Videos with VideoFlow and TypeScriptAutomating Personalized Onboarding Videos with VideoFlow and TypeScriptMay 22, 2026Automated Video Subtitles: A Developer's Guide to the VideoFlow Captions LayerAutomated Video Subtitles: A Developer's Guide to the VideoFlow Captions LayerMay 22, 2026Automating YouTube Shorts: Build a Vertical Video Factory in 30 Lines of TypeScriptAutomating YouTube Shorts: Build a Vertical Video Factory in 30 Lines of TypeScriptMay 22, 2026How to Build a Browser-Based Video Editor with React and VideoFlowHow to Build a Browser-Based Video Editor with React and VideoFlowMay 22, 2026Cinematic 3D Video with TypeScript: A Guide to Perspective and RotationCinematic 3D Video with TypeScript: A Guide to Perspective and RotationMay 22, 2026Cinematic GLSL Effect Stacking: Building High-End Visuals with CodeCinematic GLSL Effect Stacking: Building High-End Visuals with CodeMay 22, 2026Cinematic Text Animations with TypeScript: Beyond the Simple FadeCinematic Text Animations with TypeScript: Beyond the Simple FadeMay 22, 2026Diffable Video: Versioning Your Media Pipeline with VideoJSONDiffable Video: Versioning Your Media Pipeline with VideoJSONMay 22, 2026Video as Data: Building an LLM-Powered Video Generation PipelineVideo as Data: Building an LLM-Powered Video Generation PipelineMay 22, 2026Mastering Video Transitions: The Developer's Guide to Programmatic MotionMastering Video Transitions: The Developer's Guide to Programmatic MotionMay 22, 2026Mastering Motion: A Deep Dive into VideoFlow Transitions and EasingMastering Motion: A Deep Dive into VideoFlow Transitions and EasingMay 22, 2026Why VideoFlow is the Best Open Source Remotion AlternativeWhy VideoFlow is the Best Open Source Remotion AlternativeMay 22, 2026Global by Default: Automating Video Localization with TypeScriptGlobal by Default: Automating Video Localization with TypeScriptMay 22, 2026From JSON to 60 FPS: Building Real-Time Video Previews in ReactFrom JSON to 60 FPS: Building Real-Time Video Previews in ReactMay 22, 2026Moving from Remotion to VideoFlow: An Open-Source Migration GuideMoving from Remotion to VideoFlow: An Open-Source Migration GuideMay 22, 2026How to Render MP4 from a Node API without FFmpegHow to Render MP4 from a Node API without FFmpegMay 22, 2026How to Render MP4 Videos in Node.js Without FFmpegHow to Render MP4 Videos in Node.js Without FFmpegMay 22, 2026How to Render MP4s in Node.js Without Installing FFmpegHow to Render MP4s in Node.js Without Installing FFmpegMay 22, 2026How to Render Video in Node.js Without FFmpeg: A WebCodecs Deep DiveHow to Render Video in Node.js Without FFmpeg: A WebCodecs Deep DiveMay 22, 2026One JSON, Every Aspect Ratio: Resolution-Agnostic Video with VideoFlowOne JSON, Every Aspect Ratio: Resolution-Agnostic Video with VideoFlowMay 22, 2026State-Driven Video: Syncing Your React UI with a Programmatic TimelineState-Driven Video: Syncing Your React UI with a Programmatic TimelineMay 22, 2026Testing Your Video: How to Build a CI/CD Pipeline for Programmatic MediaTesting Your Video: How to Build a CI/CD Pipeline for Programmatic MediaMay 22, 2026The Three-Renderer Rule: Preview, Export, and Automate with VideoFlowThe Three-Renderer Rule: Preview, Export, and Automate with VideoFlowMay 22, 2026The Three-Renderer Rule: Why Live Preview is the Secret to Programmatic VideoThe Three-Renderer Rule: Why Live Preview is the Secret to Programmatic VideoMay 22, 2026The Three-Renderer Rule: Scaling Video from Preview to ProductionThe Three-Renderer Rule: Scaling Video from Preview to ProductionMay 22, 2026The Three-Renderer Rule: Building Unified Video Pipelines with VideoFlowThe Three-Renderer Rule: Building Unified Video Pipelines with VideoFlowMay 22, 2026Treating Video like Markdown: How to Automate Explainer Videos with VideoFlowTreating Video like Markdown: How to Automate Explainer Videos with VideoFlowMay 22, 2026Video as Markdown: Why Your Video Pipeline Should Be DiffableVideo as Markdown: Why Your Video Pipeline Should Be DiffableMay 22, 2026Why Your Video Pipeline Should Be Diffable: Git for MP4sWhy Your Video Pipeline Should Be Diffable: Git for MP4sMay 22, 2026Building a Video Rendering API with Serverless FunctionsBuilding a Video Rendering API with Serverless FunctionsMay 22, 2026Video Version Control: Why Your Timelines Should Be in GitVideo Version Control: Why Your Timelines Should Be in GitMay 22, 2026Why You Should Store Your Videos as JSON, Not MP4Why You Should Store Your Videos as JSON, Not MP4May 22, 2026Why Your Video Pipeline Should Be Diffable: Versioning Motion Graphics with GitWhy Your Video Pipeline Should Be Diffable: Versioning Motion Graphics with GitMay 22, 2026Zero-FFmpeg Video Pipelines: Scaling Server-Side Rendering with WebCodecsZero-FFmpeg Video Pipelines: Scaling Server-Side Rendering with WebCodecsMay 22, 2026Zero-Server Cost Video: Rendering MP4s in the Browser with WebCodecsZero-Server Cost Video: Rendering MP4s in the Browser with WebCodecsMay 22, 2026How to Automate Sports Highlights with TypeScriptHow to Automate Sports Highlights with TypeScriptMay 21, 2026Scaling Social Proof: How to Automate Video Testimonials with TypeScriptScaling Social Proof: How to Automate Video Testimonials with TypeScriptMay 21, 2026How to Build Personalized "Year in Review" Videos at Scale with TypeScriptHow to Build Personalized "Year in Review" Videos at Scale with TypeScriptMay 21, 2026How to Build a Dynamic 'Year in Review' Video for Your SaaS UsersHow to Build a Dynamic 'Year in Review' Video for Your SaaS UsersMay 21, 2026Beyond Opacity: How to Use BlendModes for Programmatic Motion GraphicsBeyond Opacity: How to Use BlendModes for Programmatic Motion GraphicsMay 21, 2026Build a Pro Video Editor in React: A 15-Minute Integration GuideBuild a Pro Video Editor in React: A 15-Minute Integration GuideMay 21, 2026How to Build a Quote-to-Video Engine in 20 Lines of TypeScriptHow to Build a Quote-to-Video Engine in 20 Lines of TypeScriptMay 21, 2026Beyond Static Images: Building Dynamic Social Video Banners with TypeScriptBeyond Static Images: Building Dynamic Social Video Banners with TypeScriptMay 21, 2026From String Concatenation to Type-Safe Video: Replacing FFmpeg with VideoFlowFrom String Concatenation to Type-Safe Video: Replacing FFmpeg with VideoFlowMay 21, 2026Git for Video: Why Your Pipeline Should Be DiffableGit for Video: Why Your Pipeline Should Be DiffableMay 21, 2026GitHub to Video: Automating Product Update Videos from Your Commit HistoryGitHub to Video: Automating Product Update Videos from Your Commit HistoryMay 21, 2026The Headless Video Playbook: Scaling Your Rendering APIThe Headless Video Playbook: Scaling Your Rendering APIMay 21, 2026Headless Video Rendering in Node.js without FFmpeg: A Developer's GuideHeadless Video Rendering in Node.js without FFmpeg: A Developer's GuideMay 21, 2026Headless Video Rendering in Node.js without FFmpegHeadless Video Rendering in Node.js without FFmpegMay 21, 2026From Markdown to MP4: Automating Developer Documentation with VideoFlowFrom Markdown to MP4: Automating Developer Documentation with VideoFlowMay 21, 2026Beyond Frame Math: Mastering Timing and Flow with VideoFlow’s PrimitivesBeyond Frame Math: Mastering Timing and Flow with VideoFlow’s PrimitivesMay 21, 2026Moving from Remotion to VideoFlow: The Complete Migration GuideMoving from Remotion to VideoFlow: The Complete Migration GuideMay 21, 2026Beyond Node.js: Generating Programmatic Video from Python, Go, and RustBeyond Node.js: Generating Programmatic Video from Python, Go, and RustMay 21, 2026No FFmpeg Required: High-Performance Server-Side Video Rendering with Node.jsNo FFmpeg Required: High-Performance Server-Side Video Rendering with Node.jsMay 21, 2026Beyond Dashboards: Building Personalized SaaS Recap Videos with VideoFlowBeyond Dashboards: Building Personalized SaaS Recap Videos with VideoFlowMay 21, 2026How to Build a Production-Ready Video Rendering Pipeline with Node.js and BullMQHow to Build a Production-Ready Video Rendering Pipeline with Node.js and BullMQMay 21, 2026Programmatic Motion Graphics: Recreating After Effects Lower Thirds with CodeProgrammatic Motion Graphics: Recreating After Effects Lower Thirds with CodeMay 21, 202627 Ways to Switch Scenes: A Guide to Programmatic Video Transitions27 Ways to Switch Scenes: A Guide to Programmatic Video TransitionsMay 21, 2026How to Render MP4s in a Node.js API Without FFmpegHow to Render MP4s in a Node.js API Without FFmpegMay 21, 2026How to Render MP4s in Node.js Without FFmpegHow to Render MP4s in Node.js Without FFmpegMay 21, 2026How to Render MP4 in Node.js Without FFmpegHow to Render MP4 in Node.js Without FFmpegMay 21, 2026Write Once, Render Everywhere: Building Resolution-Agnostic Video with VideoFlowWrite Once, Render Everywhere: Building Resolution-Agnostic Video with VideoFlowMay 21, 2026The 1% Rule: Why Resolution-Agnostic Layout is the Secret to Scalable VideoThe 1% Rule: Why Resolution-Agnostic Layout is the Secret to Scalable VideoMay 21, 2026How to Build a 'Spotify Wrapped' Style Video Recap for Your SaaSHow to Build a 'Spotify Wrapped' Style Video Recap for Your SaaSMay 21, 2026Scaling Global Video: A Developer's Guide to Multi-Language MP4 GenerationScaling Global Video: A Developer's Guide to Multi-Language MP4 GenerationMay 21, 2026Serverless Video Rendering: How to Generate MP4s in Node without FFmpegServerless Video Rendering: How to Generate MP4s in Node without FFmpegMay 21, 2026The 1em Rule: Building Resolution-Agnostic Video DesignsThe 1em Rule: Building Resolution-Agnostic Video DesignsMay 21, 2026The Three-Renderer Rule: Why Your Video Pipeline Needs a DOM PreviewThe Three-Renderer Rule: Why Your Video Pipeline Needs a DOM PreviewMay 21, 2026The 3-Renderer Rule: Why Your Programmatic Video Strategy Needs JSON PortabilityThe 3-Renderer Rule: Why Your Programmatic Video Strategy Needs JSON PortabilityMay 21, 2026The Three-Renderer Rule: Unified Video Pipelines from Preview to ExportThe Three-Renderer Rule: Unified Video Pipelines from Preview to ExportMay 21, 2026The 3-Renderer Rule: Build Video Apps That Preview, Export, and AutomateThe 3-Renderer Rule: Build Video Apps That Preview, Export, and AutomateMay 21, 2026Unit Testing Your Videos: A Software Engineering Approach to Motion GraphicsUnit Testing Your Videos: A Software Engineering Approach to Motion GraphicsMay 21, 2026JSON as the New MP4: Building Version-Controlled Video PipelinesJSON as the New MP4: Building Version-Controlled Video PipelinesMay 21, 2026Video as a Microservice: Scaling Programmatic Video in ProductionVideo as a Microservice: Scaling Programmatic Video in ProductionMay 21, 2026Video as a Git Artifact: Why Your Motion Graphics Should Be VersionedVideo as a Git Artifact: Why Your Motion Graphics Should Be VersionedMay 21, 2026Video as JSON: Building Diffable, Version-Controlled Video AssetsVideo as JSON: Building Diffable, Version-Controlled Video AssetsMay 21, 2026Video as Markdown: Why your Video Pipeline should be Diffable and Version-ControlledVideo as Markdown: Why your Video Pipeline should be Diffable and Version-ControlledMay 21, 2026JSON as the New MP4: Treating Video Like Markdown in Your CI/CD PipelineJSON as the New MP4: Treating Video Like Markdown in Your CI/CD PipelineMay 21, 2026Automated Video Pipelines: Building a Video Factory with VideoFlow and GitHub ActionsAutomated Video Pipelines: Building a Video Factory with VideoFlow and GitHub ActionsMay 21, 2026Zero-FFmpeg Video Rendering: Headless MP4 Export in Node.jsZero-FFmpeg Video Rendering: Headless MP4 Export in Node.jsMay 21, 2026Version-Controlled Video: How to Diff and Branch Your Motion GraphicsVersion-Controlled Video: How to Diff and Branch Your Motion GraphicsMay 20, 2026Data in Motion: How to Build Animated Dashboards with VideoFlowData in Motion: How to Build Animated Dashboards with VideoFlowMay 19, 2026Automating E-commerce: Generating Product Videos from a JSON FeedAutomating E-commerce: Generating Product Videos from a JSON FeedMay 19, 2026Zero-Cost Browser-Side Video Rendering with WebCodecsZero-Cost Browser-Side Video Rendering with WebCodecsMay 16, 2026The Art of the Reveal: 5 Cinematic Text Animations in VideoFlowThe Art of the Reveal: 5 Cinematic Text Animations in VideoFlowMay 16, 2026How to Build a High-Impact Caption Engine for Short-Form VideoHow to Build a High-Impact Caption Engine for Short-Form VideoMay 16, 2026Video as Code: Why Portable JSON is the Future of Video PipelinesVideo as Code: Why Portable JSON is the Future of Video PipelinesMay 16, 2026Zero-Server Video Rendering: Export MP4s in the Browser with WebCodecsZero-Server Video Rendering: Export MP4s in the Browser with WebCodecsMay 16, 2026Beyond the Shell: Why Your Video Pipeline Should Be a TypeScript Library, Not an FFmpeg ScriptBeyond the Shell: Why Your Video Pipeline Should Be a TypeScript Library, Not an FFmpeg ScriptMay 14, 2026Component-Driven Video: Mastering Layer Groups and CompositionComponent-Driven Video: Mastering Layer Groups and CompositionMay 14, 2026How to Automate Video Creation from Markdown with VideoFlowHow to Automate Video Creation from Markdown with VideoFlowMay 14, 2026Authoring Resolution-Agnostic Videos: Why 1em is Your Secret WeaponAuthoring Resolution-Agnostic Videos: Why 1em is Your Secret WeaponMay 14, 2026How to Build an In-App Video Editor with React and VideoFlowHow to Build an In-App Video Editor with React and VideoFlowMay 12, 2026Mastering GLSL Video Effects: Building Cinematic Pipelines with VideoFlowMastering GLSL Video Effects: Building Cinematic Pipelines with VideoFlowMay 12, 2026Building a YouTube Shorts Factory with VideoFlow and TypeScriptBuilding a YouTube Shorts Factory with VideoFlow and TypeScriptMay 11, 2026The Three-Renderer Rule: Why Your Video Pipeline Needs a Single Source of TruthThe Three-Renderer Rule: Why Your Video Pipeline Needs a Single Source of TruthMay 10, 2026Zero-Server Video Automation: Rendering MP4s in the Browser with WebCodecsZero-Server Video Automation: Rendering MP4s in the Browser with WebCodecsMay 8, 2026Programmatic Video Animation: A Deep Dive into VideoFlow KeyframesProgrammatic Video Animation: A Deep Dive into VideoFlow KeyframesMay 5, 2026Agentic Video: How to Give Your AI Agent a VideoFlow ToolAgentic Video: How to Give Your AI Agent a VideoFlow ToolMay 2, 2026Shotstack Alternative: Why Developers are Switching to Open Source VideoFlowShotstack Alternative: Why Developers are Switching to Open Source VideoFlowApril 28, 2026VideoFlow vs. Remotion: The Developer's Guide to Code-to-Video in 2025VideoFlow vs. Remotion: The Developer's Guide to Code-to-Video in 2025April 25, 2026Programmatic Video for SaaS: From Postgres Rows to Personalized MP4sProgrammatic Video for SaaS: From Postgres Rows to Personalized MP4sApril 15, 2026
VideoFlow

Open-source toolkit for composing videos from code.

Product

CoreRenderersReact Video EditorPlaygroundStudio

Learn

DocsAPI referenceExamplesvs. Remotionvs. FFmpeg

Project

GitHubLicenseContactTermsPrivacy

From the blog

All posts →Cinematic Code: How to Stack and Animate GLSL Effects in VideoFlowVideo Rendering Without FFmpeg: Inside the VideoFlow Server EngineVisualizing Git History: How to Build a Repository Timeline with VideoFlowHeadless Video as a Service: Building a Scalable Rendering API with Node.jsHow to Build a YouTube Shorts Factory with TypeScript and VideoFlowProgrammatic Video Localization: Scaling Multilingual Content with VideoFlowScaling Programmatic Video: How to Architect Large-Scale ProjectsThe Three-Renderer Rule: Preview, Export, and Batch Render with One JSON
© 2026 VideoFlow. Apache-2.0 core.