ASMR contrast — beat sheet, sound cue sheet, line rules
Runtime target 20-25 s (short cell 10-12 s). 5-8 VO lines at ≥3.4 wps ≈ 45-75 spoken words. Percentages are of runtime; beats are pack-line ranges, never mid-sentence. Two H3 batches (≤15 s, ≤4 panels; the reveal batch ≤3 panels).
| # | Beat | % | Lines | Picture | Sound | Line rules |
|---|---|---|---|---|---|---|
| 1 | Din + symptom | 0-10 | 1 | Wide: teen asleep on top of the duvet, phone glowing face-down, bell clock ringing; header on screen | Din starts at 0.0 s, full: phone alarm + bell clock + smoke-alarm chirp; knock enters by 1.5 s | Header (title:) names HER symptom, ≥2 s. Line 1 ≤10 words, callout to her ("You", "your") in action, no backstory, no product |
| 2 | The house wakes | 10-35 | 2-3 | 2-4 inserts ≥1.2 s each: phone skittering on the desk, the clock's hammer, the smoke detector's red light, the closed door (knock); sister in the hall with hands over ears; dog's head up; Mom in the hall with coffee | Din continues; each insert's own source rises a touch on its cut; VO stays on top | Concrete counts from VOC ("five alarms", "fifty trips"); failed solutions generic, never brand names, never bed shakers |
| 3 | The drop | 35-42 | 4 | Same wide as beat 1, everything still, dawn light | Din cut on the frame; room tone only | ≤6 words, root cause in Fish's ruled wording ("Sound doesn't reach a deep-sleeping brain.") or no line at all |
| 4 | The buzz | 42-65 | 5 | **narrator (product reveal)**: macro on the band (wrist flat on the sheet, side-on, display dark) → motion lines + sheet ripple → his eyes open; sister/Mom out of frame or unmoved |
ONE soft brrr (silicone on skin/sheet), 0.6-1.2 s, alone in the quiet; it repeats once slightly stronger if the line allows (the ramp) | Mechanism verbatim: "Touch gets through." / "Silent to everyone else." / "It keeps going until he turns it off." Product named once here |
| 5 | Up on his own | 65-85 | 6-7 | He sits up, arms down, feet on the floor; Mom down the hall sipping coffee, undisturbed | Room tone; a mug set down; morning birds at ambience level | Payoff on her: independence + her quiet. No vindication scene (that's recipe A) |
| 6 | CTA | 85-100 | 8 | **cta**: band on the nightstand by daylight or the end card (optional, --end-card; off by default per Fish 10-06) |
End-card swoosh (endcard.py) | Name + "60 nights" or the guarantee line; end card carries the offer |
Sound cue sheet (goes in the pack as ## Sound cue sheet)
Start times come from output/cartoon-h3/<slug>/lines.json (each line's start/end) after the VO stage; the end card (optional, --end-card; off by default per Fish 10-06) doesn't shift the timeline. Levels follow Fish's 8-10 doctrine (VO dominant).
| line | sound | file | start | length | level |
|---|---|---|---|---|---|
| 1 | phone alarm (rattling on wood, muffled) | <sfx dir>/phone-alarm.mp3 |
0.00 | to line 4 start | 0.12 |
| 1 | bell clock | <sfx dir>/bell-clock.mp3 |
0.15 | to line 4 start | 0.11 |
| 1 | smoke-alarm chirp | <sfx dir>/smoke-chirp.mp3 |
0.60 | to line 4 start | 0.10 |
| 1-2 | knock through the door | <sfx dir>/knock.mp3 |
1.40 | 1.5 s, twice | 0.12 |
| 4-5 | room tone | the assemble bed (bedroom-night-ambience) | — | — | bed |
| 5 | silicone brrr (×2, second stronger) | <sfx dir>/band-brrr.mp3 |
line 5 start + 0.2 | 0.8 s each | 0.14 → 0.18 |
| 7 | mug set down | audio-library/sfx/tactile/gentle-tap.mp3 (stand-in) |
line 7 start | 0.5 s | 0.08 |
Files marked <sfx dir> don't exist yet (SKILL §8). Every row's file must exist before the storyboard is approved. |
The overlay (BUILT 10-06: assemble reads this cue sheet; the manual block below is the fallback)
H3_SFX_PLAN=output/concept-packs/<slug>.md python3 -m scripts.cartoon_h3.run … --stage assemble mixes the table above over the master (same filter pattern, one limiter, length kept); python3 -m scripts.cartoon_h3.sfx --plan <pack.md> --run-dir output/cartoon-h3/<slug> --check lists resolved cue times and every missing file first. Manual fallback:
Run after assemble on the end-card master. atrim + afade end each din source exactly at the drop (D = line 4 start, in seconds), adelay places it in ms, and amix … normalize=0 keeps every level as written (same filter pattern as scripts/finish_video.py).
R=output/cartoon-h3/$S; D=<line-4 start>; B=<line-5 start + 0.2>
ffmpeg -y -i $R/$S-final-endcard.mp4 -i <phone-alarm> -i <bell-clock> -i <smoke-chirp> -i <knock> -i <band-brrr> -filter_complex \
"[1:a]atrim=0:$D,afade=t=out:st=$(echo "$D-0.08"|bc):d=0.08,volume=0.12[a1];\
[2:a]atrim=0:$(echo "$D-0.15"|bc),afade=t=out:st=$(echo "$D-0.23"|bc):d=0.08,volume=0.11,adelay=150|150[a2];\
[3:a]atrim=0:$(echo "$D-0.60"|bc),volume=0.10,adelay=600|600[a3];\
[4:a]volume=0.12,adelay=1400|1400[a4];\
[5:a]volume=0.16,adelay=$(echo "$B*1000/1"|bc)|$(echo "$B*1000/1"|bc)[a5];\
[0:a][a1][a2][a3][a4][a5]amix=inputs=6:duration=first:normalize=0[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -b:a 192k $R/$S-final-sfx.mp4
ffmpeg -i $R/$S-final-sfx.mp4 -af loudnorm=I=-14:TP=-1:print_format=summary -f null - 2>&1 | tail -12 # read Input Integrated / True Peak
- If a source file is shorter than its span, loop it first (
-stream_loop -1before that-i). - If integrated loudness lands above about -12 LUFS or true peak above -1 dB, lower the din volumes (not the VO) and re-run. Never loudnorm the whole mix again: that lifts the room tone and kills the drop.
- Watch AND listen on a phone at mid volume before calling it done.
Line rules (all beats)
- 5-8 lines total, 4-10 words each, one sentence per line. Said-out-loud test; brand voice to her ("you") unless the cell is the mom-first-person variant.
- The din never hides a word: VO dominant (doctrine), so a line that can't be heard over it gets cut or moved after the drop.
- Numbers spelled for EL ("six ten"); vo_check spells out the rest.
- Exactly one mechanism beat and one product name. No smartwatch words (screen, tap, app). Three alarms and no app are the only feature facts allowed in 25 s.
Structure example (ILLUSTRATIVE: shows the shape only, not shipping copy; real lines come from VOC and Fish's approval)
Header: "Every alarm in the house goes off.|You're the only one up."
1. "Five alarms, and you're the one awake." (din, wide on the sleeping teen)
2. "The dog's up. His sister's up." (inserts: dog's head, Lily covering her ears in the hall)
3. "He hasn't moved." (the door, the knock, the teen still asleep)
4. "Sound doesn't reach a deep-sleeping brain." (the drop: silence, same wide)
5. "Touch does. Silent to everyone else." (product reveal: macro band, brrr, eyes open)
6. "It keeps going until he turns it off." (he sits up)
7. "And you get to finish your coffee." (Mom in the hall, undisturbed)
8. "Dawn Band. Sixty nights to try it." (cta / end card (optional, --end-card; off by default per Fish 10-06))