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.6 KiB

Compose Director - Avatar Spokesperson Pipeline

When To Use

Render the final spokesperson outputs. The bar is simple: the presenter must look stable, speech must be clear, and subtitles or support cards must not crowd the frame.

Runtime Routing (HARD CONSTRAINT — Remotion only)

Phase 1 deferred from HyperFrames. edit_decisions.render_runtime must be "remotion". This pipeline depends on the Remotion TalkingHead composition and remotion_caption_burn — both have no HyperFrames parity in Phase 1.

  • If edit_decisions.render_runtime == "hyperframes", stop. Re-open the idea stage and surface the constraint. Silent rewrite is a governance violation.
  • Per AGENT_GUIDE.md → "Present Both Composition Runtimes (HARD RULE)": the lock to remotion is NOT an excuse to skip the conversation. The user deserves to know that HyperFrames exists as a runtime and why it isn't viable for avatar-spokesperson. Log a render_runtime_selection decision with hyperframes rejected_because: "TalkingHead + caption parity deferred on avatar-spokesperson".
  • Pass proposal_packet/brief to video_compose.execute() for in-tool 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"] What to render
Tools video_compose, audio_mixer, video_stitch, audio_enhance Render and audio finishing
Playbook Active style playbook Typography and layout rules

Process

1. Render The Hero Cut First

Prefer one strong master before derivatives. Compose:

  • presenter video,
  • subtitles,
  • lower-thirds,
  • CTA cards,
  • mixed narration.

2. Keep The Frame Clean

Subtitle and CTA placement matter more here than flashy transitions. Leave the face and mouth region unobstructed.

3. Verify Mouth Timing And Audio

If the avatar path used lip sync or audio-driven talking head, check:

  • mouth timing,
  • face artifacts,
  • drift on long sections,
  • audio clarity.

4. Verify Every Output

Record important findings in:

  • render_report.verification_notes
  • render_report.warnings
  • render_report.metadata.variant_notes

5. Quality Gate

  • the output file is valid,
  • speech is clear,
  • subtitles stay readable,
  • the presenter remains visually stable.

Common Pitfalls

  • Letting subtitles cover the chin or mouth area.
  • Shipping a long lip-sync render without spot-checking drift.
  • Making derivative crops that cut off the presenter or CTA.