LaunchVideo Turns a URL Into a Launch Video by Having Opus 5.5 Write It as HTML
TL;DR
LaunchVideo takes a product URL or a short brief and returns a 20 to 40 second launch video. No video model is involved. Claude Opus 5.5 writes the entire film as a single HTML document, an agent checks it for errors, and headless Chromium renders it one frame at a time under a virtual clock before ffmpeg stitches the frames into a 1080p, 30 fps MP4. The site says each video takes about four minutes and roughly 100k tokens. The team behind OpenComputer built it as a showcase and published the code as diggerhq/shipvideo. It reached 293 points and 150 comments on Hacker News under the title "Opus 5.5 is good at explainer videos." The product is modest. The rendering trick underneath it is the part you can reuse.
What it does
You paste a URL or type a brief and press a button. In URL mode, the agent fetches the page (and one more, such as /pricing or /docs, if the homepage is thin) and pulls out the product name, the value proposition, three capabilities, any real numbers, and the brand's hex colors and Google Fonts. Then it writes a film.
The film follows a template spelled out in the agent's system prompt: 6 to 10 beats of 2 to 5 seconds each, kinetic typography with "never more than 8 words on screen at once," one or two bold background colors, and an end card with the name and a call to action. The prompt also tells the model to "never invent numbers," which is more restraint than most human-made launch videos show.
Out comes an MP4 in a public Vercel Blob store. The whole agent is one TypeScript file of about 90 lines plus three tools: web_fetch, check_scene, and render_video.
The trick: a clock that only moves when you ask
Recording a browser in real time gives you dropped frames and animations that drift depending on how busy the machine is. LaunchVideo sidesteps that. Before any page script runs, the renderer injects a virtual clock that replaces requestAnimationFrame, setTimeout, setInterval, Date, and performance.now. Time only advances when the renderer calls __seek(t).
Each seek steps the fake clock forward in 1/60-second increments, fires any timers and animation-frame callbacks that fall due, and then walks document.getAnimations(), pausing every CSS or Web Animations API animation and setting its currentTime by hand. Playwright then takes a JPEG screenshot (quality 92) and pipes it into ffmpeg (libx264, CRF 18, yuv420p, faststart).
window.requestAnimationFrame = (cb) => { rafs.set(++rafId, cb); return rafId; };
// ...later, per frame:
for (const a of document.getAnimations({ subtree: true })) {
a.pause(); a.currentTime = Math.max(0, now - start);
}
Think of it as stop-motion for the DOM: the puppets only move when the animator touches them, so it does not matter how slowly the camera shoots. A 30-second film takes roughly 30 to 40 seconds to render, and the same HTML produces the same frames every time.
Determinism is enforced on the model's side too. The tools reject <video>, <audio>, and <iframe>, and the prompt bans CSS transitions, Math.random (it suggests "a tiny seeded PRNG" instead), and external images. The whole film has to stay under 60 KB.
Why check_scene matters
The most useful tool is the cheap one. check_scene loads the draft HTML under the same virtual clock, seeks to a few timestamps, and reports JavaScript errors, failed network requests, and which text is visible at each moment. The prompt tells the model to fix "leftover words from an earlier beat, a beat with nothing on screen," and to repeat until the report is clean. The model cannot see the video, but it can read a text description of every frame it cares about, which covers most of what goes wrong in motion graphics.
What it costs
LaunchVideo's page puts each film at "roughly 90k input and 15k output tokens," mostly the HTML itself. At Anthropic's list price for Opus 5.5 ($4 per million input tokens, $20 per million output), that works out to about 66 cents per video before any caching. LaunchVideo routes calls through OpenComputer's model gateway, so its real bill may differ. Hacker News commenters running their own code-rendered videos reported bills of $3.21 and about $4.
The compute side is small. Each job gets a fresh Amazon Linux 2023 arm64 microVM with 4 vCPUs and 8 GB of RAM. The first tool call spends about a minute installing Playwright's headless Chromium, a static ffmpeg, and Noto fonts, and the VM is thrown away afterwards.
Where it came from
LaunchVideo did not invent the technique. Its README credits an earlier "Opus 5.5 is incredible at instructional video generation" demo and describes itself as the same mechanism "packaged behind a one-field form." The loudest recent example is PDoomVideo, the source for a Claude-made music video for the song "I'm Upping My P(doom)." That repo went up on September 22 and has passed 800 GitHub stars.
Its author says "everything in this repository was generated by the model" across two Claude Code generations. Opus wrote its own storyboard and an animation guide to brief subagents working in parallel. The frames are painted with p5.js and p5.brush, rendered in headless Chrome, and joined with ffmpeg. The author has since split out a reusable starter, ClaudeAnimationBase.
None of this is new as a rendering idea. Remotion and Motion Canvas have made video from code for years. What changed is who writes the code. A model good enough to write 60 KB of choreographed CSS that works on the first or second pass turns "video from code" from a developer niche into a text box.
The catches
- It is a vendor demo. LaunchVideo exists to sell OpenComputer, "the platform for long-running agents." The one-click deploy drops the agent into an OpenComputer account, and the web app assumes Vercel Blob.
- No license file. As of this writing,
diggerhq/shipvideohas no LICENSE, which by default means all rights reserved. Read the renderer and learn from it, but do not paste it into a product until the authors add one. - The ceiling is motion graphics. No footage, no voice, no music, no external images. Several Hacker News commenters called the results "flashy slide decks," and that is a fair description of the genre it targets.
- Taste is a prompt. The look comes from a few hundred words of art direction (Space Grotesk,
cubic-bezier(.2,.8,.2,1), a timecode in the corner). Expect every LaunchVideo film to look like a sibling of the others.
Why builders should care
The reusable idea is the division of labor. The model writes a deterministic artifact in a medium it knows well (HTML and CSS), a cheap text-only checker catches its mistakes, and a dumb, exact renderer turns the artifact into pixels. You get reproducible output, diffable source, and edits that cost a prompt, not a regeneration lottery. The same shape works for animated charts, onboarding clips, changelog videos, and social cards, and anything you would otherwise open After Effects for at 11 p.m. before a launch.
If you want to try it, the one-command deploy is:
npx opencomputer template deploy https://github.com/diggerhq/shipvideo
Or skip the platform and copy the pattern: inject a virtual clock, seek, screenshot, pipe to ffmpeg. The VIRTUAL_CLOCK block in renderer.ts is about 30 lines.
Key Takeaways
- LaunchVideo turns a URL or brief into a 20-40 second 1080p30 MP4 with no video model: Opus 5.5 writes one HTML film and headless Chromium renders it.
- A virtual clock that replaces rAF, timers, Date, and Web Animations timing makes rendering deterministic and roughly real time.
- Each film uses about 90k input and 15k output tokens, about $0.66 at Opus 5.5 list price by our math.
- A text-only
check_scenetool that reports visible text per timestamp lets the model debug a video it cannot watch. - The code is public but unlicensed and built to showcase OpenComputer; the pattern is the portable part.
Sources: LaunchVideo, diggerhq/shipvideo on GitHub, Hacker News discussion, Anthropic API pricing, PDoomVideo on GitHub, "I'm Upping My P(doom)" video, ClaudeAnimationBase, OpenComputer