mirror of
https://github.com/hanzoai/video.git
synced 2026-11-02 12:13:09 +00:00
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.
2.5 KiB
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_selectiondecision with hyperframesrejected_because: "caption + lip-sync parity deferred on localization-dub". - Pass
proposal_packet/brieftovideo_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_notesrender_report.warningsrender_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.