Pipeline Hub

format-timeline

The "if he wore this for a month, here's what happened" timeline ad for DawnBands, in two executions - (a) an animated mom-narrated video that follows ONE family from the night before through night one, the first mornings, week two and a month on (60-120 s), and (b) a static timeline-stack image (tonight / tomorrow morning / every morning after) on the dawn-statics pipeline.

Lane: cartoon-h3 narrator (video) + statics (dawn-statics) · not built yet: 2 (see below) · source: /Users/ayden/.openclaw/workspace/skills/format-timeline

SKILL.mdbeat-sheet.mdsources.mdEvals (6)Learnings (14)
1. Read first2. When to use / when not3. The format4. Why it sells5. Beat sheet (full rules + truth table in references/beat-sheet.md)6. Pack spec (video) and static spec7. Visual grammar8. Audio9. Production10. Gates & QA checklist11. Variants & test plan12. Failure modes13. Sources

format-timeline — one family, one month, the mornings change

1. Read first

2. When to use / when not

3. The format

4. Why it sells

5. Beat sheet (full rules + truth table in references/beat-sheet.md)

(a) Video | Beat | % runtime | Job | Must contain | |---|---|---|---| | 1 Hook | 0-8 | Stop the scroll on her | Her situation in action + the stake on her (VOC/stake bank) + the timeline promise ("this is what the next month looked like") | | 2 Before | 8-22 | Prove she's the alarm | The knocks, the yelling, what she tried (generic, no brands, never bed shakers); the accuser's line quoted by mom | | 3 Why + arrival | 22-32 | Root cause, product in | Explainer inside the story, Fish's root-cause line verbatim; the band arrives; product named once | | 4 Night one | 32-45 | Kill wear doubt | He puts it on himself; set on the band, no app; she lies awake anyway | | 5 The first mornings | 45-62 | Kill wake doubt, honestly | Buzz on the wrist, keeps going until he turns it off; nobody else wakes; morning one he's awake but not up yet (Q06); by the third she hasn't knocked | | 6 Week two | 62-76 | Prove it lasts | Routine: he charges it himself (battery ~two weeks), little sibling / husband sleeps through, she stops setting her own early alarm | | 7 A month on | 76-92 | Payoff on HER | The accuser sees it (vindication) + one concrete thing she has back | | 8 CTA | 92-100 | Offer | Product name + 60-night wake-up guarantee, spoken; end card (optional, --end-card; off by default per Fish 10-06) |

(b) Static (reading order, top to bottom) | Slot | Job | Rule | |---|---|---| | Headline | Recognition: her burden | Her verbatim line that reads as a callout TO her ("you"/"your", like the §Static spec example), voc_check ≥1 + hit file read; or declared card_item; ≤8 words unless verbatim. A first-person "I…" quote is mom-first POV (1.53 vs brand voice 1.87, MAP §2B): declared variant only | | Root-cause sub | Why | "An ADHD brain tunes out a sound it hears every morning." (ADAPTED from Fish 9-30 "Their brain tunes out…" to put ADHD on the image; Fish approves the adaptation at the sheet, else keep his line verbatim and name ADHD in the headline) | | Stage 1 Tonight | Wear/setup doubt | True product fact: set on the band, he puts it on | | Stage 2 Tomorrow morning | Mechanism | Fish 9-30 line verbatim: "Dawn vibrates on the wrist and keeps getting stronger until they press the button." | | Stage 3 Every morning after | Payoff | Independence + calm (claim-unlocked outcome, no date); may close on a "without …" clause naming her burden ("…without you at his door"), the objection-in-one-line move from starpop ai-static-ads-that-convert | | Product + pill | Proof/risk reversal | Real cutout, display dark; "60-night wake-up guarantee" |

6. Pack spec (video) and static spec

Video pack (output/concept-packs/dawnbands-timeline-<slug>-<date>.md, new slug every run): - Front matter: format: cartoon-h3, brand: dawnbands, format_skill: format-timeline, parent: oneweek song (sa-ontime-04-relatab-animation-song-oneweek-a-v2copy, $42.55 CPA, ROAS 1.81), iteration: the ONE variable (e.g. "experiment week before the product → timeline of the product in use; same family, same accuser"), elevenlabs_voice_id: the mom narrator (DruqipkeFENaGA2DCMeV = the wife narrator of the 10-03 guestroom packs; confirm with Fish), vo_tempo, body_start (3 hooks), title: (lines split by |, shown while line 1 plays), end_card:, style, cast, envs, product_truth. style_key/style_block/style_anchor/product_truth become --style/--style-block/--style-ref/--product-truth via python3 -m scripts.cartoon_h3.packargs (refs in <pack>.args, §9); visual_negative is a record. - product_truth: from product-truth.md: matte black ribbed silicone band, small flush LED time display DARK when idle, three alarms, set on the band, no app. Never "no display" (the 10-03 packs said that; product-truth.md overrides). - ## VO Script: N. "line", one sentence per line, 5-12 words, no speaker tags (single narrator). Milestone lines carry the label AND the event in one line ≥5 words ("Night one, he put it on without a word."): a bare "Night one." is under 1.2 s and gets merged into a neighbour. - ## Scene visual intents: N. **role** — <env>: <who is on screen, doing what, framing>; roles narrator (hook), narrator, reveal (band arrives), cta. pack.py marks a panel as a product panel whenever the intent says "the band", "wristband", "dawn band", "black band", "ribbed band" or "silicone band" (PRODUCT_IN_FRAME_RE); product panels cap their batch at 3. Name the band only in intents that show it. - Cast: Mom (narrator, 35-54), the kid (one, fixed age), the accuser (husband/dad by default), optional little sibling. Two similar-age characters never share a batch. - Envs: teen room, kitchen, hallway, master bedroom (+ school office only if the stake is the school).

