agentleFS
gothicpixiegothicpixie/opendubstage/skills/scene-transitions/SKILL.md

scene-transitions

Skill1 starsChanged 31 days agoApache-2.0View on GitHub

Chapter and scene joins in a documentary or podcast mix: J-cuts (ambience pre-laps), L-cuts (music and live tails), music-to-music seams, live-sound edges, act-boundary breaths, key-line ladders, designed and memory-POV silences, and the ending ladder, applied mechanically to a cue sheet with opendubstage transitions and verified with check_transitions / bridge_gaps. Use when scenes "stop dead", when a cut into live sound is abrupt, when two songs meet, when someone asks for a J-cut, L-cut, sound bridge or crossfade length, when designing how a film ends, or when a boundary has no sound spanning it. Do NOT use for narration cuts inside a passage (dialogue-editing-and-restoration) or for duck envelopes (music-under-narration).

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

Files
SKILL.md

scene-transitions

Nothing stops dead on a boundary. OpenDubStage tool: opendubstage transitions (opendubstage.mix.transitions: transitions, check_transitions, bridge_gaps, Settings, ProbeCache). The pass edits a cue sheet before it is mixed; dialogue cues are never touched; no sync point moves.

1. The rules and their numbers (Settings defaults)

JoinRuleDefaultRangeSource
J-cut (ambience pre-lap)the incoming scene's bed or live room starts before the cut, under the outgoing audio, at −6 dB risingprelap 2.0 s1.5–3 s (3 s when stills carry no sync sound)FilmDaft / Skillman: ~0.5 s inside a scene, ~2 s into a major sequence "creates genuine anticipation"
L-cut (tail)outgoing music, ambience and live sound run past the cut under the incoming scenetail 3.0 s, tail_fade 4.5 s (starts before the cut, ends in the next scene); tails < min_tail 1.5 s are not worth adding1.5–4 ssame
Music seamone music cue ends where another begins: equal-power crossfade on barsxfade 3.0 s (min_xfade 2.0)2–4 s; one bar when tempos matchMubert / Audjust; measured in practice
Up-song → different up-songa straight crossfade clashes (tempo, key): outgoing fades, a short ambience gap, incoming fades ingap 0.75 s, gap_fade 2.5 s, gap_fade_in 1.5 sgap 0.5–1 smeasured in practice (a model reviewer flagged every mid-bar song-to-song cut)
Live-sound edgeslive chapters get fades of at leastlive_edge_fade 2.0 s; 3 s of source roll before and after a live chapter1.5–3 s, over the bed, never over nothingThom ("useful pauses"); measured in practice
Speech → live soundthe live cue's own room runs 3 s under the preceding narration (J-cut), starting −10 dB and rising; the live cue itself pre-rolls 3 smeasured in practice ("abrupt cut into raw kitchen audio")
Minimum fadeno cue ends with a fade shorter thanmin_fade 1.5 s unless a same-stem cue continues straight onopendubstage qc hard_stop
Music adjacencyconsecutive music cues: gap < 0.1 s, or ≥ 3 s, or overlap ≥ 1.5 s; never a gap of 0.1–3 smeasured in practice ("unrendered splice")
Edge windowsan edge within edge_window 0.5 s of a boundary is "at" it; reach 1.5 s on the other side still counts
Dialogue clearanceadded live pre-laps and tails stop dx_clear 0.25 s from dialogue in the neighbouring scene
Sourcesnever extend a cue past its source (src_margin 0.05 s) or outside [0, total]; music and ambience are extended by moving ss and at together so every source sample keeps its film time
Never silence between two anythingsthe pass must emit a bed for every boundary it touchesNPR §3.5

Act boundaries are deliberate breaths: a sound bridge, 5–10 s of ambience or music alone, then the card. Picture follows the sound: dissolves 0.7 s under speech, 1.5–2.5 s between subjects under legato music, hard cuts on downbeats in rhythmic songs.

2. Running the pass

opendubstage transitions CUES.json CHAPTERS.json OUT.json [--probe-cache FILE]

