Files
calesthio 50891a75b7 hyperframes: add HTML/CSS/GSAP as a parallel composition runtime
Separates creative grammar (renderer_family) from technical engine
(render_runtime) so HyperFrames can stand alongside Remotion as a
first-class runtime instead of masquerading as a Remotion sub-case.
Locks runtime choice at proposal stage and enforces it end-to-end: the
schemas require it, video_compose routes by it, the reviewer fails
closed on silent swaps, and a parametrized contract test walks every
pipeline manifest to ensure each planning-stage skill explains the
conversation to the user. Adds hyperframes_compose (scaffold/lint/
validate/render/doctor/add_block), a playbook -> CSS style bridge, and
vendored HyperFrames Layer 3 skills from commit d291358, pinned via
PROVENANCE.md for future re-sync. Final_review now records
render_runtime_used and runtime_swap_detected so compose lies are
catchable after the fact.
2026-04-18 18:37:00 -07:00

2.5 KiB

Compose Director - Localization Dub Pipeline

When To Use

Render the localized outputs. The quality bar is intelligibility, timing coherence, and clear version labeling across every language package.

Runtime Routing (HARD CONSTRAINT — Remotion or FFmpeg only)

Phase 1 deferred from HyperFrames. edit_decisions.render_runtime must be "remotion" or "ffmpeg". Localization depends on Remotion's caption stack (per-locale subtitle burn) and, when dubbing with lip-sync, on the Remotion TalkingHead pipeline. HyperFrames has no parity for either in Phase 1.

  • If edit_decisions.render_runtime == "hyperframes", stop. Re-open the idea stage and surface the constraint — don't silently rewrite the runtime.
  • Per AGENT_GUIDE.md → "Present Both Composition Runtimes (HARD RULE)": the pipeline's constraint does NOT skip the conversation. Present the constraint to the user so they know HyperFrames exists but isn't viable here. Log a render_runtime_selection decision with hyperframes rejected_because: "caption + lip-sync parity deferred on localization-dub".
  • Pass proposal_packet/brief to video_compose.execute() for end-to-end runtime-swap detection.

Prerequisites

Layer Resource Purpose
Schema schemas/artifacts/render_report.schema.json Artifact validation
Prior artifacts state.artifacts["edit"]["edit_decisions"], state.artifacts["assets"]["asset_manifest"] Locale-specific render instructions
Tools video_compose, audio_mixer, video_trimmer, audio_enhance Final render and audio finishing
Playbook Active style playbook Subtitle placement and output quality

Process

1. Render By Locale

Treat each target language as its own deliverable set. Keep names and output directories explicit.

2. Expect Timing Adjustments

Allow for:

  • subtitle reflow,
  • dub-audio duration drift,
  • longer CTA holds,
  • optional trims or coverage sections.

3. Verify Every Locale

Record important findings in:

  • render_report.verification_notes
  • render_report.warnings
  • render_report.metadata.locale_notes

Check:

  • intelligibility,
  • subtitle fit,
  • obvious sync drift,
  • version labeling.

4. Quality Gate

  • each locale output exists,
  • the dub and subtitle timing are acceptable,
  • labels and filenames are unambiguous,
  • warnings are preserved.

Common Pitfalls

  • Rendering all locales as if they were timing-identical.
  • Forgetting to re-check subtitle line length after translation.
  • Naming outputs in ways that hide the locale or treatment mode.