Pipeline Hub

format-warehouse

Demand-proof 'warehouse' ad for DawnBands, 30-45 s: packing-room b-roll (pouches stacked, orders packed, the band rattling silently on the packing bench) under a brand-voice VO that says why 10,000+ parents ordered it, cut against HER mornings, so the pile proves the mechanism works rather than standing in for it. Evidence status UNGROUNDED (no reference ad analysed yet).

Lane: vo-broll (VO + b-roll, scripts/vo_broll_runner · not built yet: 1 (see below) · source: /Users/ayden/.openclaw/workspace/skills/format-warehouse

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, word budgets, shot list in references/beat-sheet.md)6. Pack spec7. Visual grammar8. Audio9. Production (free until the first paid generation; every paid step is Fish's)10. Gates & QA checklist (on top of core §4 and the handoff's final QA)11. Variants & test plan12. Failure modes13. Sources

format-warehouse — the pile is the proof, her morning is the story

1. Read first

2. When to use / when not

3. The format

4. Why it sells

5. Beat sheet (full rules, word budgets, shot list in references/beat-sheet.md)

Budget 30-45 s at ≥3.0 wps (lane floor) ≈ 100-150 words. Slots are ceilings; the voice sets the clock (handoff law 1).

# Beat (EVOLVE slot) Time Job Must contain
1 Hook ×3 (hook) 0-3 s Stop her on her own symptom + the pile 3-7 words; names her situation; demand number optional in the VO; picture = her morning (door, knock, asleep kid). A pouch/band shot at 0 s breaks Fish's 8-15 rule (no product b-roll before the reveal, enforced in vo_broll_runner): Fish-gated variant only
2 Bridge ×3 (bridge) 3-8 s Her morning, the burden 2-3 problem cuts (door, knock, asleep kid); stake on HER caused by the mornings; no band
3 Objection (hold) 8-13 s Say her doubt "He sleeps through everything" class objection, verbatim-shaped from VOC
4 Claim (hold) 13-22 s Root cause + mechanism Fish's ruled lines verbatim: sound doesn't reach a deep-sleeping brain; touch gets through; silent to everyone else; keeps going until they turn it off
5 Proof (hold) 22-30 s The warehouse 10,000+ parents (claim as written); band shivering silent on the bench; pouches moving; stock line ONLY if true today (§10)
6 Benefit (hold) 30-35 s Kid independence Kid up on his own, out the door; her morning back
7 CTA (CTA) 35-45 s Offer Price from the live PDP, 60-night guarantee as risk reversal (not the headline), action; pouch in hand; end card (optional, --end-card; off by default per Fish 10-06) ≤2 s

6. Pack spec

7. Visual grammar

8. Audio

