Files
splatter-tennis/tools/trailer/SCRIPT.md
T
wuwiandClaude Opus 5.5 806a739c6f Add MEMBERSHIP, the club's own 1980s VHS advert
cut.py --cut ad: a plummy announcer (one gpt-audio read per line, ad.sh)
sells St. Mordred's over the creepiest takes with yellow 80s supers, a
PLAY/STOP VCR read-out, two testimonials from the real lines and the small
print read at speed, until the game's umpire says "Quiet." and the jingle
dies. A VHS grade (chroma smear, scanlines, tape wobble) is the cut's own.
gen.py learns a voice command; one new silent Doris take.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 11:46:31 +02:00

7.2 KiB
Raw Blame History

LIFETIME MEMBERS — the Splatter Tennis trailer

Vertical 9:16, English, live-action mockumentary ("What We Do in the Shadows" meets a BBC sports documentary). Lightly funny, properly eerie. The dead of ST. MORDRED'S LAWN TENNIS CLUB (est. 1877) are interviewed about how it all started — and every one of them tells a DIFFERENT origin story. The costumes are the game's bosses (Groundskeeper, Line Judge, Chair Umpire, Strawberry Seller, The Champion), so the film introduces the cast before anyone has played a point.

Pipeline: stills gen.py still (gemini-3-pro-image) -> clips gen.py clip (Veo 3.1, native dialogue + ambience) -> score gen.py music (Lyria 3) -> frame graphics in HTML/CSS (frame.html, rendered by headless Chrome) -> cut.py assembles with ffmpeg.

The cast

