Three finished ad films for $25.17 in API spend. That’s what happens when you stop treating the one-prompt canvas explainer as the finish line and start treating it as the first draft. 🏴☠️
Intro
You may have seen the viral “made entirely with Opus 5.5” canvas collage explainer, where one prompt produced a full JS-rendered film for about $4. The main complaints in those threads were that every run came out with the same torn-paper look, and that people wanted a planning step so they could steer before anything rendered. If you’ve ever burned a render on a film that was wrong from the first scene, you know why that second complaint matters.
u/rmonsurate on r/PromptEngineering took that on. They pointed Claude Code at the idea with a $100 OpenRouter cap and asked for three ads for Fabric, their company’s desktop agent app: one for individuals, one for enterprise, one for defence. The individuals film runs 80 seconds, and the other two are linked in the original post. Three audiences, one product, and three very different films. That’s a real test of whether the process holds up beyond a lucky run.
Key Idea
The one-prompt version is a great engine with no steering wheel. The fix is to add structure before the render and review after it. A script order, a forced art direction, and a second model that actually watches the output turn a lucky run into a repeatable process.
Rendering stays deterministic canvas code. Playwright grabs exact frames and ffmpeg adds the audio. All the new work happens around that core. That split is the quiet superpower here. Because the render step behaves the same way every time, any change you see between two runs came from your plan or your fixes, not from the renderer rolling dice. That makes debugging a film feel a lot more like debugging code.
What’s Worth Stealing
- 🎬 Script the doubt, then answer it. Every film follows the same order: pain, solution, reasons to believe, one ask. The individuals film opens with “Does it feel like you’re working twice as hard as your parents did, for half the breathing room?” It then has the viewer’s skeptical question voiced out loud: “But who does it really work for?” The reasons to believe answer that question. The author found that naming the objection landed better than any feature list. Tip: before you write a word of script, jot down the one thing your skeptical viewer would mutter at the screen, then make sure the film says it first.
- 🧵 Name physical materials, not genres. Asking for “collage” gets you torn paper every time. Naming felt, stitched labels, cut-out paper figures and cloth wipes, with motion stepped at 15 fps for a stop-motion feel, forces a different look. You pick the art direction. The model doesn’t get to default. If you run several films for different audiences, give each one its own material list, so the enterprise film and the defence film don’t end up looking like cousins.
- 👀 Let a different model watch the film. Gemini gets each render with its audio, so it watches the film instead of reading the script. It returns timestamped defects, and Claude checks each one against the extracted frames before trusting it. It caught a thread that stayed put while the paper it was tied to moved, a pin that missed its target, and captions that were unreadable on a phone. The author then turned their own notes into an “ad-film-review” skill covering structure, opening on the person, the first objection answered right after the solution, claims checked against the site, no competitor names, and an ending that calls back to the opening. That verification step matters, because a critic can hallucinate a defect just as easily as it can spot a real one.
Where the Money Went
The total was $25.17 for all three films, measured off the OpenRouter key: images $8.71, voice $10.71, critic calls $5.05, music $0.48 and test runs $0.22. That’s API spend only. The Claude Code usage isn’t in the number, which is worth keeping in mind before you quote it to your boss.
Look at the shape of that spend. Voice was the biggest line, and the critic cost about half of what the images did. So the practical move is to lock your script before you pay for narration, and let the cheap critic catch problems before you re-render anything expensive.
One more small touch: a live progress page updated as renders and critiques landed, so the author could redirect early instead of waiting for a final cut.
Quick How-To
- Put the pain, solution, reasons-to-believe, CTA order straight into your prompt, and write the skeptic’s question into the script on purpose.
- Choose the art direction yourself and list real materials, plus a frame rate if you want a handmade motion feel.
- Send the render, audio included, to a second model, and verify its notes against the frames. Only fix what the frames confirm.
- Save your repeated feedback as a skill so you never give the same note twice.
Call to Action
Pick one short video idea this week and run it through that four-step loop. Start small, maybe thirty seconds, so the whole thing costs you a couple of dollars. Then come tell the crew in the comments what your critic model caught that you missed! Full credit to u/rmonsurate for the breakdown, and to the two original authors whose threads started it all. ⚓
Frequently Asked Questions
Q: Does the video-review approach actually catch things that frame-by-frame analysis misses?
Yes, a critic model watching the rendered video with audio synced catches temporal issues that frame analysis alone would miss. As one commenter noted, it spotted subtle motion problems like a thread staying still while the paper moves, exactly the kind of thing you’d overlook just scanning keyframes.
Q: Why specify exact materials (felt, stitched labels, etc.) instead of just telling Claude ‘not torn paper’?
Named materials give the model concrete visual anchors to build from, making the art direction reproducible across runs. Negation alone (“don’t do torn paper”) is weaker than positive constraints, it’s the difference between saying “be creative” and actually showing the style you want.
Q: Is this purely code-generated, or do you need pre-made images for Claude to animate?
Entirely code-generated. Canvas renders all visual output deterministically on each run, then Playwright captures frames and ffmpeg syncs the audio. No pre-made assets needed, the whole pipeline from script to final video is AI-driven.
Q: How much does the script structure (pain → solution → reasons → ask) actually move the needle?
A lot. The post emphasizes it makes the message land way better than just listing features. Structuring the story first, then having a critic model and planning stage shape it before rendering, beats the “one prompt, hope for the best” approach.
I took the viral one-prompt canvas explainer and gave it a planning stage, a critic model and a video-review skill: 3 ads, $25.17 in API spend
by u/rmonsurate in PromptEngineering