explaingit

gordensun/react-bits-video

17JavaScriptAudience · developerComplexity · 3/5ActiveSetup · moderate

TLDR

Cursor and Claude Code Skill that turns a single HTML composition into a deterministic MP4 using Puppeteer plus FFmpeg.

Mindmap

mindmap
  root((motion-video-maker))
    Inputs
      Single HTML file
      data attributes
      Optional Chinese fonts
    Outputs
      Deterministic MP4
      Live preview server
      Single frame snapshots
    Use Cases
      Agent generated reels
      Hand authored shorts
      Showcase animations
    Tech Stack
      JavaScript
      Puppeteer
      FFmpeg
      WebGL
      Canvas

Things people build with this

USE CASE 1

Ask an AI agent to make a 30-second animated video from a prompt

USE CASE 2

Hand-author a polished HTML composition and render it frame-accurate to MP4

USE CASE 3

Add a reusable Skill that any Cursor or Claude Code session can call

USE CASE 4

Build short product or marketing reels with Chinese typography support

Tech stack

JavaScriptNodePuppeteerFFmpegWebGL

Getting it running

Difficulty · moderate Time to first run · 30min

Needs Node, Puppeteer, FFmpeg on PATH, and a one-time download of 12 Chinese fonts.

In plain English

motion-video-maker is a toolkit for turning a single HTML file into a finished animated MP4 video. It is packaged as a Skill, which is a folder that AI coding agents such as Cursor, Codex, and Claude Code can load into their skills directory. Once installed, the agent reads the skill's instructions and can write a composition, render it, and hand back a finished short video on request. The author describes the project as a distillation of three existing tools: react-bits for animation pieces, Remotion for deterministic video output, and Hyperframes for HTML-native composition. The video itself is a normal HTML page. A stage element declares the resolution, frame rate, and duration. Inside it, the author drops scenes with data attributes that say when each piece starts, how long it lasts, and which animation to play. The runtime ships seventeen text animations like split, blur, typewriter, decrypted, and an odometer-style count-up, eleven Canvas backgrounds such as particles and starfield, seven WebGL shader backgrounds like liquid-ether and lightning, twenty-four entrance presets for elements, three element effects, eight scene-to-scene transitions, and spring physics easing curves. A readability stack of CSS classes makes text legible on top of busy shader backgrounds. Rendering is deterministic. A Node script opens the HTML page in headless Chromium through Puppeteer, asks the page to seek to each frame by index, screenshots the viewport, and pipes the image sequence into FFmpeg to encode an MP4. Because every frame is computed from the same timeline state, two renders produce identical output. For humans, npm install pulls in Puppeteer, a font install script downloads twelve open-source Chinese fonts, and helper scripts scaffold a new video, run a live preview server, and produce the final MP4. Two example reels are included: a 42-second feature tour called time-flies-v2 and a 40-second technical retelling called raycast-deep-dive-v4.

Copy-paste prompts

Prompt 1
Walk me through writing an index.html composition for motion-video-maker with a liquid-ether background and an odometer count-up
Prompt 2
Help me install motion-video-maker as a Claude Code skill and render the time-flies-v2 example
Prompt 3
Show me how to add a new WebGL shader background to runtime/shaders.js alongside liquid-ether and lightning
Prompt 4
Explain how render.mjs uses window.__mvm.seek and FFmpeg to produce deterministic frames
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.