Who Look (= the game's boss sprite) Origin story
REGINALD MOSS, Head Groundskeeper, 1962 – hulking, bottle-green club blazer with crest, olive work trousers the fertiliser, FORMULA 7
DORIS PENNY, Strawberries & Cream, 1971 – white paper soda-jerk cap, stained apron, tray of strawberries, cream jugs "it wasn't the cream"
CLIVE BARROW, Line Judge, 1974 – huge man, navy/white striped polo, navy cap, dark glasses he never removes the bylaws: lifetime membership
AMBROSE PIKE, Chair Umpire, 1908 – gaunt, cream linen blazer, panama hat, navy tie, gooseneck mic 1911, fifth set, no tie-break
THE CHAMPION bandaged skull, white polo with gold trim, tarnished trophy never speaks

Shot list

COLD OPEN

  1. GATES — dawn fog, wrought-iron gates, sign ST. MORDRED'S LAWN TENNIS CLUB · EST. 1877. Slow push in. Crows. Somewhere in the fog: pok… pok… a rally. Nobody is playing.
  2. COURT — immaculate stripes in fog, a sprinkler ticking. Far baseline: a figure standing perfectly still.
  3. HONOURS BOARD — gilt names, 1877, 1878 … the last line: 1911 — MATCH IN PROGRESS. CARD "Every old club has its traditions." / "Some of them refuse to die." → TITLE "LIFETIME MEMBERS"

THE INTERVIEWS — card: "HOW DID IT START?" 4. REG (potting shed): "Fertiliser. Formula Seven. Lovely green… very persistent." 5. B — a rusty FORMULA 7 tin on dark soil; the grass around it slowly leans toward camera. 6. DORIS (strawberry kiosk): "People say it was the cream. It wasn't the cream. The cream was just… old." 7. B — a cream jug on a doily; the surface of the cream ripples by itself. 8. CLIVE (umpires' room): "It's in the bylaws. Lifetime membership. Nobody ever defined 'lifetime'." 9. B — a leather-bound rule book, a finger traces: MEMBERSHIP SHALL BE FOR LIFE. 10. AMBROSE (high in his chair, fog): "Nineteen-eleven. Fifth set. No tie-break." … "We're still waiting for a result." 11. B — black-and-white archive: two gentlemen in long whites at dusk, scoreboard 112 – 112.

THE TURN — card: "AND THE CHALLENGERS?" (the camera IS the challenger: every stare is at you) 12. DORIS, into the lens: "They never stay long." 13. CLIVE pulls his sunglasses down: milky-white dead eyes. Silent. 14. AMBROSE at the mic: "Quiet, please." — and the score obeys: it stops dead on "please". 15. THE STANDS, in silence: every head bows, then rises to stare into the lens. 16. AMBROSE, now at night under floodlights: "Play." 17. CUT TO BLACK: SPLAT. LOGO — SPLATTER TENNIS. "MATCH IN PROGRESS" (the honours board's 1911 line).

STINGER 18. REG on his knees at dawn, dabbing red off the white baseline with a handkerchief. Looks up: "Lovely day for it." END — logo, "Lifetime membership now open.", the game's own polite applause.

Cut 1 → cut 2 (Oliver, 2026-10-03)

Cut 1 ended on a floodlit match — a living player walks on, the Champion sets down his trophy, a slow-motion serve. Oliver: it "does not really fit … seems odd", conclude earlier on the challengers / "they never stay long" / "Play". Why it was odd: it switched genre from mockumentary to action trailer at the climax, and it was where the generated footage looked most generic. The ending now stays inside the documentary form. The takes (lights, challenger, champion, serve) are still in promo/trailer/clips if a 15-second cutdown ever wants them.

Sound rules that cost a render each

  • Every segment is a whole number of frames, or the audio drifts a sub-frame per cut.
  • Dialogue gain is MEASURED (dlg), never guessed: every line lands at DLG LUFS.
  • Loudness is two-pass loudnorm ... linear=true to -14 LUFS / -1 dBTP. One-pass loudnorm is a compressor and pumped the silence before "Play." back up.
  • No long discrete echoes on an impact: a 0.9 s repeat read as a click on the logo.
  • Encode with -tune grain and a 14 Mb/s cap: the grain made an uncapped crf-16 file 480 MB.
  • QA listening (qa.py, Gemini): trust it on spoken lines and on mix complaints, NOT on its timestamps for music (they drift up to 1.5x) and not on transcripts of non-speech audio (it invents words from footsteps).

Cut 2 → cut 3 (Oliver, 2026-10-05) — 1:45 → 1:30, cut 2 kept as the reference

  • The intro music ran 3 s into Reg's "Fertiliser": it now fades out under "How did it start?".
  • Ambrose lost the end of "...result": cut 2 trusted the QA transcript's 6.6 s; the take's speech envelope says 7.2. Every line end in the EDL is now measured off the take, not the transcript.
  • Tighter everywhere (B-roll 2.2 s, cold open 14 s, shorter cards and logo); the black cards' text is bigger (88/96 px Baskerville, balanced wrapping).

The short (2026-10-05) — 36 s, cut.py --short, beside cut 2 and cut 3

Gates → "How did it start?" → one line per witness, cut inside the takes (Reg: "Fertiliser. Formula Seven." · Doris: "It wasn't the cream. The cream was just… old." · Clive: "Lifetime membership. Nobody ever defined… lifetime." · Ambrose: "1911. Fifth set. No tie-break.") → "And the challengers?" → Doris / Clive's eyes / "Quiet, please." / "Play." → splat → Reg: "Lovely day for it." → end card. No title, no B-roll, no stands. Cut points come from words.py (local Whisper word timestamps) and every cut segment is re-transcribed to prove no word was clipped — Whisper's word ENDS still run early (Clive's "lifetime" ends at 6.0 s, not 5.66), so check the envelope too.

FIFTEEN–LOVE (2026-10-05) — 19 s, cut.py --cut score

No interview audio: the game's own recorded umpire. "Spectators are reminded to remain seated, especially the deceased" over the stands → a ball struck on every cut, a love game called against the viewer, one member's stare per point under a broadcast score bug (ST. MORDRED'S 15/30/40/GAME, YOU 0) → "Game. Set." on Ambrose, "Massacre." on black, splat → "This match is still in progress. I have not been told otherwise." over the logo, applause.

MEMBERSHIP (2026-10-05) — 63 s, cut.py --cut ad

The club recruits you: a 1989 VHS advert. Announcer reads (ad.sh, openai/gpt-audio, one read per line so each sits on its shot; spell the club "Saint Mor-dreds" or it is swallowed), yellow Fraunces supers, PLAY/STOP VCR read-out, two "testimonials" from the real takes, small print read at speed, then the game's umpire: "Quiet." — and the jingle dies. VHS grade: hot colour, chroma smear, scanlines, light tape wobble (more than d=0.012 reads as a doubled voice). doris_silent is the one new take: an advert cannot have a member's lips moving under the announcer.