format-asmr — everyone hears the alarms, only he feels the band
1. Read first
knowledge/ad-formats/_FORMAT-CORE.md(doctrine, lane limits, gates, launch) andknowledge/ad-formats/_MODEL-REGISTRY.md(roles → models). Binding.references/beat-sheet.md(skeleton, timings, sound cue sheet, line rules),references/sources.md(reference ad, diffs, receipts).output/dawn-combo-map-2026-10-05/MAP.md§2B (recipe B: callout, her burden, guarantee/science, independence payoff) and the stake bankoutput/creative-strategy-cooper-2026-10-05/dawn-stakes.md(#17 "Everyone was up because of her alarm except her", #9 smoke alarm, #11 fifty trips).knowledge/brands/dawnbands/product-truth.md(band facts), memoryproject_dawnbands_broll_seedance_playbook.md(vibration rendering),feedback_cartoon_vsl_sound_pacing_doctrine.md(SFX levels).- Closest prior pack:
output/concept-packs/dawnbands-wakes-everyone-but-him-2026-08-17c.md(same household-noise angle, old lane, 62 s).
2. When to use / when not
- Use for a short, sound-first thumbstop that sells the mechanism in one contrast: loud things fail, one quiet thing works. It's recipe B's mechanism line ("touch gets through, silent to everyone else") made audible. Good as a 10-30 s cell next to the long songs and as Reels/Stories inventory.
- Evidence status: untested on Dawn. Signals only: "silent to everyone else" + "stronger until they turn it off" coded ramp+silent ROAS 1.74 vs silent-only 1.49 (MAP §2A, weak); the household-noise angle shipped once as a cartoon on 8-17 (no read on file). davidaistar's ASMR example (Olipop pour) is an organic-reach claim on physics realism alone, with no paid numbers.
- Don't use for recipe A stories (accuser + vindication need 2+ min:
format-song/format-spoken-drama), for a pure product-texture loop with no her and no him (that's the character-less explainer that did 0 purchases, core §1), or for any stake the mornings didn't cause.
3. The format
- 9:16, 10-30 s (default 20-25 s), one art style (pixar / disney3d / claymation; anchored on a paying frame), or the photoreal object cut (test cell, §11).
- What the viewer gets: frame 0 = a bedroom in full din, with a symptom header on screen. Phone alarms, a bell clock, a smoke-alarm chirp, mom's knock on the door. The dog lifts its head, the little sister covers her ears in the hall, mom is up with her coffee. The teen sleeps on top of the duvet. Hard drop to near-silence. Then a macro on the ribbed matte-black band on his resting wrist, one soft "brrr" you can almost feel, a ripple across the sheet, and his eyes open. Nobody else moves. Sound carries the whole ad.
- Short narration (brand voice to her, 5-8 lines) rides on top; captions from the script; motion end card (optional,
--end-card; off by default per Fish 10-06) (packend_card:). - Reference shape: davidaistar short
YtHf2oQisLQ(Olipop ASMR pour: one physical action shot close, sound and physics are the hook). We keep the macro physics and crisp foley and add a problem-aware frame plus a before/after contrast. The reference has neither.
4. Why it sells
- Recipe B, compressed. Callout to her in her daily burden (she's the one the noise wakes), with science as the authority (sound doesn't reach a deep-sleeping brain; touch does), relief as the turn, and his independence as the payoff (he's up, she wasn't needed).
- The contrast is the proof. Loud-and-ignored next to quiet-and-obeyed demonstrates the root cause and the mechanism without saying either at length, and "silent to everyone else" lands as a felt sensation, not a claim.
- Problem-aware gate: the header on frame 0 names HER symptom ("Every alarm in the house goes off. You're the only one up.", ILLUSTRATIVE) and stays ≥2 s. A no-text ASMR opener is a mystery opener, and the core bans those.
- Stake on her, caused by the mornings: she's woken every day by alarms that aren't hers, and she's still the one who has to wake him (stake bank #17, #11). Safety escalation allowed: he'd sleep through the smoke alarm too (#9).
5. Beat sheet (full timings, sound cue sheet and line rules in references/beat-sheet.md)
| # | Beat | % runtime | Job | Must contain |
|---|---|---|---|---|
| 1 | Din + symptom | 0-10 | Stop the scroll with sound; name her | Header naming her symptom on frame 0, ≥2 s; ≥3 noise sources audible by 1.5 s; teen asleep in frame |
| 2 | The house wakes | 10-35 | Escalate: everyone but him | 2-4 fast inserts: phone buzzing across the desk, bell-clock hammer, smoke-alarm light, the door (knock heard, mom not shown at the bedside); sister/dog/mom awake; he doesn't move |
| 3 | The drop | 35-42 | Silence as the turn | Hard cut to room tone. One short line max ("Sound never reaches him."). No product yet |
| 4 | The buzz (ASMR core) | 42-65 | Mechanism you can feel | Macro on the band, wrist resting flat, band side-on, display dark; one soft brrr; sheet ripple / motion lines; his eyes open; the sister/mom DON'T react |
| 5 | Up on his own | 65-85 | Payoff on her (independence) | He sits up, feet on the floor; mom down the hall with her coffee, undisturbed |
| 6 | CTA | 85-100 | Offer | Name + 60-night trial spoken or on the end card (optional, --end-card; off by default per Fish 10-06) (pack end_card:) |
6. Pack spec
-
Step 0 — combo plan (feedback loop,
workflow-combo-loop):python3 scripts/combo_loop/plan.py --format format-asmr --brand dawn→ pick one combo (a paying parent + ONE changed dimension) and paste its block into the pack front matter / job or spec JSON ("combo": {...}; no file →tags.py register --prefix):combo_avatarcombo_anglecombo_povcombo_authoritycombo_stakecombo_stake_oncombo_emotioncombo_root_causecombo_mechanismcombo_payoffcombo_devicecombo_formatcombo_parentcombo_variablecombo_ad_prefix(= the launched Meta ad-name prefix).python3 scripts/combo_loop/tags.py check <pack>must PASS before concept approval; the weekly refresh reads results back by that prefix. -
Front matter (core §5):
format: cartoon-h3,format_skill: format-asmr,brand: dawnbands,parent:(the paying callout this borrows from, with CPA; default comparison img-c1-dressed-asleep, $38→$68 CPA, MAP §4),iteration:(the ONE variable, e.g. "static callout → 20 s ASMR contrast video, same body promise"),title:(the symptom header,|= line break),overlay,end_card: Dawn Band. It wakes him, not the house. 60 nights to try it.(ILLUSTRATIVE),style+style_key,style_block,visual_negative,style_anchor,cast,envs,product_truth,elevenlabs_voice_id. - Sound block (manual; no code reads it yet): a
## Sound cue sheetsection in the pack, one row per cue:line | sound | source file | start (s, from lines.json) | length | level. Fish's doctrine makes the plan part of the pack, not a finishing-time improvisation (feedback_cartoon_vsl_sound_pacing_doctrine). ## VO Script:N. "line", 5-8 lines, 4-10 words each, narrator only (no[SPEAKER]tags: nobody speaks on screen, and dialogue mode adds turn gaps). Pace: leave vo_check at its narration defaults (≥3.4 wps, ≤0.40 s between lines). The din plays UNDER lines 1-3; "silence" means the din drops away, not dead air in the VO.## Scene visual intents:N. **narrator (hook)** — <env>: ...; the buzz line is**narrator (product reveal)**(≤3-panel batch), the last line**cta**. Every person named (Mom, Jake, Lily).- Cast: teen (vary 11-17 and gender per
feedback_vary_teen_demographics), Mom 35-54, optional younger sibling (visually distinct: age gap ≥5 years, different hair colour), optional dog. Envs: teen-room (with nightstand, desk, ceiling smoke detector), hallway, kitchen. Two or three envs, no more. <slug>.argsbeside the pack (--char-ref,--env,--product-ref,--characters) forpython3 -m scripts.cartoon_h3.packargs.
7. Visual grammar
- Din beats: wide on the bed first (teen on TOP of the duvet in an oversized grey t-shirt and sweatpants), then 1-1.5 s inserts of each noise source. Phones face-down or turned away (glow only), clocks hands-only, smoke detector = a white disc with a red light. Mom is at the doorway or in the hall, never at the bedside (song-ad-playbook wake rule). Knock = the closed door from inside the room.
- Beats under ~1.2 s never get their own shot (core §3): merge noise inserts into a 4-panel batch at ≥1.2 s each, or let two sources share a frame.
- The buzz macro: wrist resting flat on the sheet, band side-on, display DARK, nobody looking at it (wrist rule). Show the buzz as two short curved motion lines at the band and a soft ripple through the sheet under the wrist, then his eyes opening. Never write "vibrates", "pulse", "twitch" or "jiggles" next to a teen in bed: fal rejects it (format-song §7). Product-truth sentence on every product batch: plain matte black silicone strap, fine diagonal ribbing, small flush display dark when idle, no screen face, no smartwatch module.
- Silence beat: same framing as beat 1, everything still, light shifted to dawn. The quiet has to read visually too (no motion lines, no glowing phone).
- Wake-up: he sits up with his arms down; cut before any press on the band (a press on the wrist lights the display in H3). If the switch-off must show, the band lies on the nightstand and his finger presses it there.
- No readable text anywhere (header and captions are overlays, not in-frame). No split screens. One style per ad.
- Photoreal object cut (test cell): product-only and object-only macros, no people, no hands: band lying flat on a wooden nightstand "shivers in place against the wood, rattling with tiny rapid movements" (the proven product-alone buzz, Seedance playbook), phones skittering on a desk, a bell clock hammering. The person is implied by an empty, slept-in bed at the payoff. Fidelity block from the playbook: fine DIAGONAL ribbing, solid matte black inside and out, no smartwatch module, nothing glows, "lies flat on" physics anchors. Start frames from real product photos (
assets/dawnbands-product-reference.jpg) orknowledge/brands/dawnbands/product-cutout-unlit.pngcomposites, never a supplier render.
8. Audio
- Sound IS the format, and the lane doesn't build it yet.
assemble.pystrips every clip's audio (-an) andmaster_mixlays ONE looped, ducked bed at -26 LUFS with a 0.8 s fade-in, so the frame-0 din can't come from the bed. Role: Sound effects / foley (registry). Proven pick today = files inaudio-library/sfx; generators are untested candidates (one-unit proof first, ≤~$2 without asking). - What the library has: ambience (bedroom-night-ambience, soft-white-noise, night-accent-short), tactile (gentle-tap), transitions (swooshes, ding, shimmer, ascending tone). What it lacks: phone alarm, bell clock, smoke-alarm chirp, door knock, silicone haptic brrr. The 8-09 kit
finish_video.pypoints at (output/dawnbands-zero-missed-8ams-retell-2026-08-09a/sfx, which had alarms/buzz/doorcreak) no longer exists. - Interim route (works today, hand steps): (1) source the 5 missing sounds (Fish-approved royalty-free files, or one foley-role candidate proven on one cue); (2) assemble with room tone as the single bed (
--music audio-library/sfx/ambience/bedroom-night-ambience.mp3), so no piano muddies the drop; (3) lay the cue sheet over the end-card master with one ffmpegadelay/amixpass (beat-sheet.md has the command), cue times read fromoutput/cartoon-h3/<slug>/lines.json; (4) re-measure loudness. - Levels (Fish doctrine 8-10, VO always dominant): product buzz 0.20 peak, story beats 0.11-0.13, ambience ≤0.08-0.10, music ≤0.12. ASMR twist: the din sums to ~0.13-0.20 under the VO, and the brrr sits at 0.12-0.20 alone in near-silence. It reads louder because everything else has dropped out. Prefer muffled, realistic sources (through-the-door knock, phone rattling on wood) over bright synthetic beeps. Pushing the din above 0.20 is a doctrine deviation and needs Fish's ear. Tape-rewind transitions are banned.
- VO: one EL narrator (warm, plain, 35-54 female, brand voice to her). vo_check defaults. End card (optional,
--end-card; off by default per Fish 10-06) 3 s; the VO lane holds 0.5 s after the last word. - BUILT 10-06 (Builder C): the
## Sound cue sheetreader.H3_SFX_PLAN=output/concept-packs/<slug>.md python3 -m scripts.cartoon_h3.run … --stage assemble(or put the sheet at<run>/sfx-plan.md|.json; in codeassemble(..., sfx_plan=)).scripts/cartoon_h3/sfx.pyreads the table (line N start + xfrom lines.json,to line N start,twice,0.14 → 0.18ramps,<sfx dir>= audio-library/sfx), lays every cue over the MASTERED mix (amix normalize=0 + one limiter, no second loudnorm, length kept; pre-SFX copy<slug>-final-nosfx.mp4; receiptassemble-receipt.json→sfxwith LUFS/TP). A missing file stops assemble before the render and lists every one. Pre-flight:python3 -m scripts.cartoon_h3.sfx --plan <pack.md> --run-dir <run> --check; standalone on any master:--in <final.mp4> --out <final-sfx.mp4>. The library still has no phone alarm/bell/smoke chirp/knock/brrr (source them, Fish's go). Still NOT BUILT (needs Fish's go): a no-VO, text-only cut (cartoon-h3 needs an EL VO or a promoted song as the clock); keeping H3 or Seedance native clip audio; a wired foley-model backend.
9. Production (free until canvases; every paid step is Fish's)
cd ~/.openclaw/workspace; P=output/concept-packs/<slug>.md; S=<slug>
A=(${(z)"$(python3 -m scripts.cartoon_h3.packargs $P --storyboard)"}); A=(${(Q)A})
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage vo # EL VO + vo_check (EL quota)
python3 -m scripts.cartoon_h3.sheet <out.png> <prompt.txt> <style_anchor.png> knowledge/brands/dawnbands/product-cutout-unlit.png # ~$0.22 each, Fish's go
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage storyboard # free; §10 checklist on every beat
touch output/cartoon-h3/$S/storyboard.approved # Fish only
A=(${(z)"$(python3 -m scripts.cartoon_h3.packargs $P)"}); A=(${(Q)A})
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage canvas # paid, ~$0.20/batch
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage gen --prompts-only # Fish reads motion prompts
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage gen --spend --backend fal --model h3-max --candidates 1
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage assemble --title-style dragon \
--music audio-library/sfx/ambience/bedroom-night-ambience.mp3 # room-tone bed + (optional end card) + gemini_qa
# then the sound cue sheet: ffmpeg overlay in references/beat-sheet.md → <slug>-final-sfx.mp4
- Cost per 20-25 s ad: 2 H3 batches (≤15 s each) ≈ $1.9-2.7 at 768P (h3.py
FAL_PRICEfixed 10-06 from the fal page: $0.08/s + ~$0.10-0.16 reference surcharge per batch;run.py --dry-runwrites the per-batch quote totiers.md); canvases ~$0.40; 2-3 sheets ~$0.66; EL quota; foley sourcing $0-2. ≈ $3-6 per ad. Check fal/Higgsfield/kie balances before promising a render. - Photoreal object cut (test cell): start frames →
python3 scripts/seedance_img2vid.py --image <frame.png> --prompt "<fidelity block + motion>" --duration 5 --resolution 1080p --output output/videos/seedance/<slug>-<n>.mp4(Cheap simple-motion i2v role; 4-12 s; the script sends no audio flag, so treat clip audio as absent). Assembly: no cartoon-h3 path (no VO-sliced H3 jobs). The nearest existing route is register clips withscripts/register_dawn_broll.py --dir <dir>and cut them to VO withscripts/vo_broll_runner.py --pack <scenes.json>(built for real footage, untested on generated clips). Fish's go before the first render. - Shot tiers (core §2b): tag each batch in
storyboard.md. A = the hook's first 3 s (din wide) and the buzz macro + eyes opening (band on wrist); B = the house-wakes inserts with sister/Mom/dog; C = the drop (still wide, a held frame with a push-in is fine under ~1.5 s), noise-source inserts with no person. run.py auto-tags tiers into<run>/tiers.md+plan.json(tiers.py; re-tag if the word match is wrong); per-tier models via--tier-models(fal), default all H3-max: the 2 batches stay on H3-max; the photoreal object cut is all tier C (Cheap simple-motion i2v role). - Draft → final (core gate 6b): cartoon cell: free drafts = storyboard, canvases,
--prompts-only; the paid H3 draft isrun.py --draft(480P, $0.05/s vs $0.08/s at 768P since the 10-06 price fix; finals re-render natively, a 480P→--hdupscale lost to native 10-04); with 2 batches it saves little, so one candidate at final quality is fine. Object cut: draft each macro at--resolution 720p --duration 4, Fish picks the motion, then 1080p;seedance_img2vid.pyhas no seed or draft-enhance, so the 1080p take is a NEW sample, not the approved motion (the motion-preserving routes, Seedance 2.5 Draft → "Generate in 1080p" on Higgsfield and fal Flux 3draft-enhance, are registry candidates, NOT BUILT here).
10. Gates & QA checklist (on top of core §4)
- [ ] Parent named with CPA; ONE variable stated; stake from the stake bank (cite the #), lands on her, caused by the mornings.
- [ ] Header names her symptom on frame 0 and holds ≥2 s; ≥3 noise sources audible by 1.5 s.
- [ ] Root-cause and mechanism wording verbatim from Fish's ruled lines (core §1); product facts only from product-truth.md (three alarms, no app, keeps going until he turns it off).
- [ ] Sound cue sheet in the pack: every cue has a file that exists, a start keyed to a line, a level within doctrine.
- [ ] Logic pass → Opus red-team → fix → re-check (core §1 copy routing);
humanizeron the VO; Fish approves script + header. - [ ] Storyboard (tier A/B/C per batch): teen on top of the duvet, dressed; no adult at the bedside; noise inserts ≥1.2 s or merged; buzz beat uses motion lines/ripple wording only (no "vibrates/pulse/twitch/jiggles"); wrist flat, band side-on, display dark; nobody else reacts to the buzz; no readable text.
- [ ] Motion prompts read (
--prompts-only): no lit display, no "looks at the band", no mouthing. - [ ] By eye (Gemini samples ~1 fps and can't see the buzz): the ripple reads as touch, not as an earthquake; the band never lights; the drop to silence lands on a cut.
- [ ] Mix: the din reads as a din on phone speakers, every VO word stays clear over it, the brrr is audible on a phone at mid volume, final ≈ -14 LUFS / TP ≤ -1 dB.
- [ ] Placement preview (starpop facebook-instagram-ad-sizes-and-safe-zones, how-to-preview-a-facebook-ad-before-publishing): scrub to the hook frame, the reveal frame and the end card (optional,
--end-card; off by default per Fish 10-06) on a 9:16 overlay; header, captions, product and offer sit inside Meta Reels' safe box (top 14 %, bottom 35 %, sides 6 % are UI = keep content in y 14-65 %) and survive the Feed 4:5 centre crop (~15 % lost top and bottom). Remotiontiktok/tiktokbox/dragoncaptions centre at ~68-74 % = inside the Reels bottom band on Meta: flag it to Fish, never re-burn on your own. - [ ] Final: freezes 0, dark frames 0, captions from the script, end card only if
--end-cardwas asked (off by default, Fish 10-06), Fish watched and listened with sound ON and with sound OFF (header + captions alone must still sell it).
11. Variants & test plan
| Cell | The one variable | Status |
|---|---|---|
| Default | static callout parent → 20-25 s ASMR contrast (cartoon-h3 narrator) | buildable now; sound cue sheet by hand |
| Short | length: 10-12 s (din + header → drop → brrr → end card (optional, --end-card; off by default per Fish 10-06), 2-3 VO lines) |
buildable now; one H3 batch |
| Narrator | brand voice vs mom first person ("Every alarm in this house wakes me. Not him.") | buildable now |
| Stake | household (#17) vs safety (#9 smoke alarm: "He'd sleep through this too.") | buildable now |
| Photoreal object cut | stylized → photoreal macro, objects only | test cell, Fish's go; assembly route untested (§9) |
| Sound-only | no narration, header + captions carry copy | NOT BUILT: no non-VO clock in cartoon-h3 |
- Hooks (3 × shared body via body_start: 3, ILLUSTRATIVE): (a) din on frame 0 + "You're up. He isn't." header; (b) mom line "Everyone in this house heard that. Except him."; (c) smoke-alarm stake "He'd sleep through this too." over the smoke detector's red light (a fear, not a claimed event: #9's verbatim is about a husband) |
||
- Launch: own ad set in Testing CBO (one concept per ad set), PDP link everywhere (check_links), meta_preflight.py. Read hook rate (3-s views / impressions) at day 3, CPA vs the parent at day 7 (python3 -m scripts.cartoon_h3.readout --concept <c> once ads are named <concept>-h<i>-l1). Never pause, reduce. Record project_launch_<date>_<slug>.md. |
||
| - Sound is the creative here: an Advantage+ music enhancement would bury the din → silence drop, so the opt-out below is load-bearing; check the live Reels preview WITH sound, and the Feed preview muted (Feed autoplays silent: header + captions must sell it). | ||
- Upload hygiene (starpop are-ai-generated-ads-allowed-on-meta): Advantage+ creative enhancements stay OFF (Meta's tools have added music and altered products on finished ads). The launchers copy degrees_of_freedom_spec from a model ad and silently drop it if that post fails, which falls back to Meta's defaults: check the created creative. Day 1: open the live preview in Feed AND Reels for added music, re-crops or altered frames. |
12. Failure modes
| Failure | Fix |
|---|---|
| Ad opens on noise with no words on screen → mystery opener, fails the awareness gate | header on frame 0 naming her symptom; --title-style dragon holds it ≥4 s |
Din comes out quiet/flat (it went in as --music: normalized to -26 LUFS, ducked, faded in) |
room tone as the bed; din as a post-assemble overlay at cue-sheet levels |
| Buzz under-renders or reads as an earthquake | reaction-primary: eyes opening + sitting up carry it; ripple small and local (Seedance playbook: vibration language under-renders) |
| fal content-policy reject on the buzz panel | remove "vibrates/pulse/twitch/jiggles" near the teen in bed; motion lines + ripple + eyes |
| Band lights up / turns into a smartwatch | wrist flat, side-on, nobody looking; no presses on the wrist; regen with --regen N; photoreal: "NO smartwatch module", "nothing glows" |
| Noise inserts <1.2 s dropped or merged badly by H3 | merge at pack stage, ≥1.2 s per panel, ≤4 panels per batch |
| Sister and teen swap faces | different batches or a ≥5-year age gap + different hair colour |
Env sheet silently dropped (core §3: refs[:5] with a style anchor) |
≤3 named people + 1 room per batch: teen + sister + Mom + product + room is already 5, so the dog stays an unnamed extra |
| Clip QA false FAIL on a teen GIRL or the sister | fixed 10-06: clipqa.use_rubric reads the cast from the pack's characters:/cast:, so name the girl/sister there; check with python3 -m scripts.cartoon_h3.clipqa output/cartoon-h3/<slug> --print-rubric (no API call). A reviewed false FAIL still goes to output/cartoon-h3/<slug>/gen/qa-waivers.json (format-mascot-explainer §12), --auto-regen 0 |
| Pure product loop with no her/him (photoreal temptation) | keep her in the header + VO and him implied on screen; never ship a texture loop alone (core don't-build) |
| VO drowned by the din | cut the din under the words, or duck it by hand; VO dominant is doctrine |
| Missing SFX file at mix time | cue sheet gate: every file exists before the storyboard is approved |
13. Sources
~/research/davidaistar/txt/YtHf2oQisLQ.txt, analysis/guide_copy_images_shorts.md (shorts table + cross-video patterns), analysis/gemini_f83UH-qmNUs.md (parent video: Action/Audio/Quality prompt blocks), analysis/diff_animation_styles.md, analysis/diff_ai_ugc.md; scripts/cartoon_h3/assemble.py, scripts/vo_audio_chain.py, scripts/finish_video.py, scripts/seedance_img2vid.py, scripts/cartoon_h3/vo_check.py, audio-library/INDEX.md; MAP.md, dawn-stakes.md, product-truth.md; memories project_dawnbands_broll_seedance_playbook.md, feedback_cartoon_vsl_sound_pacing_doctrine.md, feedback_ai_avatar_broll_lane.md, corrections-hot.md. Detail in references/sources.md.
Not built yet (needs Fish's go)
- BUILT 10-06 (Builder C): the Sound cue sheet reader. H3_SFX_PLAN=output/concept-packs/<slug.md python3 -m scripts.cartoon_h3.run … --stage assemble (or put the sheet at <run/sfx-plan.md.json; in code assemble(..., sfx_plan=)). scripts/carto
- Draft → final (core gate 6b): cartoon cell: free drafts = storyboard, canvases, --prompts-only; the paid H3 draft is run.py --draft (480P, $0.05/s vs $0.08/s at 768P since the 10-06 price fix; finals re-render natively, a 480P→--hd upscale
- Sound-only no narration, header + captions carry copy NOT BUILT: no non-VO clock in cartoon-h3
- knowledge/ad-formats/_MODEL-REGISTRY.md: roles used here are Stylized video (H3-max), Cheap simple-motion i2v (Seedance 1.5 Pro i2v), Sound effects / foley (proven = library files; candidates sonilo video-to-sound-effects, mirelo sfx v1.5 v