Website to claymation ad
Give it a company's website (or a community/product page) and get a ~20 s ad in a warm stylized 3D claymation look, delivered at 16:9, 1:1 and 9:16, with kinetic titles and motion graphics in the company's own brand: their font, colours, logo and CTA button. One brief in, three files out, for about $5 of model spend. Made for outreach gifts, agency demos and "my agent made this" posts.
Shape (agree it first)
- 20 s, 5 shots of ~4 s, one narrator, a music bed. ~48 spoken words.
- Script in five beats, one per shot: pain ("You've watched a hundred AI videos. You still haven't built anything.") → the place (the brand name, "is where that changes") → what you get (2–3 concrete things from the site) → proof (one number from the site) → CTA (the site's own CTA words).
- Every fact comes from the site. No invented reviews, numbers or claims.
- No real people. A recurring toy-like hero carries the story; metaphors (a workshop, glowing blocks that snap into a chain, a tiny robot assistant) stand in for the product.
- Show the person the script and 5-line shot list, and agree the job folder, before spending anything.
1. Capture the brand (free)
Open the site in the browser and run in the page:
const cs=e=>{const s=getComputedStyle(e);return{font:s.fontFamily,weight:s.fontWeight,color:s.color,bg:s.backgroundColor}};
const colors={};[...document.querySelectorAll('*')].slice(0,3000).forEach(e=>{const s=getComputedStyle(e);[s.color,s.backgroundColor].forEach(c=>{if(c!=='rgba(0, 0, 0, 0)')colors[c]=(colors[c]||0)+1})});
({body:cs(document.body),h1:[...document.querySelectorAll('h1,h2')].slice(0,3).map(cs),
buttons:[...document.querySelectorAll('a[class*=btn],button')].slice(0,4).map(e=>({text:e.innerText,...cs(e)})),
colors:Object.entries(colors).sort((a,b)=>b[1]-a[1]).slice(0,15),
fonts:[...document.fonts].map(f=>f.family+' '+f.weight),
icons:[...document.querySelectorAll('link[rel*=icon],meta[property="og:image"]')].map(l=>l.href||l.content)})
Write down: the font family and weights, text and background colours, the one accent
colour (often rare in the count but on links/plus signs), the CTA button's style and
exact words, and the logo (the 180–192 px apple-touch/favicon PNG is the cleanest mark).
Download the logo into refs/brand/; load the font from Google Fonts in the spec.
2. Stills (nano banana 2.1, ~$0.85)
Load nano-banana-prompt-format. One style line, identical in every prompt: "warm,
stylized 3D miniature, like a handmade toy-model world photographed with a tilt-shift
macro lens; soft matte clay and painted wood; rounded shapes; shallow depth of field;
toy-like figures with simple friendly faces. Not photoreal."
- Shot 1 first,
fal/google/nano-banana-2.1, 16:9, 2K, 2 takes. Show it; the pick locks the look and the hero. Then shots 2–5 onfal/google/nano-banana-2.1/editwith the locked still as image 1: "use it ONLY for the art style and the character… Do not copy its room." - Keep the action in the middle third of every frame. End every prompt "No text, no logos." (a laptop came back with an Apple logo; pick the take without it).
- Give sizes by body parts, never objects: "a robot the size of a teacup" came back as a literal teacup. A prop that recurs (the robot) gets its earlier still passed as a reference image with "use it ONLY for the robot", in every later shot.
- Run shots in parallel; if a call drops its connection, look in the folder before re-running: the file has usually landed.
- One review page for all five; the person picks per shot.
3. Vertical: redraw, don't crop
A 9:16 crop of a 16:9 frame is 608 px wide and looks soft full-screen. Redraw each
picked still as native 9:16 (nano-banana-restage-for-new-aspect, one 2.1 edit each,
~$0.07): "as if the same camera had shot it in portrait… keep the same character,
props, light, materials". Review them. The 1:1 is a centre crop of 16:9; shift the crop
per shot where the subject sits off-centre (check a frame per shot).
4. Animate (H3 Max, ~$3.60 for ten clips)
fal/minimax/h3-max/image-to-video, 768P, duration: 4, prompt_expansion_mode: "disabled", seed fixed, prompts in h3-prompt-format's image-to-video shape ("3D CG
claymation" as the style). 768P is $0.088/s; 1080P is $0.176/s (double), and 768P holds
up for soft clay. Quote the price, render one test shot, get a yes, then the other
nine (5 × 16:9 + 5 × 9:16) with wait: false and tasks(wait: true).
- Clips come back ~4.5 s. Mouths: "Lips stay closed" and no speaking verbs.
- Saturated wardrobe drifts brighter over a clip; it reads as the character stepping into warmer light, so leave it unless it jumps.
5. Voice and music (~$0.20)
- Three library voices verified for
eleven_v4, auditioned on the whole script withelevenlabs/text-to-speech/with-timestamps(it returns a character alignment JSON you need for the titles). Pick for "upbeat, conversational, not salesy". All three should land 18.5–20 s; keep the take the person picks, unedited. - Music:
elevenlabs/musicwith acomposition_planwhose sections match the shots (sparse intro under the pain line, a swell as the doors open, full in the middle, one bright hit to end),"vocals"in the negative styles,respect_sections_durations.
6. The cut (ffmpeg, free)
Read the word times from the alignment JSON (drop the [tag] characters) and put each
cut on the start of a VO line. One filter graph per aspect in a file, run with
-/filter_complex <file> (ffmpeg 8 dropped -filter_complex_script): trim each clip to
its window (setpts to stretch one a little), scale, concat; VO + music
(sidechaincompress keyed on the VO) + the clips' own sound at ~0.18; loudnorm
I=-16 TP=-1.5. Check: −16 ±1 LUFS, and every word in a whisper-cli transcript of the
mix (it needs a WAV, not the MP4). This untitled cut is rev1; titles go on top of it.
7. Titles and motion graphics (hn4a-compositor, free)
One spec per aspect over the rev1 cut, built by a Python script
(hn4a-compositor-in-scene-titles, titles_fx.py), the mix as the spec's audio. The
look that landed with the client, in order:
- Hook title. The pain line as a big kinetic stack over a full-frame darkening:
"You've watched" rises word by word, the number slams in huge in the accent colour
(
pop_keys, over=1.45, with a soft glow), then "AI videos." lands. - Second beat, same scene. As the stack clears, the next line builds word by word low in frame, smaller, the shade easing to a bottom-only gradient, the last word in the accent colour.
- That style for every remaining line, not bouncing karaoke captions (tried and
dropped: the titles read as designed, the captions as subtitles). One accent word
per line. Write the phrases by hand on the word times with a
|where narrow frames break the line; automatic phrase grouping splits on every small pause. - Logo lockup (mark + wordmark in the brand font) at the top as the brand name is spoken; no title for that line.
- Benefit chips: glass pills (white at 10%, a 22% hairline, blur) building on the words, one with an accent dot.
- Proof stat: the number in the brand's semibold, a short kicker under it; no title for that line either.
- End card: a dark fade from the bottom, mark + wordmark, the site's own CTA button recreated (same shape, colours and words), the URL small and dimmed. Keep it in the lower third so the last shot's action stays visible; let the last line's title run until the CTA word, since the VO often overruns the cut to the end card.
Traps: an <img src> path inside a text layer's html loads in the preview but not in
render; inline the logo as a data: URI. Name the font family on every text layer.
Stills at every beat in all three sizes, then a review page with the three specs as
{"compose": …} candidates playing live; render only after the yes, and check the
rendered frames (logo, end card) before delivery.
Deliver
rev1/ the untitled cut, rev2/ the titled one, three files each, on an approve review
page. Typical spend: stills ~$1.25, animation ~$3.60, voice + music ~$0.20 → ~$5.


