VideoFlowcodeGitHubStudioTry itCoreRenderersReact Video EditorPlaygroundExamplesDocscodeGitHubStudioTry it
Example

Image background

A static image layer as a backdrop for type.

#image
// Title fades in over a fit:'cover' image that blurs in parallel.
const $ = new VideoFlow({
  name: 'Image Background',
  width: 1920,
  height: 1080,
  fps: 30,
});

// Image source goes in `settings` (2nd arg).
const bg = $.addImage(
  { fit: 'cover' },
  { source: 'https://videoflow.dev/samples/sample.jpg' },
);

// `wait: false` runs the blur in the background without advancing the flow.
bg.animate(
  { filterBlur: 0 },
  { filterBlur: 0.5 },
  { duration: '4s', wait: false },
);

$.wait('500ms');

// textShadow* props decorate the glyphs themselves — no need for a CSS filter.
const title = $.addText({
  text: 'Beautiful Scenery',
  fontSize: 5,
  fontWeight: 700,
  color: '#ffffff',
  textShadowColor: 'rgba(0,0,0,0.5)',
  textShadowBlur: 0.5,
});

// .fadeIn() / .fadeOut() are opacity-keyframe shorthands that advance the flow.
title.fadeIn('1s');
$.wait('3s');
title.fadeOut('1s');
$.wait('500ms');

return $;
Compiling00:00
play_arrowOpen in playgroundcodeSource on GitHub← All examples
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 →Building a "Canva for Video" with the @videoflow/react-video-editorAutomating Social Media Captions: A Developer's Guide to Frame-Perfect SubtitlesBeyond Node: How to Render Cinematic Videos from Python and GoBuilding a Video Rendering API with Node.js and VideoFlow (No FFmpeg Required)Mastering Programmatic Video Transitions: A Developer's GuideProgrammatic Video Storage: Why Your MP4s Should Live as Version-Controlled JSONThe Video Markdown Pattern: Turning Static Content into Automated MP4sZero-Cost Video Rendering: How to Export MP4s Directly in the Browser
© 2026 VideoFlow. Apache-2.0 core.