Cue sheet: {"total", "dx": [...], "live": [...], "mx": [...], "amb": [...]} with cues {"src", "ss", "dur", "at", "pre"?, "post"?, "fade"?, "fade_in"?, "fade_out"?, "mode"?: "up"|"under"}. The audible span of a cue is [at − min(pre, ss), at + dur + post]; fades are equal-power when the renderer uses a quarter-sine curve (afade curve=qsin). Chapters: a list of {"t0": ...}; every t0 after the first is a boundary. ProbeCache caches ffprobe durations so sources are never extended past their ends.

Order in a build: cue sheet → transitions → ending ladder → mix. Run check_transitions and bridge_gaps from the audio gate so a regression blocks the build.

3. Key lines, designed silences, memory-POV

  • Key-line ladder: 4–6 s before the line, music fades (6 s) to −20 LU under dialogue or out; textures fade; bed stays. During: bed only; no spots, no music entry. After: 2–3 s bed-only, then the next element on a phrase boundary with a 2 s fade. Sources: Senna (cue removed so the return lands); Burns; Albrechtsen; Apollo 11 (breathing room before the ignition).
  • Designed silence (bed out too): at most two per film, hand-chosen after a full listen, at quiet moments; whitelisted so the dead-air check passes them. The slope into silence matters: too fast jolts, too slow loses tension (Murch).
  • Memory-POV silence (the inverse): once, maybe twice, at the loudest picture: live and music fall away over 1.5 s to nothing or to the narrator's voice alone, hold 4–8 s, return over 3 s on a downbeat (within 60 ms). If it reads as a dropout, remove it. Sources: Deaf President Now! (perfect silence against footage in which alarms drown speech); The Reason I Jump (MPSE 2021).
  • Playback-to-presence framing, opening and ending only: the first 4–6 s of the first narration line rendered as playback (highpass=f=300,lowpass=f=3800, small-room IR wet 0.25, −6 dB) crossfading over 1.5 s into the full chain; the reverse on the last line, ending on the recorder's own stop click if there is one. Never elsewhere; the trick dies on repetition (32 Sounds; Ambies documentary winners present archive as objects that are played).

4. The ending ladder

StepRule
1the last narration line, with its full post-roll air; no music overlapping it
2≥ 3 s of bed only
3bed fades over 2 s
41.5 s of true silence (below −60 dBFS)
5optional: one recorded motif (a sound that was actually there, used 3–4 times ≥ 20 min apart through the film)
6the credits song from ss=0, fade_in=0, played to its real ending
72 s silence, then black

Constraints: nothing starts in the last 1.5 s before the credits; anything still sounding fades before it (music ≤ 4 s, dialogue within its air, ambience/live ≤ 2 s); no spot effect in the last 30 s; the music budget skips the last narrated chapter so its song can swell as the button. Verify: silencedetect=noise=-60dB:d=1.2 finds exactly one silence between the last line and the credits song; the credits cue's fade-out coincides with the song's end; the last non-silent event is the motif or the song's final note. It ends; it does not fade. Sources: Third Coast (Finn and the Bell: the bell as bookend, "listen to the very last second"; Time Bandit: ending music commissioned for editorial reasons).

5. Verify

CheckThresholdTool
every boundary ±3 smomentary loudness never < −46 LUFSebur128 momentary over boundary windows
something crosses the cutat least one non-dialogue stem non-zero on both sides for ≥ 1.5 sbridge_gaps
music adjacencygap < 0.1 s or ≥ 3 s or overlap ≥ 1.5 scheck_transitions
fadesno non-dialogue cue ends with a fade < 1.5 s while still soundingopendubstage qc hard_stop
live edgesfades ≥ 2 s; 3 s roll each side where the source allowscheck_transitions
sourcesno cue extended past its source or outside [0, total]; total unchanged; dialogue cues byte-identical before and after the passcheck_transitions
level jumps across joins> 5 LU between adjacent voices across a voice-to-voice edit is flagged (chapter starts exempt)opendubstage qc jump
endingexactly one silence before the credits song; nothing new in the last 1.5 ssilencedetect
silencesdesigned silences ≤ 2, memory-POV ≤ 2, each whitelistedplan check

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.