Files
wehub-resource-sync 85453da49f
regression / regression-shards (style-16-prod style-9-prod style-17-prod iframe-render-compat variables-prod mp4-h265-sdr, shard-4) (push) Has been cancelled
regression / regression-shards (style-4-prod style-11-prod style-2-prod animejs-adapter typegpu-adapter parallel-capture-regression, shard-5) (push) Has been cancelled
regression / regression-shards (style-7-prod style-8-prod style-10-prod css-spinner-render-compat webm-transparency mp4-h264-sdr webm-vp9, shard-3) (push) Has been cancelled
regression / regression-shards (sub-composition-video style-18-prod raf-ball-render-compat font-variant-numeric sub-comp-t0 sub-comp-id-selector, shard-7) (push) Has been cancelled
Windows render verification / Detect changes (push) Has been cancelled
Windows render verification / Preflight (lint + format) (push) Has been cancelled
Windows render verification / Render on windows-latest (push) Has been cancelled
Windows render verification / Tests on windows-latest (push) Has been cancelled
CI / Detect changes (push) Has been cancelled
CI / Build (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Fallow audit (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Typecheck (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Producer: integration tests (push) Has been cancelled
CI / Producer: unit tests (push) Has been cancelled
CI / File size check (push) Has been cancelled
CI / Test: skills (push) Has been cancelled
CI / Skills: manifest in sync (push) Has been cancelled
CI / CLI: npx shim (macos-latest) (push) Has been cancelled
CI / CLI: npx shim (ubuntu-latest) (push) Has been cancelled
CI / CLI: npx shim (windows-latest) (push) Has been cancelled
CI / SDK: unit + contract + smoke (push) Has been cancelled
CI / Test: runtime contract (push) Has been cancelled
CI / Studio: load smoke (push) Has been cancelled
CI / Smoke: global install (push) Has been cancelled
CI / CLI smoke (required) (push) Has been cancelled
CI / Semantic PR title (push) Has been cancelled
Player perf / Detect changes (push) Has been cancelled
Player perf / Preflight (lint + format) (push) Has been cancelled
Player perf / player-perf (push) Has been cancelled
Player perf / Perf: drift (push) Has been cancelled
Player perf / Perf: fps (push) Has been cancelled
Player perf / Perf: parity (push) Has been cancelled
Player perf / Perf: scrub (push) Has been cancelled
Player perf / Perf: load (push) Has been cancelled
preview-regression / Detect changes (push) Has been cancelled
preview-regression / Preflight (lint + format) (push) Has been cancelled
preview-regression / Preview parity (push) Has been cancelled
preview-regression / preview-regression (push) Has been cancelled
regression / regression (push) Has been cancelled
regression / Detect changes (push) Has been cancelled
regression / Preflight (lint + format) (push) Has been cancelled
regression / regression-shards (hdr-regression style-5-prod style-3-prod mov-prores, shard-1) (push) Has been cancelled
regression / regression-shards (overlay-montage-prod style-12-prod chat missing-host-comp-id png-sequence portrait-edge-bleed, shard-6) (push) Has been cancelled
regression / regression-shards (style-13-prod style-6-prod vignelli-stacking gsap-letters-render-compat audio-mux-parity, shard-8) (push) Has been cancelled
regression / regression-shards (style-15-prod hdr-hlg-regression style-1-prod many-cuts vfr-screen-recording render-symlinked-assets, shard-2) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Docs / Validate docs (push) Has been cancelled
Sync skills to ClawHub / Publish changed skills (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:58:35 +08:00

4.4 KiB
Raw Permalink Blame History

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 fg caption track and maps cleanly onto hyperframes' native caption pipeline (media-use captions) — prefer reusing that over hand-rolling. Until wired, render the rail as a simple data-caption-layer="fg" composition (no matte overlay for these caps).

Position & safe area

  • Lower third, horizontally centered. Landscape (16:9): baseline ~80120px above the bottom edge. Portrait (9:16): lower-middle, ~ 600700px 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 ~ 3242 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 a var(--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 500600; 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 / 3040% 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: 150250ms 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 12 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 narrator glue ("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.