Hypernatural

WorkflowBy @rebeccaVersion 1, Oct 29, 2026

recipe-website-to-claymation-ad

Turn a company's website into a ~20 s claymation ad in 16:9, 1:1 and 9:16, with kinetic titles, a logo lockup, benefit chips, a proof stat and an end card in the company's own font, colours, logo and CTA button. Use for outreach gift videos, agency demos and brand promos made from nothing but a URL, for about $5.

SKILL.md

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 on fal/google/nano-banana-2.1/edit with 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 with elevenlabs/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/music with a composition_plan whose 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:

  1. 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.
  2. 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.
  3. 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.
  4. Logo lockup (mark + wordmark in the brand font) at the top as the brand name is spoken; no title for that line.
  5. Benefit chips: glass pills (white at 10%, a 22% hairline, blur) building on the words, one with an accent dot.
  6. Proof stat: the number in the brand's semibold, a short kicker under it; no title for that line either.
  7. 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.

Go make something cool.

Install the app, open your agent, describe the video. That's the whole onboarding.

Sticker HypernaturalSticker BannerSticker TVBoy