{"id":"c0fe81e1-d99a-47fd-b0ba-244065563703","entityType":"agent","slug":"clawhub-pruna-ai-interactive-explainer","name":"interactive-explainer","canonicalUrl":"https://www.xpersona.co/agent/clawhub-pruna-ai-interactive-explainer","canonicalPath":"/agent/clawhub-pruna-ai-interactive-explainer","generatedAt":"2026-10-10T15:50:52.174Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T12:51:33.990Z","emptyReason":null},"description":"Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll. Skill: interactive-explainer Owner: pruna-ai Summary: Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll. Tags: ai:1.0.14, generative:1.0.14, latest:1.0.14, pruna:1.0.14 Version history: v1.0.14 | 2026-09-29T15:38:11.177Z | auto interactive-explainer 1.0.14 - Removed the obsolete skill-card.md file. - Minor documentation upda","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s173djpkkm1x4yfzg522h5vfp989mrn5:interactive-explainer","sourceUrl":"https://clawhub.ai/pruna-ai/interactive-explainer","homepage":"https://clawhub.ai/pruna-ai/skills/interactive-explainer","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/pruna-ai/interactive-explainer","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/pruna-ai/skills/interactive-explainer","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll. Skill: interact"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:51:33.990Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:51:33.990Z","emptyReason":null},"stars":null,"forks":null,"downloads":1425,"packageName":null,"latestVersion":"1.0.14","tractionLabel":"1.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:51:33.990Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T12:51:33.990Z","lastCrawledAt":"2026-10-10T12:51:33.990Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T12:51:33.990Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.14","createdAt":"2026-09-29T15:38:11.177Z","changelog":"interactive-explainer 1.0.14 - Removed the obsolete skill-card.md file. - Minor documentation update in SKILL.md; metadata version bumped to 1.0.14. - No changes to workflow or user-facing instructions.","fileCount":9,"zipByteSize":20992},{"version":"1.0.13","createdAt":"2026-09-17T14:02:12.628Z","changelog":"Version 1.0.13 - Updated SKILL.md with clarified descriptions for `p-video` and `p-video-2`, specifying use cases and output limitations. - Removed the outdated skill-card.md file. - No changes to workflow, feedback gates, or technical defaults.","fileCount":9,"zipByteSize":21281},{"version":"1.0.12","createdAt":"2026-09-10T14:00:42.442Z","changelog":"- Added support for new generation skills: `p-video-2` (high-quality video), `p-image-ideogram` (controlled photoreal images), and revised their guidance. - Updated core video and image skill selection logic and documentation to clarify when to use `p-video-2` vs `p-video` and `p-image-ideogram` vs `p-image`. - Adjusted default workflow and prerequisites to include new skills and match current best practices. - Removed legacy references (e.g., deleted `skill-card.md`) and refined language for precision and clarity.","fileCount":9,"zipByteSize":21320},{"version":"1.0.11","createdAt":"2026-09-03T14:14:32.377Z","changelog":"- Version updated to 1.0.11. - Removed the file: skill-card.md. - Minor internal adjustments to documentation. - No changes to workflow or user-facing instructions.","fileCount":9,"zipByteSize":20896},{"version":"1.0.10","createdAt":"2026-08-28T08:00:19.782Z","changelog":"interactive-explainer 1.0.10 - Updated SKILL.md version to 1.0.10, reflecting new release. - Removed the file skill-card.md from the project. - Minor documentation updates; no changes to core workflow or API.","fileCount":9,"zipByteSize":20930},{"version":"1.0.9","createdAt":"2026-08-04T06:19:34.578Z","changelog":"interactive-explainer v1.0.9 - Updated `p-image` prerequisite description to clarify use case: now explicitly for fastest, cheapest photo generation—no controlled photoreal or in-image text. - Incremented version metadata to 1.0.9 in SKILL.md. - Removed obsolete skill-card.md file.","fileCount":9,"zipByteSize":21065},{"version":"1.0.8","createdAt":"2026-07-28T17:21:34.700Z","changelog":"**Minor workflow and intake improvements.** - Improved intake section: now explicitly prompts open intake and media source options (generate vs upload). - Added format options in intake (9:16/16:9, 720p/1080p). - Made generation-diversity clarification intake explicit at start of intake section. - Removed obsolete skill-card.md file. - Bumped version to 1.0.8.","fileCount":9,"zipByteSize":20994},{"version":"1.0.7","createdAt":"2026-07-23T12:36:46.419Z","changelog":"**Version 1.0.7** - Simplified and clarified installation and prerequisite steps; now includes explicit skill install commands instead of dependency fields. - Removed detailed \"shared generation policy\" and quality gates sections; replaced with concise references and stricter workflow enforcement instructions. - All test, dev, and checklist files removed for a leaner package. - Quick-reference and subject flavor tables retained, with updated links and language. - \"Workflow habit\" now requires naming `interactive-explainer` in all replies and precise gate phrasing (approve plan/stills/clips). - Scene tables and generation phase breakdowns are streamlined for easier guidance and modular intake. - References to supporting skills and resources are updated and condensed.","fileCount":9,"zipByteSize":20863}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s173djpkkm1x4yfzg522h5vfp989mrn5:interactive-explainer","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-interactive-explainer/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-interactive-explainer/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-interactive-explainer/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-interactive-explainer/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-interactive-explainer/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-interactive-explainer/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T15:50:52.169Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-interactive-explainer/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-interactive-explainer/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-interactive-explainer/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-interactive-explainer/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T12:51:33.990Z","emptyReason":null},"readme":"Skill: interactive-explainer\n\nOwner: pruna-ai\n\nSummary: Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll.\n\nTags: ai:1.0.14, generative:1.0.14, latest:1.0.14, pruna:1.0.14\n\nVersion history:\n\nv1.0.14 | 2026-09-29T15:38:11.177Z | auto\n\ninteractive-explainer 1.0.14\n\n- Removed the obsolete skill-card.md file.\n- Minor documentation update in SKILL.md; metadata version bumped to 1.0.14.\n- No changes to workflow or user-facing instructions.\n\nv1.0.13 | 2026-09-17T14:02:12.628Z | auto\n\nVersion 1.0.13\n\n- Updated SKILL.md with clarified descriptions for `p-video` and `p-video-2`, specifying use cases and output limitations.\n- Removed the outdated skill-card.md file.\n- No changes to workflow, feedback gates, or technical defaults.\n\nv1.0.12 | 2026-09-10T14:00:42.442Z | auto\n\n- Added support for new generation skills: `p-video-2` (high-quality video), `p-image-ideogram` (controlled photoreal images), and revised their guidance.\n- Updated core video and image skill selection logic and documentation to clarify when to use `p-video-2` vs `p-video` and `p-image-ideogram` vs `p-image`.\n- Adjusted default workflow and prerequisites to include new skills and match current best practices.\n- Removed legacy references (e.g., deleted `skill-card.md`) and refined language for precision and clarity.\n\nv1.0.11 | 2026-09-03T14:14:32.377Z | auto\n\n- Version updated to 1.0.11.\n- Removed the file: skill-card.md.\n- Minor internal adjustments to documentation.\n- No changes to workflow or user-facing instructions.\n\nv1.0.10 | 2026-08-28T08:00:19.782Z | auto\n\ninteractive-explainer 1.0.10\n\n- Updated SKILL.md version to 1.0.10, reflecting new release.\n- Removed the file skill-card.md from the project.\n- Minor documentation updates; no changes to core workflow or API.\n\nv1.0.9 | 2026-08-04T06:19:34.578Z | auto\n\ninteractive-explainer v1.0.9\n\n- Updated `p-image` prerequisite description to clarify use case: now explicitly for fastest, cheapest photo generation—no controlled photoreal or in-image text.\n- Incremented version metadata to 1.0.9 in SKILL.md.\n- Removed obsolete skill-card.md file.\n\nv1.0.8 | 2026-07-28T17:21:34.700Z | auto\n\n**Minor workflow and intake improvements.**\n\n- Improved intake section: now explicitly prompts open intake and media source options (generate vs upload).\n- Added format options in intake (9:16/16:9, 720p/1080p).\n- Made generation-diversity clarification intake explicit at start of intake section.\n- Removed obsolete skill-card.md file.\n- Bumped version to 1.0.8.\n\nv1.0.7 | 2026-07-23T12:36:46.419Z | auto\n\n**Version 1.0.7**\n\n- Simplified and clarified installation and prerequisite steps; now includes explicit skill install commands instead of dependency fields.\n- Removed detailed \"shared generation policy\" and quality gates sections; replaced with concise references and stricter workflow enforcement instructions.\n- All test, dev, and checklist files removed for a leaner package.\n- Quick-reference and subject flavor tables retained, with updated links and language.\n- \"Workflow habit\" now requires naming `interactive-explainer` in all replies and precise gate phrasing (approve plan/stills/clips).\n- Scene tables and generation phase breakdowns are streamlined for easier guidance and modular intake.\n- References to supporting skills and resources are updated and condensed.\n\nv1.0.6 | 2026-07-16T20:57:42.749Z | auto\n\n**This version introduces a unified generative policy section and new workflow checklists.**\n\n- Added a clear \"Shared generation policy\" at the top, detailing required rituals for generation, diversity, quality gates, approvals, and concurrency.\n- Integrated new reference docs: approval red flags, generation diversity, and random seed ritual.\n- Updated links to point to shared/global policy documents.\n- Revised quick reference, workflow, and intake instructions for clarity and precision.\n- Removed obsolete references and file (skill-card.md); reorganized documentation for easier compliance and review.\n\nv1.0.2 | 2026-07-16T13:25:12.802Z | auto\n\ninteractive-explainer 1.0.2\n\n- Version bump to 1.0.2 with updated metadata.\n- SKILL.md updated for clarity and expanded guidance; references modern dependencies.\n- Deprecated and removed skill-card.md.\n- Documentation refined for scene patterns, motion safety, feedback gates, and planning workflow.\n- No functional changes to runtime logic.\n\nv1.0.1 | 2026-07-14T15:45:52.797Z | auto\n\n- Clarified the intended use: focus on explainers with host-character interaction, not just narration.\n- Added detailed scene planning guidelines, including required camera motion and \"physics-safe\" actions.\n- Introduced “flavors” (subject styles) and requirements for consistent visual style across a film.\n- Defined staged, approval-gated workflow: plan → stills → TTS → clips → final assembly.\n- Expanded tables and templates for scene types, cast roles, default settings, and intake questions.\n- Linked relevant documentation and templates for quick reference.\n\nv0.0.1 | 2026-06-30T12:37:28.183Z | auto\n\nInitial release of interactive-explainer: dynamic, character-driven educational video generation.\n\n- Alternates host/narrator voice-over with in-story character dialogue (witnesses, experts, guides).\n- Supports multiple explainer flavors: history, science, \"how-it-works,\" nature, and children’s educational, with selectable visual style for the whole piece.\n- Enforces staged generation workflow: plan approval → still images → narration and dialogue → video clips → assembly.\n- Ensures ≥35% of scenes feature speaking characters, not just narration.\n- Built-in feedback gates at each phase for user review and approval.\n- Motion guidance prioritizes dynamic but physics-safe camera and scene actions.\n- Requires clear upfront decisions on topic, audience, style, and cast before content generation begins.\n\nArchive index:\n\nArchive v1.0.14: 9 files, 20992 bytes\n\nFiles: example-prompt.md (2230b), references/interactive-explainer-motion.md (5244b), references/interactive-explainer-prompts.md (6381b), references/interactive-explainer-scenes.md (11203b), skill-card.md (1930b), skill.manifest.json (338b), SKILL.md (13211b), templates/explainer-plan.template.json (5005b), _meta.json (141b)\n\nFile v1.0.14:SKILL.md\n\n---\nname: interactive-explainer\ndescription: Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll.\nlicense: MIT\nmetadata:\n  version: \"1.0.14\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image-ideogram` | Use when photo generation needs more control — photoreal results, text in the image, or structured JSON with hex colors and bounding boxes. Simpler photo generation, edits, and video use other skills in the suite. | `npx skills add PrunaAI/pruna-skills@p-image-ideogram -y` |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-2` | Use when someone wants a polished short clip from text, images, or imported audio — 1080p B-roll, start/end frame animation, or a motion shot with a mixed track. Not for cinematic generated-audio clips or talking-head-only hosts. | `npx skills add PrunaAI/pruna-skills@p-video-2 -y` |\n| `p-video` | Use when someone wants a simple short clip from text or images — quick B-roll, drafts, or start/end frame animation. Not when the brief needs cinematic generation, highest quality, tight lip-sync, or imported audio at 1080p. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n| `stable-audio-2.5` | Use when someone wants light instrumental background music — an ambient bed under dialogue or underscore for reels and explainers. | `npx skills add PrunaAI/pruna-skills@stable-audio-2.5 -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `interactive-explainer` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Quick reference\n\n| Resource | Path |\n|----------|------|\n| Positive prompts / blocked phrases | [./references/interactive-explainer-prompts.md](./references/interactive-explainer-prompts.md) |\n| Scene patterns & stand-alone test | [./references/interactive-explainer-scenes.md](./references/interactive-explainer-scenes.md) |\n| Motion (OPEN/MID/CLOSE) | [./references/interactive-explainer-motion.md](./references/interactive-explainer-motion.md) |\n| Feedback discipline | `generation-diversity` |\n| Plan template | [templates/explainer-plan.template.json](./templates/explainer-plan.template.json) |\n\n## Subject flavors (pick one `style_bible`)\n\n| Flavor | Visual style | Character examples |\n|--------|--------------|-------------------|\n| **History / biography** | **Photoreal** period drama *or* **painterly / storybook** illustration (pick one — see Visual mode below) | Historical figure, witness, activist |\n| **Science / cosmos** | Cinematic space/nature, painterly realism | Scientist, astronaut, field researcher |\n| **How-it-works** | Clean documentary B-roll, diagram-friendly | Engineer, inventor, technician |\n| **Nature / wildlife** | National Geographic tone, golden hour | Ranger, marine biologist, local guide |\n| **Children's educational** | Warm illustrated or soft 3D, friendly | Curious kid, friendly animal guide, teacher |\n\nOne **`style_bible`** for the whole film — do not mix flavors unless the topic demands it.\n\n## Defaults (720p / 24 fps)\n\nEvery plan should set:\n\n```json\n\"defaults\": {\n  \"resolution\": \"720p\",\n  \"fps\": 24,\n  \"aspect_ratio\": \"16:9\"\n}\n```\n\n- **`p-video-2`** (narrator, quality): uses `resolution` + `fps`. Simpler narrator clips: **`p-video`**.\n- **`p-video-avatar`** (character): uses `resolution` only\n\n## Motion (dynamic, physics-safe)\n\nEvery scene needs **visible motion** — but not physics-heavy action. See [./references/interactive-explainer-motion.md](./references/interactive-explainer-motion.md).\n\n| Do | Don't |\n|----|-------|\n| Camera dolly, pan, tilt, push-in | throw, catch, pour, walk across room |\n| Light shifts, steam, curtain drift | object handoffs, door slams, collisions |\n| One subtle gesture or expression | multi-step physical action |\n\nWrite **`video_prompt`** as `OPEN:` → `MID:` (attention hook) → `CLOSE:` (settle on end still). Keep camera moves **slow and deliberate**.\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n| Topic | Questions |\n|-------|-----------|\n| **Topic** | What should the viewer learn? Key facts or story beats? |\n| **Media source** | **Generate** all stills/avatars with Pruna vs **upload** cast photos, locations, or reference plates? |\n| **Format** | Delivery **`9:16` / `16:9`**; avatar and `p-video-2` output **`720p` / `1080p`**? |\n| **Audience** | Kids, general public, enthusiast? Sets tone and vocabulary |\n| **Flavor** | History? Science? Nature? How-it-works? Illustrated? |\n| **Visual mode** | Photoreal period drama, painterly storybook illustration, or children's illustrated? (one for whole film) |\n| **Speakers** | Who should **speak** on camera — expert, witness, character, subject? |\n| **Interaction mix** | Target **≥ 35% character beats** — who speaks, in what order? |\n| **Narrator** | Gemini TTS `voice` + `style_prompt` (clear, engaging host) |\n| **Cast** | Per speaker: **`persona_gender`** (`female` / `male`), Pruna `voice` (must match gender), `voice_prompt`, **`character_descriptor`** (gendered look), `style_bible` |\n| **Per narrator scene** | `edit_prompt`, `last_frame_edit_prompt`, **`video_prompt`** (OPEN/MID/CLOSE, physics-safe motion), TTS line **≤ ~19s** (P-API audio-led cap) |\n| **Per character scene** | `edit_prompt` (optional **`still_from`** prior character scene), **`video_prompt`** (single continuous take — see motion doc), `voice_script` (any length avatar supports) |\n| **Assembly** | Optional bed? Crossfades? |\n\nDraft the **full scene table** as a dialogue arc before any API calls. Confirm with user (**Phase 0 — plan**). Do not call generative APIs until the user replies **approve plan** / **go**.\n\n**Story depth bar (required before render):** The film must pass the [stand-alone test](./references/interactive-explainer-scenes.md#stand-alone-test). If the story is a biography, pick **one through-line** — not a life survey.\n\n## Feedback gates (required)\n\n| Phase | What to show the user | Proceed when |\n|-------|----------------------|--------------|\n| **0 — Plan** | Scene table, cast, `style_bible`, sample still/motion lines | **approve plan** |\n| **A — Stills** | `stills/hero.png`, scene start/end PNGs | **approve stills** |\n| **A2 — TTS** | `audio/narration_*.mp3` — listen for pace and length | Lines OK (`ffprobe` ≤ ~19s) → video |\n| **B — Video** | `clips/*.mp4` — motion, lip sync, text burn-in | **approve clips** |\n| **D — Bed** | Final MP4 after concat + Stable Audio mix | User accepts delivery |\n\n## Generation phases\n\n| Phase | Action |\n|-------|--------|\n| **stills** | Hero + start/end stills (default first stop) |\n| **tts** | Narrator TTS only — after stills approval |\n| **video** | After TTS listen gate — `p-video-2` + `p-video-avatar` |\n| **assemble** | After clips approval — concat ± bed |\n\n## Scene table (template)\n\n| `#` | `type` | Who | Function | Audio |\n|-----|--------|-----|----------|-------|\n| 1 | `narrator` | Host | Hook — pose the question | TTS line |\n| 2 | `character` | Expert / witness | Answer or personal angle | `voice_script` |\n| 3 | `narrator` | Host | Explain the mechanism / context | TTS line |\n| 4 | `character` | Expert / witness | Clarify or emotional beat | `voice_script` |\n| 5 | `narrator` | Host | Takeaway / legacy | TTS line |\n\n## Scene types\n\n| `type` | Model | Stills | Audio |\n|--------|-------|--------|-------|\n| **`narrator`** | `p-video-2` (quality) / `p-video` (simpler) | start + end via `p-image-edit` | TTS → upload → `input.audio`; omit `duration` |\n| **`character`** | `p-video-avatar` | start only; **mouth visible** | `voice_script` + cast `voice` / `voice_prompt` |\n\nDefault if omitted: **`narrator`**.\n\n## How the agent runs this\n\n1. Copy [templates/explainer-plan.template.json](./templates/explainer-plan.template.json) → fill cast + scene table → **approve plan**.\n2. Parallel stills curl (`pruna-api`) → **approve stills**.\n3. Parallel Gemini TTS (narrator rows) → duration gate → listen.\n4. Parallel `p-video-2` triples + `p-video-avatar` → **approve clips**.\n5. ffmpeg concat ± crossfade → optional bed.\n\n## Workflow\n\n| Phase | Action |\n|-------|--------|\n| **0** | `p-image-ideogram` hero (+ optional `_cast_*` anchor stills from `anchor_still_prompt`; `p-image` for a cheap draft) |\n| **1** | Parallel `p-image-edit` start stills (all scenes) |\n| **2** | Parallel end stills (**narrator** only) |\n| **A2** | Parallel Gemini TTS (**narrator** only) |\n\n```bash\nffprobe -v error -show_entries format=duration -of csv=p=0 audio/narration_01.mp3\n# ≤ ~19s before p-video\n```\n\n| Phase | Action |\n|-------|--------|\n| **B** | Parallel `p-video-2` triples + `p-video-avatar` (avatar may exceed 20s) |\n| **C/D** | Concat ± `stable-audio-2.5` bed |\n\n**Character rows:** `persona_gender` + matching `character_descriptor`; `voice` from gender (`Zephyr` / `Puck`). Use `still_from` or `_cast_*` when hero is B-roll/objects. Avatar text suppression: [./references/interactive-explainer-prompts.md](./references/interactive-explainer-prompts.md).\n\n**Assembly:**\n\n```bash\nffmpeg -y -f concat -safe 0 -i clips.txt -c copy explainer.mp4\n```\n\nOptional crossfades via plan `assembly.hard_cut_crossfade_seconds` (~0.12–0.15 on soft joins). Re-assemble from existing clips without regenerating video.\n\n## Scripting rules\n\nDialogue arc, stand-alone test, causal chain, visual–audio alignment, visual modes, and three-beat ending: **[./references/interactive-explainer-scenes.md](./references/interactive-explainer-scenes.md)**.\n\n**Quick rules:** one through-line per film (not a life survey); narrator = facts + pointed questions; character = witness reply to **that** question; narrator lines **≤ ~19s** TTS; character `video_prompt` = one continuous shot (not OPEN/MID/CLOSE).\n\n## Common mistakes\n\n- All-narrator tables (lecture, not a conversation)\n- Character lines in `narration.scene_lines` (wrong voice pipeline)\n- Gemini TTS voice names on `p-video-avatar` (use Pruna voices)\n- Missing **lips in frame** on character stills; **facing camera** in character still prompts (use `video_prompt` for on-camera delivery)\n- Missing **`persona_gender`** on cast / voice not matching generated avatar gender\n- **Negative or avoidance prompts** in stills, `style_bible`, or `video_prompt`\n- Still-prompt **blocked substrings** — [./references/interactive-explainer-prompts.md](./references/interactive-explainer-prompts.md)\n- Biographical life-survey cramming vs single through-line\n- Static `video_prompt` (`OPEN: hold. CLOSE: hold.`) — always add a MID motion beat\n- Physics-trap motion — [./references/interactive-explainer-motion.md](./references/interactive-explainer-motion.md)\n- **Missing causal chain** / **visual–audio mismatch** / **thin ending** / **no narrator wrap**\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `narrated-multi-scene` | Use when someone wants a multi-part story with voiceover — episodic B-roll, chaptered promo, or several linked video scenes without on-camera dialogue. | `npx skills add PrunaAI/pruna-skills@narrated-multi-scene -y` |\n| `visual-transition-reel` | Use when someone wants a montage with transitions between shots — action-sequence reel or multi-scene piece where narration is optional. | `npx skills add PrunaAI/pruna-skills@visual-transition-reel -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.14:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"interactive-explainer\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1790696291177\n}\n\nFile v1.0.14:references/interactive-explainer-motion.md\n\n# Educational explainer motion (dynamic, physics-safe)\n\nMotion rules for **narrator** (`p-video-2`) and **character** (`p-video-avatar`) beats in `interactive-explainer`.\n\n**Shared SSoT for safe/trap tables:** `video-prompting`. This file specializes those rules for explainers (Tier B defaults + avatar continuous-take).\n\nRelated: `video-prompting` · `visual-transition-reel` · `video-prompting`\n\n## Defaults\n\n| Field | Default |\n|-------|---------|\n| `defaults.resolution` | **`720p`** |\n| `defaults.fps` | **`24`** (narrator `p-video-2` only; avatar uses `resolution`) |\n| `defaults.aspect_ratio` | `16:9` |\n\n## Goal\n\nEvery scene should **move** — camera, light, atmosphere, or subject — so the viewer stays engaged. Motion must **bridge start still → end still** without relying on **physics-heavy** actions that `p-video-2` handles poorly.\n\n## Prompt shape\n\n### Narrator (`p-video-2`) — OPEN / MID / CLOSE required\n\nWrite **`video_prompt`** as three beats:\n\n```text\nOPEN: [hold start composition briefly]\nMID: [camera + safe motion developing — the attention hook]\nCLOSE: [settle into end still]\n```\n\nCamera-led motion (dolly, pan, tilt, push-in, rack-focus feel).\n\n### Character (`p-video-avatar`) — single continuous take\n\n**Do not** use OPEN/MID/CLOSE on avatar rows — the model treats each beat as a transition and the clip feels cutty.\n\n```text\nSingle continuous medium close-up, one very slow push-in over the full clip, speaks directly to camera, steady expression, no cuts, no glances away, minimal head motion\n```\n\nOne camera move, steady light. Mouth motion comes from the avatar model.\n\n## Safe motion (use these)\n\n| Category | Examples |\n|----------|----------|\n| **Camera** | slow dolly in/out, gentle pan left/right, tilt up/down, push-in on face, drift across environment |\n| **Light** | spotlight finds subject, dawn light spreads, candle flicker, window glow brightens, cloud shadow passes |\n| **Atmosphere** | steam rises, dust motes, curtain sways, fog rolls, rain on glass (no splashing hands) |\n| **Subject (minimal)** | head turn toward lens, eyes lift, single hand to chest, subtle lean — **one** gesture max |\n| **Environment** | crowd silhouettes shift, banner cloth ripples, leaves rustle, water surface ripples (no objects entering water) |\n\n## Avoid (physics trap)\n\nShared trap table: `video-prompting`. For explainers, stay on **Tier B** — do **not** prompt object interaction, locomotion, or force:\n\n| Avoid | Why |\n|-------|-----|\n| throw / catch / toss / drop | object trajectory breaks |\n| pour / spill / splash | fluid simulation fails |\n| walk / run / stride across room | foot contact glitches |\n| open door / slam / handoff prop | hinge and grip artifacts |\n| pick up / set down / stack items | contact physics |\n| jump / fall / collide | body dynamics break |\n| fight / chase / sports action | multi-body chaos |\n\nIf the story needs action, **imply it** in the stills and use **camera move + reaction** in video — not the action itself.\n\n**Bad:** `MID: she throws the banner and runs toward the crowd`  \n**Good:** `MID: slow push-in on her face as crowd noise swells, banner ripples behind her`\n\n## By scene type\n\n### Narrator (`p-video-2` + triple)\n\n- Start/end stills define composition; **`video_prompt` sells the transition**\n- Prefer **one dominant camera move** in MID — not three unrelated motions\n- Match narration energy: tense scenes → tighter push-in; legacy → slow tilt up\n- Keep moves **slow and deliberate**, not whip pans (bump to `48` fps only for final delivery if needed)\n\n### Character (`p-video-avatar`)\n\n- **`video_prompt`** = one continuous shot — camera + framing only, not plot action\n- Safe: `single continuous medium close-up, one very slow push-in, speaks directly to camera, no cuts`\n- Avoid: OPEN/MID/CLOSE beats, `candle flicker`, `expression shift`, `light shifts` (read as transitions)\n- Avoid: `gestures wildly`, `walks across room while talking`, `holds up document`\n- Clip length follows **`voice_script`** — no ~19s TTS cap (that limit is narrator `p-video-2` only)\n\n## Examples\n\n### Narrator (history / science)\n\n```json\n\"video_prompt\": \"OPEN: hold wide establishing frame. MID: slow push-in toward key detail in steady light. CLOSE: settle on end composition.\"\n```\n\n### Narrator (diagram / mechanism)\n\n```json\n\"video_prompt\": \"OPEN: hold wide subject. MID: gentle drift toward focal detail, subtle atmosphere. CLOSE: hold end frame — no physics action.\"\n```\n\n### Character (any flavor)\n\n```json\n\"video_prompt\": \"Single continuous medium close-up, one very slow push-in, speaks directly to camera, steady light, full color, no gestures, no cuts.\"\n```\n\n## Plan checklist (before render)\n\n- [ ] Every **narrator** scene has **OPEN / MID / CLOSE** in `video_prompt`\n- [ ] **Character** scenes use **one continuous take** wording — no OPEN/MID/CLOSE\n- [ ] Narrator MID contains **visible motion** (not `OPEN: hold. CLOSE: hold.`)\n- [ ] No physics-trap verbs in `video_prompt`\n- [ ] `defaults.resolution` = `720p`, `defaults.fps` = `24`\n- [ ] Start/end stills differ enough that camera move has somewhere to go\n\nAgent must reject plans missing MID beat or using physics-trap verbs — see `interactive-explainer` and this checklist.\n\nFile v1.0.14:references/interactive-explainer-prompts.md\n\n# Interactive explainer — positive prompts & blocked phrases\n\nExtracted reference for `interactive-explainer`. The agent enforces these rules when validating the plan before paid calls.\n\n## Principle\n\n`hero_prompt`, `style_bible`, `edit_prompt`, `last_frame_edit_prompt`, `video_prompt`, `voice_prompt`, and bed `prompt` must describe **what appears** — never what to leave out.\n\nSaying **`no text`** often **creates** readable type. Saying **`avoid crowds`** still invokes crowds. Be explicit about the single frame you want.\n\n**Never** use `no …`, `avoid …`, `not …`, `without …`, `don't`, or `do not` in creative fields. Spoken lines (`scene_lines`, `voice_scripts`) may use natural negation for history dialogue.\n\n## Banned patterns → positive rewrite\n\n| Banned pattern | Write explicitly instead |\n|----------------|--------------------------|\n| `no text` / `no signage` / `no labels` | `plain unmarked walls`, `unprinted wood surfaces`, `matte unprinted props` |\n| `avoid markets` / `avoid text` | `plain wood table`, `single camera angle`, `one focal subject` |\n| `not theatrical` / `no cuts` | `restrained matter-of-fact delivery`, `single uninterrupted take` |\n| `without vocals` | `instrumental only` |\n| `no cartoon` / `no modern` | `painterly historical illustration`, `period-accurate 1770s props only` |\n\n## Rules (summary)\n\n1. **One positive sentence per still line** — location, subject, light, period, `one camera angle`.\n2. **`style_bible`** — positive comma-clauses only. Example: `unprinted wood and parchment surfaces, plain unmarked walls, warm saturated full color, 16:9`.\n3. **Character `edit_prompt`:** `lips visible`, **slight angle from the side**; use `speaks directly to camera` in **`video_prompt`** only.\n4. **`video_prompt` (narrator):** OPEN / MID / CLOSE — camera + light + atmosphere ([interactive-explainer-motion.md](./interactive-explainer-motion.md)).\n5. **`video_prompt` (character):** `single continuous medium close-up`, `one very slow push-in`, `single uninterrupted take` — not OPEN/MID/CLOSE beats.\n6. **`p-video-avatar`:** `defaults.avatar_negative_prompt` is a **Pruna suppression token list** (nouns like `subtitles`, `watermark`) — not creative wording. See `p-video-avatar`.\n\n## Text & signage (most common)\n\n| Blocked phrase in stills | Why | Use instead |\n|-----------------|-----|-------------|\n| `farmers market`, `market stall`, `storefront`, `signage`, `neon signs` | price boards, aisle signs | produce on **plain wood table**, **matte unprinted** baskets |\n| `labeled`, `packaging`, branded bags, `price tag`, `menu`, `napkin` | product copy on surfaces | **matte unprinted** jars, food in **plain glass bowl** |\n| `graphic tee`, `decal`, `sticker`, `magazine`, `poster` | printed type on surfaces | solid-color fabrics, unbranded matte props |\n| `plated meal`, `restaurant`, `utensil`, `fork`, `knife` | menus, rim logos | **matte ceramic plate** on **plain counter**, subject food only |\n| `documentary still`, `educational still`, `educational end`, `end frame`, topic-specific doc labels | models literalize meta words | `photoreal still`, `single frame`, `closing composition` |\n| `ring light`, `studio lighting`, `HUD`, `game`, readable screens | UI text, spec overlays | sunny window, golden afternoon, soft monitor glow |\n| `maps`, `map`, `newspaper`, `broadside`, `poster`, `placard`, `ledger`, `open book`, `proclamation`, `headline`, `caption`, `inscription`, ship names on hulls | printed type or named banners | blank folded parchment, plain walls, unmarked wood, **merchant wharf** / **colonial assembly hall** (no proper nouns on surfaces) |\n| `greyscale`, `grayscale`, `graphite`, `muted-tone`, `desaturated`, cold mist / freezer haze | flat or grey frames | **warm saturated** full color, steady window light |\n| `flicker`, `strobe`, `pulse`, rapid `light shifts` / `brightens` in **narrator** `video_prompt` | pulsating exposure in `p-video` | **one** slow push-in or pan in **steady** daylight |\n\n## Collage & layout\n\n| Blocked phrase | Use instead |\n|-------|-------------|\n| `split`, `side by side`, `before and after`, `comparison`, `grid`, `collage`, `montage`, `contact sheet`, `flat lay`, `packshot`, `multiple angles`, `dual` | one subject, one camera angle, one frame |\n| **`OPENING:` / `CLOSING:`** prefixes on still lines | plain scene description — labels read as **two-panel storyboard** frames |\n| **`Same …`** matching prior shot | describe the one frame directly; use `still_from` / `_cast_*` for identity |\n| Counted triples in stills (`three ships`, `three panels`) | “colonial ships at one wharf”, “one camera angle” |\n| `storyboard`, `frame by frame`, `triptych`, `cross-section` (unless one diagram is the sole subject) | one continuous composition, one camera angle |\n\nRunner **`sanitize_still_prompt`** strips `OPENING:`/`CLOSING:` and leading `Same` before API calls.\n\n## Weather\n\n| Blocked phrase | Use instead |\n|-------|-------------|\n| `rain`, `wet pavement`, `puddle` | bright open sky, sunny window, golden afternoon |\n\n## `style_bible` example (positive only)\n\n```text\nPremium painterly historical illustration, one focal subject per shot, one camera angle, 16:9, unprinted wood surfaces, plain unmarked walls, warm saturated full color, period-accurate props\n```\n\n## Good vs bad still lines\n\n| Bad still line | Good still line |\n|----------------|-----------------|\n| `No text, no signage, farmers market` | `Plain wood table`, matte unprinted baskets, sunny window, **one camera angle** |\n| `Avoid labels on packaging` | **Matte unprinted** jars on **plain counter** |\n| Meta phrase **documentary still** + **end frame** | Concrete place + objects + **closing composition**, **one camera angle** |\n\nBroader blocked-phrase table (keyboards, mirrors, packshots): generation-diversity.md#visual-variety (`generation-diversity`).\n\n**If text appears in `p-video` but stills are clean:** simplify the narrator `video_prompt` (camera/light only) or regenerate stills with **plain surfaces** — never answer with `no text` in the prompt.\n\n## Related\n\n- Workflow skill: `interactive-explainer`\n- Motion: [interactive-explainer-motion.md](./interactive-explainer-motion.md)\n- Scenes: [interactive-explainer-scenes.md](./interactive-explainer-scenes.md)\n- Gates: generation-quality-checklists.md#approval-gates-workflows (`generation-diversity`)\n\nFile v1.0.14:references/interactive-explainer-scenes.md\n\n# Educational explainer scenes (narrator + character)\n\nCanonical pattern for **educational shorts** — history, science, nature, how-it-works, children's topics — that **alternate host narration with in-story character speech**. Not wall-to-wall voice-over.\n\nRelated: `video-prompting` (narrator beats) · `avatar-multi-scene` (character beats) · `interactive-explainer`\n\n## Why hybrid?\n\nPure narration over B-roll feels like a lecture. **Interaction** — host poses a question, an expert or witness responds, host synthesizes — reads like a prestige documentary, science show, or engaging classroom film.\n\n| Beat type | Model | Audio | Stills |\n|-----------|-------|-------|--------|\n| **`narrator`** | `p-video-2` | Gemini TTS → `input.audio` | start + end (`p-image-edit`) |\n| **`character`** | `p-video-avatar` | native `voice_script` | start only (mouth visible) |\n\nBoth use **`p-image`** hero + **`p-image-edit`** under one **`style_bible`**.\n\n**Format defaults:** `720p`, `24` fps (narrator `p-video-2`); motion: [interactive-explainer-motion.md](./interactive-explainer-motion.md) — dynamic OPEN/MID/CLOSE, physics-safe.\n\n## Subject flavors\n\n| Flavor | Narrator role | Character role | Visual `style_bible` |\n|--------|---------------|----------------|----------------------|\n| History / biography | Documentary host | Historical figure, witness | Photoreal period / biopic |\n| Science / cosmos | Science communicator | Researcher, astronaut | Cinematic space/nature realism |\n| How-it-works | Explainer host | Engineer, inventor | Clean documentary B-roll |\n| Nature | Nature narrator | Ranger, biologist | National Geographic tone |\n| Children's | Friendly teacher voice | Kid, animal guide, mascot | Warm illustration or soft 3D |\n\nPick **one** flavor per film. Swap examples in prompts — the scene machinery is identical.\n\n## Target mix\n\n| Guideline | Target |\n|-----------|--------|\n| Character / narrator ratio | **≥ 1 character beat per 2 narrator beats** (roughly 35–50% character) |\n| Scene order | Alternate when possible: narrator → character → narrator → … |\n| Narrator line length | **≤ ~19s** TTS (P-API 20s **audio-led `p-video-2`** cap) — see `video-prompting` |\n| Character line length | Reply length as needed (often 2–4 sentences); **`p-video-avatar` may exceed 20s** — clip follows `voice_script` |\n\n## Narrator beat (`type: \"narrator\"`)\n\nScene anchor **triple** — same as `video-prompting`:\n\n```json\n{\n  \"id\": \"02_mechanism\",\n  \"type\": \"narrator\",\n  \"edit_prompt\": \"OPENING: Wide view of subject in context, clear focal subject, single frame…\",\n  \"last_frame_edit_prompt\": \"CLOSING: Same subject, closer on key detail, closing composition…\",\n  \"video_prompt\": \"OPEN: hold wide. MID: slow push toward detail, steady daylight. CLOSE: settle on end frame.\"\n}\n```\n\nNarration line in `narration.scene_lines.{id}`.  \n**End with a question** when the next scene is a character reply.\n\n## Character beat (`type: \"character\"`)\n\nTalking-head beat — **`p-video-avatar`**:\n\n```json\n{\n  \"id\": \"03_expert_reply\",\n  \"type\": \"character\",\n  \"cast\": \"expert\",\n  \"still_from\": \"02_prior_expert_scene\",\n  \"follows\": \"02_mechanism\",\n  \"edit_prompt\": \"Same cast member dominates head-and-shoulders frame, slight angle, lips in frame, topic-appropriate background\",\n  \"video_prompt\": \"Single continuous medium close-up, one very slow push-in, speaks directly to camera, steady light, no gestures.\"\n}\n```\n\n`voice_script` on the scene row or in plan `voice_scripts`:\n\n```json\n\"voice_scripts\": {\n  \"03_expert_reply\": \"First-person reply that answers the narrator's exact question — concrete detail, not a slogan.\"\n}\n```\n\n**No** `last_frame_edit_prompt` on character rows — avatar uses one still.\n\n### Cast ledger\n\n```json\n\"cast\": {\n  \"expert\": {\n    \"name\": \"Dr. Example Name\",\n    \"persona_gender\": \"female\",\n    \"voice\": \"Zephyr (Female)\",\n    \"voice_language\": \"English (US)\",\n    \"voice_prompt\": \"First-person expert, clear lip sync, accessible not academic\",\n    \"character_descriptor\": \"woman, role-appropriate look matching style_bible\"\n  }\n}\n```\n\n**Gender ↔ voice:** set `persona_gender` to `female` or `male`; runner maps to `Zephyr (Female)` or `Puck (Male)`. `character_descriptor` must name the same gender so the still matches the voice.\n\n**Still prompts:** **positive only** in `style_bible`, still lines, and `video_prompt` — never `no …`, `avoid …`, or `not …` in creative fields (spoken dialogue may use natural negation). Full blocked-phrase tables: [interactive-explainer-prompts.md](./interactive-explainer-prompts.md).\n\nUse **Pruna avatar voices** (`Zephyr (Female)`, `Puck (Male)`, etc.) — not Gemini TTS voice names.\n\n## Dialogue scripting (interaction)\n\nWrite the scene table as a **conversation arc**. Examples by flavor:\n\n### Science\n\n| # | Type | Function | Example |\n|---|------|----------|---------|\n| 1 | narrator | Hook | \"What happens when a star runs out of fuel?\" |\n| 2 | character | Expert reply | \"The core collapses in seconds. What looked stable for billions of years ends in a flash.\" |\n| 3 | narrator | Context | \"That collapse can outshine an entire galaxy.\" |\n| 4 | character | Wonder beat | \"The first time I saw a supernova remnant, I stopped calculating — I just stared.\" |\n\n### History (single incident — preferred)\n\nOne through-line, full arc. Narrator = facts; character = witness.\n\n| # | Type | Function |\n|---|------|----------|\n| 1 | narrator | Hook + stakes — date, place, named question |\n| 2 | character | Witness identity — first person, specific angle |\n| 3 | narrator | Escalation — what happened next, question for witness |\n| 4 | character | Event witness — sensory or procedural detail |\n| 5 | narrator | Consequence + question |\n| 6 | character | Moral or emotional reply |\n| 7+ | narrator / character | Legacy or aftermath as needed |\n\n### History (biography — narrow the through-line)\n\nDo **not** survey a whole life. Pick **one question** the film answers.\n\n| # | Type | Function |\n|---|------|----------|\n| 1 | narrator | Hook — one wound or paradox |\n| 2 | character | Witness — specific memory, not slogan |\n| … | alternate | Each beat = one chapter of **that** arc only |\n\n**Anti-pattern:** many life eras or locations in one short — each beat becomes a slogan.\n\n## Stand-alone test\n\nEvery explainer must answer **yes** to all five before render:\n\n| # | Question |\n|---|----------|\n| 1 | **Stakes** — what could be lost? |\n| 2 | **Conflict** — who opposed whom? |\n| 3 | **Turn** — what changed after the key event? |\n| 4 | **Nuance** — at least one complication (not hagiography)? |\n| 5 | **Closure** — outcome clear without outside reading? |\n\n**Biography trap:** covering birth → fame → war → activism → death in one short. **Fix:** one through-line with the same witness/fact split as a single-incident history film.\n\n## Narrator vs character (labor split)\n\n| Narrator says | Character says |\n|---------------|----------------|\n| Dates, places, names, sequence | \"I\" witness, sensory detail, emotion |\n| Concrete fact, then one pointed question | Reply that answers **that** question only |\n| Sets up **one** question per handoff | Does not introduce a new topic or slogan |\n\n**Bad character line:** motivational poster copy, unrelated to the question.  \n**Good character line:** procedural or sensory detail tied to the prior narrator beat.\n\n## Causal chain (event explainers)\n\nDo not open on the climax. Map beats before render:\n\n| Beat (minimum) | Narrator carries |\n|----------------|------------------|\n| **Stakes / hook** | Why anyone cared |\n| **Mechanism** | Law, policy, or force that caused the crisis |\n| **Local complication** | Why *this* place or group differed |\n| **Deadline / trigger** | Clock or last chance before the act |\n| **Act** | What people did (narrator B-roll) |\n| **Response** | Authority's punishment or counter-move |\n| **Aftermath** | How the story continued |\n\n## Visual–audio alignment\n\n| Rule | Good | Bad |\n|------|------|-----|\n| **Narrator B-roll** matches VO | Meeting hall while VO describes the meeting | Generic exterior for a named interior action |\n| **Character still** matches witness setting | Witness at the wharf while discussing ships | Unrelated interior while VO discusses the wharf |\n| **Events on narrator rows** | Destruction / trial on `type: narrator` | Event in VO but only talking head on screen |\n\n## Visual mode (lock one look)\n\n| Mode | `style_bible` vocabulary |\n|------|--------------------------|\n| **Photoreal period** | `photoreal period drama film still`, natural skin, period wardrobe |\n| **Painterly / storybook** | `premium painterly historical illustration`, soft ink outlines |\n| **Children's illustrated** | warm illustrated or soft 3D, friendly proportions |\n\nDo not mix photoreal and painterly vocabulary in the same film.\n\n## Ending closure bar\n\n**Three-beat close** (history / biography / causal-chain):\n\n| Order | Row | Job |\n|-------|-----|-----|\n| 1 | **Narrator aftermath** | Punishment, collective response, dated next step (≥ 3 facts) |\n| 2 | **Character witness** | First-person line tied to aftermath — not a slogan |\n| 3 | **`NN_wrap` narrator** | Recap: cause → act → consequence → legacy; answer the hook; no question to character |\n\nScience / how-it-works may end **narrator-only** after the expert (`07_conclusion` pattern).\n\nExample plans: `output/interactive-explainer/<project-slug>/plan.json`.\n\n## Visual continuity\n\n- One **`style_bible`** on every still and motion prompt.\n- **Narrator beats:** wider compositions, Ken Burns motion, environment / diagram storytelling.\n- **Character beats:** head-and-shoulders, **slight angle**, **lips in frame**; match lighting when `follows` is set. On-camera motion lives in `video_prompt`, not still `edit_prompt`.\n- Do not mix unrelated aesthetics unless the topic demands it.\n\n## Assembly\n\n1. Render **all** narrator + character clips in scene order.\n2. **Normalize** audio (48 kHz stereo) before concat if mixing avatar + p-video clips.\n3. **Concat** with hard cuts (default) or short crossfades on `chain_from_previous`.\n4. Optional **Stable Audio** bed under dialogue (~0.08–0.10).\n\nRunner: agent follows `interactive-explainer` phase table (curl + ffmpeg — no Python scripts).\n\n## Plan JSON skeleton\n\n```json\n{\n  \"title\": \"Topic — Educational Short\",\n  \"hero_prompt\": \"…\",\n  \"style_bible\": \"…\",\n  \"narration\": {\n    \"voice\": \"Charon\",\n    \"style_prompt\": \"Engaging educational host…\",\n    \"max_seconds_per_scene\": 19,\n    \"scene_lines\": { \"01_hook\": \"…\" }\n  },\n  \"cast\": {\n    \"expert\": { \"voice\": \"Zephyr (Female)\", \"voice_prompt\": \"…\" }\n  },\n  \"voice_scripts\": {\n    \"02_expert_speaks\": \"First-person line…\"\n  },\n  \"scenes\": [\n    { \"id\": \"01_hook\", \"type\": \"narrator\", \"edit_prompt\": \"…\", \"last_frame_edit_prompt\": \"…\", \"video_prompt\": \"…\" },\n    { \"id\": \"02_expert_speaks\", \"type\": \"character\", \"cast\": \"expert\", \"edit_prompt\": \"… mouth visible …\", \"video_prompt\": \"…\" }\n  ]\n}\n```\n\n## Workflows\n\n- `interactive-explainer` — primary workflow\n- `narrated-multi-scene` — narrator-only fallback\n- `avatar-multi-scene` — character-only pieces\n\nFile v1.0.14:example-prompt.md\n\n# Educational explainer (narrator + character)\n\nBuild an educational short where the **host narrator** and **experts or characters in the story talk to each other** — not wall-to-wall narration.\n\nWorks for history, science, nature, how-it-works, children's topics, and more.\n\n## Quick start prompts\n\n**Science / nature:**\n> Use the **interactive-explainer** workflow for [topic]. Alternate **narrator** beats (`p-video-2` + Gemini TTS, scene anchor triple, lines ≤19s) with **character** beats (`p-video-avatar`, expert `voice_script`, lips-in-frame stills). **720p, 24 fps** (unless user wants higher delivery). Narrator `video_prompt`: `OPEN:` / `MID:` (camera or light — physics-safe) / `CLOSE:`. Character `video_prompt`: **one continuous take** (slow push-in). **Still prompts: positive only** — plain surfaces, unprinted props, one camera angle; never `no …` or `avoid …` in creative fields (see skill **Positive prompts only**). Use **`still_from`** on character rows after object/B-roll heroes. Target ~40% character scenes. Pass the [stand-alone test](./references/interactive-explainer-scenes.md).\n\n**History / biography:**\n> Same workflow — one through-line (not a life survey), witness-style `voice_scripts`, causal chain for events (mechanism → act → response → aftermath). Pick one **visual mode** for the whole film and lock it in `style_bible` and all stills. Close with **three beats**: narrator aftermath (≥3 concrete facts) → final character witness → **`NN_wrap` narrator recap** that answers the hook (bookend stills when possible). **720p, 24 fps**, physics-safe motion per [interactive-explainer-motion.md](./references/interactive-explainer-motion.md).\n\n**Children's educational:**\n> Same workflow — warm illustrated `style_bible`, friendly guide or kid character, simpler vocabulary, shorter lines.\n\n## Copy template\n\n```bash\nmkdir -p output/interactive-explainer/my-explainer/{stills,clips,audio}\ncp skills/workflows/interactive-explainer/templates/explainer-plan.template.json \\\n   output/interactive-explainer/my-explainer/plan.json\n```\n\n## Install\n\n```bash\nnpx skills add PrunaAI/pruna-skills@interactive-explainer -y\n# or: npx skills add PrunaAI/pruna-skills@pruna -y\n```\n\nFile v1.0.14:skill-card.md\n\n## Description:\n\nHelps create educational video explainers that alternate host narration with on-camera characters or experts.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nCreators and educators use this skill to plan and produce short history, science, and other educational videos with narrator and character dialogue.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Unpinned installation commands can fetch changing third-party tooling.\n\nMitigation: Install from a trusted source and prefer pinned or preinstalled skill tooling.\n\nRisk: Generation can upload media to external services and incur video, speech, or music costs.\n\nMitigation: Review media before upload and use the plan, stills, and clips approval gates before paid generation.\n\n## Reference(s):\n\n- [Interactive Explainer on ClawHub](https://clawhub.ai/pruna-ai/skills/interactive-explainer)\n- [Explainer scene patterns](references/interactive-explainer-scenes.md)\n- [Explainer motion guidance](references/interactive-explainer-motion.md)\n- [Explainer prompt guidance](references/interactive-explainer-prompts.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Configuration, Shell commands]\n\n**Output Format:** [Markdown scene plans and prompts, JSON production plan, and video assembly commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Approval gates before stills, clips, and final assembly; optional generated MP4 delivery]\n\n## Skill Version(s):\n\n1.0.14 (source: release metadata and skill frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.14:skill.manifest.json\n\n{\n  \"references\": [\n    \"interactive-explainer-scenes.md\",\n    \"interactive-explainer-motion.md\",\n    \"interactive-explainer-prompts.md\"\n  ],\n  \"templates\": [\n    \"explainer-plan.template.json\"\n  ],\n  \"generation_phases\": {\n    \"default\": \"stills\",\n    \"phases\": [\n      \"stills\",\n      \"tts\",\n      \"video\",\n      \"assemble\"\n    ]\n  }\n}\n\nFile v1.0.14:templates/explainer-plan.template.json\n\n{\n  \"title\": \"How Volcanoes Erupt — Educational Explainer\",\n  \"hero_prompt\": \"Cinematic photoreal volcano with glowing magma chamber visible through rock, science visualization, soft atmospheric haze, 16:9 one camera angle\",\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"frame_chain_mode\": \"parallel_vignettes\",\n  \"assembly\": {\n    \"chain_crossfade_seconds\": 0.1,\n    \"hard_cut_crossfade_seconds\": 0\n  },\n  \"defaults\": {\n    \"resolution\": \"720p\",\n    \"fps\": 24,\n    \"aspect_ratio\": \"16:9\",\n    \"avatar_negative_prompt\": \"subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words, readable signage, UI overlay, lower third, chyron, title card\",\n    \"avatar_negative_prompt_strength\": 0.35\n  },\n  \"style_bible\": \"Cinematic science documentary, photoreal natural environments, clear focal subject, one camera angle, soft 35mm grain, warm saturated full color, 16:9, plain unmarked surfaces, matte unprinted props, natural daylight\",\n  \"narration\": {\n    \"enabled\": true,\n    \"voice\": \"Charon\",\n    \"max_seconds_per_scene\": 19,\n    \"style_prompt\": \"AUDIO PROFILE: Engaging science documentary host.\\n\\nDIRECTOR'S NOTES:\\n- Clear, curious, accessible to general audience.\\n- Keep lines under nineteen seconds.\\n- End with a question when handing off to a character beat.\",\n    \"scene_lines\": {\n      \"01_hook\": \"[curious] Beneath every quiet mountain, molten rock waits under immense pressure. What finally breaks the surface?\",\n      \"03_mechanism\": \"[informative] Magma rises through cracks in the crust — but the eruption style depends on what's trapped inside. So what did she see in the field?\",\n      \"05_takeaway\": \"[warmly] Volcanoes destroy — and they also build the land we walk on. The earth is never finished making itself.\"\n    }\n  },\n  \"cast\": {\n    \"geologist\": {\n      \"name\": \"Dr. Elena Reyes\",\n      \"persona_gender\": \"female\",\n      \"voice\": \"Zephyr (Female)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Enthusiastic field geologist, first-person expert, clear lip sync, accessible plain-language delivery\",\n      \"character_descriptor\": \"woman, Latina geologist, 40s, field gear, documentary realism\"\n    }\n  },\n  \"voice_scripts\": {\n    \"02_geologist_intro\": \"I've stood on active vents where the ground was warm under my boots. You learn fast — pressure doesn't announce itself until it's too late to ignore.\",\n    \"04_geologist_reply\": \"When gas can't escape, the magma explodes outward. It's not anger — it's physics. And it's breathtaking when you're far enough away.\"\n  },\n  \"background_music\": {\n    \"enabled\": true,\n    \"model\": \"stability-ai/stable-audio-2.5\",\n    \"volume\": 0.08,\n    \"prompt\": \"Documentary science score, sparse piano and low strings, 70 BPM, instrumental only, restrained wonder\"\n  },\n  \"scenes\": [\n    {\n      \"id\": \"01_hook\",\n      \"type\": \"narrator\",\n      \"chain_from_previous\": false,\n      \"edit_prompt\": \"Wide aerial of dormant volcanic peak at dawn, photoreal science visualization, serene but ominous, one camera angle\",\n      \"last_frame_edit_prompt\": \"Volcanic peak closer on steam vent wisps, golden light, one camera angle\",\n      \"video_prompt\": \"OPEN: hold wide aerial. MID: slow drift toward steam vents, dawn light brightens on ridge. CLOSE: settle on rising vapor.\"\n    },\n    {\n      \"id\": \"02_geologist_intro\",\n      \"type\": \"character\",\n      \"cast\": \"geologist\",\n      \"follows\": \"01_hook\",\n      \"edit_prompt\": \"Same documentary style, head-and-shoulders at volcanic site, slight angle from the side, lips in frame, ash-gray landscape\",\n      \"video_prompt\": \"Medium close-up, speaks directly to camera, subtle push-in, field expert tone\"\n    },\n    {\n      \"id\": \"03_mechanism\",\n      \"type\": \"narrator\",\n      \"chain_from_previous\": false,\n      \"edit_prompt\": \"Volcano interior diagram with glowing magma chamber, photoreal science visualization, one camera angle\",\n      \"last_frame_edit_prompt\": \"Volcano interior diagram, chamber brighter, pressure implied, one camera angle\",\n      \"video_prompt\": \"OPEN: hold cross-section. MID: gentle push into chamber glow, heat shimmer in air. CLOSE: hold bright core.\"\n    },\n    {\n      \"id\": \"04_geologist_reply\",\n      \"type\": \"character\",\n      \"cast\": \"geologist\",\n      \"follows\": \"03_mechanism\",\n      \"edit_prompt\": \"Same style, head-and-shoulders with sample rock in hand, slight angle from the side, lips in frame, field light\",\n      \"video_prompt\": \"Medium close-up, speaks directly to camera, subtle push-in, field light shifts on face\"\n    },\n    {\n      \"id\": \"05_takeaway\",\n      \"type\": \"narrator\",\n      \"chain_from_previous\": false,\n      \"edit_prompt\": \"Lush green slopes on old volcanic caldera, photoreal wide landscape, life after eruption, one camera angle\",\n      \"last_frame_edit_prompt\": \"Volcanic caldera landscape, sun breaking through clouds, hopeful mood, one camera angle\",\n      \"video_prompt\": \"OPEN: slow pan across green caldera. MID: light breaks through clouds. CLOSE: hold hopeful wide.\"\n    }\n  ]\n}\n\nArchive v1.0.13: 9 files, 21281 bytes\n\nFiles: example-prompt.md (2230b), references/interactive-explainer-motion.md (5244b), references/interactive-explainer-prompts.md (6381b), references/interactive-explainer-scenes.md (11203b), skill-card.md (2517b), skill.manifest.json (338b), SKILL.md (13211b), templates/explainer-plan.template.json (5005b), _meta.json (141b)\n\nFile v1.0.13:SKILL.md\n\n---\nname: interactive-explainer\ndescription: Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll.\nlicense: MIT\nmetadata:\n  version: \"1.0.13\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image-ideogram` | Use when photo generation needs more control — photoreal results, text in the image, or structured JSON with hex colors and bounding boxes. Simpler photo generation, edits, and video use other skills in the suite. | `npx skills add PrunaAI/pruna-skills@p-image-ideogram -y` |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-2` | Use when someone wants a polished short clip from text, images, or imported audio — 1080p B-roll, start/end frame animation, or a motion shot with a mixed track. Not for cinematic generated-audio clips or talking-head-only hosts. | `npx skills add PrunaAI/pruna-skills@p-video-2 -y` |\n| `p-video` | Use when someone wants a simple short clip from text or images — quick B-roll, drafts, or start/end frame animation. Not when the brief needs cinematic generation, highest quality, tight lip-sync, or imported audio at 1080p. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n| `stable-audio-2.5` | Use when someone wants light instrumental background music — an ambient bed under dialogue or underscore for reels and explainers. | `npx skills add PrunaAI/pruna-skills@stable-audio-2.5 -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `interactive-explainer` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Quick reference\n\n| Resource | Path |\n|----------|------|\n| Positive prompts / blocked phrases | [./references/interactive-explainer-prompts.md](./references/interactive-explainer-prompts.md) |\n| Scene patterns & stand-alone test | [./references/interactive-explainer-scenes.md](./references/interactive-explainer-scenes.md) |\n| Motion (OPEN/MID/CLOSE) | [./references/interactive-explainer-motion.md](./references/interactive-explainer-motion.md) |\n| Feedback discipline | `generation-diversity` |\n| Plan template | [templates/explainer-plan.template.json](./templates/explainer-plan.template.json) |\n\n## Subject flavors (pick one `style_bible`)\n\n| Flavor | Visual style | Character examples |\n|--------|--------------|-------------------|\n| **History / biography** | **Photoreal** period drama *or* **painterly / storybook** illustration (pick one — see Visual mode below) | Historical figure, witness, activist |\n| **Science / cosmos** | Cinematic space/nature, painterly realism | Scientist, astronaut, field researcher |\n| **How-it-works** | Clean documentary B-roll, diagram-friendly | Engineer, inventor, technician |\n| **Nature / wildlife** | National Geographic tone, golden hour | Ranger, marine biologist, local guide |\n| **Children's educational** | Warm illustrated or soft 3D, friendly | Curious kid, friendly animal guide, teacher |\n\nOne **`style_bible`** for the whole film — do not mix flavors unless the topic demands it.\n\n## Defaults (720p / 24 fps)\n\nEvery plan should set:\n\n```json\n\"defaults\": {\n  \"resolution\": \"720p\",\n  \"fps\": 24,\n  \"aspect_ratio\": \"16:9\"\n}\n```\n\n- **`p-video-2`** (narrator, quality): uses `resolution` + `fps`. Simpler narrator clips: **`p-video`**.\n- **`p-video-avatar`** (character): uses `resolution` only\n\n## Motion (dynamic, physics-safe)\n\nEvery scene needs **visible motion** — but not physics-heavy action. See [./references/interactive-explainer-motion.md](./references/interactive-explainer-motion.md).\n\n| Do | Don't |\n|----|-------|\n| Camera dolly, pan, tilt, push-in | throw, catch, pour, walk across room |\n| Light shifts, steam, curtain drift | object handoffs, door slams, collisions |\n| One subtle gesture or expression | multi-step physical action |\n\nWrite **`video_prompt`** as `OPEN:` → `MID:` (attention hook) → `CLOSE:` (settle on end still). Keep camera moves **slow and deliberate**.\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n| Topic | Questions |\n|-------|-----------|\n| **Topic** | What should the viewer learn? Key facts or story beats? |\n| **Media source** | **Generate** all stills/avatars with Pruna vs **upload** cast photos, locations, or reference plates? |\n| **Format** | Delivery **`9:16` / `16:9`**; avatar and `p-video-2` output **`720p` / `1080p`**? |\n| **Audience** | Kids, general public, enthusiast? Sets tone and vocabulary |\n| **Flavor** | History? Science? Nature? How-it-works? Illustrated? |\n| **Visual mode** | Photoreal period drama, painterly storybook illustration, or children's illustrated? (one for whole film) |\n| **Speakers** | Who should **speak** on camera — expert, witness, character, subject? |\n| **Interaction mix** | Target **≥ 35% character beats** — who speaks, in what order? |\n| **Narrator** | Gemini TTS `voice` + `style_prompt` (clear, engaging host) |\n| **Cast** | Per speaker: **`persona_gender`** (`female` / `male`), Pruna `voice` (must match gender), `voice_prompt`, **`character_descriptor`** (gendered look), `style_bible` |\n| **Per narrator scene** | `edit_prompt`, `last_frame_edit_prompt`, **`video_prompt`** (OPEN/MID/CLOSE, physics-safe motion), TTS line **≤ ~19s** (P-API audio-led cap) |\n| **Per character scene** | `edit_prompt` (optional **`still_from`** prior character scene), **`video_prompt`** (single continuous take — see motion doc), `voice_script` (any length avatar supports) |\n| **Assembly** | Optional bed? Crossfades? |\n\nDraft the **full scene table** as a dialogue arc before any API calls. Confirm with user (**Phase 0 — plan**). Do not call generative APIs until the user replies **approve plan** / **go**.\n\n**Story depth bar (required before render):** The film must pass the [stand-alone test](./references/interactive-explainer-scenes.md#stand-alone-test). If the story is a biography, pick **one through-line** — not a life survey.\n\n## Feedback gates (required)\n\n| Phase | What to show the user | Proceed when |\n|-------|----------------------|--------------|\n| **0 — Plan** | Scene table, cast, `style_bible`, sample still/motion lines | **approve plan** |\n| **A — Stills** | `stills/hero.png`, scene start/end PNGs | **approve stills** |\n| **A2 — TTS** | `audio/narration_*.mp3` — listen for pace and length | Lines OK (`ffprobe` ≤ ~19s) → video |\n| **B — Video** | `clips/*.mp4` — motion, lip sync, text burn-in | **approve clips** |\n| **D — Bed** | Final MP4 after concat + Stable Audio mix | User accepts delivery |\n\n## Generation phases\n\n| Phase | Action |\n|-------|--------|\n| **stills** | Hero + start/end stills (default first stop) |\n| **tts** | Narrator TTS only — after stills approval |\n| **video** | After TTS listen gate — `p-video-2` + `p-video-avatar` |\n| **assemble** | After clips approval — concat ± bed |\n\n## Scene table (template)\n\n| `#` | `type` | Who | Function | Audio |\n|-----|--------|-----|----------|-------|\n| 1 | `narrator` | Host | Hook — pose the question | TTS line |\n| 2 | `character` | Expert / witness | Answer or personal angle | `voice_script` |\n| 3 | `narrator` | Host | Explain the mechanism / context | TTS line |\n| 4 | `character` | Expert / witness | Clarify or emotional beat | `voice_script` |\n| 5 | `narrator` | Host | Takeaway / legacy | TTS line |\n\n## Scene types\n\n| `type` | Model | Stills | Audio |\n|--------|-------|--------|-------|\n| **`narrator`** | `p-video-2` (quality) / `p-video` (simpler) | start + end via `p-image-edit` | TTS → upload → `input.audio`; omit `duration` |\n| **`character`** | `p-video-avatar` | start only; **mouth visible** | `voice_script` + cast `voice` / `voice_prompt` |\n\nDefault if omitted: **`narrator`**.\n\n## How the agent runs this\n\n1. Copy [templates/explainer-plan.template.json](./templates/explainer-plan.template.json) → fill cast + scene table → **approve plan**.\n2. Parallel stills curl (`pruna-api`) → **approve stills**.\n3. Parallel Gemini TTS (narrator rows) → duration gate → listen.\n4. Parallel `p-video-2` triples + `p-video-avatar` → **approve clips**.\n5. ffmpeg concat ± crossfade → optional bed.\n\n## Workflow\n\n| Phase | Action |\n|-------|--------|\n| **0** | `p-image-ideogram` hero (+ optional `_cast_*` anchor stills from `anchor_still_prompt`; `p-image` for a cheap draft) |\n| **1** | Parallel `p-image-edit` start stills (all scenes) |\n| **2** | Parallel end stills (**narrator** only) |\n| **A2** | Parallel Gemini TTS (**narrator** only) |\n\n```bash\nffprobe -v error -show_entries format=duration -of csv=p=0 audio/narration_01.mp3\n# ≤ ~19s before p-video\n```\n\n| Phase | Action |\n|-------|--------|\n| **B** | Parallel `p-video-2` triples + `p-video-avatar` (avatar may exceed 20s) |\n| **C/D** | Concat ± `stable-audio-2.5` bed |\n\n**Character rows:** `persona_gender` + matching `character_descriptor`; `voice` from gender (`Zephyr` / `Puck`). Use `still_from` or `_cast_*` when hero is B-roll/objects. Avatar text suppression: [./references/interactive-explainer-prompts.md](./references/interactive-explainer-prompts.md).\n\n**Assembly:**\n\n```bash\nffmpeg -y -f concat -safe 0 -i clips.txt -c copy explainer.mp4\n```\n\nOptional crossfades via plan `assembly.hard_cut_crossfade_seconds` (~0.12–0.15 on soft joins). Re-assemble from existing clips without regenerating video.\n\n## Scripting rules\n\nDialogue arc, stand-alone test, causal chain, visual–audio alignment, visual modes, and three-beat ending: **[./references/interactive-explainer-scenes.md](./references/interactive-explainer-scenes.md)**.\n\n**Quick rules:** one through-line per film (not a life survey); narrator = facts + pointed questions; character = witness reply to **that** question; narrator lines **≤ ~19s** TTS; character `video_prompt` = one continuous shot (not OPEN/MID/CLOSE).\n\n## Common mistakes\n\n- All-narrator tables (lecture, not a conversation)\n- Character lines in `narration.scene_lines` (wrong voice pipeline)\n- Gemini TTS voice names on `p-video-avatar` (use Pruna voices)\n- Missing **lips in frame** on character stills; **facing camera** in character still prompts (use `video_prompt` for on-camera delivery)\n- Missing **`persona_gender`** on cast / voice not matching generated avatar gender\n- **Negative or avoidance prompts** in stills, `style_bible`, or `video_prompt`\n- Still-prompt **blocked substrings** — [./references/interactive-explainer-prompts.md](./references/interactive-explainer-prompts.md)\n- Biographical life-survey cramming vs single through-line\n- Static `video_prompt` (`OPEN: hold. CLOSE: hold.`) — always add a MID motion beat\n- Physics-trap motion — [./references/interactive-explainer-motion.md](./references/interactive-explainer-motion.md)\n- **Missing causal chain** / **visual–audio mismatch** / **thin ending** / **no narrator wrap**\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `narrated-multi-scene` | Use when someone wants a multi-part story with voiceover — episodic B-roll, chaptered promo, or several linked video scenes without on-camera dialogue. | `npx skills add PrunaAI/pruna-skills@narrated-multi-scene -y` |\n| `visual-transition-reel` | Use when someone wants a montage with transitions between shots — action-sequence reel or multi-scene piece where narration is optional. | `npx skills add PrunaAI/pruna-skills@visual-transition-reel -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.13:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"interactive-explainer\",\n  \"version\": \"1.0.13\",\n  \"publishedAt\": 1789653732628\n}\n\nFile v1.0.13:references/interactive-explainer-motion.md\n\n# Educational explainer motion (dynamic, physics-safe)\n\nMotion rules for **narrator** (`p-video-2`) and **character** (`p-video-avatar`) beats in `interactive-explainer`.\n\n**Shared SSoT for safe/trap tables:** `video-prompting`. This file specializes those rules for explainers (Tier B defaults + avatar continuous-take).\n\nRelated: `video-prompting` · `visual-transition-reel` · `video-prompting`\n\n## Defaults\n\n| Field | Default |\n|-------|---------|\n| `defaults.resolution` | **`720p`** |\n| `defaults.fps` | **`24`** (narrator `p-video-2` only; avatar uses `resolution`) |\n| `defaults.aspect_ratio` | `16:9` |\n\n## Goal\n\nEvery scene should **move** — camera, light, atmosphere, or subject — so the viewer stays engaged. Motion must **bridge start still → end still** without relying on **physics-heavy** actions that `p-video-2` handles poorly.\n\n## Prompt shape\n\n### Narrator (`p-video-2`) — OPEN / MID / CLOSE required\n\nWrite **`video_prompt`** as three beats:\n\n```text\nOPEN: [hold start composition briefly]\nMID: [camera + safe motion developing — the attention hook]\nCLOSE: [settle into end still]\n```\n\nCamera-led motion (dolly, pan, tilt, push-in, rack-focus feel).\n\n### Character (`p-video-avatar`) — single continuous take\n\n**Do not** use OPEN/MID/CLOSE on avatar rows — the model treats each beat as a transition and the clip feels cutty.\n\n```text\nSingle continuous medium close-up, one very slow push-in over the full clip, speaks directly to camera, steady expression, no cuts, no glances away, minimal head motion\n```\n\nOne camera move, steady light. Mouth motion comes from the avatar model.\n\n## Safe motion (use these)\n\n| Category | Examples |\n|----------|----------|\n| **Camera** | slow dolly in/out, gentle pan left/right, tilt up/down, push-in on face, drift across environment |\n| **Light** | spotlight finds subject, dawn light spreads, candle flicker, window glow brightens, cloud shadow passes |\n| **Atmosphere** | steam rises, dust motes, curtain sways, fog rolls, rain on glass (no splashing hands) |\n| **Subject (minimal)** | head turn toward lens, eyes lift, single hand to chest, subtle lean — **one** gesture max |\n| **Environment** | crowd silhouettes shift, banner cloth ripples, leaves rustle, water surface ripples (no objects entering water) |\n\n## Avoid (physics trap)\n\nShared trap table: `video-prompting`. For explainers, stay on **Tier B** — do **not** prompt object interaction, locomotion, or force:\n\n| Avoid | Why |\n|-------|-----|\n| throw / catch / toss / drop | object trajectory breaks |\n| pour / spill / splash | fluid simulation fails |\n| walk / run / stride across room | foot contact glitches |\n| open door / slam / handoff prop | hinge and grip artifacts |\n| pick up / set down / stack items | contact physics |\n| jump / fall / collide | body dynamics break |\n| fight / chase / sports action | multi-body chaos |\n\nIf the story needs action, **imply it** in the stills and use **camera move + reaction** in video — not the action itself.\n\n**Bad:** `MID: she throws the banner and runs toward the crowd`  \n**Good:** `MID: slow push-in on her face as crowd noise swells, banner ripples behind her`\n\n## By scene type\n\n### Narrator (`p-video-2` + triple)\n\n- Start/end stills define composition; **`video_prompt` sells the transition**\n- Prefer **one dominant camera move** in MID — not three unrelated motions\n- Match narration energy: tense scenes → tighter push-in; legacy → slow tilt up\n- Keep moves **slow and deliberate**, not whip pans (bump to `48` fps only for final delivery if needed)\n\n### Character (`p-video-avatar`)\n\n- **`video_prompt`** = one continuous shot — camera + framing only, not plot action\n- Safe: `single continuous medium close-up, one very slow push-in, speaks directly to camera, no cuts`\n- Avoid: OPEN/MID/CLOSE beats, `candle flicker`, `expression shift`, `light shifts` (read as transitions)\n- Avoid: `gestures wildly`, `walks across room while talking`, `holds up document`\n- Clip length follows **`voice_script`** — no ~19s TTS cap (that limit is narrator `p-video-2` only)\n\n## Examples\n\n### Narrator (history / science)\n\n```json\n\"video_prompt\": \"OPEN: hold wide establishing frame. MID: slow push-in toward key detail in steady light. CLOSE: settle on end composition.\"\n```\n\n### Narrator (diagram / mechanism)\n\n```json\n\"video_prompt\": \"OPEN: hold wide subject. MID: gentle drift toward focal detail, subtle atmosphere. CLOSE: hold end frame — no physics action.\"\n```\n\n### Character (any flavor)\n\n```json\n\"video_prompt\": \"Single continuous medium close-up, one very slow push-in, speaks directly to camera, steady light, full color, no gestures, no cuts.\"\n```\n\n## Plan checklist (before render)\n\n- [ ] Every **narrator** scene has **OPEN / MID / CLOSE** in `video_prompt`\n- [ ] **Character** scenes use **one continuous take** wording — no OPEN/MID/CLOSE\n- [ ] Narrator MID contains **visible motion** (not `OPEN: hold. CLOSE: hold.`)\n- [ ] No physics-trap verbs in `video_prompt`\n- [ ] `defaults.resolution` = `720p`, `defaults.fps` = `24`\n- [ ] Start/end stills differ enough that camera move has somewhere to go\n\nAgent must reject plans missing MID beat or using physics-trap verbs — see `interactive-explainer` and this checklist.\n\nFile v1.0.13:references/interactive-explainer-prompts.md\n\n# Interactive explainer — positive prompts & blocked phrases\n\nExtracted reference for `interactive-explainer`. The agent enforces these rules when validating the plan before paid calls.\n\n## Principle\n\n`hero_prompt`, `style_bible`, `edit_prompt`, `last_frame_edit_prompt`, `video_prompt`, `voice_prompt`, and bed `prompt` must describe **what appears** — never what to leave out.\n\nSaying **`no text`** often **creates** readable type. Saying **`avoid crowds`** still invokes crowds. Be explicit about the single frame you want.\n\n**Never** use `no …`, `avoid …`, `not …`, `without …`, `don't`, or `do not` in creative fields. Spoken lines (`scene_lines`, `voice_scripts`) may use natural negation for history dialogue.\n\n## Banned patterns → positive rewrite\n\n| Banned pattern | Write explicitly instead |\n|----------------|--------------------------|\n| `no text` / `no signage` / `no labels` | `plain unmarked walls`, `unprinted wood surfaces`, `matte unprinted props` |\n| `avoid markets` / `avoid text` | `plain wood table`, `single camera angle`, `one focal subject` |\n| `not theatrical` / `no cuts` | `restrained matter-of-fact delivery`, `single uninterrupted take` |\n| `without vocals` | `instrumental only` |\n| `no cartoon` / `no modern` | `painterly historical illustration`, `period-accurate 1770s props only` |\n\n## Rules (summary)\n\n1. **One positive sentence per still line** — location, subject, light, period, `one camera angle`.\n2. **`style_bible`** — positive comma-clauses only. Example: `unprinted wood and parchment surfaces, plain unmarked walls, warm saturated full color, 16:9`.\n3. **Character `edit_prompt`:** `lips visible`, **slight angle from the side**; use `speaks directly to camera` in **`video_prompt`** only.\n4. **`video_prompt` (narrator):** OPEN / MID / CLOSE — camera + light + atmosphere ([interactive-explainer-motion.md](./interactive-explainer-motion.md)).\n5. **`video_prompt` (character):** `single continuous medium close-up`, `one very slow push-in`, `single uninterrupted take` — not OPEN/MID/CLOSE beats.\n6. **`p-video-avatar`:** `defaults.avatar_negative_prompt` is a **Pruna suppression token list** (nouns like `subtitles`, `watermark`) — not creative wording. See `p-video-avatar`.\n\n## Text & signage (most common)\n\n| Blocked phrase in stills | Why | Use instead |\n|-----------------|-----|-------------|\n| `farmers market`, `market stall`, `storefront`, `signage`, `neon signs` | price boards, aisle signs | produce on **plain wood table**, **matte unprinted** baskets |\n| `labeled`, `packaging`, branded bags, `price tag`, `menu`, `napkin` | product copy on surfaces | **matte unprinted** jars, food in **plain glass bowl** |\n| `graphic tee`, `decal`, `sticker`, `magazine`, `poster` | printed type on surfaces | solid-color fabrics, unbranded matte props |\n| `plated meal`, `restaurant`, `utensil`, `fork`, `knife` | menus, rim logos | **matte ceramic plate** on **plain counter**, subject food only |\n| `documentary still`, `educational still`, `educational end`, `end frame`, topic-specific doc labels | models literalize meta words | `photoreal still`, `single frame`, `closing composition` |\n| `ring light`, `studio lighting`, `HUD`, `game`, readable screens | UI text, spec overlays | sunny window, golden afternoon, soft monitor glow |\n| `maps`, `map`, `newspaper`, `broadside`, `poster`, `placard`, `ledger`, `open book`, `proclamation`, `headline`, `caption`, `inscription`, ship names on hulls | printed type or named banners | blank folded parchment, plain walls, unmarked wood, **merchant wharf** / **colonial assembly hall** (no proper nouns on surfaces) |\n| `greyscale`, `grayscale`, `graphite`, `muted-tone`, `desaturated`, cold mist / freezer haze | flat or grey frames | **warm saturated** full color, steady window light |\n| `flicker`, `strobe`, `pulse`, rapid `light shifts` / `brightens` in **narrator** `video_prompt` | pulsating exposure in `p-video` | **one** slow push-in or pan in **steady** daylight |\n\n## Collage & layout\n\n| Blocked phrase | Use instead |\n|-------|-------------|\n| `split`, `side by side`, `before and after`, `comparison`, `grid`, `collage`, `montage`, `contact sheet`, `flat lay`, `packshot`, `multiple angles`, `dual` | one subject, one camera angle, one frame |\n| **`OPENING:` / `CLOSING:`** prefixes on still lines | plain scene description — labels read as **two-panel storyboard** frames |\n| **`Same …`** matching prior shot | describe the one frame directly; use `still_from` / `_cast_*` for identity |\n| Counted triples in stills (`three ships`, `three panels`) | “colonial ships at one wharf”, “one camera angle” |\n| `storyboard`, `frame by frame`, `triptych`, `cross-section` (unless one diagram is the sole subject) | one continuous composition, one camera angle |\n\nRunner **`sanitize_still_prompt`** strips `OPENING:`/`CLOSING:` and leading `Same` before API calls.\n\n## Weather\n\n| Blocked phrase | Use instead |\n|-------|-------------|\n| `rain`, `wet pavement`, `puddle` | bright open sky, sunny window, golden afternoon |\n\n## `style_bible` example (positive only)\n\n```text\nPremium painterly historical illustration, one focal subject per shot, one camera angle, 16:9, unprinted wood surfaces, plain unmarked walls, warm saturated full color, period-accurate props\n```\n\n## Good vs bad still lines\n\n| Bad still line | Good still line |\n|----------------|-----------------|\n| `No text, no signage, farmers market` | `Plain wood table`, matte unprinted baskets, sunny window, **one camera angle** |\n| `Avoid labels on packaging` | **Matte unprinted** jars on **plain counter** |\n| Meta phrase **documentary still** + **end frame** | Concrete place + objects + **closing composition**, **one camera angle** |\n\nBroader blocked-phrase table (keyboards, mirrors, packshots): generation-diversity.md#visual-variety (`generation-diversity`).\n\n**If text appears in `p-video` but stills are clean:** simplify the narrator `video_prompt` (camera/light only) or regenerate stills with **plain surfaces** — never answer with `no text` in the prompt.\n\n## Related\n\n- Workflow skill: `interactive-explainer`\n- Motion: [interactive-explainer-motion.md](./interactive-explainer-motion.md)\n- Scenes: [interactive-explainer-scenes.md](./interactive-explainer-scenes.md)\n- Gates: generation-quality-checklists.md#approval-gates-workflows (`generation-diversity`)\n\nFile v1.0.13:references/interactive-explainer-scenes.md\n\n# Educational explainer scenes (narrator + character)\n\nCanonical pattern for **educational shorts** — history, science, nature, how-it-works, children's topics — that **alternate host narration with in-story character speech**. Not wall-to-wall voice-over.\n\nRelated: `video-prompting` (narrator beats) · `avatar-multi-scene` (character beats) · `interactive-explainer`\n\n## Why hybrid?\n\nPure narration over B-roll feels like a lecture. **Interaction** — host poses a question, an expert or witness responds, host synthesizes — reads like a prestige documentary, science show, or engaging classroom film.\n\n| Beat type | Model | Audio | Stills |\n|-----------|-------|-------|--------|\n| **`narrator`** | `p-video-2` | Gemini TTS → `input.audio` | start + end (`p-image-edit`) |\n| **`character`** | `p-video-avatar` | native `voice_script` | start only (mouth visible) |\n\nBoth use **`p-image`** hero + **`p-image-edit`** under one **`style_bible`**.\n\n**Format defaults:** `720p`, `24` fps (narrator `p-video-2`); motion: [interactive-explainer-motion.md](./interactive-explainer-motion.md) — dynamic OPEN/MID/CLOSE, physics-safe.\n\n## Subject flavors\n\n| Flavor | Narrator role | Character role | Visual `style_bible` |\n|--------|---------------|----------------|----------------------|\n| History / biography | Documentary host | Historical figure, witness | Photoreal period / biopic |\n| Science / cosmos | Science communicator | Researcher, astronaut | Cinematic space/nature realism |\n| How-it-works | Explainer host | Engineer, inventor | Clean documentary B-roll |\n| Nature | Nature narrator | Ranger, biologist | National Geographic tone |\n| Children's | Friendly teacher voice | Kid, animal guide, mascot | Warm illustration or soft 3D |\n\nPick **one** flavor per film. Swap examples in prompts — the scene machinery is identical.\n\n## Target mix\n\n| Guideline | Target |\n|-----------|--------|\n| Character / narrator ratio | **≥ 1 character beat per 2 narrator beats** (roughly 35–50% character) |\n| Scene order | Alternate when possible: narrator → character → narrator → … |\n| Narrator line length | **≤ ~19s** TTS (P-API 20s **audio-led `p-video-2`** cap) — see `video-prompting` |\n| Character line length | Reply length as needed (often 2–4 sentences); **`p-video-avatar` may exceed 20s** — clip follows `voice_script` |\n\n## Narrator beat (`type: \"narrator\"`)\n\nScene anchor **triple** — same as `video-prompting`:\n\n```json\n{\n  \"id\": \"02_mechanism\",\n  \"type\": \"narrator\",\n  \"edit_prompt\": \"OPENING: Wide view of subject in context, clear focal subject, single frame…\",\n  \"last_frame_edit_prompt\": \"CLOSING: Same subject, closer on key detail, closing composition…\",\n  \"video_prompt\": \"OPEN: hold wide. MID: slow push toward detail, steady daylight. CLOSE: settle on end frame.\"\n}\n```\n\nNarration line in `narration.scene_lines.{id}`.  \n**End with a question** when the next scene is a character reply.\n\n## Character beat (`type: \"character\"`)\n\nTalking-head beat — **`p-video-avatar`**:\n\n```json\n{\n  \"id\": \"03_expert_reply\",\n  \"type\": \"character\",\n  \"cast\": \"expert\",\n  \"still_from\": \"02_prior_expert_scene\",\n  \"follows\": \"02_mechanism\",\n  \"edit_prompt\": \"Same cast member dominates head-and-shoulders frame, slight angle, lips in frame, topic-appropriate background\",\n  \"video_prompt\": \"Single continuous medium close-up, one very slow push-in, speaks directly to camera, steady light, no gestures.\"\n}\n```\n\n`voice_script` on the scene row or in plan `voice_scripts`:\n\n```json\n\"voice_scripts\": {\n  \"03_expert_reply\": \"First-person reply that answers the narrator's exact question — concrete detail, not a slogan.\"\n}\n```\n\n**No** `last_frame_edit_prompt` on character rows — avatar uses one still.\n\n### Cast ledger\n\n```json\n\"cast\": {\n  \"expert\": {\n    \"name\": \"Dr. Example Name\",\n    \"persona_gender\": \"female\",\n    \"voice\": \"Zephyr (Female)\",\n    \"voice_language\": \"English (US)\",\n    \"voice_prompt\": \"First-person expert, clear lip sync, accessible not academic\",\n    \"character_descriptor\": \"woman, role-appropriate look matching style_bible\"\n  }\n}\n```\n\n**Gender ↔ voice:** set `persona_gender` to `female` or `male`; runner maps to `Zephyr (Female)` or `Puck (Male)`. `character_descriptor` must name the same gender so the still matches the voice.\n\n**Still prompts:** **positive only** in `style_bible`, still lines, and `video_prompt` — never `no …`, `avoid …`, or `not …` in creative fields (spoken dialogue may use natural negation). Full blocked-phrase tables: [interactive-explainer-prompts.md](./interactive-explainer-prompts.md).\n\nUse **Pruna avatar voices** (`Zephyr (Female)`, `Puck (Male)`, etc.) — not Gemini TTS voice names.\n\n## Dialogue scripting (interaction)\n\nWrite the scene table as a **conversation arc**. Examples by flavor:\n\n### Science\n\n| # | Type | Function | Example |\n|---|------|----------|---------|\n| 1 | narrator | Hook | \"What happens when a star runs out of fuel?\" |\n| 2 | character | Expert reply | \"The core collapses in seconds. What looked stable for billions of years ends in a flash.\" |\n| 3 | narrator | Context | \"That collapse can outshine an entire galaxy.\" |\n| 4 | character | Wonder beat | \"The first time I saw a supernova remnant, I stopped calculating — I just stared.\" |\n\n### History (single incident — preferred)\n\nOne through-line, full arc. Narrator = facts; character = witness.\n\n| # | Type | Function |\n|---|------|----------|\n| 1 | narrator | Hook + stakes — date, place, named question |\n| 2 | character | Witness identity — first person, specific angle |\n| 3 | narrator | Escalation — what happened next, question for witness |\n| 4 | character | Event witness — sensory or procedural detail |\n| 5 | narrator | Consequence + question |\n| 6 | character | Moral or emotional reply |\n| 7+ | narrator / character | Legacy or aftermath as needed |\n\n### History (biography — narrow the through-line)\n\nDo **not** survey a whole life. Pick **one question** the film answers.\n\n| # | Type | Function |\n|---|------|----------|\n| 1 | narrator | Hook — one wound or paradox |\n| 2 | character | Witness — specific memory, not slogan |\n| … | alternate | Each beat = one chapter of **that** arc only |\n\n**Anti-pattern:** many life eras or locations in one short — each beat becomes a slogan.\n\n## Stand-alone test\n\nEvery explainer must answer **yes** to all five before render:\n\n| # | Question |\n|---|----------|\n| 1 | **Stakes** — what could be lost? |\n| 2 | **Conflict** — who opposed whom? |\n| 3 | **Turn** — what changed after the key event? |\n| 4 | **Nuance** — at least one complication (not hagiography)? |\n| 5 | **Closure** — outcome clear without outside reading? |\n\n**Biography trap:** covering birth → fame → war → activism → death in one short. **Fix:** one through-line with the same witness/fact split as a single-incident history film.\n\n## Narrator vs character (labor split)\n\n| Narrator says | Character says |\n|---------------|----------------|\n| Dates, places, names, sequence | \"I\" witness, sensory detail, emotion |\n| Concrete fact, then one pointed question | Reply that answers **that** question only |\n| Sets up **one** question per handoff | Does not introduce a new topic or slogan |\n\n**Bad character line:** motivational poster copy, unrelated to the question.  \n**Good character line:** procedural or sensory detail tied to the prior narrator beat.\n\n## Causal chain (event explainers)\n\nDo not open on the climax. Map beats before render:\n\n| Beat (minimum) | Narrator carries |\n|----------------|------------------|\n| **Stakes / hook** | Why anyone cared |\n| **Mechanism** | Law, policy, or force that caused the crisis |\n| **Local complication** | Why *this* place or group differed |\n| **Deadline / trigger** | Clock or last chance before the act |\n| **Act** | What people did (narrator B-roll) |\n| **Response** | Authority's punishment or counter-move |\n| **Aftermath** | How the story continued |\n\n## Visual–audio alignment\n\n| Rule | Good | Bad |\n|------|------|-----|\n| **Narrator B-roll** matches VO | Meeting hall while VO describes the meeting | Generic exterior for a named interior action |\n| **Character still** matches witness setting | Witness at the wharf while discussing ships | Unrelated interior while VO discusses the wharf |\n| **Events on narrator rows** | Destruction / trial on `type: narrator` | Event in VO but only talking head on screen |\n\n## Visual mode (lock one look)\n\n| Mode | `style_bible` vocabulary |\n|------|--------------------------|\n| **Photoreal period** | `photoreal period drama film still`, natural skin, period wardrobe |\n| **Painterly / storybook** | `premium painterly historical illustration`, soft ink outlines |\n| **Children's illustrated** | warm illustrated or soft 3D, friendly proportions |\n\nDo not mix photoreal and painterly vocabulary in the same film.\n\n## Ending closure bar\n\n**Three-beat close** (history / biography / causal-chain):\n\n| Order | Row | Job |\n|-------|-----|-----|\n| 1 | **Narrator aftermath** | Punishment, collective response, dated next step (≥ 3 facts) |\n| 2 | **Character witness** | First-person line tied to aftermath — not a slogan |\n| 3 | **`NN_wrap` narrator** | Recap: cause → act → consequence → legacy; answer the hook; no question to character |\n\nScience / how-it-works may end **narrator-only** after the expert (`07_conclusion` pattern).\n\nExample plans: `output/interactive-explainer/<project-slug>/plan.json`.\n\n## Visual continuity\n\n- One **`style_bible`** on every still and motion prompt.\n- **Narrator beats:** wider compositions, Ken Burns motion, environment / diagram storytelling.\n- **Character beats:** head-and-shoulders, **slight angle**, **lips in frame**; match lighting when `follows` is set. On-camera motion lives in `video_prompt`, not still `edit_prompt`.\n- Do not mix unrelated aesthetics unless the topic demands it.\n\n## Assembly\n\n1. Render **all** narrator + character clips in scene order.\n2. **Normalize** audio (48 kHz stereo) before concat if mixing avatar + p-video clips.\n3. **Concat** with hard cuts (default) or short crossfades on `chain_from_previous`.\n4. Optional **Stable Audio** bed under dialogue (~0.08–0.10).\n\nRunner: agent follows `interactive-explainer` phase table (curl + ffmpeg — no Python scripts).\n\n## Plan JSON skeleton\n\n```json\n{\n  \"title\": \"Topic — Educational Short\",\n  \"hero_prompt\": \"…\",\n  \"style_bible\": \"…\",\n  \"narration\": {\n    \"voice\": \"Charon\",\n    \"style_prompt\": \"Engaging educational host…\",\n    \"max_seconds_per_scene\": 19,\n    \"scene_lines\": { \"01_hook\": \"…\" }\n  },\n  \"cast\": {\n    \"expert\": { \"voice\": \"Zephyr (Female)\", \"voice_prompt\": \"…\" }\n  },\n  \"voice_scripts\": {\n    \"02_expert_speaks\": \"First-person line…\"\n  },\n  \"scenes\": [\n    { \"id\": \"01_hook\", \"type\": \"narrator\", \"edit_prompt\": \"…\", \"last_frame_edit_prompt\": \"…\", \"video_prompt\": \"…\" },\n    { \"id\": \"02_expert_speaks\", \"type\": \"character\", \"cast\": \"expert\", \"edit_prompt\": \"… mouth visible …\", \"video_prompt\": \"…\" }\n  ]\n}\n```\n\n## Workflows\n\n- `interactive-explainer` — primary workflow\n- `narrated-multi-scene` — narrator-only fallback\n- `avatar-multi-scene` — character-only pieces\n\nFile v1.0.13:example-prompt.md\n\n# Educational explainer (narrator + character)\n\nBuild an educational short where the **host narrator** and **experts or characters in the story talk to each other** — not wall-to-wall narration.\n\nWorks for history, science, nature, how-it-works, children's topics, and more.\n\n## Quick start prompts\n\n**Science / nature:**\n> Use the **interactive-explainer** workflow for [topic]. Alternate **narrator** beats (`p-video-2` + Gemini TTS, scene anchor triple, lines ≤19s) with **character** beats (`p-video-avatar`, expert `voice_script`, lips-in-frame stills). **720p, 24 fps** (unless user wants higher delivery). Narrator `video_prompt`: `OPEN:` / `MID:` (camera or light — physics-safe) / `CLOSE:`. Character `video_prompt`: **one continuous take** (slow push-in). **Still prompts: positive only** — plain surfaces, unprinted props, one camera angle; never `no …` or `avoid …` in creative fields (see skill **Positive prompts only**). Use **`still_from`** on character rows after object/B-roll heroes. Target ~40% character scenes. Pass the [stand-alone test](./references/interactive-explainer-scenes.md).\n\n**History / biography:**\n> Same workflow — one through-line (not a life survey), witness-style `voice_scripts`, causal chain for events (mechanism → act → response → aftermath). Pick one **visual mode** for the whole film and lock it in `style_bible` and all stills. Close with **three beats**: narrator aftermath (≥3 concrete facts) → final character witness → **`NN_wrap` narrator recap** that answers the hook (bookend stills when possible). **720p, 24 fps**, physics-safe motion per [interactive-explainer-motion.md](./references/interactive-explainer-motion.md).\n\n**Children's educational:**\n> Same workflow — warm illustrated `style_bible`, friendly guide or kid character, simpler vocabulary, shorter lines.\n\n## Copy template\n\n```bash\nmkdir -p output/interactive-explainer/my-explainer/{stills,clips,audio}\ncp skills/workflows/interactive-explainer/templates/explainer-plan.template.json \\\n   output/interactive-explainer/my-explainer/plan.json\n```\n\n## Install\n\n```bash\nnpx skills add PrunaAI/pruna-skills@interactive-explainer -y\n# or: npx skills add PrunaAI/pruna-skills@pruna -y\n```\n\nFile v1.0.13:skill-card.md\n\n## Description:\n\nUse when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal creators, educators, and developers use this skill to plan and generate educational shorts that alternate narrator beats with on-camera expert or character dialogue. It provides phase-gated guidance for story structure, prompts, stills, TTS, video clips, and final assembly.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The workflow can call external paid media-generation services during still, audio, video, and assembly phases.\n\nMitigation: Follow the documented approval gates and do not start paid generation until the user has approved the relevant phase.\n\nRisk: The workflow depends on installing and using multiple Pruna skills.\n\nMitigation: Review the Pruna skills being added and prefer pinned or vetted versions where available.\n\nRisk: Generated educational media can contain inaccurate narration, misleading visuals, or inclusivity issues.\n\nMitigation: Review plans, stills, audio, and clips before final assembly, and revise prompts or scripts when quality or representation issues appear.\n\n## Reference(s):\n\n- [Educational explainer motion](references/interactive-explainer-motion.md)\n- [Interactive explainer prompts](references/interactive-explainer-prompts.md)\n- [Educational explainer scenes](references/interactive-explainer-scenes.md)\n- [Educational explainer example prompt](example-prompt.md)\n- [Explainer plan template](templates/explainer-plan.template.json)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Configuration, Shell commands, Guidance]\n\n**Output Format:** [Markdown guidance with JSON plan configuration and inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Phase-gated workflow with approve plan, approve stills, and approve clips checkpoints; default plan settings are 720p, 24 fps, and 16:9.]\n\n## Skill Version(s):\n\n1.0.13 (source: server release metadata and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.13:skill.manifest.json\n\n{\n  \"references\": [\n    \"interactive-explainer-scenes.md\",\n    \"interactive-explainer-motion.md\",\n    \"interactive-explainer-prompts.md\"\n  ],\n  \"templates\": [\n    \"explainer-plan.template.json\"\n  ],\n  \"generation_phases\": {\n    \"default\": \"stills\",\n    \"phases\": [\n      \"stills\",\n      \"tts\",\n      \"video\",\n      \"assemble\"\n    ]\n  }\n}\n\nFile v1.0.13:templates/explainer-plan.template.json\n\n{\n  \"title\": \"How Volcanoes Erupt — Educational Explainer\",\n  \"hero_prompt\": \"Cinematic photoreal volcano with glowing magma chamber visible through rock, science visualization, soft atmospheric haze, 16:9 one camera angle\",\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"frame_chain_mode\": \"parallel_vignettes\",\n  \"assembly\": {\n    \"chain_crossfade_seconds\": 0.1,\n    \"hard_cut_crossfade_seconds\": 0\n  },\n  \"defaults\": {\n    \"resolution\": \"720p\",\n    \"fps\": 24,\n    \"aspect_ratio\": \"16:9\",\n    \"avatar_negative_prompt\": \"subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words, readable signage, UI overlay, lower third, chyron, title card\",\n    \"avatar_negative_prompt_strength\": 0.35\n  },\n  \"style_bible\": \"Cinematic science documentary, photoreal natural environments, clear focal subject, one camera angle, soft 35mm grain, warm saturated full color, 16:9, plain unmarked surfaces, matte unprinted props, natural daylight\",\n  \"narration\": {\n    \"enabled\": true,\n    \"voice\": \"Charon\",\n    \"max_seconds_per_scene\": 19,\n    \"style_prompt\": \"AUDIO PROFILE: Engaging science documentary host.\\n\\nDIRECTOR'S NOTES:\\n- Clear, curious, accessible to general audience.\\n- Keep lines under nineteen seconds.\\n- End with a question when handing off to a character beat.\",\n    \"scene_lines\": {\n      \"01_hook\": \"[curious] Beneath every quiet mountain, molten rock waits under immense pressure. What finally breaks the surface?\",\n      \"03_mechanism\": \"[informative] Magma rises through cracks in the crust — but the eruption style depends on what's trapped inside. So what did she see in the field?\",\n      \"05_takeaway\": \"[warmly] Volcanoes destroy — and they also build the land we walk on. The earth is never finished making itself.\"\n    }\n  },\n  \"cast\": {\n    \"geologist\": {\n      \"name\": \"Dr. Elena Reyes\",\n      \"persona_gender\": \"female\",\n      \"voice\": \"Zephyr (Female)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Enthusiastic field geologist, first-person expert, clear lip sync, accessible plain-language delivery\",\n      \"character_descriptor\": \"woman, Latina geologist, 40s, field gear, documentary realism\"\n    }\n  },\n  \"voice_scripts\": {\n    \"02_geologist_intro\": \"I've stood on active vents where the ground was warm under my boots. You learn fast — pressure doesn't announce itself until it's too late to ignore.\",\n    \"04_geologist_reply\": \"When gas can't escape, the magma explodes outward. It's not anger — it's physics. And it's breathtaking when you're far enough away.\"\n  },\n  \"background_music\": {\n    \"enabled\": true,\n    \"model\": \"stability-ai/stable-audio-2.5\",\n    \"volume\": 0.08,\n    \"prompt\": \"Documentary science score, sparse piano and low strings, 70 BPM, instrumental only, restrained wonder\"\n  },\n  \"scenes\": [\n    {\n      \"id\": \"01_hook\",\n      \"type\": \"narrator\",\n      \"chain_from_previous\": false,\n      \"edit_prompt\": \"Wide aerial of dormant volcanic peak at dawn, photoreal science visualization, serene but ominous, one camera angle\",\n      \"last_frame_edit_prompt\": \"Volcanic peak closer on steam vent wisps, golden light, one camera angle\",\n      \"video_prompt\": \"OPEN: hold wide aerial. MID: slow drift toward steam vents, dawn light brightens on ridge. CLOSE: settle on rising vapor.\"\n    },\n    {\n      \"id\": \"02_geologist_intro\",\n      \"type\": \"character\",\n      \"cast\": \"geologist\",\n      \"follows\": \"01_hook\",\n      \"edit_prompt\": \"Same documentary style, head-and-shoulders at volcanic site, slight angle from the side, lips in frame, ash-gray landscape\",\n      \"video_prompt\": \"Medium close-up, speaks directly to camera, subtle push-in, field expert tone\"\n    },\n    {\n      \"id\": \"03_mechanism\",\n      \"type\": \"narrator\",\n      \"chain_from_previous\": false,\n      \"edit_prompt\": \"Volcano interior diagram with glowing magma chamber, photoreal science visualization, one camera angle\",\n      \"last_frame_edit_prompt\": \"Volcano interior diagram, chamber brighter, pressure implied, one camera angle\",\n      \"video_prompt\": \"OPEN: hold cross-section. MID: gentle push into chamber glow, heat shimmer in air. CLOSE: hold bright core.\"\n    },\n    {\n      \"id\": \"04_geologist_reply\",\n      \"type\": \"character\",\n      \"cast\": \"geologist\",\n      \"follows\": \"03_mechanism\",\n      \"edit_prompt\": \"Same style, head-and-shoulders with sample rock in hand, slight angle from the side, lips in frame, field light\",\n      \"video_prompt\": \"Medium close-up, speaks directly to camera, subtle push-in, field light shifts on face\"\n    },\n    {\n      \"id\": \"05_takeaway\",\n      \"type\": \"narrator\",\n      \"chain_from_previous\": false,\n      \"edit_prompt\": \"Lush green slopes on old volcanic caldera, photoreal wide landscape, life after eruption, one camera angle\",\n      \"last_frame_edit_prompt\": \"Volcanic caldera landscape, sun breaking through clouds, hopeful mood, one camera angle\",\n      \"video_prompt\": \"OPEN: slow pan across green caldera. MID: light breaks through clouds. CLOSE: hold hopeful wide.\"\n    }\n  ]\n}\n\nArchive v1.0.12: 9 files, 21320 bytes\n\nFiles: example-prompt.md (2230b), references/interactive-explainer-motion.md (5244b), references/interactive-explainer-prompts.md (6381b), references/interactive-explainer-scenes.md (11203b), skill-card.md (2725b), skill.manifest.json (338b), SKILL.md (13162b), templates/explainer-plan.template.json (5005b), _meta.json (141b)\n\nFile v1.0.12:SKILL.md\n\n---\nname: interactive-explainer\ndescription: Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll.\nlicense: MIT\nmetadata:\n  version: \"1.0.12\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image-ideogram` | Use when photo generation needs more control — photoreal results, text in the image, or structured JSON with hex colors and bounding boxes. Simpler photo generation, edits, and video use other skills in the suite. | `npx skills add PrunaAI/pruna-skills@p-image-ideogram -y` |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-2` | Use when someone wants the best-quality short clip from text, images, or audio — polished B-roll, start/end frame animation, or a motion shot with stronger lip-sync. Not for full multi-scene films or talking-head-only hosts. | `npx skills add PrunaAI/pruna-skills@p-video-2 -y` |\n| `p-video` | Use when someone wants a simple short clip from text or images — quick B-roll, drafts, or start/end frame animation. Not when the brief needs the highest quality or tight lip-sync. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n| `stable-audio-2.5` | Use when someone wants light instrumental background music — an ambient bed under dialogue or underscore for reels and explainers. | `npx skills add PrunaAI/pruna-skills@stable-audio-2.5 -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `interactive-explainer` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Quick reference\n\n| Resource | Path |\n|----------|------|\n| Positive prompts / blocked phrases | [./references/interactive-explainer-prompts.md](./references/interactive-explainer-prompts.md) |\n| Scene patterns & stand-alone test | [./references/interactive-explainer-scenes.md](./references/interactive-explainer-scenes.md) |\n| Motion (OPEN/MID/CLOSE) | [./references/interactive-explainer-motion.md](./references/interactive-explainer-motion.md) |\n| Feedback discipline | `generation-diversity` |\n| Plan template | [templates/explainer-plan.template.json](./templates/explainer-plan.template.json) |\n\n## Subject flavors (pick one `style_bible`)\n\n| Flavor | Visual style | Character examples |\n|--------|--------------|-------------------|\n| **History / biography** | **Photoreal** period drama *or* **painterly / storybook** illustration (pick one — see Visual mode below) | Historical figure, witness, activist |\n| **Science / cosmos** | Cinematic space/nature, painterly realism | Scientist, astronaut, field researcher |\n| **How-it-works** | Clean documentary B-roll, diagram-friendly | Engineer, inventor, technician |\n| **Nature / wildlife** | National Geographic tone, golden hour | Ranger, marine biologist, local guide |\n| **Children's educational** | Warm illustrated or soft 3D, friendly | Curious kid, friendly animal guide, teacher |\n\nOne **`style_bible`** for the whole film — do not mix flavors unless the topic demands it.\n\n## Defaults (720p / 24 fps)\n\nEvery plan should set:\n\n```json\n\"defaults\": {\n  \"resolution\": \"720p\",\n  \"fps\": 24,\n  \"aspect_ratio\": \"16:9\"\n}\n```\n\n- **`p-video-2`** (narrator, quality): uses `resolution` + `fps`. Simpler narrator clips: **`p-video`**.\n- **`p-video-avatar`** (character): uses `resolution` only\n\n## Motion (dynamic, physics-safe)\n\nEvery scene needs **visible motion** — but not physics-heavy action. See [./references/interactive-explainer-motion.md](./references/interactive-explainer-motion.md).\n\n| Do | Don't |\n|----|-------|\n| Camera dolly, pan, tilt, push-in | throw, catch, pour, walk across room |\n| Light shifts, steam, curtain drift | object handoffs, door slams, collisions |\n| One subtle gesture or expression | multi-step physical action |\n\nWrite **`video_prompt`** as `OPEN:` → `MID:` (attention hook) → `CLOSE:` (settle on end still). Keep camera moves **slow and deliberate**.\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n| Topic | Questions |\n|-------|-----------|\n| **Topic** | What should the viewer learn? Key facts or story beats? |\n| **Media source** | **Generate** all stills/avatars with Pruna vs **upload** cast photos, locations, or reference plates? |\n| **Format** | Delivery **`9:16` / `16:9`**; avatar and `p-video-2` output **`720p` / `1080p`**? |\n| **Audience** | Kids, general public, enthusiast? Sets tone and vocabulary |\n| **Flavor** | History? Science? Nature? How-it-works? Illustrated? |\n| **Visual mode** | Photoreal period drama, painterly storybook illustration, or children's illustrated? (one for whole film) |\n| **Speakers** | Who should **speak** on camera — expert, witness, character, subject? |\n| **Interaction mix** | Target **≥ 35% character beats** — who speaks, in what order? |\n| **Narrator** | Gemini TTS `voice` + `style_prompt` (clear, engaging host) |\n| **Cast** | Per speaker: **`persona_gender`** (`female` / `male`), Pruna `voice` (must match gender), `voice_prompt`, **`character_descriptor`** (gendered look), `style_bible` |\n| **Per narrator scene** | `edit_prompt`, `last_frame_edit_prompt`, **`video_prompt`** (OPEN/MID/CLOSE, physics-safe motion), TTS line **≤ ~19s** (P-API audio-led cap) |\n| **Per character scene** | `edit_prompt` (optional **`still_from`** prior character scene), **`video_prompt`** (single continuous take — see motion doc), `voice_script` (any length avatar supports) |\n| **Assembly** | Optional bed? Crossfades? |\n\nDraft the **full scene table** as a dialogue arc before any API calls. Confirm with user (**Phase 0 — plan**). Do not call generative APIs until the user replies **approve plan** / **go**.\n\n**Story depth bar (required before render):** The film must pass the [stand-alone test](./references/interactive-explainer-scenes.md#stand-alone-test). If the story is a biography, pick **one through-line** — not a life survey.\n\n## Feedback gates (required)\n\n| Phase | What to show the user | Proceed when |\n|-------|----------------------|--------------|\n| **0 — Plan** | Scene table, cast, `style_bible`, sample still/motion lines | **approve plan** |\n| **A — Stills** | `stills/hero.png`, scene start/end PNGs | **approve stills** |\n| **A2 — TTS** | `audio/narration_*.mp3` — listen for pace and length | Lines OK (`ffprobe` ≤ ~19s) → video |\n| **B — Video** | `clips/*.mp4` — motion, lip sync, text burn-in | **approve clips** |\n| **D — Bed** | Final MP4 after concat + Stable Audio mix | User accepts delivery |\n\n## Generation phases\n\n| Phase | Action |\n|-------|--------|\n| **stills** | Hero + start/end stills (default first stop) |\n| **tts** | Narrator TTS only — after stills approval |\n| **video** | After TTS listen gate — `p-video-2` + `p-video-avatar` |\n| **assemble** | After clips approval — concat ± bed |\n\n## Scene table (template)\n\n| `#` | `type` | Who | Function | Audio |\n|-----|--------|-----|----------|-------|\n| 1 | `narrator` | Host | Hook — pose the question | TTS line |\n| 2 | `character` | Expert / witness | Answer or personal angle | `voice_script` |\n| 3 | `narrator` | Host | Explain the mechanism / context | TTS line |\n| 4 | `character` | Expert / witness | Clarify or emotional beat | `voice_script` |\n| 5 | `narrator` | Host | Takeaway / legacy | TTS line |\n\n## Scene types\n\n| `type` | Model | Stills | Audio |\n|--------|-------|--------|-------|\n| **`narrator`** | `p-video-2` (quality) / `p-video` (simpler) | start + end via `p-image-edit` | TTS → upload → `input.audio`; omit `duration` |\n| **`character`** | `p-video-avatar` | start only; **mouth visible** | `voice_script` + cast `voice` / `voice_prompt` |\n\nDefault if omitted: **`narrator`**.\n\n## How the agent runs this\n\n1. Copy [templates/explainer-plan.template.json](./templates/explainer-plan.template.json) → fill cast + scene table → **approve plan**.\n2. Parallel stills curl (`pruna-api`) → **approve stills**.\n3. Parallel Gemini TTS (narrator rows) → duration gate → listen.\n4. Parallel `p-video-2` triples + `p-video-avatar` → **approve clips**.\n5. ffmpeg concat ± crossfade → optional bed.\n\n## Workflow\n\n| Phase | Action |\n|-------|--------|\n| **0** | `p-image-ideogram` hero (+ optional `_cast_*` anchor stills from `anchor_still_prompt`; `p-image` for a cheap draft) |\n| **1** | Parallel `p-image-edit` start stills (all scenes) |\n| **2** | Parallel end stills (**narrator** only) |\n| **A2** | Parallel Gemini TTS (**narrator** only) |\n\n```bash\nffprobe -v error -show_entries format=duration -of csv=p=0 audio/narration_01.mp3\n# ≤ ~19s before p-video\n```\n\n| Phase | Action |\n|-------|--------|\n| **B** | Parallel `p-video-2` triples + `p-video-avatar` (avatar may exceed 20s) |\n| **C/D** | Concat ± `stable-audio-2.5` bed |\n\n**Character rows:** `persona_gender` + matching `character_descriptor`; `voice` from gender (`Zephyr` / `Puck`). Use `still_from` or `_cast_*` when hero is B-roll/objects. Avatar text suppression: [./references/interactive-explainer-prompts.md](./references/interactive-explainer-prompts.md).\n\n**Assembly:**\n\n```bash\nffmpeg -y -f concat -safe 0 -i clips.txt -c copy explainer.mp4\n```\n\nOptional crossfades via plan `assembly.hard_cut_crossfade_seconds` (~0.12–0.15 on soft joins). Re-assemble from existing clips without regenerating video.\n\n## Scripting rules\n\nDialogue arc, stand-alone test, causal chain, visual–audio alignment, visual modes, and three-beat ending: **[./references/interactive-explainer-scenes.md](./references/interactive-explainer-scenes.md)**.\n\n**Quick rules:** one through-line per film (not a life survey); narrator = facts + pointed questions; character = witness reply to **that** question; narrator lines **≤ ~19s** TTS; character `video_prompt` = one continuous shot (not OPEN/MID/CLOSE).\n\n## Common mistakes\n\n- All-narrator tables (lecture, not a conversation)\n- Character lines in `narration.scene_lines` (wrong voice pipeline)\n- Gemini TTS voice names on `p-video-avatar` (use Pruna voices)\n- Missing **lips in frame** on character stills; **facing camera** in character still prompts (use `video_prompt` for on-camera delivery)\n- Missing **`persona_gender`** on cast / voice not matching generated avatar gender\n- **Negative or avoidance prompts** in stills, `style_bible`, or `video_prompt`\n- Still-prompt **blocked substrings** — [./references/interactive-explainer-prompts.md](./references/interactive-explainer-prompts.md)\n- Biographical life-survey cramming vs single through-line\n- Static `video_prompt` (`OPEN: hold. CLOSE: hold.`) — always add a MID motion beat\n- Physics-trap motion — [./references/interactive-explainer-motion.md](./references/interactive-explainer-motion.md)\n- **Missing causal chain** / **visual–audio mismatch** / **thin ending** / **no narrator wrap**\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `narrated-multi-scene` | Use when someone wants a multi-part story with voiceover — episodic B-roll, chaptered promo, or several linked video scenes without on-camera dialogue. | `npx skills add PrunaAI/pruna-skills@narrated-multi-scene -y` |\n| `visual-transition-reel` | Use when someone wants a montage with transitions between shots — action-sequence reel or multi-scene piece where narration is optional. | `npx skills add PrunaAI/pruna-skills@visual-transition-reel -y` |\n| `video-editing` | Use when assembling or polishing already-rendered clips with ffmpeg — concat, crossfades, burned captions and subtitles, text/logo overlays, before/after sliders, background music beds, platform export — or when composing a multi-layer HTML combination video with Hyperframes. Not for AI video generation, prompt craft, or model-based video edits. | `npx skills add PrunaAI/pruna-skills@video-editing -y` |\n\nFile v1.0.12:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"interactive-explainer\",\n  \"version\": \"1.0.12\",\n  \"publishedAt\": 1789048842442\n}\n\nFile v1.0.12:references/interactive-explainer-motion.md\n\n# Educational explainer motion (dynamic, physics-safe)\n\nMotion rules for **narrator** (`p-video-2`) and **character** (`p-video-avatar`) beats in `interactive-explainer`.\n\n**Shared SSoT for safe/trap tables:** `video-prompting`. This file specializes those rules for explainers (Tier B defaults + avatar continuous-take).\n\nRelated: `video-prompting` · `visual-transition-reel` · `video-prompting`\n\n## Defaults\n\n| Field | Default |\n|-------|---------|\n| `defaults.resolution` | **`720p`** |\n| `defaults.fps` | **`24`** (narrator `p-video-2` only; avatar uses `resolution`) |\n| `defaults.aspect_ratio` | `16:9` |\n\n## Goal\n\nEvery scene should **move** — camera, light, atmosphere, or subject — so the viewer stays engaged. Motion must **bridge start still → end still** without relying on **physics-heavy** actions that `p-video-2` handles poorly.\n\n## Prompt shape\n\n### Narrator (`p-video-2`) — OPEN / MID / CLOSE required\n\nWrite **`video_prompt`** as three beats:\n\n```text\nOPEN: [hold start composition briefly]\nMID: [camera + safe motion developing — the attention hook]\nCLOSE: [settle into end still]\n```\n\nCamera-led motion (dolly, pan, tilt, push-in, rack-focus feel).\n\n### Character (`p-video-avatar`) — single continuous take\n\n**Do not** use OPEN/MID/CLOSE on avatar rows — the model treats each beat as a transition and the clip feels cutty.\n\n```text\nSingle continuous medium close-up, one very slow push-in over the full clip, speaks directly to camera, steady expression, no cuts, no glances away, minimal head motion\n```\n\nOne camera move, steady light. Mouth motion comes from the avatar model.\n\n## Safe motion (use these)\n\n| Category | Examples |\n|----------|----------|\n| **Camera** | slow dolly in/out, gentle pan left/right, tilt up/down, push-in on face, drift across environment |\n| **Light** | spotlight finds subject, dawn light spreads, candle flicker, window glow brightens, cloud shadow passes |\n| **Atmosphere** | steam rises, dust motes, curtain sways, fog rolls, rain on glass (no splashing hands) |\n| **Subject (minimal)** | head turn toward lens, eyes lift, single hand to chest, subtle lean — **one** gesture max |\n| **Environment** | crowd silhouettes shift, banner cloth ripples, leaves rustle, water surface ripples (no objects entering water) |\n\n## Avoid (physics trap)\n\nShared trap table: `video-prompting`. For explainers, stay on **Tier B** — do **not** prompt object interaction, locomotion, or force:\n\n| Avoid | Why |\n|-------|-----|\n| throw / catch / toss / drop | object trajectory breaks |\n| pour / spill / splash | fluid simulation fails |\n| walk / run / stride across room | foot contact glitches |\n| open door / slam / handoff prop | hinge and grip artifacts |\n| pick up / set down / stack items | contact physics |\n| jump / fall / collide | body dynamics break |\n| fight / chase / sports action | multi-body chaos |\n\nIf the story needs action, **imply it** in the stills and use **camera move + reaction** in video — not the action itself.\n\n**Bad:** `MID: she throws the banner and runs toward the crowd`  \n**Good:** `MID: slow push-in on her face as crowd noise swells, banner ripples behind her`\n\n## By scene type\n\n### Narrator (`p-video-2` + triple)\n\n- Start/end stills define composition; **`video_prompt` sells the transition**\n- Prefer **one dominant camera move** in MID — not three unrelated motions\n- Match narration energy: tense scenes → tighter push-in; legacy → slow tilt up\n- Keep moves **slow and deliberate**, not whip pans (bump to `48` fps only for final delivery if needed)\n\n### Character (`p-video-avatar`)\n\n- **`video_prompt`** = one continuous shot — camera + framing only, not plot action\n- Safe: `single continuous medium close-up, one very slow push-in, speaks directly to camera, no cuts`\n- Avoid: OPEN/MID/CLOSE beats, `candle flicker`, `expression shift`, `light shifts` (read as transitions)\n- Avoid: `gestures wildly`, `walks across room while talking`, `holds up document`\n- Clip length follows **`voice_script`** — no ~19s TTS cap (that limit is narrator `p-video-2` only)\n\n## Examples\n\n### Narrator (history / science)\n\n```json\n\"video_prompt\": \"OPEN: hold wide establishing frame. MID: slow push-in toward key detail in steady light. CLOSE: settle on end composition.\"\n```\n\n### Narrator (diagram / mechanism)\n\n```json\n\"video_prompt\": \"OPEN: hold wide subject. MID: gentle drift toward focal detail, subtle atmosphere. CLOSE: hold end frame — no physics action.\"\n```\n\n### Character (any flavor)\n\n```json\n\"video_prompt\": \"Single continuous medium close-up, one very slow push-in, speaks directly to camera, steady light, full color, no gestures, no cuts.\"\n```\n\n## Plan checklist (before render)\n\n- [ ] Every **narrator** scene has **OPEN / MID / CLOSE** in `video_prompt`\n- [ ] **Character** scenes use **one continuous take** wording — no OPEN/MID/CLOSE\n- [ ] Narrator MID contains **visible motion** (not `OPEN: hold. CLOSE: hold.`)\n- [ ] No physics-trap verbs in `video_prompt`\n- [ ] `defaults.resolution` = `720p`, `defaults.fps` = `24`\n- [ ] Start/end stills differ enough that camera move has somewhere to go\n\nAgent must reject plans missing MID beat or using physics-trap verbs — see `interactive-explainer` and this checklist.\n\nFile v1.0.12:references/interactive-explainer-prompts.md\n\n# Interactive explainer — positive prompts & blocked phrases\n\nExtracted reference for `interactive-explainer`. The agent enforces these rules when validating the plan before paid calls.\n\n## Principle\n\n`hero_prompt`, `style_bible`, `edit_prompt`, `last_frame_edit_prompt`, `video_prompt`, `voice_prompt`, and bed `prompt` must describe **what appears** — never what to leave out.\n\nSaying **`no text`** often **creates** readable type. Saying **`avoid crowds`** still invokes crowds. Be explicit about the single frame you want.\n\n**Never** use `no …`, `avoid …`, `not …`, `without …`, `don't`, or `do not` in creative fields. Spoken lines (`scene_lines`, `voice_scripts`) may use natural negation for history dialogue.\n\n## Banned patterns → positive rewrite\n\n| Banned pattern | Write explicitly instead |\n|----------------|--------------------------|\n| `no text` / `no signage` / `no labels` | `plain unmarked walls`, `unprinted wood surfaces`, `matte unprinted props` |\n| `avoid markets` / `avoid text` | `plain wood table`, `single camera angle`, `one focal subject` |\n| `not theatrical` / `no cuts` | `restrained matter-of-fact delivery`, `single uninterrupted take` |\n| `without vocals` | `instrumental only` |\n| `no cartoon` / `no modern` | `painterly historical illustration`, `period-accurate 1770s props only` |\n\n## Rules (summary)\n\n1. **One positive sentence per still line** — location, subject, light, period, `one camera angle`.\n2. **`style_bible`** — positive comma-clauses only. Example: `unprinted wood and parchment surfaces, plain unmarked walls, warm saturated full color, 16:9`.\n3. **Character `edit_prompt`:** `lips visible`, **slight angle from the side**; use `speaks directly to camera` in **`video_prompt`** only.\n4. **`video_prompt` (narrator):** OPEN / MID / CLOSE — camera + light + atmosphere ([interactive-explainer-motion.md](./interactive-explainer-motion.md)).\n5. **`video_prompt` (character):** `single continuous medium close-up`, `one very slow push-in`, `single uninterrupted take` — not OPEN/MID/CLOSE beats.\n6. **`p-video-avatar`:** `defaults.avatar_negative_prompt` is a **Pruna suppression token list** (nouns like `subtitles`, `watermark`) — not creative wording. See `p-video-avatar`.\n\n## Text & signage (most common)\n\n| Blocked phrase in stills | Why | Use instead |\n|-----------------|-----|-------------|\n| `farmers market`, `market stall`, `storefront`, `signage`, `neon signs` | price boards, aisle signs | produce on **plain wood table**, **matte unprinted** baskets |\n| `labeled`, `packaging`, branded bags, `price tag`, `menu`, `napkin` | product copy on surfaces | **matte unprinted** jars, food in **plain glass bowl** |\n| `graphic tee`, `decal`, `sticker`, `magazine`, `poster` | printed type on surfaces | solid-color fabrics, unbranded matte props |\n| `plated meal`, `restaurant`, `utensil`, `fork`, `knife` | menus, rim logos | **matte ceramic plate** on **plain counter**, subject food only |\n| `documentary still`, `educational still`, `educational end`, `end frame`, topic-specific doc labels | models literalize meta words | `photoreal still`, `single frame`, `closing composition` |\n| `ring light`, `studio lighting`, `HUD`, `game`, readable screens | UI text, spec overlays | sunny window, golden afternoon, soft monitor glow |\n| `maps`, `map`, `newspaper`, `broadside`, `poster`, `placard`, `ledger`, `open book`, `proclamation`, `headline`, `caption`, `inscription`, ship names on hulls | printed type or named banners | blank folded parchment, plain walls, unmarked wood, **merchant wharf** / **colonial assembly hall** (no proper nouns on surfaces) |\n| `greyscale`, `grayscale`, `graphite`, `muted-tone`, `desaturated`, cold mist / freezer haze | flat or grey frames | **warm saturated** full color, steady window light |\n| `flicker`, `strobe`, `pulse`, rapid `light shifts` / `brightens` in **narrator** `video_prompt` | pulsating exposure in `p-video` | **one** slow push-in or pan in **steady** daylight |\n\n## Collage & layout\n\n| Blocked phrase | Use instead |\n|-------|-------------|\n| `split`, `side by side`, `before and after`, `comparison`, `grid`, `collage`, `montage`, `contact sheet`, `flat lay`, `packshot`, `multiple angles`, `dual` | one subject, one camera angle, one frame |\n| **`OPENING:` / `CLOSING:`** prefixes on still lines | plain scene description — labels read as **two-panel storyboard** frames |\n| **`Same …`** matching prior shot | describe the one frame directly; use `still_from` / `_cast_*` for identity |\n| Counted triples in stills (`three ships`, `three panels`) | “colonial ships at one wharf”, “one camera angle” |\n| `storyboard`, `frame by frame`, `triptych`, `cross-section` (unless one diagram is the sole subject) | one continuous composition, one camera angle |\n\nRunner **`sanitize_still_prompt`** strips `OPENING:`/`CLOSING:` and leading `Same` before API calls.\n\n## Weather\n\n| Blocked phrase | Use instead |\n|-------|-------------|\n| `rain`, `wet pavement`, `puddle` | bright open sky, sunny window, golden afternoon |\n\n## `style_bible` example (positive only)\n\n```text\nPremium painterly historical illustration, one focal subject per shot, one camera angle, 16:9, unprinted wood surfaces, plain unmarked walls, warm saturated full color, period-accurate props\n```\n\n## Good vs bad still lines\n\n| Bad still line | Good still line |\n|----------------|-----------------|\n| `No text, no signage, farmers market` | `Plain wood table`, matte unprinted baskets, sunny window, **one camera angle** |\n| `Avoid labels on packaging` | **Matte unprinted** jars on **plain counter** |\n| Meta phrase **documentary still** + **end frame** | Concrete place + objects + **closing composition**, **one camera angle** |\n\nBroader blocked-phrase table (keyboards, mirrors, packshots): generation-diversity.md#visual-variety (`generation-diversity`).\n\n**If text appears in `p-video` but stills are clean:** simplify the narrator `video_prompt` (camera/light only) or regenerate stills with **plain surfaces** — never answer with `no text` in the prompt.\n\n## Related\n\n- Workflow skill: `interactive-explainer`\n- Motion: [interactive-explainer-motion.md](./interactive-explainer-motion.md)\n- Scenes: [interactive-explainer-scenes.md](./interactive-explainer-scenes.md)\n- Gates: generation-quality-checklists.md#approval-gates-workflows (`generation-diversity`)\n\nFile v1.0.12:references/interactive-explainer-scenes.md\n\n# Educational explainer scenes (narrator + character)\n\nCanonical pattern for **educational shorts** — history, science, nature, how-it-works, children's topics — that **alternate host narration with in-story character speech**. Not wall-to-wall voice-over.\n\nRelated: `video-prompting` (narrator beats) · `avatar-multi-scene` (character beats) · `interactive-explainer`\n\n## Why hybrid?\n\nPure narration over B-roll feels like a lecture. **Interaction** — host poses a question, an expert or witness responds, host synthesizes — reads like a prestige documentary, science show, or engaging classroom film.\n\n| Beat type | Model | Audio | Stills |\n|-----------|-------|-------|--------|\n| **`narrator`** | `p-video-2` | Gemini TTS → `input.audio` | start + end (`p-image-edit`) |\n| **`character`** | `p-video-avatar` | native `voice_script` | start only (mouth visible) |\n\nBoth use **`p-image`** hero + **`p-image-edit`** under one **`style_bible`**.\n\n**Format defaults:** `720p`, `24` fps (narrator `p-video-2`); motion: [interactive-explainer-motion.md](./interactive-explainer-motion.md) — dynamic OPEN/MID/CLOSE, physics-safe.\n\n## Subject flavors\n\n| Flavor | Narrator role | Character role | Visual `style_bible` |\n|--------|---------------|----------------|----------------------|\n| History / biography | Documentary host | Historical figure, witness | Photoreal period / biopic |\n| Science / cosmos | Science communicator | Researcher, astronaut | Cinematic space/nature realism |\n| How-it-works | Explainer host | Engineer, inventor | Clean documentary B-roll |\n| Nature | Nature narrator | Ranger, biologist | National Geographic tone |\n| Children's | Friendly teacher voice | Kid, animal guide, mascot | Warm illustration or soft 3D |\n\nPick **one** flavor per film. Swap examples in prompts — the scene machinery is identical.\n\n## Target mix\n\n| Guideline | Target |\n|-----------|--------|\n| Character / narrator ratio | **≥ 1 character beat per 2 narrator beats** (roughly 35–50% character) |\n| Scene order | Alternate when possible: narrator → character → narrator → … |\n| Narrator line length | **≤ ~19s** TTS (P-API 20s **audio-led `p-video-2`** cap) — see `video-prompting` |\n| Character line length | Reply length as needed (often 2–4 sentences); **`p-video-avatar` may exceed 20s** — clip follows `voice_script` |\n\n## Narrator beat (`type: \"narrator\"`)\n\nScene anchor **triple** — same as `video-prompting`:\n\n```json\n{\n  \"id\": \"02_mechanism\",\n  \"type\": \"narrator\",\n  \"edit_prompt\": \"OPENING: Wide view of subject in context, clear focal subject, single frame…\",\n  \"last_frame_edit_prompt\": \"CLOSING: Same subject, closer on key detail, closing composition…\",\n  \"video_prompt\": \"OPEN: hold wide. MID: slow push toward detail, steady daylight. CLOSE: settle on end frame.\"\n}\n```\n\nNarration line in `narration.scene_lines.{id}`.  \n**End with a question** when the next scene is a character reply.\n\n## Character beat (`type: \"character\"`)\n\nTalking-head beat — **`p-video-avatar`**:\n\n```json\n{\n  \"id\": \"03_expert_reply\",\n  \"type\": \"character\",\n  \"cast\": \"expert\",\n  \"still_from\": \"02_prior_expert_scene\",\n  \"follows\": \"02_mechanism\",\n  \"edit_prompt\": \"Same cast member dominates head-and-shoulders frame, slight angle, lips in frame, topic-appropriate background\",\n  \"video_prompt\": \"Single continuous medium close-up, one very slow push-in, speaks directly to camera, steady light, no gestures.\"\n}\n```\n\n`voice_script` on the scene row or in plan `voice_scripts`:\n\n```json\n\"voice_scripts\": {\n  \"03_expert_reply\": \"First-person reply that answers the narrator's exact question — concrete detail, not a slogan.\"\n}\n```\n\n**No** `last_frame_edit_prompt` on character rows — avatar uses one still.\n\n### Cast ledger\n\n```json\n\"cast\": {\n  \"expert\": {\n    \"name\": \"Dr. Example Name\",\n    \"persona_gender\": \"female\",\n    \"voice\": \"Zephyr (Female)\",\n    \"voice_language\": \"English (US)\",\n    \"voice_prompt\": \"First-person expert, clear lip sync, accessible not academic\",\n    \"character_descriptor\": \"woman, role-appropriate look matching style_bible\"\n  }\n}\n```\n\n**Gender ↔ voice:** set `persona_gender` to `female` or `male`; runner maps to `Zephyr (Female)` or `Puck (Male)`. `character_descriptor` must name the same gender so the still matches the voice.\n\n**Still prompts:** **positive only** in `style_bible`, still lines, and `video_prompt` — never `no …`, `avoid …`, or `not …` in creative fields (spoken dialogue may use natural negation). Full blocked-phrase tables: [interactive-explainer-prompts.md](./interactive-explainer-prompts.md).\n\nUse **Pruna avatar voices** (`Zephyr (Female)`, `Puck (Male)`, etc.) — not Gemini TTS voice names.\n\n## Dialogue scripting (interaction)\n\nWrite the scene table as a **conversation arc**. Examples by flavor:\n\n### Science\n\n| # | Type | Function | Example |\n|---|------|----------|---------|\n| 1 | narrator | Hook | \"What happens when a star runs out of fuel?\" |\n| 2 | character | Expert reply | \"The core collapses in seconds. What looked stable for billions of years ends in a flash.\" |\n| 3 | narrator | Context | \"That collapse can outshine an entire galaxy.\" |\n| 4 | character | Wonder beat | \"The first time I saw a supernova remnant, I stopped calculating — I just stared.\" |\n\n### History (single incident — preferred)\n\nOne through-line, full arc. Narrator = facts; character = witness.\n\n| # | Type | Function |\n|---|------|----------|\n| 1 | narrator | Hook + stakes — date, place, named question |\n| 2 | character | Witness identity — first person, specific angle |\n| 3 | narrator | Escalation — what happened next, question for witness |\n| 4 | character | Event witness — sensory or procedural detail |\n| 5 | narrator | Consequence + question |\n| 6 | character | Moral or emotional reply |\n| 7+ | narrator / character | Legacy or aftermath as needed |\n\n### History (biography — narrow the through-line)\n\nDo **not** survey a whole life. Pick **one question** the film answers.\n\n| # | Type | Function |\n|---|------|----------|\n| 1 | narrator | Hook — one wound or paradox |\n| 2 | character | Witness — specific memory, not slogan |\n| … | alternate | Each beat = one chapter of **that** arc only |\n\n**Anti-pattern:** many life eras or locations in one short — each beat becomes a slogan.\n\n## Stand-alone test\n\nEvery explainer must answer **yes** to all five before render:\n\n| # | Question |\n|---|----------|\n| 1 | **Stakes** — what could be lost? |\n| 2 | **Conflict** — who opposed whom? |\n| 3 | **Turn** — what changed after the key event? |\n| 4 | **Nuance** — at least one complication (not hagiography)? |\n| 5 | **Closure** — outcome clear without outside reading? |\n\n**Biography trap:** covering birth → fame → war → activism → death in one short. **Fix:** one through-line with the same witness/fact split as a single-incident history film.\n\n## Narrator vs character (labor split)\n\n| Narrator says | Character says |\n|---------------|----------------|\n| Dates, places, names, sequence | \"I\" witness, sensory detail, emotion |\n| Concrete fact, then one pointed question | Reply that answers **that** question only |\n| Sets up **one** question per handoff | Does not introduce a new topic or slogan |\n\n**Bad character line:** motivational poster copy, unrelated to the question.  \n**Good character line:** procedural or sensory detail tied to the prior narrator beat.\n\n## Causal chain (event explainers)\n\nDo not open on the climax. Map beats before render:\n\n| Beat (minimum) | Narrator carries |\n|----------------|------------------|\n| **Stakes / hook** | Why anyone cared |\n| **Mechanism** | Law, policy, or force that caused the crisis |\n| **Local complication** | Why *this* place or group differed |\n| **Deadline / trigger** | Clock or last chance before the act |\n| **Act** | What people did (narrator B-roll) |\n| **Response** | Authority's punishment or counter-move |\n| **Aftermath** | How the story continued |\n\n## Visual–audio alignment\n\n| Rule | Good | Bad |\n|------|------|-----|\n| **Narrator B-roll** matches VO | Meeting hall while VO describes the meeting | Generic exterior for a named interior action |\n| **Character still** matches witness setting | Witness at the wharf while discussing ships | Unrelated interior while VO discusses the wharf |\n| **Events on narrator rows** | Destruction / trial on `type: narrator` | Event in VO but only talking head on screen |\n\n## Visual mode (lock one look)\n\n| Mode | `style_bible` vocabulary |\n|------|--------------------------|\n| **Photoreal period** | `photoreal period drama film still`, natural skin, period wardrobe |\n| **Painterly / storybook** | `premium painterly historical illustration`, soft ink outlines |\n| **Children's illustrated** | warm illustrated or soft 3D, friendly proportions |\n\nDo not mix photoreal and painterly vocabulary in the same film.\n\n## Ending closure bar\n\n**Three-beat close** (history / biography / causal-chain):\n\n| Order | Row | Job |\n|-------|-----|-----|\n| 1 | **Narrator aftermath** | Punishment, collective response, dated next step (≥ 3 facts) |\n| 2 | **Character witness** | First-person line tied to aftermath — not a slogan |\n| 3 | **`NN_wrap` narrator** | Recap: cause → act → consequence → legacy; answer the hook; no question to character |\n\nScience / how-it-works may end **narrator-only** after the expert (`07_conclusion` pattern).\n\nExample plans: `output/interactive-explainer/<project-slug>/plan.json`.\n\n## Visual continuity\n\n- One **`style_bible`** on every still and motion prompt.\n- **Narrator beats:** wider compositions, Ken Burns motion, environment / diagram storytelling.\n- **Character beats:** head-and-shoulders, **slight angle**, **lips in frame**; match lighting when `follows` is set. On-camera motion lives in `video_prompt`, not still `edit_prompt`.\n- Do not mix unrelated aesthetics unless the topic demands it.\n\n## Assembly\n\n1. Render **all** narrator + character clips in scene order.\n2. **Normalize** audio (48 kHz stereo) before concat if mixing avatar + p-video clips.\n3. **Concat** with hard cuts (default) or short crossfades on `chain_from_previous`.\n4. Optional **Stable Audio** bed under dialogue (~0.08–0.10).\n\nRunner: agent follows `interactive-explainer` phase table (curl + ffmpeg — no Python scripts).\n\n## Plan JSON skeleton\n\n```json\n{\n  \"title\": \"Topic — Educational Short\",\n  \"hero_prompt\": \"…\",\n  \"style_bible\": \"…\",\n  \"narration\": {\n    \"voice\": \"Charon\",\n    \"style_prompt\": \"Engaging educational host…\",\n    \"max_seconds_per_scene\": 19,\n    \"scene_lines\": { \"01_hook\": \"…\" }\n  },\n  \"cast\": {\n    \"expert\": { \"voice\": \"Zephyr (Female)\", \"voice_prompt\": \"…\" }\n  },\n  \"voice_scripts\": {\n    \"02_expert_speaks\": \"First-person line…\"\n  },\n  \"scenes\": [\n    { \"id\": \"01_hook\", \"type\": \"narrator\", \"edit_prompt\": \"…\", \"last_frame_edit_prompt\": \"…\", \"video_prompt\": \"…\" },\n    { \"id\": \"02_expert_speaks\", \"type\": \"character\", \"cast\": \"expert\", \"edit_prompt\": \"… mouth visible …\", \"video_prompt\": \"…\" }\n  ]\n}\n```\n\n## Workflows\n\n- `interactive-explainer` — primary workflow\n- `narrated-multi-scene` — narrator-only fallback\n- `avatar-multi-scene` — character-only pieces\n\nFile v1.0.12:example-prompt.md\n\n# Educational explainer (narrator + character)\n\nBuild an educational short where the **host narrator** and **experts or characters in the story talk to each other** — not wall-to-wall narration.\n\nWorks for history, science, nature, how-it-works, children's topics, and more.\n\n## Quick start prompts\n\n**Science / nature:**\n> Use the **interactive-explainer** workflow for [topic]. Alternate **narrator** beats (`p-video-2` + Gemini TTS, scene anchor triple, lines ≤19s) with **character** beats (`p-video-avatar`, expert `voice_script`, lips-in-frame stills). **720p, 24 fps** (unless user wants higher delivery). Narrator `video_prompt`: `OPEN:` / `MID:` (camera or light — physics-safe) / `CLOSE:`. Character `video_prompt`: **one continuous take** (slow push-in). **Still prompts: positive only** — plain surfaces, unprinted props, one camera angle; never `no …` or `avoid …` in creative fields (see skill **Positive prompts only**). Use **`still_from`** on character rows after object/B-roll heroes. Target ~40% character scenes. Pass the [stand-alone test](./references/interactive-explainer-scenes.md).\n\n**History / biography:**\n> Same workflow — one through-line (not a life survey), witness-style `voice_scripts`, causal chain for events (mechanism → act → response → aftermath). Pick one **visual mode** for the whole film and lock it in `style_bible` and all stills. Close with **three beats**: narrator aftermath (≥3 concrete facts) → final character witness → **`NN_wrap` narrator recap** that answers the hook (bookend stills when possible). **720p, 24 fps**, physics-safe motion per [interactive-explainer-motion.md](./references/interactive-explainer-motion.md).\n\n**Children's educational:**\n> Same workflow — warm illustrated `style_bible`, friendly guide or kid character, simpler vocabulary, shorter lines.\n\n## Copy template\n\n```bash\nmkdir -p output/interactive-explainer/my-explainer/{stills,clips,audio}\ncp skills/workflows/interactive-explainer/templates/explainer-plan.template.json \\\n   output/interactive-explainer/my-explainer/plan.json\n```\n\n## Install\n\n```bash\nnpx skills add PrunaAI/pruna-skills@interactive-explainer -y\n# or: npx skills add PrunaAI/pruna-skills@pruna -y\n```\n\nFile v1.0.12:skill-card.md\n\n## Description:\n\nUse when someone wants an educational explainer with a host and characters - history or science shorts with dialogue, not voiceover-only B-roll.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and creators use this skill to plan and generate educational short videos that alternate host narration with expert or character dialogue. It supports history, science, nature, how-it-works, and children's explainer formats with staged approval gates before paid media generation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Unpinned, auto-confirmed installation commands can fetch changed third-party skill code.\n\nMitigation: Review each install command, pin reviewed versions, and install only the required subskills instead of the full suite when possible.\n\nRisk: Paid media generation or user media uploads may happen before the user has checked the plan and assets.\n\nMitigation: Use the skill's approval gates before plan execution, still generation, clip generation, and final assembly, and confirm upload rights for any user-provided media.\n\nRisk: Broad reply-habit instructions may affect responses outside the intended explainer workflow.\n\nMitigation: Apply the skill only to interactive educational explainer tasks and keep ordinary assistant behavior outside that scope.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/pruna-ai/skills/interactive-explainer)\n- [Educational explainer scenes](artifact/references/interactive-explainer-scenes.md)\n- [Educational explainer motion](artifact/references/interactive-explainer-motion.md)\n- [Interactive explainer prompts](artifact/references/interactive-explainer-prompts.md)\n- [Explainer plan template](artifact/templates/explainer-plan.template.json)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, JSON, Shell commands, Configuration instructions, API Calls, Files]\n\n**Output Format:** [Markdown guidance with JSON plan structures, inline shell commands, and generated media file paths]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses phased approval gates for plan, stills, clips, and final assembly; default video planning targets 720p, 24 fps, and 16:9 unless changed by the user.]\n\n## Skill Version(s):\n\n1.0.12 (source: server release metadata and skill frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.12:skill.manifest.json\n\n{\n  \"references\": [\n    \"interactive-explainer-scenes.md\",\n    \"interactive-explainer-motion.md\",\n    \"interactive-explainer-prompts.md\"\n  ],\n  \"templates\": [\n    \"explainer-plan.template.json\"\n  ],\n  \"generation_phases\": {\n    \"default\": \"stills\",\n    \"phases\": [\n      \"stills\",\n      \"tts\",\n      \"video\",\n      \"assemble\"\n    ]\n  }\n}\n\nFile v1.0.12:templates/explainer-plan.template.json\n\n{\n  \"title\": \"How Volcanoes Erupt — Educational Explainer\",\n  \"hero_prompt\": \"Cinematic photoreal volcano with glowing magma chamber visible through rock, science visualization, soft atmospheric haze, 16:9 one camera angle\",\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"frame_chain_mode\": \"parallel_vignettes\",\n  \"assembly\": {\n    \"chain_crossfade_seconds\": 0.1,\n    \"hard_cut_crossfade_seconds\": 0\n  },\n  \"defaults\": {\n    \"resolution\": \"720p\",\n    \"fps\": 24,\n    \"aspect_ratio\": \"16:9\",\n    \"avatar_negative_prompt\": \"subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words, readable signage, UI overlay, lower third, chyron, title card\",\n    \"avatar_negative_prompt_strength\": 0.35\n  },\n  \"style_bible\": \"Cinematic science documentary, photoreal natural environments, clear focal subject, one camera angle, soft 35mm grain, warm saturated full color, 16:9, plain unmarked surfaces, matte unprinted props, natural daylight\",\n  \"narration\": {\n    \"enabled\": true,\n    \"voice\": \"Charon\",\n    \"max_seconds_per_scene\": 19,\n    \"style_prompt\": \"AUDIO PROFILE: Engaging science documentary host.\\n\\nDIRECTOR'S NOTES:\\n- Clear, curious, accessible to general audience.\\n- Keep lines under nineteen seconds.\\n- End with a question when handing off to a character beat.\",\n    \"scene_lines\": {\n      \"01_hook\": \"[curious] Beneath every quiet mountain, molten rock waits under immense pressure. What finally breaks the surface?\",\n      \"03_mechanism\": \"[informative] Magma rises through cracks in the crust — but the eruption style depends on what's trapped inside. So what did she see in the field?\",\n      \"05_takeaway\": \"[warmly] Volcanoes destroy — and they also build the land we walk on. The earth is never finished making itself.\"\n    }\n  },\n  \"cast\": {\n    \"geologist\": {\n      \"name\": \"Dr. Elena Reyes\",\n      \"persona_gender\": \"female\",\n      \"voice\": \"Zephyr (Female)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Enthusiastic field geologist, first-person expert, clear lip sync, accessible plain-language delivery\",\n      \"character_descriptor\": \"woman, Latina geologist, 40s, field gear, documentary realism\"\n    }\n  },\n  \"voice_scripts\": {\n    \"02_geologist_intro\": \"I've stood on active vents where the ground was warm under my boots. You learn fast — pressure doesn't announce itself until it's too late to ignore.\",\n    \"04_geologist_reply\": \"When gas can't escape, the magma explodes outward. It's not anger — it's physics. And it's breathtaking when you're far enough away.\"\n  },\n  \"background_music\": {\n    \"enabled\": true,\n    \"model\": \"stability-ai/stable-audio-2.5\",\n    \"volume\": 0.08,\n    \"prompt\": \"Documentary science score, sparse piano and low strings, 70 BPM, instrumental only, restrained wonder\"\n  },\n  \"scenes\": [\n    {\n      \"id\": \"01_hook\",\n      \"type\": \"narrator\",\n      \"chain_from_previous\": false,\n      \"edit_prompt\": \"Wide aerial of dormant volcanic peak at dawn, photoreal science visualization, serene but ominous, one camera angle\",\n      \"last_frame_edit_prompt\": \"Volcanic peak closer on steam vent wisps, golden light, one camera angle\",\n      \"video_prompt\": \"OPEN: hold wide aerial. MID: slow drift toward steam vents, dawn light brightens on ridge. CLOSE: settle on rising vapor.\"\n    },\n    {\n      \"id\": \"02_geologist_intro\",\n      \"type\": \"character\",\n      \"cast\": \"geologist\",\n      \"follows\": \"01_hook\",\n      \"edit_prompt\": \"Same documentary style, head-and-shoulders at volcanic site, slight angle from the side, lips in frame, ash-gray landscape\",\n      \"video_prompt\": \"Medium close-up, speaks directly to camera, subtle push-in, field expert tone\"\n    },\n    {\n      \"id\": \"03_mechanism\",\n      \"type\": \"narrator\",\n      \"chain_from_previous\": false,\n      \"edit_prompt\": \"Volcano interior diagram with glowing magma chamber, photoreal science visualization, one camera angle\",\n      \"last_frame_edit_prompt\": \"Volcano interior diagram, chamber brighter, pressure implied, one camera angle\",\n      \"video_prompt\": \"OPEN: hold cross-section. MID: gentle push into chamber glow, heat shimmer in air. CLOSE: hold bright core.\"\n    },\n    {\n      \"id\": \"04_geologist_reply\",\n      \"type\": \"character\",\n      \"cast\": \"geologist\",\n      \"follows\": \"03_mechanism\",\n      \"edit_prompt\": \"Same style, head-and-shoulders with sample rock in hand, slight angle from the side, lips in frame, field light\",\n      \"video_prompt\": \"Medium close-up, speaks directly to camera, subtle push-in, field light shifts on face\"\n    },\n    {\n      \"id\": \"05_takeaway\",\n      \"type\": \"narrator\",\n      \"chain_from_previous\": false,\n      \"edit_prompt\": \"Lush green slopes on old volcanic caldera, photoreal wide landscape, life after eruption, one camera angle\",\n      \"last_frame_edit_prompt\": \"Volcanic caldera landscape, sun breaking through clouds, hopeful mood, one camera angle\",\n      \"video_prompt\": \"OPEN: slow pan across green caldera. MID: light breaks through clouds. CLOSE: hold hopeful wide.\"\n    }\n  ]\n}\n\nArchive v1.0.11: 9 files, 20896 bytes\n\nFiles: example-prompt.md (2228b), references/interactive-explainer-motion.md (5232b), references/interactive-explainer-prompts.md (6381b), references/interactive-explainer-scenes.md (11197b), skill-card.md (2319b), skill.manifest.json (338b), SKILL.md (12428b), templates/explainer-plan.template.json (5005b), _meta.json (141b)\n\nFile v1.0.11:SKILL.md\n\n---\nname: interactive-explainer\ndescription: Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll.\nlicense: MIT\nmetadata:\n  version: \"1.0.11\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video` | Use when someone wants one short video clip from text or images — B-roll, start/end frame animation, or a quick motion shot. Not for full multi-scene films or lip-synced hosts. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n| `stable-audio-2.5` | Use when someone wants light instrumental background music — an ambient bed under dialogue or underscore for reels and explainers. | `npx skills add PrunaAI/pruna-skills@stable-audio-2.5 -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `interactive-explainer` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Quick reference\n\n| Resource | Path |\n|----------|------|\n| Positive prompts / blocked phrases | [./references/interactive-explainer-prompts.md](./references/interactive-explainer-prompts.md) |\n| Scene patterns & stand-alone test | [./references/interactive-explainer-scenes.md](./references/interactive-explainer-scenes.md) |\n| Motion (OPEN/MID/CLOSE) | [./references/interactive-explainer-motion.md](./references/interactive-explainer-motion.md) |\n| Feedback discipline | `generation-diversity` |\n|\n\nArchive v1.0.10: 9 files, 20930 bytes\n\nFiles: example-prompt.md (2228b), references/interactive-explainer-motion.md (5232b), references/interactive-explainer-prompts.md (6381b), references/interactive-explainer-scenes.md (11197b), skill-card.md (2369b), skill.manifest.json (338b), SKILL.md (12428b), templates/explainer-plan.template.json (5005b), _meta.json (141b)\n\nArchive v1.0.9: 9 files, 21065 bytes\n\nFiles: example-prompt.md (2228b), references/interactive-explainer-motion.md (5232b), references/interactive-explainer-prompts.md (6381b), references/interactive-explainer-scenes.md (11197b), skill-card.md (2822b), skill.manifest.json (338b), SKILL.md (12427b), templates/explainer-plan.template.json (5005b), _meta.json (140b)\n\nArchive v1.0.8: 9 files, 20994 bytes\n\nFiles: example-prompt.md (2228b), references/interactive-explainer-motion.md (5232b), references/interactive-explainer-prompts.md (6381b), references/interactive-explainer-scenes.md (11197b), skill-card.md (2751b), skill.manifest.json (338b), SKILL.md (12363b), templates/explainer-plan.template.json (5005b), _meta.json (140b)\n\nArchive v1.0.7: 9 files, 20863 bytes\n\nFiles: example-prompt.md (2228b), references/interactive-explainer-motion.md (5232b), references/interactive-explainer-prompts.md (6381b), references/interactive-explainer-scenes.md (11197b), skill-card.md (2709b), skill.manifest.json (338b), SKILL.md (12075b), templates/explainer-plan.template.json (5005b), _meta.json (140b)\n\nArchive v1.0.6: 34 files, 84274 bytes\n\nFiles: apm.yml (652b), example-prompt.md (2272b), README-INSTALL.md (990b), references/approval-red-flags.md (2650b), references/generation-diversity.md (25910b), references/generation-quality-checklists.md (9874b), references/interactive-explainer-motion.md (5236b), references/interactive-explainer-prompts.md (6755b), references/interactive-explainer-scenes.md (11877b), references/p-video-avatar-quality-checklist.md (2929b), references/p-video-quality-checklist.md (1815b), references/parallel-execution.md (7676b), references/pruna-api.md (5074b), references/random-seed-ritual.md (3875b), references/scene-anchor-triple.md (10331b), references/staged-generation-gate.md (7290b), references/workflow-feedback-gates.md (5036b), scripts/concat_clips.py (6225b), scripts/generation_gate.py (3141b), scripts/launch_background_music.py (8332b), scripts/p_video_avatar_payload.py (2205b), scripts/p_video_payload.py (2685b), scripts/plan_runner.py (4410b), scripts/pruna_api.py (5129b), scripts/replicate_api.py (5739b), scripts/requirements.txt (15b), scripts/run_from_plan.py (43650b), scripts/stills_pipeline.py (8741b), skill-card.md (2994b), skill.deps.json (1382b), skill.manifest.json (1629b), SKILL.md (13553b), templates/explainer-plan.template.json (5005b), _meta.json (140b)\n\nArchive v1.0.2: 31 files, 70026 bytes\n\nFiles: apm.yml (684b), example-prompt.md (2266b), README-INSTALL.md (831b), references/generation-quality-checklists.md (10620b), references/interactive-explainer-motion.md (5246b), references/interactive-explainer-prompts.md (6763b), references/interactive-explainer-scenes.md (11887b), references/p-video-avatar-quality-checklist.md (2870b), references/p-video-quality-checklist.md (1756b), references/parallel-execution.md (7654b), references/pruna-api.md (5049b), references/scene-anchor-triple.md (10395b), references/staged-generation-gate.md (7631b), references/workflow-feedback-gates.md (5589b), scripts/concat_clips.py (6225b), scripts/generation_gate.py (3139b), scripts/launch_background_music.py (8332b), scripts/p_video_avatar_payload.py (2205b), scripts/p_video_payload.py (2685b), scripts/plan_runner.py (4410b), scripts/pruna_api.py (5129b), scripts/replicate_api.py (5739b), scripts/requirements.txt (15b), scripts/run_from_plan.py (43648b), scripts/stills_pipeline.py (8741b), skill-card.md (3181b), skill.deps.json (1382b), skill.manifest.json (1685b), SKILL.md (12557b), templates/explainer-plan.template.json (5005b), _meta.json (140b)","readmeExcerpt":"Skill: interactive-explainer Owner: pruna-ai Summary: Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll. Tags: ai:1.0.14, generative:1.0.14, latest:1.0.14, pruna:1.0.14 Version history: v1.0.14 | 2026-09-29T15:38:11.177Z | auto interactive-explainer 1.0.14 - Removed the obsolete skill-card.md file. - Minor documentation upda","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"\"defaults\": {\n  \"resolution\": \"720p\",\n  \"fps\": 24,\n  \"aspect_ratio\": \"16:9\"\n}"},{"language":"bash","snippet":"ffprobe -v error -show_entries format=duration -of csv=p=0 audio/narration_01.mp3\n# ≤ ~19s before p-video"},{"language":"bash","snippet":"ffmpeg -y -f concat -safe 0 -i clips.txt -c copy explainer.mp4"},{"language":"text","snippet":"OPEN: [hold start composition briefly]\nMID: [camera + safe motion developing — the attention hook]\nCLOSE: [settle into end still]"},{"language":"text","snippet":"Single continuous medium close-up, one very slow push-in over the full clip, speaks directly to camera, steady expression, no cuts, no glances away, minimal head motion"},{"language":"json","snippet":"\"video_prompt\": \"OPEN: hold wide establishing frame. MID: slow push-in toward key detail in steady light. CLOSE: settle on end composition.\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: interactive-explainer\ndescription: Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll.\nlicense: MIT\nmetadata:\n  version: \"1.0.14\"\n  package: pruna-skills\n---\n\n## Prerequisites\n\nInstall and load these skills before generating (skip if already in context via `@pruna`):\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-image-ideogram` | Use when photo generation needs more control — photoreal results, text in the image, or structured JSON with hex colors and bounding boxes. Simpler photo generation, edits, and video use other skills in the suite. | `npx skills add PrunaAI/pruna-skills@p-image-ideogram -y` |\n| `p-image` | Use when someone explicitly wants the fastest, cheapest photo generation — mood boards, bulk panels, or quick iterations — not when controlled photoreal or in-image text is needed. | `npx skills add PrunaAI/pruna-skills@p-image -y` |\n| `p-image-edit` | Use when someone wants to edit an existing photo — change outfits or backgrounds, compose from reference images, or apply prompt-driven edits. | `npx skills add PrunaAI/pruna-skills@p-image-edit -y` |\n| `p-video-2` | Use when someone wants a polished short clip from text, images, or imported audio — 1080p B-roll, start/end frame animation, or a motion shot with a mixed track. Not for cinematic generated-audio clips or talking-head-only hosts. | `npx skills add PrunaAI/pruna-skills@p-video-2 -y` |\n| `p-video` | Use when someone wants a simple short clip from text or images — quick B-roll, drafts, or start/end frame animation. Not when the brief needs cinematic generation, highest quality, tight lip-sync, or imported audio at 1080p. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-avatar` | Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | `npx skills add PrunaAI/pruna-skills@p-video-avatar -y` |\n| `gemini-3.1-flash-tts` | Use when someone needs spoken narration or voiceover — explainer tracks, documentary lines, or voice to pair with generated video. | `npx skills add PrunaAI/pruna-skills@gemini-3.1-flash-tts -y` |\n| `stable-audio-2.5` | Use when someone wants light instrumental background music — an ambient bed under dialogue or underscore for reels and explainers. | `npx skills add PrunaAI/pruna-skills@stable-audio-2.5 -y` |\n\nOr install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`\n\nFollow each skill's **Before generating** / craft sections — do not restate guide content here.\n\n## Workflow habit\n\nIn **every reply**, name `` `interactive-explainer` `` in backticks. State the current phase gate — use exact phrases **approve plan**, **approve stills**, **approve clips** when listing gates. Do **not** same-turn plan + paid video. Skip-review / burn-credits → follow `generation-diversity` **Red flags**.\n\n## Quick reference\n\n| Resource | Path |\n|----------|"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"interactive-explainer\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1790696291177\n}"},{"path":"references/interactive-explainer-motion.md","content":"# Educational explainer motion (dynamic, physics-safe)\n\nMotion rules for **narrator** (`p-video-2`) and **character** (`p-video-avatar`) beats in `interactive-explainer`.\n\n**Shared SSoT for safe/trap tables:** `video-prompting`. This file specializes those rules for explainers (Tier B defaults + avatar continuous-take).\n\nRelated: `video-prompting` · `visual-transition-reel` · `video-prompting`\n\n## Defaults\n\n| Field | Default |\n|-------|---------|\n| `defaults.resolution` | **`720p`** |\n| `defaults.fps` | **`24`** (narrator `p-video-2` only; avatar uses `resolution`) |\n| `defaults.aspect_ratio` | `16:9` |\n\n## Goal\n\nEvery scene should **move** — camera, light, atmosphere, or subject — so the viewer stays engaged. Motion must **bridge start still → end still** without relying on **physics-heavy** actions that `p-video-2` handles poorly.\n\n## Prompt shape\n\n### Narrator (`p-video-2`) — OPEN / MID / CLOSE required\n\nWrite **`video_prompt`** as three beats:\n\n```text\nOPEN: [hold start composition briefly]\nMID: [camera + safe motion developing — the attention hook]\nCLOSE: [settle into end still]\n```\n\nCamera-led motion (dolly, pan, tilt, push-in, rack-focus feel).\n\n### Character (`p-video-avatar`) — single continuous take\n\n**Do not** use OPEN/MID/CLOSE on avatar rows — the model treats each beat as a transition and the clip feels cutty.\n\n```text\nSingle continuous medium close-up, one very slow push-in over the full clip, speaks directly to camera, steady expression, no cuts, no glances away, minimal head motion\n```\n\nOne camera move, steady light. Mouth motion comes from the avatar model.\n\n## Safe motion (use these)\n\n| Category | Examples |\n|----------|----------|\n| **Camera** | slow dolly in/out, gentle pan left/right, tilt up/down, push-in on face, drift across environment |\n| **Light** | spotlight finds subject, dawn light spreads, candle flicker, window glow brightens, cloud shadow passes |\n| **Atmosphere** | steam rises, dust motes, curtain sways, fog rolls, rain on glass (no splashing hands) |\n| **Subject (minimal)** | head turn toward lens, eyes lift, single hand to chest, subtle lean — **one** gesture max |\n| **Environment** | crowd silhouettes shift, banner cloth ripples, leaves rustle, water surface ripples (no objects entering water) |\n\n## Avoid (physics trap)\n\nShared trap table: `video-prompting`. For explainers, stay on **Tier B** — do **not** prompt object interaction, locomotion, or force:\n\n| Avoid | Why |\n|-------|-----|\n| throw / catch / toss / drop | object trajectory breaks |\n| pour / spill / splash | fluid simulation fails |\n| walk / run / stride across room | foot contact glitches |\n| open door / slam / handoff prop | hinge and grip artifacts |\n| pick up / set down / stack items | contact physics |\n| jump / fall / collide | body dynamics break |\n| fight / chase / sports action | multi-body chaos |\n\nIf the story needs action, **imply it** in the stills and use **camera move + reaction** in video — not the action itself.\n\n**Bad:** `MID: she "},{"path":"references/interactive-explainer-prompts.md","content":"# Interactive explainer — positive prompts & blocked phrases\n\nExtracted reference for `interactive-explainer`. The agent enforces these rules when validating the plan before paid calls.\n\n## Principle\n\n`hero_prompt`, `style_bible`, `edit_prompt`, `last_frame_edit_prompt`, `video_prompt`, `voice_prompt`, and bed `prompt` must describe **what appears** — never what to leave out.\n\nSaying **`no text`** often **creates** readable type. Saying **`avoid crowds`** still invokes crowds. Be explicit about the single frame you want.\n\n**Never** use `no …`, `avoid …`, `not …`, `without …`, `don't`, or `do not` in creative fields. Spoken lines (`scene_lines`, `voice_scripts`) may use natural negation for history dialogue.\n\n## Banned patterns → positive rewrite\n\n| Banned pattern | Write explicitly instead |\n|----------------|--------------------------|\n| `no text` / `no signage` / `no labels` | `plain unmarked walls`, `unprinted wood surfaces`, `matte unprinted props` |\n| `avoid markets` / `avoid text` | `plain wood table`, `single camera angle`, `one focal subject` |\n| `not theatrical` / `no cuts` | `restrained matter-of-fact delivery`, `single uninterrupted take` |\n| `without vocals` | `instrumental only` |\n| `no cartoon` / `no modern` | `painterly historical illustration`, `period-accurate 1770s props only` |\n\n## Rules (summary)\n\n1. **One positive sentence per still line** — location, subject, light, period, `one camera angle`.\n2. **`style_bible`** — positive comma-clauses only. Example: `unprinted wood and parchment surfaces, plain unmarked walls, warm saturated full color, 16:9`.\n3. **Character `edit_prompt`:** `lips visible`, **slight angle from the side**; use `speaks directly to camera` in **`video_prompt`** only.\n4. **`video_prompt` (narrator):** OPEN / MID / CLOSE — camera + light + atmosphere ([interactive-explainer-motion.md](./interactive-explainer-motion.md)).\n5. **`video_prompt` (character):** `single continuous medium close-up`, `one very slow push-in`, `single uninterrupted take` — not OPEN/MID/CLOSE beats.\n6. **`p-video-avatar`:** `defaults.avatar_negative_prompt` is a **Pruna suppression token list** (nouns like `subtitles`, `watermark`) — not creative wording. See `p-video-avatar`.\n\n## Text & signage (most common)\n\n| Blocked phrase in stills | Why | Use instead |\n|-----------------|-----|-------------|\n| `farmers market`, `market stall`, `storefront`, `signage`, `neon signs` | price boards, aisle signs | produce on **plain wood table**, **matte unprinted** baskets |\n| `labeled`, `packaging`, branded bags, `price tag`, `menu`, `napkin` | product copy on surfaces | **matte unprinted** jars, food in **plain glass bowl** |\n| `graphic tee`, `decal`, `sticker`, `magazine`, `poster` | printed type on surfaces | solid-color fabrics, unbranded matte props |\n| `plated meal`, `restaurant`, `utensil`, `fork`, `knife` | menus, rim logos | **matte ceramic plate** on **plain counter**, subject food only |\n| `documentary still`, `educational still`, `educati"},{"path":"references/interactive-explainer-scenes.md","content":"# Educational explainer scenes (narrator + character)\n\nCanonical pattern for **educational shorts** — history, science, nature, how-it-works, children's topics — that **alternate host narration with in-story character speech**. Not wall-to-wall voice-over.\n\nRelated: `video-prompting` (narrator beats) · `avatar-multi-scene` (character beats) · `interactive-explainer`\n\n## Why hybrid?\n\nPure narration over B-roll feels like a lecture. **Interaction** — host poses a question, an expert or witness responds, host synthesizes — reads like a prestige documentary, science show, or engaging classroom film.\n\n| Beat type | Model | Audio | Stills |\n|-----------|-------|-------|--------|\n| **`narrator`** | `p-video-2` | Gemini TTS → `input.audio` | start + end (`p-image-edit`) |\n| **`character`** | `p-video-avatar` | native `voice_script` | start only (mouth visible) |\n\nBoth use **`p-image`** hero + **`p-image-edit`** under one **`style_bible`**.\n\n**Format defaults:** `720p`, `24` fps (narrator `p-video-2`); motion: [interactive-explainer-motion.md](./interactive-explainer-motion.md) — dynamic OPEN/MID/CLOSE, physics-safe.\n\n## Subject flavors\n\n| Flavor | Narrator role | Character role | Visual `style_bible` |\n|--------|---------------|----------------|----------------------|\n| History / biography | Documentary host | Historical figure, witness | Photoreal period / biopic |\n| Science / cosmos | Science communicator | Researcher, astronaut | Cinematic space/nature realism |\n| How-it-works | Explainer host | Engineer, inventor | Clean documentary B-roll |\n| Nature | Nature narrator | Ranger, biologist | National Geographic tone |\n| Children's | Friendly teacher voice | Kid, animal guide, mascot | Warm illustration or soft 3D |\n\nPick **one** flavor per film. Swap examples in prompts — the scene machinery is identical.\n\n## Target mix\n\n| Guideline | Target |\n|-----------|--------|\n| Character / narrator ratio | **≥ 1 character beat per 2 narrator beats** (roughly 35–50% character) |\n| Scene order | Alternate when possible: narrator → character → narrator → … |\n| Narrator line length | **≤ ~19s** TTS (P-API 20s **audio-led `p-video-2`** cap) — see `video-prompting` |\n| Character line length | Reply length as needed (often 2–4 sentences); **`p-video-avatar` may exceed 20s** — clip follows `voice_script` |\n\n## Narrator beat (`type: \"narrator\"`)\n\nScene anchor **triple** — same as `video-prompting`:\n\n```json\n{\n  \"id\": \"02_mechanism\",\n  \"type\": \"narrator\",\n  \"edit_prompt\": \"OPENING: Wide view of subject in context, clear focal subject, single frame…\",\n  \"last_frame_edit_prompt\": \"CLOSING: Same subject, closer on key detail, closing composition…\",\n  \"video_prompt\": \"OPEN: hold wide. MID: slow push toward detail, steady daylight. CLOSE: settle on end frame.\"\n}\n```\n\nNarration line in `narration.scene_lines.{id}`.  \n**End with a question** when the next scene is a character reply.\n\n## Character beat (`type: \"character\"`)\n\nTalking-head beat — **`p-video-avatar`**:\n\n```json\n{\n  "}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll. Skill: interactive-explainer Owner: pruna-ai Summary: Use when someone wants an educational explainer with a host and characters — history or science shorts with dialogue, not voiceover-only B-roll. Tags: ai:1.0.14, generative:1.0.14, latest:1.0.14, pruna:1.0.14 Version history: v1.0.14 | 2026-09-29T15:38:11.177Z | auto interactive-explainer 1.0.14 - Removed the obsolete skill-card.md file. - Minor documentation upda","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":2200,"uniquenessScore":47,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T12:51:33.990Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T12:51:33.990Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T15:50:52.174Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}