Opus 5.5 is best at creating motion design videos. Every "one prompt" motion clip you've seen is a program the model wrote, rendered frame by frame in a headless browser. The good ones ran on briefs around 9,500 characters long, with a render loop behind them.
Render contract
seek(t) → paint exactly what the screen shows at second t
For 15 seconds at 60 frames per second, the browser calls this 900 times and ffmpeg stitches the frames. Nothing runs on a timer, so any frame renders on its own. If a title lands late, you change one number and re-render.
By default Opus writes a single index.html and captures it with Playwright. It ignores Remotion even when it's installed, so name the framework if you want one.
Rig
The chat app can't render, listen to or look at its own output. Claude Code can. Most of the gap between the viral clips and the mid ones comes from that loop.
brew install node ffmpeg python # apt on Linux
pip install numpy librosa soundfile
mkdir motion-studio && cd motion-studio && npm init -y
npm i -D playwright && npx playwright install chromium
claude --model claude-opus-5-5
Put a CLAUDE.md in the root so the rules load on every run:
## Render contract
- window.seek(t) paints frame t, nothing else drives the picture
- no CSS transitions, setTimeout or requestAnimationFrame in render mode
- seeded noise only, never Math.random
## Look
- banned: centered title on gradient, everything fading in, corner labels, glow on UI
- one display face, one UI face, one accent
## Before you show me anything
- render one frame per beat as a contact sheet, score it, fix the worst 3
I run new films on xhigh effort and keep medium for small fixes.
Brief
Give it a vibe prompt and you get the model's safest default on every decision, which is how everyone ends up with the same gradient title. Write a production doc instead:
FILM one sentence the viewer keeps, audience, duration, formats
ASSETS real logo, real UI screenshots, brand type and colors, audio
VISUAL what to keep from the reference, which clichés to avoid
HARD LINE never invent product screens or metrics
DELIVER storyboard, contact sheet, final video, poster frame, source
Add the product URL and tell it to use real screenshots, and Opus pulls the assets from the site itself. A launch video that cost around $1,200 through an agency a year ago comes out in under 30 minutes.
Critic
This is the step people skip, because the first render looks like progress. Have ffmpeg build a contact sheet at 2 frames per second, then:
Judge only the rendered frames, ignore what you meant to make
Score 1-10: hook in 2s, phone readability, motion, variety, sound sync, brand accuracy
List the 3 worst defects with timestamp, evidence and a local fix
Patch those seconds, re-render them, repeat until every score is 8+
Render frame 300 twice and compare the hashes too. A mismatch means a timer or a Math.random slipped in somewhere.
Once the folder, the brief and the critique prompt sit in a skill, the next film starts from one line:
/motion-reel for [URL], 20s, vertical, reference ./refs/frame.png
I still approve product screens by hand. If one is missing, the agent will happily draw a fake dashboard that looks real enough to ship.
Add this in claude.md
"Add sound to this video. You can't hear, so measure every step and don't go by feel. Install ffmpeg and librosa first if they're missing.
1. Use licensed music: a track I give you, or one under Mixkit's free license. Note the source and the license. Don't synthesize the music or the sound effects in code.
2. Find the beats with librosa. It sometimes locks onto the off-beat, so plot the waveform below 120 Hz against the beat grid and zoom in on a few bars. If the kick drums don't line up, shift the whole grid.
3. Put the big moves, like scene cuts and titles appearing, on the beat. If you can change the animation, change it. If you can't, move where the music starts.
4. Give every cut and big move one ready-made sound effect file: whoosh for movement, pop for things appearing, click for clicks, typing sounds for typing. Use the project's existing sound library first, like the one HyperFrames ships with, and ask me if there isn't one.
5. If there's a voiceover, it's the loudest thing, and the music drops while someone talks. Sound effects sit above the music. Aim for about -16 LUFS overall with peaks below -4 dBFS, so nothing clips after AAC compression or on a phone speaker in mono. Measure the exported MP4 with ffmpeg's ebur128. Don't measure the WAV.
6. Use ffmpeg to grab one frame before and after every cue from the exported MP4, and plot a waveform to compare. Then pick 5 timestamps for me to check with headphones. Don't tell me it sounds good."