Static spec: copy json per static (headline, root_cause_sub, steps, rows, pill; slots and caps in the C07 file) + one spec.json entry per static in the gen_statics shape (slug, layout: ../static-templates/refs/C01.jpg (the gate's existence check; the same C01 image is render input 2, Fish 10-03), template: C07, lines = headline / sub / bullets [3 stage lines + pill], voc or card_item, why, alts ≥2) + top-level waivers ([{"slug": "*", "rule": "rule9", "reason": "..."}], read by gen_statics.py itself since 10-06; a rule substring like "MISSING WRIST-VIBRATION MECHANISM" also works), or a top-level chain naming the timeline's own steps instead of waiving.

7. Visual grammar

8. Audio

9. Production

(a) Video (free until refs/canvas; reuse the clay sheets in output/cartoon-h3/_refs/dawn-songs-2026-10-04/clay/: char-mom, char-dad, char-caleb, env-teen-room/kitchen/hallway/master-bedroom, product-band = $0 sheets)

# zsh. <pack>.args (core §5: ALWAYS packargs). Full paths in the file (packargs does not expand $vars); C below = output/cartoon-h3/_refs/dawn-songs-2026-10-04/clay:
#   --char-ref mom=$C/char-mom.png --char-ref caleb=$C/char-caleb.png --char-ref dad=$C/char-dad.png --env teen-room=$C/env-teen-room.png
#   --env kitchen=$C/env-kitchen.png --env hallway=$C/env-hallway.png --product-ref $C/product-band.png --characters "Mom, Dad and Caleb"
#   (front matter style_key: claymation + product_truth + style_anchor become flags)
P=output/concept-packs/dawnbands-timeline-<slug>-<date>.md; S=<slug>
A=(${(z)"$(python3 -m scripts.cartoon_h3.packargs $P)"}); A=(${(Q)A})
python3 -m scripts.cartoon_h3.run $A --dry-run                # free: cost estimate (h3.py table)
python3 -m scripts.cartoon_h3.run $A --stage vo               # EL VO + vo_check gate; Fish listens
python3 -m scripts.cartoon_h3.run $A --stage storyboard       # free; storyboard.md (tier per batch) → Fish
touch output/cartoon-h3/$S/storyboard.approved                # Fish only
python3 -m scripts.cartoon_h3.run $A --stage canvas           # Image gen role (registry), paid
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 --hub   # captions from script + (optional end card) + gemini_qa

(b) Static (template route = the 10-04 batch pattern; copy that folder's scripts into the new batch dir)

B=output/dawn-timeline-statics-<date>; S=$B/spec.json   # spec carries `waivers` (rule 9 SA2 chain, reason written)
sed 's/60-night wake-up guarantee//g' $B/copy/*.json | grep -nEi '\b(day|night|morning|week|month)s?[ :]*([0-9]+|one|two|three|four|five|six|seven|ten|fourteen|twenty|thirty|sixty|a few)\b|\b([0-9]+|one|two|three|four|five|six|seven|ten|fourteen|twenty|thirty|sixty|a few)[ -]*(day|night|morning|week|month)s?\b|\bwithin an? (day|night|week|month)'   # time-label gate: must print nothing
python3 scripts/statics/voc_check.py "<her card item>" "<alt 1>" "<alt 2>"   # ≥1 hit each
grep -rli "<her card item>" knowledge/brands/dawnbands/research   # which file hit: voc-competitor-reviews*.jsonl = another brand's buyer, not her
python3 scripts/statics/gen_statics.py $S --check   # real gate; waived findings print as WAIVED with their reason (10-06)
python3 scripts/statics/gen_statics.py $S --list    # sheet (incl. waivers + chain) → Fish
python3 - --go <<'EOF'   # PROPOSED C07 prompt + inputs (product, C01 layout ref, board); drop --go to print only
import json,sys; from pathlib import Path; sys.path.insert(0,"knowledge/brands/dawnbands/static-templates"); import make_prompts as mp
from scripts.cartoon_h3.canvas import gen_canvas_fal
t=json.load(open("skills/format-timeline/references/template-C07-timeline-stack.json")); c=json.load(open("<copy.json>"))
w=mp.lint(t,c); r=mp.render(t,c); print(w, r["inputs"], r["prompt"], sep="\n")
if not w and "--go" in sys.argv: gen_canvas_fal(r["prompt"], Path("<B>/renders/<slug>.png"), [p for _,p in r["inputs"]], size={"width":2048,"height":2048})   # PAID, Fish's go
EOF
python3 scripts/statics/static_review.py $B/renders --spec $S     # two-vote FAIL; eyeball full size
python3 ~/ad-batch-hub/stage-session.py $B/renders --brand "Dawn Band" --type static   # the renders dir (iterdir is not recursive); refuses without passing sidecars

10. Gates & QA checklist

11. Variants & test plan

12. Failure modes

13. Sources

~/research/davidaistar/foreplay/07_timeline.gemini.md, REPORT.md (format table row 7, statics §11), analysis/diff_statics.md, analysis/gemini_HEa4AVv-ths.md, analysis/guide_copy_images_shorts.md (H2); skills/dawn-statics/SKILL.md, scripts/statics/gen_statics.py, voc_check.py, static_review.py, knowledge/brands/dawnbands/static-templates/ (templates.json, make_prompts.py, README); output/dawn-iterate-2026-10-04/statics/; skills/cartoon-h3/SKILL.md, scripts/cartoon_h3/run.py, pack.py; MAP.md + songs_all.json/songs_scripts.json; product-truth.md, claims-register.md, research/customer-evidence-2026-09-15.md, voc-competitor-reviews-2026-10-02.jsonl, bottleneck-diagnosis-2026-10-03.md; dawn-stakes.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.