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>
103 lines
7.2 KiB
Markdown
103 lines
7.2 KiB
Markdown
# 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.
|