Podcast — beat sheet, banter rules, cut list
Runtime target is 25-60 s, which is about 90-200 spoken words including turn gaps. Baseline is 45 s / ~150 words. Percentages are of runtime. Beats are ranges of pack lines and never split a sentence.
| # | Beat | % | Lines (45 s) | Speakers | Job | Line rules |
|---|---|---|---|---|---|---|
| 1 | Cold open | 0-10 | 1-3 | MOM → HOST | Drop the viewer mid-conversation on her stake | Line 1 ≤10 words and names her situation by an observable symptom (awareness gate). The stake comes from the stake bank or VOC. HOST reacts within 2 s. No backstory, no product. |
| 2 | The mornings | 10-30 | 4-10 | MOM, HOST interjects | Prove she IS the alarm | Concrete counts and times from VOC (knocks, alarms, minutes). Failed solutions stay generic (louder alarm, phone across the room, lights on): never brand names, never bed shakers. HOST interjects at least twice ("Every morning?", "How many alarms?"). |
| 3 | The blame | 30-45 | 11-15 | MOM ↔ HOST | Raise the stake; it costs her | Who blamed her (husband, ex, school, MIL) and what it cost her (letter, mediation, a fight in front of the kid). HOST raises it one step, and the step is a question, not a lecture. |
| 4 | Root cause | 45-60 | 16-19 | MOM (quoting the explainer) + HOST | Why he doesn't wake | The credible person sits INSIDE her story (nurse, pediatrician, OT) and MOM quotes them. Fish's ruled root-cause line goes in verbatim. At most 2 lines. HOST voices the objection ("But he has five alarms."). |
| 5 | The answer | 60-78 | 20-24 | MOM or HOST | Mechanism + product | Touch gets through; silent to everyone else; keeps getting stronger until he turns it off (ruled line). Product named ONCE. On screen: the band cutaway (product-gated omni b-roll, real footage, or the cutout graphic). |
| 6 | Vindication | 78-93 | 25-27 | MOM → HOST | Payoff on HER | The accuser concedes, or the kid gets himself up, quoted by MOM. HOST gets a one-line reaction. MOM gets the last word. |
| 7 | CTA | 93-100 | 28 | HOST or MOM | Offer | One line: product name + 60-night guarantee. End card (optional, --end-card; off by default per Fish 10-06) 3 s. |
Banter rules (the script is most of the realism)
- Short alternating turns. Most turns are 3-8 words; none is over 12. One sentence per pack line.
- No monologues. No speaker runs more than 2 lines in a row. HOST speaks at least every ~6 s, even if it's only "No." or "Wait."
- Reactions are lines. Tag 1-3 word reactions as their own pack lines ("Stop.", "Every day?", "Oh no."), so they get their own cut.
- Interruptions. Write the cut-in as the next speaker's line, and end the cut-off line on an unfinished clause ("And then his dad says—"). In B, the overlap can be faked after assembly by J-cutting the next speaker's audio 0.15-0.3 s early. Never ask one generation to talk over another.
- Questions carry the viewer. HOST's questions are the ones a problem-aware mom has, and at least one is an objection the band answers.
- Said-out-loud test on every line. Pronoun-first for MOM. Allow at most one filler ("honestly", "like") per 30 s, and only if it's in the VOC. Spell numbers as spoken ("six thirty").
- HOST is never a salesperson. She doesn't pitch, she asks. If she knows the product, she found it the same way (her own kid). No "I'm not sponsored" style lines.
- A line that only works as a close-up of the speaker gets re-staged in A (listener or cutaway) or kept in B.
B: one ugc-omni line per turn (photoreal)
- Every pack line = one
lines[]entry = one Omni take on its speaker's frame (frame: "avatar"= MOM,frame: "host"= HOST).lines[]order IS the cut order:omni.py assembleconcatenates the trimmed takes, so the intercut builds itself. - Short reactions ("Stop.", "To you?") are their own lines. Omni's 4 s minimum is padded with throwaway words and
verifytrims at the last real word, so a 1-word reaction costs $0.315 and plays at its real length. - A turn longer than ~4 s gets a b-roll line (story cutaway,
visual: "broll:<id>") on top; the speaker's audio runs underneath. A product line is alwaysvisual: "broll:band"(product-gated omni b-roll, or real footage). - Every hook line sets
end_frameto its own frame (flash otherwise lands it on the body's first frame, which may be the other woman). - J-cut overlaps (next speaker 0.15-0.3 s early) are not in
assemble; add them on the final cut with ffmpeg only if Fish wants them after G4. - Split-screen (optional): the RemotionPodcastTwoShotstackedlayout on the per-linearoll/<id>.trim.mp4takes (python3 scripts/remotion_stitch.py comp PodcastTwoShot <props.json> <out>).
Structure example (ILLUSTRATIVE: shows the shape only, not shipping copy; real lines come from the stake bank, VOC and Fish's approval)
- [MOM] "The school mailed the truancy letter to me." (cold open, stake on her)
- [HOST] "To you? He's the one asleep."
- [MOM] "Fifteen tardies. My name on the envelope."
- [HOST] "How many alarms does he have?"
- [MOM] "Four. They wake his sister. Not him." …
- [MOM] "Our nurse said his brain tunes the sound out." (root cause, quoted from inside her story; real copy uses Fish's ruled line verbatim)
- [HOST] "So louder doesn't fix it." …
- [MOM] "It buzzes his wrist. Nobody else hears it." (answer;
broll:bandcutaway: band on his wrist on the pillow, display off, gated) … - [MOM] "His dad did one week of mornings. Then he apologized." (vindication)
- [HOST] "Okay, I'm ordering one tonight."