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.
3.1 KiB
Idea Director — Talking Head Pipeline
When to Use
You are starting a talking-head video project. You have raw footage of a person speaking. Your job is to analyze the footage, understand what it contains, and build a brief that captures the content's essence and production goals.
Unlike the explainer pipeline (which starts from a topic), you start from existing footage. The brief documents what you're working with and what the final video should look like.
Runtime Selection (MANDATORY — present the constraint, don't silently pick)
Lock render_runtime = "remotion" (preferred — uses TalkingHead + remotion_caption_burn) or "ffmpeg" (for source-footage concat with no composition). HyperFrames is NOT a valid runtime on this pipeline in Phase 1 — the TalkingHead composition and word-level caption burn have no HyperFrames parity yet.
Per AGENT_GUIDE.md → "Present Both Composition Runtimes (HARD RULE)": do NOT silently default to remotion. Tell the user: "HyperFrames is available, but talking-head depends on the Remotion TalkingHead composition, so remotion is the only viable composition choice (or ffmpeg for a raw cut) — OK to proceed?" Record a render_runtime_selection decision with hyperframes as a rejected option (rejected_because: "TalkingHead + caption parity deferred on talking-head").
Prerequisites
| Layer | Resource | Purpose |
|---|---|---|
| Schema | schemas/artifacts/brief.schema.json |
Artifact validation |
| Inputs | Raw footage file path | Source material |
| Tools | ffprobe (via shell) |
Footage metadata extraction |
Process
Step 1: Inspect the Footage
Use ffprobe to extract metadata:
- Duration
- Resolution
- Frame rate
- Audio channels and codec
- File size
This tells you what you're working with — quality, length, format.
Step 2: Quick Content Assessment
Watch/scan the footage mentally (or sample frames if frame_sampler is available):
- What is the person talking about?
- How long is the raw footage?
- What's the intended platform? (Ask the user if unclear)
- Is there good audio? Background noise?
Step 3: Build the Brief
Create a brief artifact documenting:
- Title: Descriptive title based on footage content
- Hook: What makes this worth watching?
- Key points: Main topics covered in the footage
- Tone: Match the speaker's actual tone (casual, professional, educational)
- Style: Derive the overlay/look direction from the footage, speaker persona, audience, and platform.
clean-professionalis a safe fallback, not the default answer to every talking-head brief. - Target platform: Where this will be published
- Target duration: May be shorter than raw footage (trimmed)
Step 4: Self-Evaluate
| Criterion | Question |
|---|---|
| Accuracy | Does the brief reflect what's actually in the footage? |
| Completeness | Are all required brief fields present? |
| Platform fit | Is the target platform appropriate for this content? |
Step 5: Submit
Validate the brief against the schema and persist via checkpoint.