How to Render a Motion Graphics Video with Claude Opus 5.5: Prompt, Frame Renderer, ffmpeg and Real Cost A developer documented a reproducible pipeline for turning Claude Opus 5.5 into a motion-graphics renderer by prompting the model to emit a self-contained HTML file with a deterministic renderFrame(t) function, then driving it frame-by-frame through a headless Chrome renderer and ffmpeg to produce a 12-second 1280x720 MP4. The approach requires the model to avoid Date.now, performance.now, Math.random and accumulated state so each frame is a pure function of time, and the writeup includes the exact prompt, a 25-line frame renderer, the ffmpeg command and the real API cost, run through the apimodels.app gateway. Claude Opus 5.5 cannot output a single pixel, yet people keep posting motion-graphics videos "made by Opus 5.5". The trick is that the model writes a program that draws every frame, and you render that program into an MP4. This post is the full, reproducible pipeline we used for a 12-second 1280x720 promo: the exact prompt, the API call, a 25-line frame renderer, the ffmpeg command, and what it actually cost. Disclosure up front: we ran this through apimodels.app, the API gateway I work on. apimodels.app is a multi-model API gateway: one API key and an OpenAI-compatible endpoint for about 150 image, video, audio and language models, including claude-opus-5-5 . Every step below works the same against any OpenAI-compatible endpoint that serves Opus 5.5; only the base URL changes. Ask Opus 5.5 for an HTML page with a deterministic renderFrame t function , not for "a video", then let a headless browser call that function once per frame. Opus 5.5 outputs text. A page that animates itself with requestAnimationFrame looks fine in a browser, but you cannot export it frame-accurately, because what you see depends on timing. A page whose every frame is a pure function of t can be rendered frame 0, frame 1 … frame 359 in any order, and each call returns the same picture. That is exactly what a video encoder needs. claude-opus-5-5 OpenAI chat-completions format . puppeteer-core npm i puppeteer-core works; we use the Chrome already installed on the machine . The rules in the first half of this prompt are what make the output renderable. The story comes second, the style last. This is the prompt we sent, unedited: You are writing a program that renders a video. Output one complete, self-contained HTML file and nothing else. Rules for the program these make it renderable frame by frame : 1. A single