Pipeline Hub

format-reaction-duet

Reaction / duet split-screen ad, 20-60 s. Top half = a source panel (a real mom's public forum post rendered verbatim on a quote card (no source line, Fish 10-03), or our own clearly-original explainer card, or real footage we hold rights to); bottom half = a mom reacting, recognizing her own mornings, and turning it into vindication with the band as her answer.

Lane: cartoon-h3 narrator/dialogue for the reactor + ffmpeg vstack composite (manual today); photoreal reactor = ugc-omni (one avatar, native voice, gates G0-G4) · not built yet: 3 (see below) · source: /Users/ayden/.openclaw/workspace/skills/format-reaction-duet

SKILL.mdbeat-sheet.mdsources.mdEvals (6)Learnings (12)
1. Read first2. When to use / when not3. The format4. Why it sells5. Beat sheet (full rules + cut list in references/beat-sheet.md)6. Pack spec7. Visual grammar8. Audio9. Production (free until canvases; composite is free)10. Gates & QA checklist11. Variants & test plan12. Failure modes13. Sources

format-reaction-duet — a real mom's post on top, a mom who recognizes it below

1. Read first

2. When to use / when not

3. The format

4. Why it sells

5. Beat sheet (full rules + cut list in references/beat-sheet.md)

Beat % runtime Top panel Bottom panel Must contain
1 Source hook 0-15 Q card 1 (the stake/symptom line) Mom stops scrolling, reads, freezes Card line verbatim, sourced, read aloud within 1.5 s; names her symptom
2 Recognition 15-35 Q card 1 held, key phrase highlighted Literal inserts of HER morning "That's my house" + her ritual (counts/times from VOC); generic failed solutions
3 Stake 35-50 Q card 2 (escalation, same post or a second sourced post) Mom's face listening, then her reaction Cost lands on the mom; the mornings caused it
4 Vindication turn 50-65 E card (sleeping brain) or Q card held Mom leaning in to the camera side-on / OTS Ruled root-cause line verbatim; "it's not you" to the poster
5 Answer 65-85 Band footage (real R clip, or a ugc-omni b-roll that passed pick --product) Kid wakes to the buzz (wrist rule; Lane B: the gated broll:band line, top holds the E/Q card) Touch gets through; silent to everyone else; keeps going until he turns it off; product named once
6 Payoff + CTA 85-100 End card (optional, --end-card; off by default per Fish 10-06) spans both halves Calm kitchen, kid already up Independence/calm on HER; 60-night trial spoken; end card

6. Pack spec

Two artefacts per ad: the reactor pack (cartoon-h3, carries all audio) and the top track (cards + clips, no audio of its own). - Reactor pack output/concept-packs/<slug>.md, core §5 front matter plus: format: cartoon-h3, format_skill: format-reaction-duet, parent: (the paying static/callout whose stake this carries, with CPA), iteration: (the ONE variable, e.g. "stakes static #5 → 40 s reaction duet, same stake"), voices: MOM=<id> (+ CARD=<id> only if an E card speaks; a calm neutral reader, never an anchor read), overlay: = the hook text (it is drawn on the top card, see §7), end_card, end_card_secs: 2.5, body_start (3 hooks × 1 body: each hook = its own card 1 + its own line 1-2). Dialogue pace keys if CARD is used: vo_tempo: 1.08, gap_same: 0.15, gap_turn: 0.3, max_gap: 0.22, seam_gap: 0.25 (10-01 values that passed vo_check). - ## VO Script: N. [MOM] "line" / N. [CARD] "line", one sentence per line, 5-12 words. The quote card is read aloud by MOM, introduced once ("A mom posted this.") and then read verbatim. - ## Scene visual intents = the BOTTOM panel only: N. **role** — <env>: <who, doing what, framing>, face in the lower-middle of the frame, plain wall above her head (the composite keeps rows 560-1200 of her 1280-high frame, §7). - ## Top track (pack.py ignores extra sections; don't start its title with "Hook"): a table card | kind Q/E/R | first line N | last line N | source id | text or file. Every Q row carries the source ID (reddit post id / survey #) and the thread file it came from. - Cast: MOM (+ KID for the inserts and the answer beat). Envs: 3-5 (kitchen table with phone, teen bedroom door, hallway, kid's bed, calm kitchen). - New slug per run (session freshness).

7. Visual grammar

8. Audio

9. Production (free until canvases; composite is free)

P=output/concept-packs/<slug>.md; R=output/cartoon-h3/<slug>
python3 scripts/statics/voc_check.py "<card 1 text>" "<card 2 text>"     # 0 hits = not her words: fix
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.run $A --stage storyboard         # free; Fish reviews storyboard.md + top track
touch $R/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; check crop framing here
python3 -m scripts.cartoon_h3.run $A --stage gen --prompts-only # Fish reviews 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 --no-end-card   # card goes on the composite, not here

Then the top track and composite (references/beat-sheet.md §Composite has the full, tested ffmpeg block): cards from make_title → 720×640 PNGs; per-card segments timed from $R/lines.json (start/end per line); real band clip segment; concat; vstack with crop=720:640:0:560 of $R/<slug>-final.mp4; then

python3 -m scripts.cartoon_h3.endcard $R/split.mp4 $R/split-ec.mp4 --secs 2.5 --text "<end_card>"
python3 scripts/meta_preflight.py $R/split-ec.mp4

10. Gates & QA checklist

11. Variants & test plan

12. Failure modes

13. Sources

~/research/davidaistar/txt/sU3r8z-MRZA.txt, analysis/guide_copy_images_shorts.md (shorts table row sU3r8z-MRZA), analysis/gemini_HBIENgQIQVU.md (multi-clip composition, editor-first), analysis/diff_cloning.md (organic hijack vs competitor mirror); skills/dawn-statics/SKILL.md; skills/format-podcast/SKILL.md, skills/format-street-interview/SKILL.md; scripts/cartoon_h3/{assemble.py,endcard.py,title.py,run.py,pack.py}; MAP.md §2; stake bank; memory corrections-hot.md, feedback_native_image_scrape_first.md.

Not built yet (needs Fish's go)

Every line in this skill that mentions something not built, roughly de-duplicated. Some items repeat in different words.