9. Production (free until the first paid generation; every paid step is Fish's)

cd ~/.openclaw/workspace
curl -sL https://dawnbands.com/products/<live-pdp-handle>.js | python3 -c "import json,sys;d=json.load(sys.stdin);print(d['available'],[(v['title'],v['available'],v['price']/100) for v in d['variants']])"   # stock + price, read-only
python3 scripts/clip_library.py search --tags product,in-hand,product-pouch --keywords "pouch packing hands" -n 20   # own footage first
python3 scripts/register_dawn_broll.py --dir <folder Fish sends> --dry-run          # real packing footage, if Fish films it
python3 scripts/pull_broll_clips.py --packs output/vo-broll/<batch>/<slug>.json --out output/vo-broll/<batch> --sources pexels --dry-run   # stock for her-morning cuts
# generated b-roll, vo-broll lane = Higgsfield (Fish's standing 9-15 override in skills/vo-broll/SKILL.md: "do not fall back to fal.ai automatically")
python3 scripts/seedance_broll_runner.py --prompts <prompts.json> --run-id <id> --dry-run --no-discord               # cost estimate first (seedance1_5 = tier C)
python3 scripts/seedance_broll_runner.py --prompts <prompts.json> --run-id <id> --phase frames --no-discord         # start frames only → Fish picks (the draft)
python3 scripts/seedance_broll_runner.py --prompts <prompts.json> --run-id <id> --phase videos --no-discord         # paid, Fish's go; --allow-billing only if he says so
# fal route ONLY if Fish lifts the override for this batch: python3 scripts/seedance_img2vid.py --image <still.png> --prompt "<playbook formula>" --duration 5 --resolution 720p --output <clip.mp4>
python3 scripts/vo_broll_runner.py --pack output/vo-broll/<batch>/<slug>-A.json --no-stitch   # VO + scene build; read pace + gaps
python3 scripts/vo_broll_runner.py --pack output/vo-broll/<batch>/<slug>-A.json             # stitch + master mix
python3 scripts/gemini_qa.py --asset <final.mp4> --type final --style "photoreal b-roll"      # report the score, never adjudicate
python3 scripts/meta_preflight.py <final.mp4>                                                 # before any upload

10. Gates & QA checklist (on top of core §4 and the handoff's final QA)

11. Variants & test plan

Cell The one variable Status
Default 3 hooks × 1 shared hold/CTA, W1 faceless build first
Frame warehouse proof slot vs the parent static's proof (same callout, same mechanism) first read: does the pile add anything?
Narrator W1 faceless vs W3 on-camera packer ugc-omni G0-G4; answers the borrowed-person question for video
Style W1 photoreal vs W2 animated after the default reads
Scarcity true restock/waitlist line on vs off only when a real stock event exists
Voice narrator-expressive vs narrator-mom cheap; same footage
- Hooks (ILLUSTRATIVE, not shipping): (a) symptom + pile "Ten thousand moms stopped knocking twice."; (b) burden callout "Still his alarm at six forty?"; (c) mechanism demo over the silent bench buzz "This buzz wakes him. Nobody else." (product at 0 s: needs Fish's 8-15 waiver). Hooks (a)/(b) run over her-morning footage by default.
- Grounding step (run when Fish sends the real #11 link): python3 scripts/ad_dissector.py "<foreplay share URL>" --slug warehouse-ref --brand-context "DawnBands silent vibrating wake-up wristband" (add --competitor if it's a lane-leader) → read output/ad-dissect/<slug>/dissect.md → update references/beat-sheet.md timings + shot mix from the measured pacing, rewrite references/sources.md, flip evidence status to "grounded on ", log it in memory/learnings.jsonl.
- Launch per core §6: own ad set in Testing CBO, video floor per media-buyer rules, read day 3, verdict day 7 vs the parent CPA; never pause, reduce; record project_launch_<date>_<slug>.md.
- Feed copy check (starpop how-to-preview-a-facebook-ad-before-publishing): the hooks also run in Feed: read only the primary text visible before 'See more' (the symptom must be there), and make the headline add proof (10,000+ parents, 60 nights) instead of repeating the hook.
- 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 is all warehouse, no her (character-less VO) split rule ≤50 / ≥40; bridge + benefit are her morning
Hook is a mystery ("we sold out again") name her symptom in lines 1-2
Scarcity line contradicts the live store stock check in the pack; demand lines only
VO says "our warehouse" over AI/stock footage-truth tags; rewrite non-deictic or use real footage
Box or white box appears (library clip c2b-box-open-palm is a white box) pouch only; exclude that clip; composite the pouch PNG
Garbled pouch text / fake shipping labels pouch legible only from real/composite; labels blank or turned away
Smartwatch drift, grey lining, glow playbook fidelity block: diagonal ribbing, solid black inside and out, no module, no glow
Bench buzz doesn't read "shivers in place against the wood, rattling" + silent room; don't amp "vibration" words
Hands morph / fused fingers on the pouch or band tier A → real footage; band shots may use ugc-omni's product gate (pick --product); never Seedance 2.5 product shots (rejected 10-06)
Faces sneak into packing shots "hands only, no face in frame" + crop; reject the clip
Runner reuses old VO after a script edit --force-vo on changed scenes; rebuild shared scenes once, copy to all variants
Hold differs across A/B/C build shared scenes once; hash-check scene inputs (handoff)
Gemini scores real footage 4/10 report it; eyes decide (handoff law 6)

13. Sources

~/research/davidaistar/REPORT.md (#10/#11 duplicate), foreplay/links.txt, foreplay/10_character_arguments.gemini.md, foreplay/05_founder.gemini.md, analysis/diff_ai_ugc.md, analysis/diff_cloning.md; output/dawn-combo-map-2026-10-05/MAP.md + aggregate.txt; knowledge/brands/dawnbands/{product-truth,claims-register,proof-bank}.md; skills/vo-broll/SKILL.md, skills/vo-broll/references/production-handoff.md; scripts/vo_broll_runner.py, scripts/ad_dissector.py, scripts/seedance_img2vid.py, scripts/seedance_broll_runner.py, scripts/clip_library.py, scripts/cartoon_h3/canvas.py; memory reference_dawnbands_packaging.md, project_dawnbands_broll_seedance_playbook.md, feedback_guarantee_positioning.md, project_vo_broll_lane.md, feedback_ai_avatar_broll_lane.md, reference_dawn_main_pdps.md. Details in references/sources.md.

NOT BUILT (needs Fish's go): a grounded reference ad (link pending); real Dawn packing footage (none in clip-library); hook headline overlay + end card (optional, --end-card; off by default per Fish 10-06) in vo_broll_runner.py (the 9-15 per-batch renderers aren't in output/ any more); a shared hold/CTA module in the runner; a 9:16 still CLI on fal; per-tier model routing (core §2b); an automated stock-truth guard (manual curl today).

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.