Video architecture — modular, layered, versioned

How every video should be built so components are easy to work on in isolation. Top = closest to the screen; each layer only depends on the ones below it.

✓ already in place   ○ the gap to close

L6
Render pipeline
render → grade → mux → versioned outputs. Resumable, judged.
LOOP/ harnessgrade.sh / mux.shmanifest + scoresone render CLI
L5
Audio (separate tracks)
VO · music · SFX as independent layers → one mix. Swap any without touching picture.
de-essed VOmusic bed (mix_v4)SFX librarytrack-based mixer
L4
Composition
assembles beats in order + transitions. Thin — just wiring.
FadingSequenceOrbBridge match-cutsplit out of the 1900-line FullFilm.tsx
L3
Treatments / variants
swappable looks via props — never forks. The "modular code" you asked for.
treatment A/B/CuiMode real/stylized--props render-time
L2
Beats (L01–L16)
each beat a self-contained module: takes a line + treatment, renders itself. Work on one without breaking others.
16 beat components1 file per beatdocumented prop interface
L1
Design system (primitives)
reusable building blocks. Change the orb once → it changes everywhere.
tokens (palette/type)Orb3DCaptionChatPanelCard / InkPanelBrandMark / Logoprimitives/ folder + index
L0
Content (source of truth)
the script, VO, caption word-timings, beat durations. Edit the story here, the film follows.
founderLines.tsv10CaptionWords.tsVO + assets

Versioning (cross-cutting)

  • git — every change committed atomically ✓
  • LOOP/ run versioning + rollback tags ✓
  • decision + review pages per change ✓
  • ○ one VERSIONS.md mapping cut → commit

The gap to close (○)

  • split FullFilm.tsx (1900 lines) → 1 file per beat + a thin composition
  • a primitives/ library with an index
  • ARCHITECTURE.md documenting these 7 layers
  • a single render CLI (no ad-hoc scripts)