4.4 KiB
Rail track — standard lower-third subtitle
The default caption track and the workhorse: a clean, readable subtitle that sits in front of everything (never occluded by the matte) in the lower third. It carries most of the transcript. It is deliberately plain — the cinematic craft (planes, occlusion, Vogue-masthead, accumulation) lives in the embed track only (composition-craft.md).
For talking-head / explainer / voiceover, the typical output is the whole transcript on the rail with only the climax(es) promoted to embed. Rail is not a fallback — it's the baseline.
Implementation note. A dedicated rail renderer is the next build step. The rail is a plain
fgcaption track and maps cleanly onto hyperframes' native caption pipeline (media-usecaptions) — prefer reusing that over hand-rolling. Until wired, render the rail as a simpledata-caption-layer="fg"composition (no matte overlay for these caps).
Position & safe area
- Lower third, horizontally centered. Landscape (16:9): baseline ~80–120px above the bottom edge. Portrait (9:16): lower-middle, ~ 600–700px from the bottom (clear of platform UI).
- Title-safe margins: keep text within ~90% width / inside any letterbox-pillarbox bars (see the letterbox probe). Never flush to the frame edge.
- One caption group on screen at a time. No accumulation, no cascade — that's embed-track behaviour.
- It rides above the subject; the matte does not occlude it (rail = in front).
Lines, length, timing
- ≤ 2 lines. Broadcast target ~ 32–42 chars/line; break at a clause/phrase boundary, never mid-word, never leave a dangling 1-word line.
- Word-synced. Each group's window envelops its words (
group.in ≤ first word.start,group.out ≥ last word.end); each group ≥ 0.5s on screen; ~1.5s min gap discipline so it doesn't strobe. Word timings within 80ms of transcript (same gate as everywhere). - Grouping = short readable phrases (see caption-grouping.md) — not the embed track's "phrase = composition" rule; here it's just legible subtitle chunking.
Look (restrained on purpose)
- Size: ~
calc(0.045 * var(--h))(≈48px @1080, ≈58px @1290) — readable, not hero. The rail is a subtitle; it is deliberately much smaller than the embed body/climax. Express as avar(--h)fraction (never hardcode px) so it scales across resolutions. The embed climax is sized to the frame independently (see composition-craft § POP) — never size the climax as a multiple of this rail. - One clean sans (Inter / Helvetica Now / Neue Haas), weight 500–600; white (or near-white).
- Legibility without grading the video: a tight text treatment local to the glyphs only — a soft dark drop-shadow, or a subtle rounded gradient pill / 30–40% scrim sized to the text box (not a full-frame bar, never a frame-wide grade). On luminance > 180 backgrounds, keep the scrim; never rely on bare light text.
- Motion is minimal: 150–250ms fade-up in / fade-down out. No glitch, no scale-pop, no per-word choreography on the rail — that energy is reserved for embed.
The emphasis flag (active-word highlight)
The only intensity the rail carries. When a word is graded emphasis (the 1–2 punch words in a
phrase), give it an inline lift on the rail — accent colour and/or +weight, optionally a
karaoke-style active-word pop (≤1.1× scale) as it's spoken. Keep it inline; it does not
leave the rail. Anything that wants to leave the rail is an embed, not an emphasis.
What the rail never does
- Never goes behind the subject (that's embed).
- Never accumulates into a multi-line poem (that's embed).
- Never crosses the face / uses occlusion as an effect.
- Never grades or textures the underlying video.
- Doesn't drop content to "fit fewer blocks" — split into more groups instead. The only drops
are filler (um/uh, exact stutters, self-corrections); dense conversational
narratorglue ("you know", "sort of") may be trimmed for readability, content/structure words stay.
Hand-off to embed
Rail + embed coexist in one render: the rail runs the whole clip; an embedded peak appears over it at its moment (the rail can briefly clear or dim under the embed if they'd collide). Decide which phrases promote via the role read in SKILL.md § Caption model; author the promoted ones with composition-craft.md.