format-mini-movie — accused, tested, fooled, vindicated (chaptered)
format-spoken-drama is one arc in 2-4 min. This skill is that arc stretched into 6-9 chapters, each opening on a re-hook, with a subplot and a false solution in the middle. It is NOT a sung format (that's format-song) and NOT photoreal (§2).
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(chapter skeleton, % + word budgets, re-hook rules, illustrative structure),references/sources.md(reference ads paraphrased, what we keep/change, receipts).skills/format-spoken-drama/SKILL.md: dialogue staging, voices and pace keys are inherited from it unchanged; this skill only adds what length changes.output/dawn-combo-map-2026-10-05/MAP.md§2A (recipe A), §3 (accuser queue), §4 (frequency theory); stake bankoutput/creative-strategy-cooper-2026-10-05/dawn-stakes.md.skills/cartoon-h3/SKILL.md(shared body, hooks × leads matrix, credit discipline, VO clarity).- Product:
knowledge/brands/dawnbands/product-truth.md; claims:knowledge/brands/dawnbands/claims-register.md.
2. When to use / when not
- Use when a 3-4 min parent (song or spoken drama) already pays and Fish wants to know whether MORE story (chapters, subplot, a false solution) buys cheaper reach at a lower frequency build. One movie = one concept = one ad set.
- Evidence status: untested on Dawn. Signal only: Foreplay shows long AI narratives scaling for other brands (Rosabella 11:51 photoreal, Resilia 7:25, Smooche 5:37 sung). Our longest Dawn finals are the 10-04 songs (226-329 s). REPORT ranks this format "low until spoken drama (#4) reads".
- Build gate: do not start a mini-movie until
format-spoken-drama(or a song at ≥3 min) has a 7-day read, so the test in §11 has a parent in the same audio form. - Photoreal is out of scope. Gemini rated Rosabella 9.5/10 difficulty ("the absolute ceiling") for character/lip-sync consistency over 11 min. Our avatar-lane gates (core §3,
feedback_ai_avatar_broll_lane) require a motion proof, ONE locked character at pairwise identity ≥8/10 on ALL shots, and a line-match audit before any i2v. A mini-movie has 4-6 people across 40-70 shots; the 9-30 Side Effects photoreal ad failed those gates with one person and ~550 Higgsfield cr. Re-open only after a photoreal format passes the gates and pays, via the registry's "Photoreal / multi-ref video with locked character" role on ONE 30 s chapter. - Don't use for callout angles (recipe B), stakes the mornings didn't cause, kid-money/college stakes, a dad/kid narrator, or a character-less explainer.
3. The format
- 9:16, 5:00-12:00 (default first cut 7:00-9:00 ≈ 1,350-1,750 spoken words), animated in one style (claymation / pixar / disney3d / paper / skeleton), anchored on a frame from our paying song in that style.
- Chapters: cold open + 6-9 chapters of 40-90 s + close. No title cards (no readable text in frames; no mid-video overlay exists). The chapter is marked by sound and picture: a hard cut to a new room or day, and a re-hook line.
- Voices: Mom narrates in first person (~55-65 % of words); 3-5 other voices carry their key lines (accuser, witness/authority, explainer, kid, subplot person). Dialogue is staged un-mouthed (core §3).
- Captions from the script on every word; hook header on frame 0; motion end card (optional,
--end-card; off by default per Fish 10-06) (end_card:). - References: Foreplay
14_minimovie(Rosabella: a stranger's tragedy → the hero's own family at risk → rust/apple mechanism → reunion → doctor proof);12_musical(Resilia: humiliation → mentor → mechanism → week-by-week log → the accuser sees it);13_suno(Smooche: rival encounter → flashback → explainer met abroad → the rival asks her secret). Paraphrased in sources.md.
4. Why it sells
- Recipe A, extended: someone close blames HER for the mornings → it goes public and costs her → he takes the mornings and fails → a false solution works, then fails at the worst moment (the stake peaks) → a credible person INSIDE the story names the root cause → discovery → proof over days (subplot resolves) → vindication in front of the accuser. The band is the evidence that clears her.
- What length adds: the false solution is the objection handled in the story ("we tried a louder alarm / a smartwatch"); the subplot widens who the mornings hurt (her job, her kid's trust) while still landing on her; the long payoff gives the vindication room. Problem-aware from line 1.
- Media theory (MAP §4, unproven past ~$550/week): songs buy ~half the impressions per dollar and build frequency ~half as fast (lifetime 1.12-1.25). A 10-min film should sit at the far end of that curve; that is what §11 measures.
5. Beat sheet (full rules, word budgets and re-hook types in references/beat-sheet.md)
| # | Chapter | % runtime | Job | Must contain |
|---|---|---|---|---|
| 0 | Cold open | 0-3 | Stop the scroll on her | Accuser's verbatim VOC line in his voice or her stake, in action; overlay = this line |
| 1 | The charge | 3-12 | She is the alarm; he blames her | Counts/times, generic failed solutions; ends on his threat |
| 2 | The record goes public | 12-24 | Blame costs her in front of a witness | One new room + person; concrete cost; subplot opens (her job / her kid's trust / a sister in the same fight) |
| 3 | Then you do it | 24-35 | Hand-over test | Accuser fails 2-3 mornings; reasonable and wrong; ends blaming a gadget |
| 4 | The false solution (mid-point) | 35-47 | Objection inside the story | A generic fix works 1-2 days, then fails on the worst morning; stake peaks; her low point |
| 5 | The explainer | 47-58 | Root cause | Person inside the story; Fish's root-cause line verbatim; why the false fix failed; ≤4 explainer lines |
| 6 | Discovery | 58-67 | Mechanism + product | FIRST band beat; touch gets through, silent to everyone else, keeps going until he turns it off; named once. Optional mid-roll CTA (§11 cell) |
| 7 | Proof | 67-80 | Days pass, it holds | Kid wakes himself on screen; subplot resolves |
| 8 | Vindication | 80-95 | Long payoff on HER | In front of the accuser/witness; kid clears her, arm held OUT; accuser concedes in his voice; her morning back |
| 9 | Close / CTA | 95-100 | Offer | Close line, product, 60 nights; end card (optional, --end-card; off by default per Fish 10-06) |
| - Every chapter opens on a re-hook (5-12 words, new information, in action) and closes on an open loop the next chapter answers within 3 lines. No recaps. No chapter over 90 s without a new stake or turn. |
6. Pack spec
-
Step 0 — combo plan (feedback loop,
workflow-combo-loop):python3 scripts/combo_loop/plan.py --format format-mini-movie --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. -
One pack, one run (built path): the whole film is one
## VO Script, one ElevenLabs clock, one storyboard, one assemble. Chapter-per-run + concatenation is BUILT 10-06 (Builder C), chapter runs still need Fish's go:python3 -m scripts.cartoon_h3.concat --out <film.mp4> <ch1>-final.mp4 <ch2>-final.mp4 … [--xfade-frames 6]joins finished finals in one re-encode (size/fps matched to chapter 1, each chapter gained to -14 LUFS, burned captions untouched, seam times in<film>.concat.json). What stays true: each chapter keeps its own bed (it restarts at every seam) and its own QA, so one-pack/one-run remains the default. AChapterCardRemotion composition exists (10-06:python3 scripts/remotion_stitch.py comp ChapterCard <props.json> <card.mp4>, then concat it between chapters) for a Fish-approved title-card test cell only; the no-title-cards rule above is unchanged. A cut-down (e.g. 5-min edit reusing the 9-min clips) is also NOT BUILT: clip caches key on segment text, so a new pack regenerates its batches (EL per-line takes are reused). - Front matter (core §5 + dialogue keys, model on
output/concept-packs/dawnbands-s2-attendance-office-h1-2026-10-01.md):format: cartoon-h3,format_skill: format-mini-movie,brand: dawnbands,parent:(paying 3-4 min ad + CPA),iteration:(the ONE variable: "3-4 min single arc → chaptered 8 min, same accuser"),title,overlay,end_card,style,style_key,style_block,visual_negative,style_anchor,cast,envs,product_truth,voices: MOM=<id>, <ACCUSER>=<id>, <EXPLAINER>=<id>, KID=<id>[, <SUBPLOT>=<id>],vo_tempo: 1.08,gap_same: 0.15,gap_turn: 0.3,max_gap: 0.22,seam_gap: 0.25, optionalstyle_<SPK>0.2-0.35,body_start:(first line after the cold open, for 3 hooks). Copyproduct_truthfromoutput/concept-packs/dawnbands-song-nottardy-2026-10-04.md(display OFF and dark in every shot), never from the 10-01 attendance-office packs ("top face that can glow"). chapters:= documentation only (no code reads it), e.g.chapters: 0=1-4, 1=5-22, 2=23-48, ...so the storyboard review can be split by chapter.## VO Script:N. [SPK] "line", every line tagged (narrator =[MOM]), 5-12 words, one sentence. Chapter headings as### Ch3 — Then you do itlines are safe inside the section (the parser only ends a section on##, only reads numbered lines).## Scene visual intents:N. **role** — <env>: <named people on screen, doing what, framing>. Roles:narrator,dialogue,narrator (product reveal)(first band line),cta(close and any mid-roll CTA; batch ≤3 panels). Every non-MOM line names its staging: "cutaway: Mom's face while Dad says it, Dad's back to camera" (see §7).<slug>.argsbeside the pack:--char-ref "Label=path"(label = the exact name used in intents),--env name=path,--product-ref,--characters "...".- Cast: Mom + accuser + explainer + kid (+ witness, + subplot person) ≤6. Envs 8-12 reusable rooms; a new room = a new sheet, so reuse rooms across chapters.
7. Visual grammar
- No lip-sync (core §3). Speech is shown on the listener, the speaker's back/profile in a wide, over-the-shoulder, a phone/door, or an insert. The splitter's old "mouth moving" speaker rule was replaced 10-06 by voice-over staging (
storyboard.py_SYS). Still write every non-MOM intent as a cutaway (--no-llmuses intents verbatim), thenpython3 -m scripts.cartoon_h3.check_plan --lint output/cartoon-h3/<slug> --pack output/concept-packs/<slug>.md= 0 BLOCK before approval (same gate as format-spoken-drama / format-courtroom). - Chapter seams: a hard cut to a new room, day or time (clock hands, light through blinds). A batch may straddle a seam (the seam becomes a named Transition); the re-hook line must be its own pack line (≥1.2 s) so it gets its own panel. Forcing a fresh batch at every chapter (
chapter_break) is NOT BUILT; onlylead_start/body_start/body_endforce breaks. - Consistency across 40-70 batches:
- One character sheet per person (
python3 -m scripts.cartoon_h3.sheet), one style anchor on every canvas (style_anchor→--style-refvia packargs). Sheets attach by whole-word match of the label to the panel text (aliases only for son/daughter/mom/dad), so name every person the same way in every intent; side characters "(not Mom)". - Ref budget: with a style anchor,
refs_for_batchkeeps only 5 refs + the anchor (refs[:5]), in order characters → product → rooms. Plan each batch for ≤3 named people + 1 room (product batches ≤2 people + band + 1 room) or the room sheet is silently dropped. - One outfit per person for the whole film (sheets lock outfits); no time jumps that age anyone.
- Two similar-age people (Mom + sister, two teens) contaminate each other: different hair colour/length, build and signature colour on the sheets, never alone together in a close shot.
- Batch seams are hard cuts by default;
run.py --chain-frames(opt-in, 10-06) hands the previous clip's last frame to a same-scene/env seam as a start-frame ref. Unproven: one seam-pair proof on Fish's eye before a chaptered cut relies on it. - False solution on screen: call it "smartwatch" or "alarm clock", never "band"/"wristband" (
PRODUCT_IN_FRAME_REwould mark the batch product-visible and attach our band). In batches that show both, run.py adds the "bulky square-cased smartwatch, clearly not this band" clause. - Product only from Chapter 6. Wrists down/resting, band side-on, display dark, nobody looking at it, product beats in daylight; buzz = eyes opening + cartoon motion lines. Wake shots wide from the doorway, teen dressed on top of the duvet. No readable text: letters are shapes with a red stamp, phones turned away, clocks hands-only.
- Framing mix: accusation/vindication on Mom's face; tests and proof days wide; explainer two-shot.
8. Audio
- ElevenLabs per speaker via
voices:; Mom = the avatar's speaking voice (warm, slightly husky, 35-54); voices clearly different in age/pitch/energy. Explainer calm; accuser dismissive, never a villain. - vo_check (automatic, before storyboard): an all-tagged pack is checked on the DIALOGUE profile only: overall ≥2.9 wps, any 6+-word line ≤4.8 wps, turn gaps 0.30-0.55 s, same-speaker 0.12-0.30 s, dead air ≤0.6 s, ASR round trip. Narration-heavy chapters should still read ~3.4+ by ear; nothing gates that per chapter. Never fix pace by speed; split or retake the line. Fish listens to the whole VO on the hub, by chapter.
- One ducked music bed for the whole film (assemble default); a chapter seam is not a music swap. SFX only if they don't mask words (no SFX path is built).
- End card (optional,
--end-card; off by default per Fish 10-06) 3 s (end_card:); assemble ends 0.5 s after the last word and the card overlays the last 3 s, so the spoken close plays under it (write it as the final ≥2.5 s).
9. Production (free until sheets; every paid step is Fish's)
cd ~/.openclaw/workspace; P=output/concept-packs/<slug>.md; S=<slug>
python3 -m scripts.cartoon_h3.run --pack $P --dry-run # free before the VO exists: batch + cost estimate at 3.6 wps
A=(${(z)"$(python3 -m scripts.cartoon_h3.packargs $P --storyboard)"}); A=(${(Q)A})
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage vo # EL per line (quota) + vo_check gate
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage storyboard # free; Fish reviews storyboard.md chapter by chapter
python3 -m scripts.cartoon_h3.sheet <out.png> <prompt.txt> <style_anchor.png> [refs...] # ~$0.22 each, Fish's go
touch output/cartoon-h3/$S/storyboard.approved # Fish only
A=(${(z)"$(python3 -m scripts.cartoon_h3.packargs $P)"}); A=(${(Q)A}) # every ref must exist now
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage canvas --canvas-workers 4
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage gen --prompts-only # Fish reads the motion prompts
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage gen --spend --backend fal --model h3-max --batches 1 # smoke
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage gen --spend --backend fal --model h3-max --gen-workers 8 --auto-regen 1
python3 -m scripts.cartoon_h3.run "${A[@]}" --stage upscale --hd
df -h ~; REMOTION_CHUNK_FRAMES=1500 python3 -m scripts.cartoon_h3.run "${A[@]}" --stage assemble --hd --caption-mode tiktokbox --title-style dragon
output/dawn-iterate-2026-10-04/video/tools/contact.sh output/cartoon-h3/$S/$S-final-endcard.mp4 output/cartoon-h3/$S/contact 2
- Cost (scaled from the 10-04 ledger: 1,105 billed H3 s for ~810-830 s of finals ≈ 1.35× incl. regens; ~1.4 canvas renders/batch at ~$0.22; upscale ~$0.009/s; 10-04 songs ran 8.4-10.6 s per batch). H3 at the h3.py table rate ($0.05/s) vs the likely real 768P rate ($0.08/s, registry caveat; read fal's page before quoting):
| Runtime | Batches | H3 billed s | H3 $ | Canvases | Upscale | Sheets | Total |
|---|---|---|---|---|---|---|---|
| 5:00 | ~30 | ~400 | $20-32 | ~$9 | ~$3 | $6-10 | ~$38-54 |
| 8:00 | ~48 | ~640 | $32-51 | ~$15 | ~$4.5 | $6-10 | ~$58-81 |
| 10:00 | ~60 | ~800 | $40-64 | ~$18 | ~$5.6 | $6-10 | ~$70-98 |
| 12:00 | ~72 | ~960 | $48-77 | ~$22 | ~$6.7 | $6-10 | ~$83-116 |
| - Plus EL quota (~1,700-2,600 words), Gemini QA and Sonnet splits. Regen budget ~2 per runtime minute (songs: 8 per ~4.5 min); hitting it means the pack is wrong, not the cap. Extra hooks cost only their hook batches (~$1-3): body clips come from the shared cache and upscale caches by clip bytes. | |||||||
- Shot tiers (core §2b) + draft→final (core §4 gate 6b). Tag every batch A/B/C before approval: run.py does it itself (scripts/cartoon_h3/tiers.py, also python3 -m scripts.cartoon_h3.tiers <run>: A = first batch/hook, reveal/CTA/product beats, 3+ characters in a shot; C = no person in any shot; else B) into plan.json + <run>/tiers.md with the per-batch fal cost; re-tag in review if the word match is wrong. Per-tier models: run.py --tier-models "A=h3-max,B=h3-max,C=h3" (fal only; default = --model for every tier, i.e. all H3-max). h3 on B/C is a candidate until a one-batch side-by-side passes Fish's eye (registry "How to adopt"). Draft→final: run.py --draft = 480P ($0.05/s vs $0.08/s at 768P, fal page re-read 10-06) into <slug>-draft, seeded from the approved run (VO, plan, approval, canvases), never the shared-body cache, no upscale/end card (optional, --end-card; off by default per Fish 10-06); it prints the native 768P re-render command for the approved batches. Finals re-render natively, never a 480P→--hd upscale (Fish judged native sharper 10-04). A re-render is a new sample: judge staging and prompts on the draft, not the exact take. |
|||||||
| - Time: wall-clock at this length is not measured. Budget Fish's review time: ~200 storyboard beats, a full VO listen, a full watch per cut. | |||||||
- Check fal / kie / Higgsfield balances before promising a render; df -h ~ before assemble (10-04 hit ENOSPC with 886 MB free). |
10. Gates & QA checklist (on top of core §4)
- [ ] Build gate met: a same-audio-form parent has a 7-day read; parent named with CPA; ONE variable stated.
- [ ] Every stake and the accuser line sourced (stake bank / VOC, cited); mornings caused them; they land on her; subplot is mornings-caused too.
- [ ] Beat sheet filled within the word budget; every chapter opens on a re-hook and closes on a loop; mid-point false solution is generic (no brands, no bed shakers).
- [ ] Explainer inside the story; Fish's root-cause + mechanism lines verbatim; red-team done (timeline over days/weeks, who knows what, real-life plausibility, product facts).
- [ ] vo_check PASS; Fish listened to the full VO.
- [ ] Cast ≤6, distinct sheets, labels = intent names; style anchor present; per-batch ref budget planned (≤3 people + 1 room).
- [ ] storyboard.md: no "mouth", no "narrator", every person named, no band before Ch6, wrist rule, no readable text, no near-identical consecutive shots; Fish touched
storyboard.approved. - [ ] Motion prompts read; smoke batch passed; balances + disk checked; regen tally within budget.
- [ ] Every batch tagged tier A/B/C in
storyboard.md; any draft→final pass followed §9's route (drafts never left in a shared-body cache). - [ ] 1 fps lit-band sweep of every product clip; contact sheet every 2 s read in full, chapter by chapter.
- [ ] 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 0, captions = script, header frame 0, end card (optional,
--end-card; off by default per Fish 10-06) last 3 s, gemini_qa scored (standalonescripts/gemini_qa.py --asset <final> --type finalif the in-assemble call returns no score), Fish watched the whole film. The Discord copy will exceed 8 MB at this length: share the hub/link.
11. Variants & test plan (one variable per ad set; core §6)
| Cell | The one variable | How | Status |
|---|---|---|---|
| 1 Mini-movie vs parent | length/structure: chaptered 7-9 min vs the best 3-4 min parent, same accuser, voice cast and art style | new pack from the parent's beats + chapters 2, 4, 7 | default first test |
| 2 Hooks | cold open only | 3 packs sharing everything from body_start; run h1 to completion first; or python3 -m scripts.cartoon_h3.matrix --base <pack> --variants <file> --write; ad names <concept>-h<i>-l1; python3 -m scripts.cartoon_h3.readout --concept <c> |
built |
| 3 Mid-roll CTA | a spoken CTA at the end of Ch6 | one **cta** line (product + 60 nights, PDP-true only) |
built (spoken). On-screen offer card mid-roll NOT BUILT |
| 4 Re-skin | art style | new slug, same VO lines + intents, only the style keys changed: EL reuses the per-line takes (cached by voice + settings + text), storyboard re-splits, Fish re-approves | manual route works; reskin.py is song-only (needs a promoted song run), VO-pack support NOT BUILT |
| 5 On-camera dialogue | Lip-sync role (registry: sync-3 candidate) on 2-4 key lines | one-unit proof first | NOT BUILT, needs Fish's go |
| - Hook sources: the strongest chapter re-hooks are the hook candidates (each already works as a cold open). | |||
- Read: own ad set in Testing cloned from the parent's, $40/day floor, PDP link everywhere, meta_preflight; day 3 look, verdict day 7 on CPA vs the parent; also read lifetime frequency vs spend, CPM, and Meta's video percent-watched (25/50/75/95 %) to see how many viewers reach Ch6. If it holds CPA, run MAP §4's frequency test (steady ~$150/day for 3 weeks vs the parent's weekly CPA curve). Never pause; reduce. Record project_launch_<date>_<slug>.md. |
|||
| - Hold rate is not the length read (starpop meta-video-ad-metrics-hook-rate-hold-rate-ctr-cpa): a ThruPlay counts at 15 s, so ThruPlays ÷ 3-s views only says whether the cold open pays off; Ch6 reach comes from the 25/50/75/95 % watched read above. | |||
- 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 |
|---|---|
| Viewers leave before the band (product at ~58 %) | expected; read 50/75 % watched; cell 3 mid-roll CTA, not an early reveal |
| A chapter sags (no new stake for 90 s) | cut lines; every chapter opens with new information, never a recap |
| Speaker panels say "mouth moving" | cutaway wording in every non-MOM intent; check_plan --lint = 0 BLOCK before approval |
| Room sheet silently missing in a batch | ≤3 named people + 1 room per batch when a style anchor is set |
| Identity drift / two similar women merge | distinct sheets; same names in every intent; separate close shots |
| False-solution watch drawn as our band | call it "smartwatch", never "band"/"wristband" |
| Body cache silently reuses another pack's visuals | identical intents from body_start on in every hook pack (storyboard now FAILS on mismatch) |
| Lit band | pose fix (wrists down, daylight), canvas re-render, --regen N |
| Remotion ENOSPC on a 10-min HD render | df first, REMOTION_CHUNK_FRAMES=1500, one assemble at a time |
| Cost under-reported | price caveat in §9; ledger by fal page, not h3.py |
| Fix-one-chapter temptation | --regen N / --batches on that chapter's batches inside the one run; never split the film into runs |
13. Sources
~/research/davidaistar/REPORT.md (§3 row 14), foreplay/14_minimovie.gemini.md, foreplay/12_musical.gemini.md, foreplay/13_suno.gemini.md, foreplay/04_drama.gemini.md, analysis/diff_songs.md (rows 13, 21-23), analysis/diff_animation_styles.md; output/dawn-combo-map-2026-10-05/MAP.md; output/dawn-iterate-2026-10-04/video/RUN-LOG.md §4 + plan.json stats; scripts/cartoon_h3/{run,vo,storyboard,assemble,pack,hooksplice,packargs,upscale,h3}.py; skills/cartoon-h3/SKILL.md; skills format-spoken-drama + format-song; memory feedback_cartoon_h3_shared_body_text_hash.md, feedback_higgsfield_credit_discipline.md, feedback_ai_avatar_broll_lane.md.
Not built yet (needs Fish's go)
- One pack, one run (built path): the whole film is one VO Script, one ElevenLabs clock, one storyboard, one assemble. Chapter-per-run + concatenation is BUILT 10-06 (Builder C), chapter runs still need Fish's go: python3 -m scripts.cartoon_h
- Chapter seams: a hard cut to a new room, day or time (clock hands, light through blinds). A batch may straddle a seam (the seam becomes a named Transition); the re-hook line must be its own pack line (≥1.2 s) so it gets its own panel. Forci
- 3 Mid-roll CTA a spoken CTA at the end of Ch6 one cta line (product + 60 nights, PDP-true only) built (spoken). On-screen offer card mid-roll NOT BUILT
- 4 Re-skin art style new slug, same VO lines + intents, only the style keys changed: EL reuses the per-line takes (cached by voice + settings + text), storyboard re-splits, Fish re-approves manual route works; reskin.py is song-only (needs a
- 5 On-camera dialogue Lip-sync role (registry: sync-3 candidate) on 2-4 key lines one-unit proof first NOT BUILT, needs Fish's go
- 13_suno — Smooche colour-changing foundation, 5:37, 9:16, Pixar-style musical. Paraphrase: a 63-year-old woman runs into her ex and his much younger partner in a store → flashback to the divorce and makeup that failed her → a work trip, a s
- analysis/diff_animation_styles.md P1: last-frame chaining across batches (kills hard seams in continuous styles) is not built; at 60 batches every seam is a hard cut, so chapters lean into cuts
- Video extend: candidate for smoothing seams; NOT BUILT
- Lip-sync onto an animated frame (sync-3 candidate): the route to on-camera dialogue (cell 5); NOT BUILT