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.
This commit is contained in:
calesthio
2026-04-18 18:37:00 -07:00
parent 9e17263aa5
commit b4f7ec4eee
118 changed files with 10128 additions and 126 deletions
+3
View File
@@ -230,6 +230,7 @@ stages:
- video_stitch
tools_available:
- video_compose
- hyperframes_compose
- video_stitch
- audio_mixer
checkpoint_required: true
@@ -238,6 +239,8 @@ stages:
- Output video exists and is playable
- "Duration within +/-5% of target"
- Audio is clear with proper narration/music balance
- "render_runtime in edit_decisions matches proposal_packet — silent swap to another runtime is a CRITICAL governance violation"
- "If render_runtime='hyperframes': `hyperframes lint` and `hyperframes validate` must pass before render"
success_criteria:
- Schema-valid render_report with output paths
- Output file exists and passes ffprobe validation
+4
View File
@@ -98,6 +98,7 @@ stages:
- Free/local tool options are highlighted where applicable
- "Audio architecture decided: single narrator / character dialogue / narrator+characters"
- "Provider choice presented as comparison table with costs — agent recommends but user decides"
- "render_runtime chosen explicitly — remotion for React scene stack, hyperframes for HTML/GSAP motion graphics, ffmpeg for simple concat. See skills/core/hyperframes.md and skills/meta/animation-runtime-selector.md for the decision matrix. Record in decision_log with category render_runtime_selection."
success_criteria:
- Schema-valid proposal_packet with at least 3 concept_options
- selected_concept includes animation_mode and reuse_strategy
@@ -243,6 +244,7 @@ stages:
- video_stitch
tools_available:
- video_compose
- hyperframes_compose
- audio_mixer
- video_stitch
checkpoint_required: true
@@ -252,6 +254,8 @@ stages:
- Motion timing survives the final render
- Audio sync matches the animatic intent
- Duration within +/-5% of target
- "render_runtime in edit_decisions matches render_runtime locked in proposal_packet — any swap requires a render_runtime_selection decision in decision_log"
- "HyperFrames renders MUST pass `hyperframes lint` and `hyperframes validate` before the render step — never skip validation"
- "Post-render self-review MANDATORY: extract keyframes, visually inspect each scene, flag weak frames before presenting to user"
success_criteria:
- Schema-valid render_report artifact
+3
View File
@@ -233,6 +233,7 @@ stages:
- audio_enhance
tools_available:
- video_compose
- hyperframes_compose
- audio_mixer
- video_stitch
- video_trimmer
@@ -245,6 +246,8 @@ stages:
- Motion-required delivery was preserved without silent fallback
- Audio dynamics are controlled and intelligible
- Letterbox or frame treatment improves rather than harms the output
- "render_runtime in edit_decisions matches proposal_packet — silent swap is a CRITICAL governance violation"
- "Cinematic work typically picks render_runtime='remotion' (CinematicRenderer) for video-led pieces; render_runtime='hyperframes' for kinetic title cards and HTML/GSAP-driven trailers"
success_criteria:
- Schema-valid render_report artifact
- Output file exists and passes ffprobe validation
+1
View File
@@ -166,6 +166,7 @@ stages:
- Resolution matches target_platform canvas
- Uniform LUT applied across the timeline
- Music is mixed in (MANDATORY — silent output only with explicit user opt-out recorded in brief)
- "render_runtime locked at proposal MUST stay 'remotion' on this pipeline until HyperFrames end-tag parity lands — the overlay/concat end-tag stack depends on Remotion CinematicRenderer components. Silent swap to hyperframes or ffmpeg is a CRITICAL governance violation."
- "End-tag rendered via Remotion (MANDATORY — absence only with explicit opt-out). Default mode: overlay (ProRes 4444 with alpha composited on final scenes). Fallback: concat (opaque card appended after body)."
- "Overlay mode: extract a frame from the overlay region and verify text is visible over footage, not over black. Concat mode: last frame must be the end-tag card."
- No silent fallback from a motion-led promise
+3
View File
@@ -187,6 +187,7 @@ stages:
- audio_enhance
tools_available:
- video_compose
- hyperframes_compose
- audio_mixer
- video_stitch
- video_trimmer
@@ -198,6 +199,8 @@ stages:
- Source and support layers remain balanced
- Aspect-ratio variants preserve readability
- Audio stays coherent across footage and generated elements
- "render_runtime in edit_decisions matches proposal_packet — silent swap is a CRITICAL governance violation"
- "Hybrid typically uses render_runtime='remotion' so source footage and React support overlays compose in one pass; pick 'hyperframes' only when support layers are HTML/GSAP-native"
success_criteria:
- Schema-valid render_report artifact
- Output file exists and passes ffprobe validation
+3
View File
@@ -209,6 +209,7 @@ stages:
- audio_enhance
tools_available:
- video_compose
- hyperframes_compose
- audio_mixer
- video_trimmer
- audio_enhance
@@ -218,6 +219,8 @@ stages:
- Output video is playable and crisp at target resolution
- UI text remains readable after crops and scaling
- Audio is clear with no keyboard/click noise
- "render_runtime in edit_decisions matches proposal_packet — silent swap is a CRITICAL governance violation"
- "For synthetic UI/terminal demos, render_runtime='remotion' (TerminalScene) is preferred; render_runtime='hyperframes' is valid for custom HTML UIs — in that case, lint+validate must pass before render"
success_criteria:
- Schema-valid render_report artifact
- Output file exists and passes ffprobe validation