{"id":"06a54343-ccda-46ee-80fd-6f96352d7670","entityType":"agent","slug":"clawhub-pruna-ai-avatar-multi-scene","name":"avatar-multi-scene","canonicalUrl":"https://www.xpersona.co/agent/clawhub-pruna-ai-avatar-multi-scene","canonicalPath":"/agent/clawhub-pruna-ai-avatar-multi-scene","generatedAt":"2026-10-10T13:32:28.464Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T11:11:08.115Z","emptyReason":null},"description":"Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.5K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s173djpkkm1x4yfzg522h5vfp989mrn5:avatar-multi-scene","sourceUrl":"https://clawhub.ai/pruna-ai/avatar-multi-scene","homepage":"https://clawhub.ai/pruna-ai/skills/avatar-multi-scene","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/pruna-ai/avatar-multi-scene","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/pruna-ai/skills/avatar-multi-scene","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"avatar-multi-scene technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T11:11:08.115Z","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-10T11:11:08.115Z","emptyReason":null},"stars":null,"forks":null,"downloads":1473,"packageName":null,"latestVersion":"1.0.14","tractionLabel":"1.5K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T11:11:08.115Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T11:11:08.115Z","lastCrawledAt":"2026-10-10T11:11:08.115Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T11:11:08.115Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.14","createdAt":"2026-09-29T15:37:43.995Z","changelog":"avatar-multi-scene 1.0.14 - Bumped version to 1.0.14 in metadata. - Removed redundant file: skill-card.md. - No changes to features or workflow; documentation only.","fileCount":8,"zipByteSize":20063},{"version":"1.0.13","createdAt":"2026-09-17T14:01:21.733Z","changelog":"avatar-multi-scene 1.0.13 - Updated SKILL.md metadata to version 1.0.13. - Removed the skill-card.md file. - No changes to core features or workflow; documentation cleanup only.","fileCount":8,"zipByteSize":20230},{"version":"1.0.12","createdAt":"2026-09-10T13:59:57.356Z","changelog":"avatar-multi-scene 1.0.12 - Added `p-image-ideogram` as a new prerequisite for controlled, photoreal image generation and in-image text support. - Updated all workflow and intake references to support `p-image-ideogram` alongside (or in place of) `p-image`, especially for hero plates and visual continuity. - Improved documentation for when to use each image generation/editing skill. - Removed outdated references and files (e.g., `skill-card.md`). - Clarified quick reference, prerequisites, and intake process.","fileCount":8,"zipByteSize":20323},{"version":"1.0.11","createdAt":"2026-09-03T14:13:54.811Z","changelog":"avatar-multi-scene 1.0.11 - Updated version metadata from 1.0.10 to 1.0.11 in SKILL.md. - Removed the skill-card.md documentation file. - No changes to workflow, behavior, or features—documentation only.","fileCount":8,"zipByteSize":20368},{"version":"1.0.10","createdAt":"2026-08-28T07:59:42.823Z","changelog":"avatar-multi-scene v1.0.10 - Updated SKILL.md metadata to version 1.0.10. - Minor documentation/content changes in SKILL.md. - Removed the file skill-card.md.","fileCount":8,"zipByteSize":20155},{"version":"1.0.9","createdAt":"2026-08-04T06:19:24.539Z","changelog":"avatar-multi-scene v1.0.9 - Updated p-image prerequisite to clarify usage: only for fastest, cheapest photo generation (not for controlled photorealism or in-image text). - Minor wording improvements and clarifications in prerequisites section. - Removed redundant/inconsistent documentation (skill-card.md file deleted).","fileCount":8,"zipByteSize":20221},{"version":"1.0.8","createdAt":"2026-07-28T17:21:25.178Z","changelog":"avatar-multi-scene v1.0.8 - Updated SKILL.md for intake clarification: now explicitly opens \"generation-diversity\" clarification intake. - Added new \"Media source\" intake topic to clarify between generating hero plates via `p-image` or using upload-only references. - Minor updates to intake instructions for clearer distinction of user media input. - Removed obsolete skill-card.md file for a leaner repo.","fileCount":8,"zipByteSize":20129},{"version":"1.0.7","createdAt":"2026-07-23T12:36:34.810Z","changelog":"**avatar-multi-scene 1.0.7 — Streamlined policy and dependencies, removed unused files** - Major cleanup: removed 19 reference/scripts/docs files for leaner distribution. - SKILL.md rewritten with concise workflow, explicit skill prerequisites, and direct install commands. - Prerequisite skill usage clarified; now refers to official install instructions rather than repeating policy. - Feedback gates, intake checklist, and scene/character documentation streamlined and updated. - Removed vendor-specific, legacy references and checklist links for clarity and generality. - Updated version metadata and manifest for consistency.","fileCount":8,"zipByteSize":20061}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s173djpkkm1x4yfzg522h5vfp989mrn5:avatar-multi-scene","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s173djpkkm1x4yfzg522h5vfp989mrn5:avatar-multi-scene` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/pruna-ai/avatar-multi-scene before using production credentials."],"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-avatar-multi-scene/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-multi-scene/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-multi-scene/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-multi-scene/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-multi-scene/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-multi-scene/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-10T13:32:28.460Z"}},"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-avatar-multi-scene/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-multi-scene/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-multi-scene/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-avatar-multi-scene/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":"medium","updatedAt":"2026-10-10T11:11:08.115Z","emptyReason":null},"readme":"Skill: avatar-multi-scene\n\nOwner: pruna-ai\n\nSummary: Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity.\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:37:43.995Z | auto\n\navatar-multi-scene 1.0.14\n\n- Bumped version to 1.0.14 in metadata.\n- Removed redundant file: skill-card.md.\n- No changes to features or workflow; documentation only.\n\nv1.0.13 | 2026-09-17T14:01:21.733Z | auto\n\navatar-multi-scene 1.0.13\n\n- Updated SKILL.md metadata to version 1.0.13.\n- Removed the skill-card.md file.\n- No changes to core features or workflow; documentation cleanup only.\n\nv1.0.12 | 2026-09-10T13:59:57.356Z | auto\n\navatar-multi-scene 1.0.12\n\n- Added `p-image-ideogram` as a new prerequisite for controlled, photoreal image generation and in-image text support.\n- Updated all workflow and intake references to support `p-image-ideogram` alongside (or in place of) `p-image`, especially for hero plates and visual continuity.\n- Improved documentation for when to use each image generation/editing skill.\n- Removed outdated references and files (e.g., `skill-card.md`).\n- Clarified quick reference, prerequisites, and intake process.\n\nv1.0.11 | 2026-09-03T14:13:54.811Z | auto\n\navatar-multi-scene 1.0.11\n\n- Updated version metadata from 1.0.10 to 1.0.11 in SKILL.md.\n- Removed the skill-card.md documentation file.\n- No changes to workflow, behavior, or features—documentation only.\n\nv1.0.10 | 2026-08-28T07:59:42.823Z | auto\n\navatar-multi-scene v1.0.10\n\n- Updated SKILL.md metadata to version 1.0.10.\n- Minor documentation/content changes in SKILL.md.\n- Removed the file skill-card.md.\n\nv1.0.9 | 2026-08-04T06:19:24.539Z | auto\n\navatar-multi-scene v1.0.9\n\n- Updated p-image prerequisite to clarify usage: only for fastest, cheapest photo generation (not for controlled photorealism or in-image text).\n- Minor wording improvements and clarifications in prerequisites section.\n- Removed redundant/inconsistent documentation (skill-card.md file deleted).\n\nv1.0.8 | 2026-07-28T17:21:25.178Z | auto\n\navatar-multi-scene v1.0.8\n\n- Updated SKILL.md for intake clarification: now explicitly opens \"generation-diversity\" clarification intake.\n- Added new \"Media source\" intake topic to clarify between generating hero plates via `p-image` or using upload-only references.\n- Minor updates to intake instructions for clearer distinction of user media input.\n- Removed obsolete skill-card.md file for a leaner repo.\n\nv1.0.7 | 2026-07-23T12:36:34.810Z | auto\n\n**avatar-multi-scene 1.0.7 — Streamlined policy and dependencies, removed unused files**\n\n- Major cleanup: removed 19 reference/scripts/docs files for leaner distribution.\n- SKILL.md rewritten with concise workflow, explicit skill prerequisites, and direct install commands.\n- Prerequisite skill usage clarified; now refers to official install instructions rather than repeating policy.\n- Feedback gates, intake checklist, and scene/character documentation streamlined and updated.\n- Removed vendor-specific, legacy references and checklist links for clarity and generality.\n- Updated version metadata and manifest for consistency.\n\nv1.0.6 | 2026-07-16T20:56:24.402Z | auto\n\n**Major policy and documentation update for greater output quality and process clarity:**\n\n- Added a \"Shared generation policy\" section outlining mandatory steps (random seed ritual, diversity, checklists, approval gates, parallel execution) before running any generation.\n- Introduced and referenced new policy documents: approval red flags, generation diversity, random seed ritual.\n- Updated references and links for quality checklists, staged generation, and visual variety to new locations and latest guidance.\n- Clarified intake questions, approval gating, and manifest requirements for each project.\n- Simplified and updated the skill's description to reflect typical usage more directly.\n- Removed deprecated files and reorganized documentation structure for ease of reference.\n\nv1.0.2 | 2026-07-16T13:22:18.635Z | auto\n\navatar-multi-scene v1.0.2\n\n- Updated skill version to 1.0.2 in metadata.\n- Minor documentation improvements and link updates in SKILL.md.\n- Removed deprecated file: skill-card.md.\n- Reference and dependency files refreshed for clarity and version alignment.\n\nv1.0.1 | 2026-07-14T15:44:06.154Z | auto\n\navatar-multi-scene 1.0.1\n\n- Clarified intake requirements for multi-scene avatar and animate video production, emphasizing detailed user Q&A before generation.\n- Outlined step-by-step feedback gates for planning, stills, video clips, and final assembly, ensuring approval at each phase.\n- Expanded instructions for maintaining cast ledger and character sheet consistency across scenes.\n- Added clear guidance on ensuring visual variety and alignment for motion-transfer (animate beats), including pose and framing checks.\n- Enhanced quick-reference resources and scene planning templates for easier workflow adoption.\n\nv0.0.1 | 2026-06-30T12:36:15.650Z | auto\n\nInitial release of multi-scene avatar & motion-transfer composition skill:\n\n- Supports building coherent multi-beat videos with talking-head and motion-transfer segments, to be assembled externally.\n- Intake workflow standardizes project setup: goal, cast, scenes, styles, and references are explicitly confirmed before generation.\n- Enforces cast and character continuity with cast ledger and character sheets.\n- Promotes visual variety across scenes and detailed scene planning via scene tables and beat types.\n- Mandates user approvals at key gates (plan, stills, clips, assembly) for quality control and clarity.\n- Provides clear guidance for aligning reference images and motion templates during motion-transfer animation.\n\nArchive index:\n\nArchive v1.0.14: 8 files, 20063 bytes\n\nFiles: animate-beats.md (5827b), examples.md (6231b), prompt-templates.md (12080b), skill-card.md (1957b), skill.manifest.json (165b), SKILL.md (17161b), templates/batch.template.json (1275b), _meta.json (138b)\n\nFile v1.0.14:SKILL.md\n\n---\nname: avatar-multi-scene\ndescription: Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity.\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-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| `p-video-animate` | Use when someone wants a photo to move like another video — motion transfer, dance remixes, or performance variations from a template clip. | `npx skills add PrunaAI/pruna-skills@p-video-animate -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 `` `avatar-multi-scene` `` in backticks. Restate the user's **continuity / UGC / host / segment** goal in one line. 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## Purpose\n\nProduce a **coherent multi-scene** piece stitched later with **ffmpeg** (Pruna does not ship a concat endpoint). Each beat is one of:\n\n| Beat type | Model | Deliverable |\n|-----------|--------|-------------|\n| **`avatar`** | **`p-video-avatar`** | Talking-head clip from approved still + `voice_script` |\n| **`animate`** | **`p-video-animate`** + slider render | Motion-transfer clip, usually wrapped in a **side-by-side or wipe comparison** MP4 (motion template vs animated subject) |\n\nMix types in one announcement reel—e.g. avatar hook → animate slider demo → avatar CTA.\n\nVisual continuity comes from **Pruna `p-image-ideogram` / `p-image-edit`** on uploaded references (`p-image` for cheap drafts).\n\nFollow this skill in **plain language** when talking to the person requesting the video. Use **natural, speakable copy** in every `voice_script`.\n\n**Staged generation:** `generation-diversity` · `generation-diversity`\n\n## Quick reference\n\n| Resource | Path |\n|----------|------|\n| Photoreal dynamic personas | `image-prompting` |\n| Cast ledger, character sheet, voice/video prompts | [prompt-templates.md](./prompt-templates.md) |\n| Animate rows, sliders, alignment | [animate-beats.md](./animate-beats.md) |\n| Examples | [examples.md](./examples.md) |\n| Feedback discipline | `generation-diversity` |\n| Slider (agent) | ffmpeg `hstack` / wipe — see **Slider comparison** below |\n| Batch template | [templates/batch.template.json](./templates/batch.template.json) |\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Scene table, read-through, cast ledger | **approve plan** |\n| **A — Stills** | Hero + per-scene plates | **approve stills** |\n| **B — Video** | Avatar / animate clips + sliders | **approve clips** |\n| **C — Assembly** | Concat reel + optional bed | User accepts |\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user has answered and you have recorded the answers (use defaults only if the user explicitly opts in):\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What is the piece for (pitch, tutorial, trailer, episode)? Primary audience? |\n| **Scope** | How many speaking scenes or beats? Approximate total runtime after assembly? |\n| **Cast** | Who speaks, in what order? One character throughout or multiple? |\n| **Look** | Aspect for stills and feel (`9:16` / `16:9`)? Avatar output `720p` or `1080p`? |\n| **Media source** | **Generate** hero plates with `p-image-ideogram` / edits vs **upload-only** references; user-owned motion templates for animate beats? |\n| **Voice** | For **each named character**, pick **one** Pruna `voice` and `voice_language` and **reuse it in every scene** that character speaks. Any words that must be pronounced exactly (names, acronyms)? |\n| **Style** | Agreed **style bible** line for all image prompts? |\n| **Character sheet** | Per speaker: age range, wardrobe baseline, hair, skin/realism level, personality adjectives—record before hero generation (see **Character sheet** below). |\n| **Scene variety** | Each scene must differ in **camera angle**, **background/setting**, and/or **energy**—no two consecutive scenes with the same framing and location unless the user asks. Plan **`visual_style_tag`**, **`setting_tag`**, **`camera_tag`**, **`lighting_tag`** per row — `generation-diversity`. |\n| **Ritual seed (SSoT)** | Ritual seed at hero — generate and state a ritual string; log as **`ritual_seed`**; derive prompt axes via sum-mod. **Do not** pass ritual string to API `seed`. |\n| **References** | Which files to upload; rights cleared? |\n| **Beat mix** | Which scenes are **`avatar`** vs **`animate`**? All avatar, all animate, or mixed announcement? |\n| **Narrated B-roll cutaways** | Optional **`p-video`** beats using scene-anchor triple (`video-prompting`) alongside avatar rows |\n| **Motion templates** (animate beats) | Source `.mp4` per animate row—owned/licensed? Match pose/framing to reference still? |\n| **Slider delivery** (animate beats) | Comparison MP4 only, animated-only strip, or both? Canvas default 1920×1080. |\n| **Assembly** | How clips will be joined and leveled (ffmpeg plan)? |\n\nIf anything material is unknown, **ask** before the first upload or prediction.\n\n## Cast ledger & character sheet\n\nMaintain a **cast table** in the manifest: one Pruna **`voice`** + **`voice_language`** per recurring character — **never** swap presets mid-story unless the user requests a recast.\n\nBefore hero generation, fill a **character sheet** per speaker (age, face, realism, wardrobe baseline, personality, **`ritual_seed`** for planning). Templates and manifest JSON: **[prompt-templates.md](./prompt-templates.md)**.\n\n**Rule:** New locations and styles = **`p-image-edit`** off the approved hero URL — not unrelated fresh **`p-image`** identity pulls.\n\n## Scene plan (dynamic beats)\n\nEvery piece needs a **scene table** — each row **`avatar`** or **`animate`**. Example columns and manifest JSON: **[prompt-templates.md](./prompt-templates.md)** · **[animate-beats.md](./animate-beats.md)**.\n\n### Motion-transfer alignment (animate beats)\n\n**P-Video-Animate** animates a reference image using motion, timing, and camera movement from a source video. The better the subject's **features, pose, framing, and proportions** align with the motion template, the better the result.\n\n| Alignment | Typical outcome |\n|-----------|-----------------|\n| Same shot type, similar pose, similar scale | Clean motion transfer; slider demo reads instantly |\n| Same character type, slightly different angle | Good with optional **`p-image-edit`** repose toward a template keyframe |\n| Meme / cartoon / mascot on **human full-body** motion | Limbs, gait, and contact points may warp or slide |\n| Tiny head / extreme proportions on **dance or arm-heavy** motion | Hands, legs, and depth cues often break |\n| Reference facing camera, source subject in profile | Shoulder/head turn and occlusion artifacts |\n\n**Rule:** Treat severe pose or proportion mismatch as a **pre-flight risk**. Repose with **`p-image-edit`** or pick a closer motion template before burning **`p-video-animate`** credits.\n\n**Alignment prep (per animate row):**\n\n1. Match **shot size** and **facing direction** between still and template.\n2. Match **limb visibility**—if the template waves arms, the still must show arms.\n3. **Repose when close but not exact** — **`p-image-edit`** from the hero anchor: *\"Change only: match pose and camera to reference video frame; keep identity and outfit.\"*\n4. Run animate QA from `video-prompting` on the pair before animate.\n\n**Anti-patterns (all types):** two identical office avatar scenes back-to-back; corporate brochure **`voice_script`**; human dance template + chibi meme still without repose; serial API jobs when scenes are independent; **motion templates that prompt smile/wave only** (avatar stays silent — see below).\n\n### Motion templates for animate beats\n\nWhen **`p-video-avatar`** generates a **motion template** (source video for **`p-video-animate`**), treat it as a speaking beat — not a portrait pose.\n\n| Field | Requirement |\n|-------|-------------|\n| Motion-source **`still_edit`** | `mouth clearly visible ready to speak` — not passive smile only |\n| **`video_prompt`** | `speaks directly to camera`, `clear lip movement`, explain gestures, head nods — **before** any wave/smile close |\n| **`voice_prompt`** | Delivery throughout the line — not “wave energy at the end” only |\n| Camera | Prefix: `Camera moves continuously for the full clip — … never locked-off` |\n\nSilent motion templates break slider demos and animate transfers. Prompt templates: [prompt-templates.md](./prompt-templates.md). Full animate pipeline: [animate-beats.md](./animate-beats.md).\n\n### Mixed reels with animate rows\n\n| Pattern | Structure |\n|---------|-----------|\n| Interleaved | avatar hook → animate demo → avatar proof → animate demo → avatar CTA |\n| Slider-heavy | N **`animate`** slider rows → final **`avatar`** CTA on hero |\n\nEnd product launches with a speakable **`avatar`** CTA unless the user opts out.\n\n## Identity & ritual seed policy\n\nComplete the ritual seed step in `generation-diversity` before hero prompt work. Log **`ritual_seed`** in manifest; reuse only on same-brief slop retry.\n\nCharacter continuity = **approved hero plate URL** + cast descriptor — not API `seed`. Pass **`api_seed`** in `input` only when the user explicitly locks reproducibility.\n\n## Natural voice (mandatory for avatar social / founder content)\n\n**`voice_script`** = speakable dialogue (contractions, short breaths). **`voice_prompt`** = performance direction only — never marketing copy or script text.\n\nGood/bad pairs: **[prompt-templates.md](./prompt-templates.md)**.\n\n## Source portrait / hero (same character across styles and scenes)\n\nFor **each** recurring character:\n\n1. Land **one** approved **source** still via **`p-image-ideogram`** or upload (`p-image` for a cheap draft). Run the slop gate on the hero before sign-off. Treat the approved file URL as the **identity anchor**.\n2. **Every** later look—including a new background, emotion, prop, or **style variation**—should be produced with **`p-image-edit`** from **that same source URL**, plus the shared style bible and a short delta (“change only: …”).\n3. **Each new scene** still starts from the same character source so faces stay one continuous role across the arc.\n\n## Confirmation gate (mandatory)\n\nAfter intake is complete:\n\n1. Present a **read-through package**: scene order and **type** per row; full **`voice_script`** for avatar rows; motion templates + reference stills + **alignment risks** for animate rows; cast ledger; hero URL(s); chosen **`resolution`**; legal/CTA lines **verbatim** if supplied.\n2. Ask clearly for approval (e.g. “Reply **approve** or **go** when this script and cast are final.”).\n3. **Do not** upload binaries for generation or call **`POST /v1/predictions`** until the user **explicitly confirms**.\n\n## How the agent runs this\n\nOnce the user confirms:\n\n1. Upload refs → hero `p-image-ideogram` → parallel per-scene `p-image-edit` → slop gates → **approve stills**.\n2. Parallel **`p-video-avatar`** (avatar rows) and **`p-video-animate`** (animate rows) via curl batches (`pruna-api`).\n3. For each animate row, build a **slider / comparison** MP4 with ffmpeg (below).\n4. ffmpeg concat in scene order → optional bed → **approve** final.\n\nPrefer one parallel lane per independent scene after the hero exists. Parent owns confirmation, manifest merge, and assembly.\n\n## Core rules\n\n1. **`p-video-avatar` `input.image`** — use an approved still URL from `/v1/files` that passed `generation-diversity` checklists.\n2. Run the **slop gate** on every hero and scene still **before** any avatar job.\n\n```text\nHero:     p-image-ideogram (or upload) → slop gate → approve anchor\nScene N:  p-image-edit(anchor) → slop gate → p-video-avatar\n```\n\n## API surface (this workflow)\n\n| Step | Model | Skill |\n|------|--------|--------|\n| Upload binaries | `POST /v1/files` | `pruna-api` |\n| Style-locked stills | `p-image-ideogram`, `p-image-edit` | `p-image-ideogram`, `p-image-edit` |\n| Talking clips | `p-video-avatar` | `p-video-avatar` |\n| Motion transfer | **`p-video-animate`** | `p-video-animate` |\n| Slider comparison | ffmpeg (below) | local |\n\nUse **`PRUNA_API_KEY`** and the **`apikey`** header on every call. **Async + parallel by default**: batch all avatar jobs once approved stills pass slop; batch all animate jobs once motion + still URLs are ready; poll all `get_url` together.\n\n## Parallel execution\n\n| Phase | Parallel? |\n|-------|-----------|\n| Hero `p-image-ideogram` → gate | Sequential |\n| Per-scene `p-image-edit` | **Yes** — all scenes |\n| Slop gate | **Yes** — review in parallel |\n| `p-video-avatar` | **Yes** — all avatar rows |\n| `p-video-animate` | **Yes** — all animate rows |\n| Slider render | **Yes** — all animate rows |\n| Assembly | Sequential order only |\n\n**Rule:** Never dispatch generation before user confirmation.\n\n## Slider comparison (animate rows)\n\nSide-by-side (motion template | animated):\n\n```bash\nffmpeg -y -i motion_template.mp4 -i animated.mp4 \\\n  -filter_complex \"[0:v]scale=960:1080[l];[1:v]scale=960:1080[r];[l][r]hstack=inputs=2[v]\" \\\n  -map \"[v]\" -map 1:a? -c:v libx264 -c:a aac -shortest scene_compare.mp4\n```\n\nOr present both clips and let the user’s editor build a wipe slider. Paths can follow [templates/batch.template.json](./templates/batch.template.json) (`source`, `render`, `samples[]`).\n\n## Workflow\n\n| Step | Action |\n|------|--------|\n| 1–3 | Intake → speakable script → **confirmation gate** (no API until approve) |\n| 4–5 | Upload refs → **`p-image-ideogram` hero** per character → slop gate |\n| 6–7 | Parallel **`p-image-edit`** scene stills → slop gate each |\n| 8 | Parallel **`p-video-avatar`** (cast ledger voices, unique `video_prompt` per scene) |\n| 9 | Parallel **`p-video-animate`** + ffmpeg sliders — [animate-beats.md](./animate-beats.md) |\n| 10 | ffmpeg concat ± optional bed — `stable-audio-2.5` |\n| 11 | Manifest: paths, prediction ids, slop notes, cast snapshot |\n\n```bash\nffmpeg -y -f concat -safe 0 -i clips.txt -c copy reel.mp4\n```\n\nShared ffmpeg recipes (concat, bed mix, sliders, export): **`video-editing`**.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-single-scene` | Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation. | `npx skills add PrunaAI/pruna-skills@avatar-single-scene -y` |\n| `image-to-video` | Use when someone wants one short film beat from images — a narrated scene, story moment, or cinematic B-roll with optional voiceover. | `npx skills add PrunaAI/pruna-skills@image-to-video -y` |\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| `p-video-animate` | Use when someone wants a photo to move like another video — motion transfer, dance remixes, or performance variations from a template clip. | `npx skills add PrunaAI/pruna-skills@p-video-animate -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\": \"avatar-multi-scene\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1790696263995\n}\n\nFile v1.0.14:animate-beats.md\n\n# Animate beats in multi-scene reels\n\nHow **`p-video-animate`** fits into mixed **`avatar` + `animate`** pieces built with `avatar-multi-scene`.\n\n## What each model does\n\n| Model | Role in an animate row |\n|-------|------------------------|\n| **`p-image` / `p-image-edit`** | Reference stills — motion-source portrait and persona subjects |\n| **`p-video-avatar`** | Optional: generate a **motion template** (talking-head source video) when you don't have a licensed `.mp4` |\n| **`p-video-animate`** | Transfer motion from source video onto reference image |\n| **Slider render** | Optional comparison MP4 (motion template vs animated output) via `avatar-multi-scene` |\n\n**`p-video-animate`** takes:\n\n- **`video`** — motion, timing, camera path, acting beats, audio source\n- **`image`** — subject identity, style, wardrobe, environment look\n\nOutput keeps **motion from the video**, **appearance from the image**.\n\n## Animate row pipeline\n\n```text\nHero anchor (p-image-ideogram)\n  → motion-source still (p-image-edit)\n  → motion template (p-video-avatar OR upload .mp4)\n  → persona still(s) (p-image-ideogram or p-image-edit)\n  → p-video-animate (one job per persona)\n  → optional slider compare MP4\n```\n\n## Making motion templates work\n\nWhen **`p-video-avatar`** creates the source video for **`p-video-animate`**, prompt it like a **speaking** clip — not a portrait pose.\n\n| Field | Guidance |\n|-------|----------|\n| Motion-source still | `mouth clearly visible ready to speak`; medium close-up; unobstructed face |\n| **`video_prompt`** | `speaks directly to camera`, `clear lip movement`, explain gestures, head nods; prefix with `Camera moves continuously … never locked-off` |\n| **`voice_prompt`** | Conversational delivery throughout the line — not gesture-only direction at the end |\n\nSmile/wave/nod are fine **after** explicit speaking direction. Smile/wave **instead of** speaking produces silent templates — weak lip sync and poor slider demos.\n\n## Making `p-video-animate` work\n\n### Alignment (most important)\n\nMatch **shot size**, **facing direction**, and **visible limbs** between reference image and motion template.\n\n| Pairing | Outcome |\n|---------|---------|\n| Same framing and pose | Best transfer |\n| Same character type, slight angle difference | Good; optional repose with **`p-image-edit`** |\n| Stylized / mascot / chibi on human full-body motion | Limbs and contact points often break |\n| Profile motion + front-facing still | Head/shoulder artifacts |\n\nRepose before animate when close but not exact: *\"Change only: match pose and camera to reference video frame; keep identity and outfit.\"*\n\n### Reference stills (personas)\n\n- Face and mouth large enough for lip-sync when the template speaks\n- **`instruction_prompt`** steers behavior without fighting source motion:\n\n```text\nAnimate the reference subject using the exact motion, timing, and camera movement from the source video. Keep identity and outfit from the reference image.\n```\n\n- **Style variety** (photoreal, premium anime, claymation, Disney/Pixar 3D, cyberpunk, blockbuster movie, AAA game cinematic) on one motion template shows range in slider demos — each style still needs reasonable pose/framing alignment **and** its own background, camera angle, and lighting. Record `visual_style_tag`, `setting_tag`, `camera_tag`, and `lighting_tag` per ref. See generation-diversity.md#visual-variety (`generation-diversity`).\n\n### API fields\n\n- **`resolution`**: `720p` or `1080p`\n- **`target_fps`**: `original` (default), `24`, or `48`\n- **`save_audio`**: `true` when the motion template has dialogue\n- **`seed`**: lock per persona row when retrying\n\n### Persona style ladder (animate slider rows)\n\nWhen building eye-catching comparison reels, generate **3–4 persona stills per animate row** — each a different **`visual_style_tag`** with distinct **`setting_tag`**, **`camera_tag`**, and **`lighting_tag`**:\n\n| Ref slot | Example style | Example setting + light |\n|----------|---------------|-------------------------|\n| 1 | Photoreal UGC | neutral wall, soft ring light |\n| 2 | Premium anime | neon rain alley, dramatic anime key |\n| 3 | Claymation | miniature living room, warm practical lamp |\n| 4 | Disney / fairy-tale 3D | enchanted garden, golden hour |\n| 5 (optional) | Cyberpunk | rain-slick alley, magenta-cyan edge |\n| 6 (optional) | AAA game cinematic | alien canyon, volumetric sun shafts |\n\nFull prompt patterns: generation-diversity.md#visual-variety (`generation-diversity`).\n\nRun `video-prompting` on inputs and outputs.\n\n## Mixed reel structures\n\n### Interleaved avatar + animate\n\n| # | Type | Beat |\n|---|------|------|\n| 1 | avatar | Hook |\n| 2 | animate | Slider demo |\n| 3 | avatar | Feature / proof |\n| 4 | animate | Second demo |\n| 5 | avatar | CTA |\n\n### Slider-heavy + CTA close\n\n| # | Type | Beat |\n|---|------|------|\n| 1–N | animate | Slider comparisons (3–4 persona variations each) |\n| N+1 | avatar | CTA — return hero spokesperson, clean studio, short close |\n\nAvatar CTA rows use **`type: avatar`** → deliver `{id}_avatar.mp4`. Animate rows → `{id}_compare.mp4` (or animated-only if no slider).\n\n## Slider comparison (optional)\n\nSide-by-side before/after with ffmpeg (no extra Python deps):\n\n```bash\nffmpeg -y -i path/to/motion-template.mp4 -i path/to/animated-output.mp4 \\\n  -filter_complex \"[0:v][1:v]hstack=inputs=2[v]\" -map \"[v]\" -an path/to/scene_compare.mp4\n```\n\nFor several persona variations, repeat per sample and concat, or build a simple hstack grid in your editor.\n\n## Assembly\n\nConcat clips in scene-table order — avatar MP4s and animate comparison MP4s interleaved as planned. Level audio in your editor or ffmpeg.\n\nBatch config schema: [`batch.template.json`](./templates/batch.template.json) (`scenes[]` with `source`, `render`, and `samples[]` per row).\n\nFile v1.0.14:examples.md\n\n# Examples\n\n## Dynamic multi-scene avatar (partnership / founder social)\n\nProven pattern from production runs:\n\n1. **Character sheet** — photoreal founder, early 30s, locked **`seed`**, one **`voice`** preset.\n2. **Hero** — `p-image-ideogram` (documentary photoreal) → slop gate → approve identity anchor.\n3. **Per scene** — `p-image-edit` (from hero anchor; change **only** angle + background) → slop gate → `p-video-avatar`. **Run edits and avatar jobs in parallel batches** per phase once dependencies are met (pruna-api.md#parallel-async-multi-scene--batch (`pruna-api`)); use **one subagent per scene lane** when the host supports it.\n4. **Vary every scene** — e.g. dark close-up → mountain overlook → ISS cupola → desk window light → studio CTA. Never repeat the same office framing twice.\n5. **Natural voice** — contractions, conversational hooks; **`voice_prompt`** describes human delivery, not product copy.\n\nExample dialogue (single spokesperson, natural):\n\n```text\nScene 1: \"Hey — quick question. When you're making video with AI, how long do you actually wait between ideas?\"\nScene 2: \"And that's the real problem, right? It's not just slow — you lose momentum. The whole creative loop just breaks.\"\nScene 3: \"So we teamed up with Tellers — our whole model family is live inside their editor now.\"\nScene 4: \"What's actually cool is the speed — cheap enough that you can genuinely explore without worrying about every credit.\"\nScene 5: \"Anyway — check out Tellers. Link's in the post. I'd love to see what you build.\"\n```\n\nStore scenes in JSON (`v2_avatar_only_scripts.json` pattern in `prompt-templates.md`) with **`ritual_seed`**, per-scene **`video_prompt`**, and **`still_prompt`** deltas.\n\n## Mixed announcement (avatar + animate slider beats)\n\nPattern for product launches that interleave speaking scenes with motion-transfer demos:\n\n| # | Type | Beat |\n|---|------|------|\n| 1 | avatar | Hook — spokesperson intro |\n| 2 | animate | Slider — same UGC motion, new persona still |\n| 3 | avatar | Reveal — partnership / feature detail |\n| 4 | animate | Slider — second motion template, repose hero to match |\n| 5 | avatar | CTA |\n\n**Pipeline:** shared hero anchor → per-row still prep (edit for avatars; optional repose for animate) → parallel **`p-video-avatar`** + parallel **`p-video-animate`** → parallel slider renders for animate rows → ffmpeg concat in scene order.\n\nModel roles and alignment: [animate-beats.md](./animate-beats.md).\n\n**Alignment reminder:** animate rows fail when a meme/mascot still meets human full-body dance motion—pick bust-only templates or repose first (see SKILL **Alignment prep**).\n\n**Style ladder reminder:** each persona still in an animate slider row should use a different **`visual_style_tag`** (photoreal, anime, claymation, Disney 3D, cyberpunk, game cinematic) with its own background, camera angle, and lighting — generation-diversity.md#visual-variety (`generation-diversity`).\n\n## Motion-transfer-only reel (animate rows)\n\nAll-slider showcase (UGC variations, recasting demo):\n\n1. Scene table with only **`animate`** rows.\n2. Upload motion templates + reference stills in parallel.\n3. Parallel **`p-video-animate`** → batch slider render via [`batch.template.json`](./templates/batch.template.json).\n4. Concat comparison MP4s:\n\n```bash\n# concat_list.txt\nfile 'output/scene01_compare.mp4'\nfile 'output/scene02_compare.mp4'\n\nffmpeg -f concat -safe 0 -i concat_list.txt -c copy output/recast_reel.mp4\n```\n\n**End with avatar CTA** when the piece is a product launch — return the hero spokesperson in a clean studio close-up.\n\n**Slider-only** (animate outputs already exist):\n\nBuild side-by-side sliders with **ffmpeg hstack** (see `this skill` — agent runs ffmpeg locally; no Python runner).\n\n## Multi-scene rhythm (generic cast)\n\nPattern:\n\n1. Character A opens with a concrete hook tied to the product.\n2. Character B reacts with new information, not a repeat of A.\n3. Character C adds proof or stakes.\n4. Group tightens the argument.\n5. Final line is the exact client CTA.\n\nExample dialogue (fictional cast):\n\n```text\nRiva (host): \"One portrait, one line, and we already have motion—not a storyboard fantasy.\"\nKael (skeptic): \"Motion is cheap. Staying on-model is the invoice.\"\nMire (builder): \"Same API for the stills and the talk. Fewer handoffs, fewer drift days.\"\nJax (closer): \"Ship the cut when you are ready, [CLIENT TEAM NAME].\"\n```\n\n## Bad reference frame\n\nReject:\n\n- extreme action pose\n- hair or props across the mouth\n- weapon or hand occluding the face\n- tiny face in frame\n- background that belongs to a different story world than the bible\n- stray logos or UI\n\n**Fix:** regenerate with **`p-image-edit`**, narrowing the prompt to “talking-head, shoulders square, hands low, mouth clear, same identity as reference.”\n\n## Voice_prompt hygiene\n\nUse (realistic human):\n\n```text\nNatural conversational tone — like a founder on LinkedIn, not a TV announcer.\nRelaxed pacing, real pauses, slight smile when excited, honest not salesy.\n```\n\nAvoid stuffing script, product names, or brand slogans into **`voice_prompt`**—those belong in **`voice_script`** only.\n\n## Manifest skeleton (Pruna-only)\n\n```markdown\n# [Project] — multi-scene avatar (Pruna)\n\n## ritual_seed\n- ritual_seed: \"k7Qm2xP9\" (SSoT planning — do not pass to API)\n\n## Character sheet\n- role, age, hair, realism, wardrobe baseline, personality\n\n## Style bible\n- Text: ...\n\n## Scene table\n| # | type | setting/angle or motion template | deliverable |\n\n## Files (POST /v1/files)\n- ref_hero: url, id, expires\n- scene_02_motion_template: url, id  (animate rows)\n\n## Image predictions (p-image / p-image-edit)\n- job id, model, input summary, output url, slop pass y/n\n\n## Avatar predictions (p-video-avatar)\n- scene id, job id, seed, image url, voice, voice_script excerpt, video_prompt, output url\n\n## Animate predictions (p-video-animate)\n- scene id, job id, motion url, image url, instruction_prompt, animated mp4, slider compare mp4, alignment notes\n\n## Assembly\n- ordered clip list, tool used to join (editor name / internal script), final export path\n\n## Failed attempts\n- job id, model, error message, corrective action\n```\n\nFile v1.0.14:prompt-templates.md\n\n# Prompt templates (Pruna only)\n\nCompanion to `avatar-multi-scene` — cast ledger, character sheet, still edits, and per-scene voice/video fields.\n\n## Cast ledger (voice lock)\n\n| Character | Pruna `voice` | `voice_language` | Notes |\n|-----------|----------------|------------------|--------|\n| (example) | `Zephyr (Female)` | `English (US)` | Same preset every scene this character speaks |\n\n**Rule:** recurring characters **never** change `voice` between scenes unless the user requests a recast. Tweak delivery with **`voice_prompt`** only.\n\n## Reference gathering (research assistant prompt)\n\n```text\nCollect up to [N] high-quality, rights-clear reference images for [SUBJECT / CAST].\nPrefer official art packs, style guides, or assets the client can license.\nFor each file record: character, intended use, source, license note, and image quality (resolution, clarity).\n```\n\n## Upload rule\n\nUse **`POST /v1/files`** and then Pruna **`urls.get`** values in **`p-image-edit`** `images` and in **`p-video-avatar`** `image`. Do not pass arbitrary hotlinks you do not control.\n\n## Character sheet (fill before hero generation)\n\n```text\nName/role: [e.g. Alex — founder spokesperson]\nAge/build: [early 30s, medium build]\nFace/hair: [short dark hair, light stubble, brown eyes]\nRealism: photorealistic documentary portrait, not CGI, not illustration\nWardrobe baseline: [black crew-neck — keep unless scene script changes outfit]\nPersonality: [warm, direct, founder-energy, honest]\nritual_seed: [string — SSoT planning only; generate fresh, do not copy examples]\nPruna voice: [e.g. Puck (Male)] / [English (US)]\n```\n\n## Scene table (fill during intake — every row must differ)\n\n| # | Setting & camera | Emotion | still_prompt delta (change only) |\n|---|------------------|---------|----------------------------------|\n| 1 | extreme close-up, dark void | curious hook | (hero — no edit) |\n| 2 | 3/4, outdoor location | contemplative | background + angle |\n| 3 | medium low-angle, distinctive set | excited reveal | background + angle |\n| 4 | over-shoulder at desk | conversational proof | setting + angle |\n| 5 | straight-on medium studio | warm CTA | cleaner background |\n\nPair each row with its own **`voice_script`**, **`voice_prompt`**, and **`video_prompt`** in the manifest JSON.\n\n## Ritual seed (manifest snippet)\n\n```json\n{\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"ritual_seed_policy\": \"ssot_dag_before_every_generation\",\n  \"api_seed\": null\n}\n```\n\n`ritual_seed` is **SSoT planning only** — do not pass to API `input.seed`. Set `api_seed` only when the user explicitly locks API reproducibility.\n\nReplace strings with your random seed ritual (`generation-diversity`) — do not copy from this template.\n\n**Ritual:** generation-diversity.md#random-seed-ritual-mandatory-before-every-generation (`generation-diversity`) (SSoT) — generate a random string before every generation; derive prompt axes via sum-mod.\n\n## Fashion / ecommerce try-on path\n\nWhen the deliverable is **dressed model stills** or **fashion UGC avatar**:\n\n1. **`p-image`** photoreal editorial plate → slop gate — `image-prompting`\n2. **`p-image-try-on`** with garment refs (normal mode for complex stacks) — `image-prompting`\n3. Optional **`p-image-upscale`** → slop gate → **`p-video-avatar`** with **unique `video_prompt`** and natural **`voice_script`**\n\nLock **hero plate URL** from step 1 through step 3. Plan cast diversity for public example sets per generation-diversity.md#visual-variety (`generation-diversity`).\n\n## Style bible (paste into every image prompt)\n\n```text\nStyle lock: [2-4 sentences: medium, line quality, palette, lighting, camera era].\nSame character as reference: [identity anchors: species, age, outfit, iconic props].\n```\n\n## p-image: new photo generation (when you lack a photo reference)\n\n```text\n[Style bible]\nVertical 9:16 talking-head portrait, [CHARACTER] in [SETTING], shoulders toward camera,\nhands low in frame, face large and centered, mouth clearly visible for speech animation,\nneutral relaxed expression ready to speak.\n```\n\n## p-image-ideogram: photoreal hero (preferred for avatar pipelines)\n\n```text\nPhotorealistic documentary portrait photograph of a real person, not CGI, not 3D render.\n[Character sheet: age, hair, wardrobe, personality visible in expression]\nNatural skin with pores and subtle imperfections. Shot on 85mm lens, shallow depth of field.\n[Setting for scene 1 only]. 16:9 talking-head, face centered, mouth clearly visible mid-speech.\nNo text, no logos.\n```\n\nAfter hero succeeds: run slop gate on the hero output → approve anchor.\n\n## p-image-edit: match reference, change only what the scene needs\n\n```text\n[Style bible]\nUsing the attached reference(s) as identity, produce a vertical 9:16 talking-head frame for scene [N]: [POSE / EMOTION / BACKGROUND CHANGE ONLY].\nKeep face, species, and costume on-model; mouth unobstructed; no new text or logos in frame.\n```\n\nUse 1–5 **`images`** URLs per the `p-image-edit` skill. Reuse the **hero** URL in every edit that must stay on-model.\n\n## p-video-avatar: JSON field names (snake_case)\n\n| Field | Role |\n|--------|------|\n| `image` | Still URL from `/v1/files` or prior delivery URL your pipeline trusts |\n| `voice_script` | Exact spoken words for this clip |\n| `voice` | Pruna voice preset (see model doc list) |\n| `voice_language` | e.g. `English (US)` |\n| `voice_prompt` | Short performance direction only (not script text) |\n| `video_prompt` | Shot motion: framing, energy, head motion—positive wording only |\n| `resolution` | `720p` or `1080p` |\n\n## p-image-edit: per-scene still (avatar rows)\n\n```text\nUsing the attached reference(s) as identity — keep exact same person, face, skin texture, photorealistic quality.\nChange only: [ANGLE], [BACKGROUND/SETTING], [EXPRESSION]. [Character sheet wardrobe baseline unless scripted change].\n16:9, mouth clearly visible, ready to speak. No text, no logos.\n```\n\nRun slop gate on the edit output before **`p-video-avatar`**. Pass the approved still URL from `/v1/files`.\n\nUse 1–5 **`images`** URLs per the `p-image-edit` skill. Reuse the **hero** URL in every edit that must stay on-model.\n\n## Motion source still + template (animate rows)\n\nEach **`animate`** row needs a **speaking** motion template. Generate the still with **`p-image-edit`** off hero, then **`p-video-avatar`** on the approved still.\n\n**Motion-source `still_edit`:**\n\n```text\nRecast as [character]. Medium close-up in [SETTING], confident warm expression,\nmouth clearly visible ready to speak, documentary realism.\n```\n\n**Motion-template `video_prompt` (do):**\n\n```text\nCamera moves continuously for the full clip — smooth dolly push-in with subtle arc, never locked-off.\nSubject speaks directly to camera with natural open-hand explain gestures, clear lip movement,\nnatural head nods and eyebrow emphasis while talking, warm smile building toward a small wave at the close.\n```\n\n**Motion-template `video_prompt` (avoid — silent avatar):**\n\n```text\nSubject smile builds then small wave and nod at close, atmospheric fog drifting …\n```\n\n**Motion-template `voice_prompt` (do):**\n\n```text\nClear conversational delivery throughout — speaking directly to camera. Natural pacing with real pauses.\n```\n\nWhen motion-source prompts change, delete cached motion-source stills before regen. See [animate-beats.md](./animate-beats.md).\n\n## voice_script — natural human (do)\n\n```text\nHey — quick question. When you're making video with AI, how long do you actually wait between ideas?\nBecause for most people, it's way too long.\n```\n\n```text\nSo we teamed up with Tellers — they built this agentic video editor — and our whole model family is live inside it now.\n```\n\n## voice_script — corporate stiff (avoid)\n\n```text\nIf you work with AI video, you already know the problem. You ask for something, then you wait — and the creative loop breaks.\n```\n\n```text\nThat is why we are partnering with Tellers. Our full model family — P-Image, P-Video, P-Image-Upscale, and P-Video-Avatar — is now live inside their agentic video editor.\n```\n\n## voice_prompt — realistic human delivery (do)\n\nProject-level (reuse across scenes):\n\n```text\nNatural conversational tone — like a founder talking on LinkedIn, not a TV announcer.\nRelaxed pacing, real pauses, contractions in delivery, slight smile when excited, honest not salesy.\n```\n\nPer-scene tweak (optional, still non-spoken):\n\n```text\nSlightly urgent on the hook; empathetic on the problem beat; building excitement on the reveal.\n```\n\n## voice_prompt — avoid\n\n```text\nSay the following about our enterprise AI video platform partnership announcement.\n```\n\n```text\nP-Image, P-Video, P-Image-Upscale, P-Video-Avatar partnership with Tellers agentic editor.\n```\n\n## video_prompt — dynamic per scene (do)\n\nScene 1 close-up:\n\n```text\nExtreme close-up speaking directly to lens, subtle slow push-in, natural eyebrow movement,\nconversational energy, slight head tilt, cinematic dark background holds steady.\n```\n\nScene 2 outdoor 3/4:\n\n```text\nThree-quarter angle, speaks with natural hand gesture, golden hour light on face,\ngentle breeze in hair, lake and peaks softly blurred behind, empathetic honest tone.\n```\n\nScene 3 distinctive setting:\n\n```text\nMedium shot, speaks with building excitement, natural head nods, one open palm gesture,\ncamera holds with gentle float sensation, earth visible through window behind.\n```\n\nScene 4 over-shoulder:\n\n```text\nOver-shoulder angle turning toward camera, speaks like explaining to a friend,\nrelaxed shoulder movement, warm window light, subtle zoom in during key point.\n```\n\nScene 5 CTA:\n\n```text\nCamera moves continuously — stable portrait then gentle push-in on final line.\nSubject speaks directly to camera with clear lip movement, warm friendly smile building,\nsubtle wave gesture at end after the spoken line lands.\n```\n\n## video_prompt (generic — avoid for multi-scene)\n\n```text\nno subtitles, no text, no logos\n```\n\n## Shared cast voice direction (for voice_prompt)\n\nOne line for the whole project:\n\n```text\nShared read: [one line on pacing, genre, energy for every speaker in this piece].\n```\n\nThen per character, one short line each, still in **`voice_prompt`**, never in **`voice_script`**.\n\n## Voice preset lock (same actor, same preset)\n\nEach recurring character uses **one** Pruna **`voice`** + **`voice_language`** across **every** scene they speak—copy the same strings from your cast ledger into each **`p-video-avatar`** call for that character. Adjust performance only with **`voice_prompt`**, not by swapping presets mid-story.\n\n## Client-facing script → confirmation → run package\n\nDraft **`voice_script`** lines in **natural spoken English** (or the target language). Share the full read-through with the client or requester; obtain **explicit approval** before generating. After approval, paste approved lines verbatim into JSON **`voice_script`** fields and execute your chosen **run script** or **`curl`** sequence—no silent edits.\n\n## Manifest JSON (scene package)\n\nStore approved scenes in a machine-readable file (e.g. `v2_avatar_only_scripts.json`) before running API calls:\n\n```json\n{\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"cast\": {\n    \"voice\": \"Puck (Male)\",\n    \"voice_language\": \"English (US)\",\n    \"voice_prompt\": \"Natural conversational LinkedIn tone — like a founder talking to camera, not reading a script.\"\n  },\n  \"character_sheet\": {\n    \"role\": \"founder spokesperson\",\n    \"age\": \"early 30s\",\n    \"realism\": \"photorealistic documentary\"\n  },\n  \"scenes\": [\n    {\n      \"id\": 1,\n      \"still\": \"hero\",\n      \"still_prompt\": null,\n      \"video_prompt\": \"...\",\n      \"voice_script\": \"...\"\n    },\n    {\n      \"id\": 2,\n      \"still_prompt\": \"Change only: 3/4 angle, mountain summit overlooking alpine lake at golden hour...\",\n      \"video_prompt\": \"...\",\n      \"voice_script\": \"...\"\n    }\n  ]\n}\n```\n\n## Beat sheet (conversation)\n\n```text\nScene 1 [CHAR A]: [hook line tied to product beat]\nScene 2 [CHAR B]: [reaction, new information]\nScene 3 [CHAR C]: [proof or demo beat]\n...\nFinal scene: exact CTA wording: \"[CTA]\"\n```\n\nFile v1.0.14:skill-card.md\n\n## Description:\n\nGuides creators through planning and producing multi-scene videos with a consistent on-camera host, including speaking clips and animated comparisons.\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 production teams use this skill to plan and assemble reels with a recurring host across talking-head and motion-transfer scenes, reviewing scripts, stills, and clips before proceeding.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Reference media and generated content are uploaded to Pruna using an API key.\n\nMitigation: Confirm rights to source media and chosen voices or locales before upload, and protect the API key.\n\nRisk: Paid generation can run before the requested media is approved or costs are understood.\n\nMitigation: Confirm costs and follow the plan, stills, and clips approval gates before advancing.\n\nRisk: Example install commands may introduce an unreviewed skill dependency.\n\nMitigation: Use a trusted skills installer path and review dependencies before installation.\n\n## Reference(s):\n\n- [Avatar Multi-Scene on ClawHub](https://clawhub.ai/pruna-ai/skills/avatar-multi-scene)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, JSON configuration, Shell commands]\n\n**Output Format:** [Markdown scene plans and scripts, JSON scene manifests, and ffmpeg commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Approval-gated still, clip, and final assembly workflow.]\n\n## Skill Version(s):\n\n1.0.14 (source: ClawHub 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  \"templates\": [],\n  \"generation_phases\": {\n    \"default\": \"stills\",\n    \"phases\": [\n      \"stills\",\n      \"video\",\n      \"render\"\n    ]\n  }\n}\n\nFile v1.0.14:templates/batch.template.json\n\n{\n  \"scenes\": [\n    {\n      \"title\": \"Scene 01 · Persona variations\",\n      \"source\": \"output/scene01_motion.mp4\",\n      \"render\": \"output/scene01_compare.mp4\",\n      \"compare_mode\": \"single_pass_multi_slider\",\n      \"samples\": [\n        {\n          \"output\": \"output/scene01_persona_a.mp4\",\n          \"output_label\": \"Photoreal UGC\",\n          \"beat_label\": \"Variation A\"\n        },\n        {\n          \"output\": \"output/scene01_persona_b.mp4\",\n          \"output_label\": \"Premium anime\",\n          \"beat_label\": \"Variation B\"\n        }\n      ],\n      \"timing\": {\n        \"hook_seconds\": 0.5,\n        \"slider_seconds\": 2.5,\n        \"hold_output_seconds\": 0.3,\n        \"outro_seconds\": 0.5,\n        \"transition_seconds\": 0.4\n      }\n    },\n    {\n      \"title\": \"Scene 02 · Persona variations\",\n      \"source\": \"output/scene02_motion.mp4\",\n      \"render\": \"output/scene02_compare.mp4\",\n      \"compare_mode\": \"single_pass_multi_slider\",\n      \"samples\": [\n        {\n          \"output\": \"output/scene02_persona_a.mp4\",\n          \"output_label\": \"Claymation\",\n          \"beat_label\": \"Variation A\"\n        },\n        {\n          \"output\": \"output/scene02_persona_b.mp4\",\n          \"output_label\": \"Disney 3D\",\n          \"beat_label\": \"Variation B\"\n        }\n      ]\n    }\n  ]\n}\n\nArchive v1.0.13: 8 files, 20230 bytes\n\nFiles: animate-beats.md (5827b), examples.md (6231b), prompt-templates.md (12080b), skill-card.md (2338b), skill.manifest.json (165b), SKILL.md (17161b), templates/batch.template.json (1275b), _meta.json (138b)\n\nFile v1.0.13:SKILL.md\n\n---\nname: avatar-multi-scene\ndescription: Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity.\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-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| `p-video-animate` | Use when someone wants a photo to move like another video — motion transfer, dance remixes, or performance variations from a template clip. | `npx skills add PrunaAI/pruna-skills@p-video-animate -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 `` `avatar-multi-scene` `` in backticks. Restate the user's **continuity / UGC / host / segment** goal in one line. 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## Purpose\n\nProduce a **coherent multi-scene** piece stitched later with **ffmpeg** (Pruna does not ship a concat endpoint). Each beat is one of:\n\n| Beat type | Model | Deliverable |\n|-----------|--------|-------------|\n| **`avatar`** | **`p-video-avatar`** | Talking-head clip from approved still + `voice_script` |\n| **`animate`** | **`p-video-animate`** + slider render | Motion-transfer clip, usually wrapped in a **side-by-side or wipe comparison** MP4 (motion template vs animated subject) |\n\nMix types in one announcement reel—e.g. avatar hook → animate slider demo → avatar CTA.\n\nVisual continuity comes from **Pruna `p-image-ideogram` / `p-image-edit`** on uploaded references (`p-image` for cheap drafts).\n\nFollow this skill in **plain language** when talking to the person requesting the video. Use **natural, speakable copy** in every `voice_script`.\n\n**Staged generation:** `generation-diversity` · `generation-diversity`\n\n## Quick reference\n\n| Resource | Path |\n|----------|------|\n| Photoreal dynamic personas | `image-prompting` |\n| Cast ledger, character sheet, voice/video prompts | [prompt-templates.md](./prompt-templates.md) |\n| Animate rows, sliders, alignment | [animate-beats.md](./animate-beats.md) |\n| Examples | [examples.md](./examples.md) |\n| Feedback discipline | `generation-diversity` |\n| Slider (agent) | ffmpeg `hstack` / wipe — see **Slider comparison** below |\n| Batch template | [templates/batch.template.json](./templates/batch.template.json) |\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Scene table, read-through, cast ledger | **approve plan** |\n| **A — Stills** | Hero + per-scene plates | **approve stills** |\n| **B — Video** | Avatar / animate clips + sliders | **approve clips** |\n| **C — Assembly** | Concat reel + optional bed | User accepts |\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user has answered and you have recorded the answers (use defaults only if the user explicitly opts in):\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What is the piece for (pitch, tutorial, trailer, episode)? Primary audience? |\n| **Scope** | How many speaking scenes or beats? Approximate total runtime after assembly? |\n| **Cast** | Who speaks, in what order? One character throughout or multiple? |\n| **Look** | Aspect for stills and feel (`9:16` / `16:9`)? Avatar output `720p` or `1080p`? |\n| **Media source** | **Generate** hero plates with `p-image-ideogram` / edits vs **upload-only** references; user-owned motion templates for animate beats? |\n| **Voice** | For **each named character**, pick **one** Pruna `voice` and `voice_language` and **reuse it in every scene** that character speaks. Any words that must be pronounced exactly (names, acronyms)? |\n| **Style** | Agreed **style bible** line for all image prompts? |\n| **Character sheet** | Per speaker: age range, wardrobe baseline, hair, skin/realism level, personality adjectives—record before hero generation (see **Character sheet** below). |\n| **Scene variety** | Each scene must differ in **camera angle**, **background/setting**, and/or **energy**—no two consecutive scenes with the same framing and location unless the user asks. Plan **`visual_style_tag`**, **`setting_tag`**, **`camera_tag`**, **`lighting_tag`** per row — `generation-diversity`. |\n| **Ritual seed (SSoT)** | Ritual seed at hero — generate and state a ritual string; log as **`ritual_seed`**; derive prompt axes via sum-mod. **Do not** pass ritual string to API `seed`. |\n| **References** | Which files to upload; rights cleared? |\n| **Beat mix** | Which scenes are **`avatar`** vs **`animate`**? All avatar, all animate, or mixed announcement? |\n| **Narrated B-roll cutaways** | Optional **`p-video`** beats using scene-anchor triple (`video-prompting`) alongside avatar rows |\n| **Motion templates** (animate beats) | Source `.mp4` per animate row—owned/licensed? Match pose/framing to reference still? |\n| **Slider delivery** (animate beats) | Comparison MP4 only, animated-only strip, or both? Canvas default 1920×1080. |\n| **Assembly** | How clips will be joined and leveled (ffmpeg plan)? |\n\nIf anything material is unknown, **ask** before the first upload or prediction.\n\n## Cast ledger & character sheet\n\nMaintain a **cast table** in the manifest: one Pruna **`voice`** + **`voice_language`** per recurring character — **never** swap presets mid-story unless the user requests a recast.\n\nBefore hero generation, fill a **character sheet** per speaker (age, face, realism, wardrobe baseline, personality, **`ritual_seed`** for planning). Templates and manifest JSON: **[prompt-templates.md](./prompt-templates.md)**.\n\n**Rule:** New locations and styles = **`p-image-edit`** off the approved hero URL — not unrelated fresh **`p-image`** identity pulls.\n\n## Scene plan (dynamic beats)\n\nEvery piece needs a **scene table** — each row **`avatar`** or **`animate`**. Example columns and manifest JSON: **[prompt-templates.md](./prompt-templates.md)** · **[animate-beats.md](./animate-beats.md)**.\n\n### Motion-transfer alignment (animate beats)\n\n**P-Video-Animate** animates a reference image using motion, timing, and camera movement from a source video. The better the subject's **features, pose, framing, and proportions** align with the motion template, the better the result.\n\n| Alignment | Typical outcome |\n|-----------|-----------------|\n| Same shot type, similar pose, similar scale | Clean motion transfer; slider demo reads instantly |\n| Same character type, slightly different angle | Good with optional **`p-image-edit`** repose toward a template keyframe |\n| Meme / cartoon / mascot on **human full-body** motion | Limbs, gait, and contact points may warp or slide |\n| Tiny head / extreme proportions on **dance or arm-heavy** motion | Hands, legs, and depth cues often break |\n| Reference facing camera, source subject in profile | Shoulder/head turn and occlusion artifacts |\n\n**Rule:** Treat severe pose or proportion mismatch as a **pre-flight risk**. Repose with **`p-image-edit`** or pick a closer motion template before burning **`p-video-animate`** credits.\n\n**Alignment prep (per animate row):**\n\n1. Match **shot size** and **facing direction** between still and template.\n2. Match **limb visibility**—if the template waves arms, the still must show arms.\n3. **Repose when close but not exact** — **`p-image-edit`** from the hero anchor: *\"Change only: match pose and camera to reference video frame; keep identity and outfit.\"*\n4. Run animate QA from `video-prompting` on the pair before animate.\n\n**Anti-patterns (all types):** two identical office avatar scenes back-to-back; corporate brochure **`voice_script`**; human dance template + chibi meme still without repose; serial API jobs when scenes are independent; **motion templates that prompt smile/wave only** (avatar stays silent — see below).\n\n### Motion templates for animate beats\n\nWhen **`p-video-avatar`** generates a **motion template** (source video for **`p-video-animate`**), treat it as a speaking beat — not a portrait pose.\n\n| Field | Requirement |\n|-------|-------------|\n| Motion-source **`still_edit`** | `mouth clearly visible ready to speak` — not passive smile only |\n| **`video_prompt`** | `speaks directly to camera`, `clear lip movement`, explain gestures, head nods — **before** any wave/smile close |\n| **`voice_prompt`** | Delivery throughout the line — not “wave energy at the end” only |\n| Camera | Prefix: `Camera moves continuously for the full clip — … never locked-off` |\n\nSilent motion templates break slider demos and animate transfers. Prompt templates: [prompt-templates.md](./prompt-templates.md). Full animate pipeline: [animate-beats.md](./animate-beats.md).\n\n### Mixed reels with animate rows\n\n| Pattern | Structure |\n|---------|-----------|\n| Interleaved | avatar hook → animate demo → avatar proof → animate demo → avatar CTA |\n| Slider-heavy | N **`animate`** slider rows → final **`avatar`** CTA on hero |\n\nEnd product launches with a speakable **`avatar`** CTA unless the user opts out.\n\n## Identity & ritual seed policy\n\nComplete the ritual seed step in `generation-diversity` before hero prompt work. Log **`ritual_seed`** in manifest; reuse only on same-brief slop retry.\n\nCharacter continuity = **approved hero plate URL** + cast descriptor — not API `seed`. Pass **`api_seed`** in `input` only when the user explicitly locks reproducibility.\n\n## Natural voice (mandatory for avatar social / founder content)\n\n**`voice_script`** = speakable dialogue (contractions, short breaths). **`voice_prompt`** = performance direction only — never marketing copy or script text.\n\nGood/bad pairs: **[prompt-templates.md](./prompt-templates.md)**.\n\n## Source portrait / hero (same character across styles and scenes)\n\nFor **each** recurring character:\n\n1. Land **one** approved **source** still via **`p-image-ideogram`** or upload (`p-image` for a cheap draft). Run the slop gate on the hero before sign-off. Treat the approved file URL as the **identity anchor**.\n2. **Every** later look—including a new background, emotion, prop, or **style variation**—should be produced with **`p-image-edit`** from **that same source URL**, plus the shared style bible and a short delta (“change only: …”).\n3. **Each new scene** still starts from the same character source so faces stay one continuous role across the arc.\n\n## Confirmation gate (mandatory)\n\nAfter intake is complete:\n\n1. Present a **read-through package**: scene order and **type** per row; full **`voice_script`** for avatar rows; motion templates + reference stills + **alignment risks** for animate rows; cast ledger; hero URL(s); chosen **`resolution`**; legal/CTA lines **verbatim** if supplied.\n2. Ask clearly for approval (e.g. “Reply **approve** or **go** when this script and cast are final.”).\n3. **Do not** upload binaries for generation or call **`POST /v1/predictions`** until the user **explicitly confirms**.\n\n## How the agent runs this\n\nOnce the user confirms:\n\n1. Upload refs → hero `p-image-ideogram` → parallel per-scene `p-image-edit` → slop gates → **approve stills**.\n2. Parallel **`p-video-avatar`** (avatar rows) and **`p-video-animate`** (animate rows) via curl batches (`pruna-api`).\n3. For each animate row, build a **slider / comparison** MP4 with ffmpeg (below).\n4. ffmpeg concat in scene order → optional bed → **approve** final.\n\nPrefer one parallel lane per independent scene after the hero exists. Parent owns confirmation, manifest merge, and assembly.\n\n## Core rules\n\n1. **`p-video-avatar` `input.image`** — use an approved still URL from `/v1/files` that passed `generation-diversity` checklists.\n2. Run the **slop gate** on every hero and scene still **before** any avatar job.\n\n```text\nHero:     p-image-ideogram (or upload) → slop gate → approve anchor\nScene N:  p-image-edit(anchor) → slop gate → p-video-avatar\n```\n\n## API surface (this workflow)\n\n| Step | Model | Skill |\n|------|--------|--------|\n| Upload binaries | `POST /v1/files` | `pruna-api` |\n| Style-locked stills | `p-image-ideogram`, `p-image-edit` | `p-image-ideogram`, `p-image-edit` |\n| Talking clips | `p-video-avatar` | `p-video-avatar` |\n| Motion transfer | **`p-video-animate`** | `p-video-animate` |\n| Slider comparison | ffmpeg (below) | local |\n\nUse **`PRUNA_API_KEY`** and the **`apikey`** header on every call. **Async + parallel by default**: batch all avatar jobs once approved stills pass slop; batch all animate jobs once motion + still URLs are ready; poll all `get_url` together.\n\n## Parallel execution\n\n| Phase | Parallel? |\n|-------|-----------|\n| Hero `p-image-ideogram` → gate | Sequential |\n| Per-scene `p-image-edit` | **Yes** — all scenes |\n| Slop gate | **Yes** — review in parallel |\n| `p-video-avatar` | **Yes** — all avatar rows |\n| `p-video-animate` | **Yes** — all animate rows |\n| Slider render | **Yes** — all animate rows |\n| Assembly | Sequential order only |\n\n**Rule:** Never dispatch generation before user confirmation.\n\n## Slider comparison (animate rows)\n\nSide-by-side (motion template | animated):\n\n```bash\nffmpeg -y -i motion_template.mp4 -i animated.mp4 \\\n  -filter_complex \"[0:v]scale=960:1080[l];[1:v]scale=960:1080[r];[l][r]hstack=inputs=2[v]\" \\\n  -map \"[v]\" -map 1:a? -c:v libx264 -c:a aac -shortest scene_compare.mp4\n```\n\nOr present both clips and let the user’s editor build a wipe slider. Paths can follow [templates/batch.template.json](./templates/batch.template.json) (`source`, `render`, `samples[]`).\n\n## Workflow\n\n| Step | Action |\n|------|--------|\n| 1–3 | Intake → speakable script → **confirmation gate** (no API until approve) |\n| 4–5 | Upload refs → **`p-image-ideogram` hero** per character → slop gate |\n| 6–7 | Parallel **`p-image-edit`** scene stills → slop gate each |\n| 8 | Parallel **`p-video-avatar`** (cast ledger voices, unique `video_prompt` per scene) |\n| 9 | Parallel **`p-video-animate`** + ffmpeg sliders — [animate-beats.md](./animate-beats.md) |\n| 10 | ffmpeg concat ± optional bed — `stable-audio-2.5` |\n| 11 | Manifest: paths, prediction ids, slop notes, cast snapshot |\n\n```bash\nffmpeg -y -f concat -safe 0 -i clips.txt -c copy reel.mp4\n```\n\nShared ffmpeg recipes (concat, bed mix, sliders, export): **`video-editing`**.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-single-scene` | Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation. | `npx skills add PrunaAI/pruna-skills@avatar-single-scene -y` |\n| `image-to-video` | Use when someone wants one short film beat from images — a narrated scene, story moment, or cinematic B-roll with optional voiceover. | `npx skills add PrunaAI/pruna-skills@image-to-video -y` |\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| `p-video-animate` | Use when someone wants a photo to move like another video — motion transfer, dance remixes, or performance variations from a template clip. | `npx skills add PrunaAI/pruna-skills@p-video-animate -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\": \"avatar-multi-scene\",\n  \"version\": \"1.0.13\",\n  \"publishedAt\": 1789653681733\n}\n\nFile v1.0.13:animate-beats.md\n\n# Animate beats in multi-scene reels\n\nHow **`p-video-animate`** fits into mixed **`avatar` + `animate`** pieces built with `avatar-multi-scene`.\n\n## What each model does\n\n| Model | Role in an animate row |\n|-------|------------------------|\n| **`p-image` / `p-image-edit`** | Reference stills — motion-source portrait and persona subjects |\n| **`p-video-avatar`** | Optional: generate a **motion template** (talking-head source video) when you don't have a licensed `.mp4` |\n| **`p-video-animate`** | Transfer motion from source video onto reference image |\n| **Slider render** | Optional comparison MP4 (motion template vs animated output) via `avatar-multi-scene` |\n\n**`p-video-animate`** takes:\n\n- **`video`** — motion, timing, camera path, acting beats, audio source\n- **`image`** — subject identity, style, wardrobe, environment look\n\nOutput keeps **motion from the video**, **appearance from the image**.\n\n## Animate row pipeline\n\n```text\nHero anchor (p-image-ideogram)\n  → motion-source still (p-image-edit)\n  → motion template (p-video-avatar OR upload .mp4)\n  → persona still(s) (p-image-ideogram or p-image-edit)\n  → p-video-animate (one job per persona)\n  → optional slider compare MP4\n```\n\n## Making motion templates work\n\nWhen **`p-video-avatar`** creates the source video for **`p-video-animate`**, prompt it like a **speaking** clip — not a portrait pose.\n\n| Field | Guidance |\n|-------|----------|\n| Motion-source still | `mouth clearly visible ready to speak`; medium close-up; unobstructed face |\n| **`video_prompt`** | `speaks directly to camera`, `clear lip movement`, explain gestures, head nods; prefix with `Camera moves continuously … never locked-off` |\n| **`voice_prompt`** | Conversational delivery throughout the line — not gesture-only direction at the end |\n\nSmile/wave/nod are fine **after** explicit speaking direction. Smile/wave **instead of** speaking produces silent templates — weak lip sync and poor slider demos.\n\n## Making `p-video-animate` work\n\n### Alignment (most important)\n\nMatch **shot size**, **facing direction**, and **visible limbs** between reference image and motion template.\n\n| Pairing | Outcome |\n|---------|---------|\n| Same framing and pose | Best transfer |\n| Same character type, slight angle difference | Good; optional repose with **`p-image-edit`** |\n| Stylized / mascot / chibi on human full-body motion | Limbs and contact points often break |\n| Profile motion + front-facing still | Head/shoulder artifacts |\n\nRepose before animate when close but not exact: *\"Change only: match pose and camera to reference video frame; keep identity and outfit.\"*\n\n### Reference stills (personas)\n\n- Face and mouth large enough for lip-sync when the template speaks\n- **`instruction_prompt`** steers behavior without fighting source motion:\n\n```text\nAnimate the reference subject using the exact motion, timing, and camera movement from the source video. Keep identity and outfit from the reference image.\n```\n\n- **Style variety** (photoreal, premium anime, claymation, Disney/Pixar 3D, cyberpunk, blockbuster movie, AAA game cinematic) on one motion template shows range in slider demos — each style still needs reasonable pose/framing alignment **and** its own background, camera angle, and lighting. Record `visual_style_tag`, `setting_tag`, `camera_tag`, and `lighting_tag` per ref. See generation-diversity.md#visual-variety (`generation-diversity`).\n\n### API fields\n\n- **`resolution`**: `720p` or `1080p`\n- **`target_fps`**: `original` (default), `24`, or `48`\n- **`save_audio`**: `true` when the motion template has dialogue\n- **`seed`**: lock per persona row when retrying\n\n### Persona style ladder (animate slider rows)\n\nWhen building eye-catching comparison reels, generate **3–4 persona stills per animate row** — each a different **`visual_style_tag`** with distinct **`setting_tag`**, **`camera_tag`**, and **`lighting_tag`**:\n\n| Ref slot | Example style | Example setting + light |\n|----------|---------------|-------------------------|\n| 1 | Photoreal UGC | neutral wall, soft ring light |\n| 2 | Premium anime | neon rain alley, dramatic anime key |\n| 3 | Claymation | miniature living room, warm practical lamp |\n| 4 | Disney / fairy-tale 3D | enchanted garden, golden hour |\n| 5 (optional) | Cyberpunk | rain-slick alley, magenta-cyan edge |\n| 6 (optional) | AAA game cinematic | alien canyon, volumetric sun shafts |\n\nFull prompt patterns: generation-diversity.md#visual-variety (`generation-diversity`).\n\nRun `video-prompting` on inputs and outputs.\n\n## Mixed reel structures\n\n### Interleaved avatar + animate\n\n| # | Type | Beat |\n|---|------|------|\n| 1 | avatar | Hook |\n| 2 | animate | Slider demo |\n| 3 | avatar | Feature / proof |\n| 4 | animate | Second demo |\n| 5 | avatar | CTA |\n\n### Slider-heavy + CTA close\n\n| # | Type | Beat |\n|---|------|------|\n| 1–N | animate | Slider comparisons (3–4 persona variations each) |\n| N+1 | avatar | CTA — return hero spokesperson, clean studio, short close |\n\nAvatar CTA rows use **`type: avatar`** → deliver `{id}_avatar.mp4`. Animate rows → `{id}_compare.mp4` (or animated-only if no slider).\n\n## Slider comparison (optional)\n\nSide-by-side before/after with ffmpeg (no extra Python deps):\n\n```bash\nffmpeg -y -i path/to/motion-template.mp4 -i path/to/animated-output.mp4 \\\n  -filter_complex \"[0:v][1:v]hstack=inputs=2[v]\" -map \"[v]\" -an path/to/scene_compare.mp4\n```\n\nFor several persona variations, repeat per sample and concat, or build a simple hstack grid in your editor.\n\n## Assembly\n\nConcat clips in scene-table order — avatar MP4s and animate comparison MP4s interleaved as planned. Level audio in your editor or ffmpeg.\n\nBatch config schema: [`batch.template.json`](./templates/batch.template.json) (`scenes[]` with `source`, `render`, and `samples[]` per row).\n\nFile v1.0.13:examples.md\n\n# Examples\n\n## Dynamic multi-scene avatar (partnership / founder social)\n\nProven pattern from production runs:\n\n1. **Character sheet** — photoreal founder, early 30s, locked **`seed`**, one **`voice`** preset.\n2. **Hero** — `p-image-ideogram` (documentary photoreal) → slop gate → approve identity anchor.\n3. **Per scene** — `p-image-edit` (from hero anchor; change **only** angle + background) → slop gate → `p-video-avatar`. **Run edits and avatar jobs in parallel batches** per phase once dependencies are met (pruna-api.md#parallel-async-multi-scene--batch (`pruna-api`)); use **one subagent per scene lane** when the host supports it.\n4. **Vary every scene** — e.g. dark close-up → mountain overlook → ISS cupola → desk window light → studio CTA. Never repeat the same office framing twice.\n5. **Natural voice** — contractions, conversational hooks; **`voice_prompt`** describes human delivery, not product copy.\n\nExample dialogue (single spokesperson, natural):\n\n```text\nScene 1: \"Hey — quick question. When you're making video with AI, how long do you actually wait between ideas?\"\nScene 2: \"And that's the real problem, right? It's not just slow — you lose momentum. The whole creative loop just breaks.\"\nScene 3: \"So we teamed up with Tellers — our whole model family is live inside their editor now.\"\nScene 4: \"What's actually cool is the speed — cheap enough that you can genuinely explore without worrying about every credit.\"\nScene 5: \"Anyway — check out Tellers. Link's in the post. I'd love to see what you build.\"\n```\n\nStore scenes in JSON (`v2_avatar_only_scripts.json` pattern in `prompt-templates.md`) with **`ritual_seed`**, per-scene **`video_prompt`**, and **`still_prompt`** deltas.\n\n## Mixed announcement (avatar + animate slider beats)\n\nPattern for product launches that interleave speaking scenes with motion-transfer demos:\n\n| # | Type | Beat |\n|---|------|------|\n| 1 | avatar | Hook — spokesperson intro |\n| 2 | animate | Slider — same UGC motion, new persona still |\n| 3 | avatar | Reveal — partnership / feature detail |\n| 4 | animate | Slider — second motion template, repose hero to match |\n| 5 | avatar | CTA |\n\n**Pipeline:** shared hero anchor → per-row still prep (edit for avatars; optional repose for animate) → parallel **`p-video-avatar`** + parallel **`p-video-animate`** → parallel slider renders for animate rows → ffmpeg concat in scene order.\n\nModel roles and alignment: [animate-beats.md](./animate-beats.md).\n\n**Alignment reminder:** animate rows fail when a meme/mascot still meets human full-body dance motion—pick bust-only templates or repose first (see SKILL **Alignment prep**).\n\n**Style ladder reminder:** each persona still in an animate slider row should use a different **`visual_style_tag`** (photoreal, anime, claymation, Disney 3D, cyberpunk, game cinematic) with its own background, camera angle, and lighting — generation-diversity.md#visual-variety (`generation-diversity`).\n\n## Motion-transfer-only reel (animate rows)\n\nAll-slider showcase (UGC variations, recasting demo):\n\n1. Scene table with only **`animate`** rows.\n2. Upload motion templates + reference stills in parallel.\n3. Parallel **`p-video-animate`** → batch slider render via [`batch.template.json`](./templates/batch.template.json).\n4. Concat comparison MP4s:\n\n```bash\n# concat_list.txt\nfile 'output/scene01_compare.mp4'\nfile 'output/scene02_compare.mp4'\n\nffmpeg -f concat -safe 0 -i concat_list.txt -c copy output/recast_reel.mp4\n```\n\n**End with avatar CTA** when the piece is a product launch — return the hero spokesperson in a clean studio close-up.\n\n**Slider-only** (animate outputs already exist):\n\nBuild side-by-side sliders with **ffmpeg hstack** (see `this skill` — agent runs ffmpeg locally; no Python runner).\n\n## Multi-scene rhythm (generic cast)\n\nPattern:\n\n1. Character A opens with a concrete hook tied to the product.\n2. Character B reacts with new information, not a repeat of A.\n3. Character C adds proof or stakes.\n4. Group tightens the argument.\n5. Final line is the exact client CTA.\n\nExample dialogue (fictional cast):\n\n```text\nRiva (host): \"One portrait, one line, and we already have motion—not a storyboard fantasy.\"\nKael (skeptic): \"Motion is cheap. Staying on-model is the invoice.\"\nMire (builder): \"Same API for the stills and the talk. Fewer handoffs, fewer drift days.\"\nJax (closer): \"Ship the cut when you are ready, [CLIENT TEAM NAME].\"\n```\n\n## Bad reference frame\n\nReject:\n\n- extreme action pose\n- hair or props across the mouth\n- weapon or hand occluding the face\n- tiny face in frame\n- background that belongs to a different story world than the bible\n- stray logos or UI\n\n**Fix:** regenerate with **`p-image-edit`**, narrowing the prompt to “talking-head, shoulders square, hands low, mouth clear, same identity as reference.”\n\n## Voice_prompt hygiene\n\nUse (realistic human):\n\n```text\nNatural conversational tone — like a founder on LinkedIn, not a TV announcer.\nRelaxed pacing, real pauses, slight smile when excited, honest not salesy.\n```\n\nAvoid stuffing script, product names, or brand slogans into **`voice_prompt`**—those belong in **`voice_script`** only.\n\n## Manifest skeleton (Pruna-only)\n\n```markdown\n# [Project] — multi-scene avatar (Pruna)\n\n## ritual_seed\n- ritual_seed: \"k7Qm2xP9\" (SSoT planning — do not pass to API)\n\n## Character sheet\n- role, age, hair, realism, wardrobe baseline, personality\n\n## Style bible\n- Text: ...\n\n## Scene table\n| # | type | setting/angle or motion template | deliverable |\n\n## Files (POST /v1/files)\n- ref_hero: url, id, expires\n- scene_02_motion_template: url, id  (animate rows)\n\n## Image predictions (p-image / p-image-edit)\n- job id, model, input summary, output url, slop pass y/n\n\n## Avatar predictions (p-video-avatar)\n- scene id, job id, seed, image url, voice, voice_script excerpt, video_prompt, output url\n\n## Animate predictions (p-video-animate)\n- scene id, job id, motion url, image url, instruction_prompt, animated mp4, slider compare mp4, alignment notes\n\n## Assembly\n- ordered clip list, tool used to join (editor name / internal script), final export path\n\n## Failed attempts\n- job id, model, error message, corrective action\n```\n\nFile v1.0.13:prompt-templates.md\n\n# Prompt templates (Pruna only)\n\nCompanion to `avatar-multi-scene` — cast ledger, character sheet, still edits, and per-scene voice/video fields.\n\n## Cast ledger (voice lock)\n\n| Character | Pruna `voice` | `voice_language` | Notes |\n|-----------|----------------|------------------|--------|\n| (example) | `Zephyr (Female)` | `English (US)` | Same preset every scene this character speaks |\n\n**Rule:** recurring characters **never** change `voice` between scenes unless the user requests a recast. Tweak delivery with **`voice_prompt`** only.\n\n## Reference gathering (research assistant prompt)\n\n```text\nCollect up to [N] high-quality, rights-clear reference images for [SUBJECT / CAST].\nPrefer official art packs, style guides, or assets the client can license.\nFor each file record: character, intended use, source, license note, and image quality (resolution, clarity).\n```\n\n## Upload rule\n\nUse **`POST /v1/files`** and then Pruna **`urls.get`** values in **`p-image-edit`** `images` and in **`p-video-avatar`** `image`. Do not pass arbitrary hotlinks you do not control.\n\n## Character sheet (fill before hero generation)\n\n```text\nName/role: [e.g. Alex — founder spokesperson]\nAge/build: [early 30s, medium build]\nFace/hair: [short dark hair, light stubble, brown eyes]\nRealism: photorealistic documentary portrait, not CGI, not illustration\nWardrobe baseline: [black crew-neck — keep unless scene script changes outfit]\nPersonality: [warm, direct, founder-energy, honest]\nritual_seed: [string — SSoT planning only; generate fresh, do not copy examples]\nPruna voice: [e.g. Puck (Male)] / [English (US)]\n```\n\n## Scene table (fill during intake — every row must differ)\n\n| # | Setting & camera | Emotion | still_prompt delta (change only) |\n|---|------------------|---------|----------------------------------|\n| 1 | extreme close-up, dark void | curious hook | (hero — no edit) |\n| 2 | 3/4, outdoor location | contemplative | background + angle |\n| 3 | medium low-angle, distinctive set | excited reveal | background + angle |\n| 4 | over-shoulder at desk | conversational proof | setting + angle |\n| 5 | straight-on medium studio | warm CTA | cleaner background |\n\nPair each row with its own **`voice_script`**, **`voice_prompt`**, and **`video_prompt`** in the manifest JSON.\n\n## Ritual seed (manifest snippet)\n\n```json\n{\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"ritual_seed_policy\": \"ssot_dag_before_every_generation\",\n  \"api_seed\": null\n}\n```\n\n`ritual_seed` is **SSoT planning only** — do not pass to API `input.seed`. Set `api_seed` only when the user explicitly locks API reproducibility.\n\nReplace strings with your random seed ritual (`generation-diversity`) — do not copy from this template.\n\n**Ritual:** generation-diversity.md#random-seed-ritual-mandatory-before-every-generation (`generation-diversity`) (SSoT) — generate a random string before every generation; derive prompt axes via sum-mod.\n\n## Fashion / ecommerce try-on path\n\nWhen the deliverable is **dressed model stills** or **fashion UGC avatar**:\n\n1. **`p-image`** photoreal editorial plate → slop gate — `image-prompting`\n2. **`p-image-try-on`** with garment refs (normal mode for complex stacks) — `image-prompting`\n3. Optional **`p-image-upscale`** → slop gate → **`p-video-avatar`** with **unique `video_prompt`** and natural **`voice_script`**\n\nLock **hero plate URL** from step 1 through step 3. Plan cast diversity for public example sets per generation-diversity.md#visual-variety (`generation-diversity`).\n\n## Style bible (paste into every image prompt)\n\n```text\nStyle lock: [2-4 sentences: medium, line quality, palette, lighting, camera era].\nSame character as reference: [identity anchors: species, age, outfit, iconic props].\n```\n\n## p-image: new photo generation (when you lack a photo reference)\n\n```text\n[Style bible]\nVertical 9:16 talking-head portrait, [CHARACTER] in [SETTING], shoulders toward camera,\nhands low in frame, face large and centered, mouth clearly visible for speech animation,\nneutral relaxed expression ready to speak.\n```\n\n## p-image-ideogram: photoreal hero (preferred for avatar pipelines)\n\n```text\nPhotorealistic documentary portrait photograph of a real person, not CGI, not 3D render.\n[Character sheet: age, hair, wardrobe, personality visible in expression]\nNatural skin with pores and subtle imperfections. Shot on 85mm lens, shallow depth of field.\n[Setting for scene 1 only]. 16:9 talking-head, face centered, mouth clearly visible mid-speech.\nNo text, no logos.\n```\n\nAfter hero succeeds: run slop gate on the hero output → approve anchor.\n\n## p-image-edit: match reference, change only what the scene needs\n\n```text\n[Style bible]\nUsing the attached reference(s) as identity, produce a vertical 9:16 talking-head frame for scene [N]: [POSE / EMOTION / BACKGROUND CHANGE ONLY].\nKeep face, species, and costume on-model; mouth unobstructed; no new text or logos in frame.\n```\n\nUse 1–5 **`images`** URLs per the `p-image-edit` skill. Reuse the **hero** URL in every edit that must stay on-model.\n\n## p-video-avatar: JSON field names (snake_case)\n\n| Field | Role |\n|--------|------|\n| `image` | Still URL from `/v1/files` or prior delivery URL your pipeline trusts |\n| `voice_script` | Exact spoken words for this clip |\n| `voice` | Pruna voice preset (see model doc list) |\n| `voice_language` | e.g. `English (US)` |\n| `voice_prompt` | Short performance direction only (not script text) |\n| `video_prompt` | Shot motion: framing, energy, head motion—positive wording only |\n| `resolution` | `720p` or `1080p` |\n\n## p-image-edit: per-scene still (avatar rows)\n\n```text\nUsing the attached reference(s) as identity — keep exact same person, face, skin texture, photorealistic quality.\nChange only: [ANGLE], [BACKGROUND/SETTING], [EXPRESSION]. [Character sheet wardrobe baseline unless scripted change].\n16:9, mouth clearly visible, ready to speak. No text, no logos.\n```\n\nRun slop gate on the edit output before **`p-video-avatar`**. Pass the approved still URL from `/v1/files`.\n\nUse 1–5 **`images`** URLs per the `p-image-edit` skill. Reuse the **hero** URL in every edit that must stay on-model.\n\n## Motion source still + template (animate rows)\n\nEach **`animate`** row needs a **speaking** motion template. Generate the still with **`p-image-edit`** off hero, then **`p-video-avatar`** on the approved still.\n\n**Motion-source `still_edit`:**\n\n```text\nRecast as [character]. Medium close-up in [SETTING], confident warm expression,\nmouth clearly visible ready to speak, documentary realism.\n```\n\n**Motion-template `video_prompt` (do):**\n\n```text\nCamera moves continuously for the full clip — smooth dolly push-in with subtle arc, never locked-off.\nSubject speaks directly to camera with natural open-hand explain gestures, clear lip movement,\nnatural head nods and eyebrow emphasis while talking, warm smile building toward a small wave at the close.\n```\n\n**Motion-template `video_prompt` (avoid — silent avatar):**\n\n```text\nSubject smile builds then small wave and nod at close, atmospheric fog drifting …\n```\n\n**Motion-template `voice_prompt` (do):**\n\n```text\nClear conversational delivery throughout — speaking directly to camera. Natural pacing with real pauses.\n```\n\nWhen motion-source prompts change, delete cached motion-source stills before regen. See [animate-beats.md](./animate-beats.md).\n\n## voice_script — natural human (do)\n\n```text\nHey — quick question. When you're making video with AI, how long do you actually wait between ideas?\nBecause for most people, it's way too long.\n```\n\n```text\nSo we teamed up with Tellers — they built this agentic video editor — and our whole model family is live inside it now.\n```\n\n## voice_script — corporate stiff (avoid)\n\n```text\nIf you work with AI video, you already know the problem. You ask for something, then you wait — and the creative loop breaks.\n```\n\n```text\nThat is why we are partnering with Tellers. Our full model family — P-Image, P-Video, P-Image-Upscale, and P-Video-Avatar — is now live inside their agentic video editor.\n```\n\n## voice_prompt — realistic human delivery (do)\n\nProject-level (reuse across scenes):\n\n```text\nNatural conversational tone — like a founder talking on LinkedIn, not a TV announcer.\nRelaxed pacing, real pauses, contractions in delivery, slight smile when excited, honest not salesy.\n```\n\nPer-scene tweak (optional, still non-spoken):\n\n```text\nSlightly urgent on the hook; empathetic on the problem beat; building excitement on the reveal.\n```\n\n## voice_prompt — avoid\n\n```text\nSay the following about our enterprise AI video platform partnership announcement.\n```\n\n```text\nP-Image, P-Video, P-Image-Upscale, P-Video-Avatar partnership with Tellers agentic editor.\n```\n\n## video_prompt — dynamic per scene (do)\n\nScene 1 close-up:\n\n```text\nExtreme close-up speaking directly to lens, subtle slow push-in, natural eyebrow movement,\nconversational energy, slight head tilt, cinematic dark background holds steady.\n```\n\nScene 2 outdoor 3/4:\n\n```text\nThree-quarter angle, speaks with natural hand gesture, golden hour light on face,\ngentle breeze in hair, lake and peaks softly blurred behind, empathetic honest tone.\n```\n\nScene 3 distinctive setting:\n\n```text\nMedium shot, speaks with building excitement, natural head nods, one open palm gesture,\ncamera holds with gentle float sensation, earth visible through window behind.\n```\n\nScene 4 over-shoulder:\n\n```text\nOver-shoulder angle turning toward camera, speaks like explaining to a friend,\nrelaxed shoulder movement, warm window light, subtle zoom in during key point.\n```\n\nScene 5 CTA:\n\n```text\nCamera moves continuously — stable portrait then gentle push-in on final line.\nSubject speaks directly to camera with clear lip movement, warm friendly smile building,\nsubtle wave gesture at end after the spoken line lands.\n```\n\n## video_prompt (generic — avoid for multi-scene)\n\n```text\nno subtitles, no text, no logos\n```\n\n## Shared cast voice direction (for voice_prompt)\n\nOne line for the whole project:\n\n```text\nShared read: [one line on pacing, genre, energy for every speaker in this piece].\n```\n\nThen per character, one short line each, still in **`voice_prompt`**, never in **`voice_script`**.\n\n## Voice preset lock (same actor, same preset)\n\nEach recurring character uses **one** Pruna **`voice`** + **`voice_language`** across **every** scene they speak—copy the same strings from your cast ledger into each **`p-video-avatar`** call for that character. Adjust performance only with **`voice_prompt`**, not by swapping presets mid-story.\n\n## Client-facing script → confirmation → run package\n\nDraft **`voice_script`** lines in **natural spoken English** (or the target language). Share the full read-through with the client or requester; obtain **explicit approval** before generating. After approval, paste approved lines verbatim into JSON **`voice_script`** fields and execute your chosen **run script** or **`curl`** sequence—no silent edits.\n\n## Manifest JSON (scene package)\n\nStore approved scenes in a machine-readable file (e.g. `v2_avatar_only_scripts.json`) before running API calls:\n\n```json\n{\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"cast\": {\n    \"voice\": \"Puck (Male)\",\n    \"voice_language\": \"English (US)\",\n    \"voice_prompt\": \"Natural conversational LinkedIn tone — like a founder talking to camera, not reading a script.\"\n  },\n  \"character_sheet\": {\n    \"role\": \"founder spokesperson\",\n    \"age\": \"early 30s\",\n    \"realism\": \"photorealistic documentary\"\n  },\n  \"scenes\": [\n    {\n      \"id\": 1,\n      \"still\": \"hero\",\n      \"still_prompt\": null,\n      \"video_prompt\": \"...\",\n      \"voice_script\": \"...\"\n    },\n    {\n      \"id\": 2,\n      \"still_prompt\": \"Change only: 3/4 angle, mountain summit overlooking alpine lake at golden hour...\",\n      \"video_prompt\": \"...\",\n      \"voice_script\": \"...\"\n    }\n  ]\n}\n```\n\n## Beat sheet (conversation)\n\n```text\nScene 1 [CHAR A]: [hook line tied to product beat]\nScene 2 [CHAR B]: [reaction, new information]\nScene 3 [CHAR C]: [proof or demo beat]\n...\nFinal scene: exact CTA wording: \"[CTA]\"\n```\n\nFile v1.0.13:skill-card.md\n\n## Description:\n\nUse when someone wants the same person hosting several clips - multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity.\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 creative operators use this skill to plan and generate coherent multi-scene avatar reels, combining talking-head clips, motion-transfer scenes, comparison sliders, and final ffmpeg assembly while preserving character continuity.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Floating install commands can resolve changing third-party tooling.\n\nMitigation: Install only from trusted PrunaAI skill sources and prefer pinned or verified tooling where possible.\n\nRisk: Reference images, scripts, approved stills, and generated clips may be saved locally or uploaded to Pruna services during generation.\n\nMitigation: Confirm rights, sensitivity, and user approval before uploading media or running generation.\n\nRisk: Poor motion-template alignment or repeated scene framing can produce weak or misleading avatar and comparison clips.\n\nMitigation: Use the skill's approval gates, slop checks, and motion-template alignment review before video generation.\n\n## Reference(s):\n\n- [avatar-multi-scene on ClawHub](https://clawhub.ai/pruna-ai/skills/avatar-multi-scene)\n- [Prompt templates](artifact/prompt-templates.md)\n- [Animate beats](artifact/animate-beats.md)\n- [Examples](artifact/examples.md)\n- [Batch template](artifact/templates/batch.template.json)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, Configuration, Shell commands]\n\n**Output Format:** [Markdown guidance with JSON templates and shell command examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses staged approval gates for planning, stills, clips, and assembly before generation proceeds.]\n\n## Skill Version(s):\n\n1.0.13 (source: evidence release.version and SKILL.md metadata)\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  \"templates\": [],\n  \"generation_phases\": {\n    \"default\": \"stills\",\n    \"phases\": [\n      \"stills\",\n      \"video\",\n      \"render\"\n    ]\n  }\n}\n\nFile v1.0.13:templates/batch.template.json\n\n{\n  \"scenes\": [\n    {\n      \"title\": \"Scene 01 · Persona variations\",\n      \"source\": \"output/scene01_motion.mp4\",\n      \"render\": \"output/scene01_compare.mp4\",\n      \"compare_mode\": \"single_pass_multi_slider\",\n      \"samples\": [\n        {\n          \"output\": \"output/scene01_persona_a.mp4\",\n          \"output_label\": \"Photoreal UGC\",\n          \"beat_label\": \"Variation A\"\n        },\n        {\n          \"output\": \"output/scene01_persona_b.mp4\",\n          \"output_label\": \"Premium anime\",\n          \"beat_label\": \"Variation B\"\n        }\n      ],\n      \"timing\": {\n        \"hook_seconds\": 0.5,\n        \"slider_seconds\": 2.5,\n        \"hold_output_seconds\": 0.3,\n        \"outro_seconds\": 0.5,\n        \"transition_seconds\": 0.4\n      }\n    },\n    {\n      \"title\": \"Scene 02 · Persona variations\",\n      \"source\": \"output/scene02_motion.mp4\",\n      \"render\": \"output/scene02_compare.mp4\",\n      \"compare_mode\": \"single_pass_multi_slider\",\n      \"samples\": [\n        {\n          \"output\": \"output/scene02_persona_a.mp4\",\n          \"output_label\": \"Claymation\",\n          \"beat_label\": \"Variation A\"\n        },\n        {\n          \"output\": \"output/scene02_persona_b.mp4\",\n          \"output_label\": \"Disney 3D\",\n          \"beat_label\": \"Variation B\"\n        }\n      ]\n    }\n  ]\n}\n\nArchive v1.0.12: 8 files, 20323 bytes\n\nFiles: animate-beats.md (5827b), examples.md (6231b), prompt-templates.md (12080b), skill-card.md (2525b), skill.manifest.json (165b), SKILL.md (17161b), templates/batch.template.json (1275b), _meta.json (138b)\n\nFile v1.0.12:SKILL.md\n\n---\nname: avatar-multi-scene\ndescription: Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity.\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-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| `p-video-animate` | Use when someone wants a photo to move like another video — motion transfer, dance remixes, or performance variations from a template clip. | `npx skills add PrunaAI/pruna-skills@p-video-animate -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 `` `avatar-multi-scene` `` in backticks. Restate the user's **continuity / UGC / host / segment** goal in one line. 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## Purpose\n\nProduce a **coherent multi-scene** piece stitched later with **ffmpeg** (Pruna does not ship a concat endpoint). Each beat is one of:\n\n| Beat type | Model | Deliverable |\n|-----------|--------|-------------|\n| **`avatar`** | **`p-video-avatar`** | Talking-head clip from approved still + `voice_script` |\n| **`animate`** | **`p-video-animate`** + slider render | Motion-transfer clip, usually wrapped in a **side-by-side or wipe comparison** MP4 (motion template vs animated subject) |\n\nMix types in one announcement reel—e.g. avatar hook → animate slider demo → avatar CTA.\n\nVisual continuity comes from **Pruna `p-image-ideogram` / `p-image-edit`** on uploaded references (`p-image` for cheap drafts).\n\nFollow this skill in **plain language** when talking to the person requesting the video. Use **natural, speakable copy** in every `voice_script`.\n\n**Staged generation:** `generation-diversity` · `generation-diversity`\n\n## Quick reference\n\n| Resource | Path |\n|----------|------|\n| Photoreal dynamic personas | `image-prompting` |\n| Cast ledger, character sheet, voice/video prompts | [prompt-templates.md](./prompt-templates.md) |\n| Animate rows, sliders, alignment | [animate-beats.md](./animate-beats.md) |\n| Examples | [examples.md](./examples.md) |\n| Feedback discipline | `generation-diversity` |\n| Slider (agent) | ffmpeg `hstack` / wipe — see **Slider comparison** below |\n| Batch template | [templates/batch.template.json](./templates/batch.template.json) |\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Scene table, read-through, cast ledger | **approve plan** |\n| **A — Stills** | Hero + per-scene plates | **approve stills** |\n| **B — Video** | Avatar / animate clips + sliders | **approve clips** |\n| **C — Assembly** | Concat reel + optional bed | User accepts |\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user has answered and you have recorded the answers (use defaults only if the user explicitly opts in):\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What is the piece for (pitch, tutorial, trailer, episode)? Primary audience? |\n| **Scope** | How many speaking scenes or beats? Approximate total runtime after assembly? |\n| **Cast** | Who speaks, in what order? One character throughout or multiple? |\n| **Look** | Aspect for stills and feel (`9:16` / `16:9`)? Avatar output `720p` or `1080p`? |\n| **Media source** | **Generate** hero plates with `p-image-ideogram` / edits vs **upload-only** references; user-owned motion templates for animate beats? |\n| **Voice** | For **each named character**, pick **one** Pruna `voice` and `voice_language` and **reuse it in every scene** that character speaks. Any words that must be pronounced exactly (names, acronyms)? |\n| **Style** | Agreed **style bible** line for all image prompts? |\n| **Character sheet** | Per speaker: age range, wardrobe baseline, hair, skin/realism level, personality adjectives—record before hero generation (see **Character sheet** below). |\n| **Scene variety** | Each scene must differ in **camera angle**, **background/setting**, and/or **energy**—no two consecutive scenes with the same framing and location unless the user asks. Plan **`visual_style_tag`**, **`setting_tag`**, **`camera_tag`**, **`lighting_tag`** per row — `generation-diversity`. |\n| **Ritual seed (SSoT)** | Ritual seed at hero — generate and state a ritual string; log as **`ritual_seed`**; derive prompt axes via sum-mod. **Do not** pass ritual string to API `seed`. |\n| **References** | Which files to upload; rights cleared? |\n| **Beat mix** | Which scenes are **`avatar`** vs **`animate`**? All avatar, all animate, or mixed announcement? |\n| **Narrated B-roll cutaways** | Optional **`p-video`** beats using scene-anchor triple (`video-prompting`) alongside avatar rows |\n| **Motion templates** (animate beats) | Source `.mp4` per animate row—owned/licensed? Match pose/framing to reference still? |\n| **Slider delivery** (animate beats) | Comparison MP4 only, animated-only strip, or both? Canvas default 1920×1080. |\n| **Assembly** | How clips will be joined and leveled (ffmpeg plan)? |\n\nIf anything material is unknown, **ask** before the first upload or prediction.\n\n## Cast ledger & character sheet\n\nMaintain a **cast table** in the manifest: one Pruna **`voice`** + **`voice_language`** per recurring character — **never** swap presets mid-story unless the user requests a recast.\n\nBefore hero generation, fill a **character sheet** per speaker (age, face, realism, wardrobe baseline, personality, **`ritual_seed`** for planning). Templates and manifest JSON: **[prompt-templates.md](./prompt-templates.md)**.\n\n**Rule:** New locations and styles = **`p-image-edit`** off the approved hero URL — not unrelated fresh **`p-image`** identity pulls.\n\n## Scene plan (dynamic beats)\n\nEvery piece needs a **scene table** — each row **`avatar`** or **`animate`**. Example columns and manifest JSON: **[prompt-templates.md](./prompt-templates.md)** · **[animate-beats.md](./animate-beats.md)**.\n\n### Motion-transfer alignment (animate beats)\n\n**P-Video-Animate** animates a reference image using motion, timing, and camera movement from a source video. The better the subject's **features, pose, framing, and proportions** align with the motion template, the better the result.\n\n| Alignment | Typical outcome |\n|-----------|-----------------|\n| Same shot type, similar pose, similar scale | Clean motion transfer; slider demo reads instantly |\n| Same character type, slightly different angle | Good with optional **`p-image-edit`** repose toward a template keyframe |\n| Meme / cartoon / mascot on **human full-body** motion | Limbs, gait, and contact points may warp or slide |\n| Tiny head / extreme proportions on **dance or arm-heavy** motion | Hands, legs, and depth cues often break |\n| Reference facing camera, source subject in profile | Shoulder/head turn and occlusion artifacts |\n\n**Rule:** Treat severe pose or proportion mismatch as a **pre-flight risk**. Repose with **`p-image-edit`** or pick a closer motion template before burning **`p-video-animate`** credits.\n\n**Alignment prep (per animate row):**\n\n1. Match **shot size** and **facing direction** between still and template.\n2. Match **limb visibility**—if the template waves arms, the still must show arms.\n3. **Repose when close but not exact** — **`p-image-edit`** from the hero anchor: *\"Change only: match pose and camera to reference video frame; keep identity and outfit.\"*\n4. Run animate QA from `video-prompting` on the pair before animate.\n\n**Anti-patterns (all types):** two identical office avatar scenes back-to-back; corporate brochure **`voice_script`**; human dance template + chibi meme still without repose; serial API jobs when scenes are independent; **motion templates that prompt smile/wave only** (avatar stays silent — see below).\n\n### Motion templates for animate beats\n\nWhen **`p-video-avatar`** generates a **motion template** (source video for **`p-video-animate`**), treat it as a speaking beat — not a portrait pose.\n\n| Field | Requirement |\n|-------|-------------|\n| Motion-source **`still_edit`** | `mouth clearly visible ready to speak` — not passive smile only |\n| **`video_prompt`** | `speaks directly to camera`, `clear lip movement`, explain gestures, head nods — **before** any wave/smile close |\n| **`voice_prompt`** | Delivery throughout the line — not “wave energy at the end” only |\n| Camera | Prefix: `Camera moves continuously for the full clip — … never locked-off` |\n\nSilent motion templates break slider demos and animate transfers. Prompt templates: [prompt-templates.md](./prompt-templates.md). Full animate pipeline: [animate-beats.md](./animate-beats.md).\n\n### Mixed reels with animate rows\n\n| Pattern | Structure |\n|---------|-----------|\n| Interleaved | avatar hook → animate demo → avatar proof → animate demo → avatar CTA |\n| Slider-heavy | N **`animate`** slider rows → final **`avatar`** CTA on hero |\n\nEnd product launches with a speakable **`avatar`** CTA unless the user opts out.\n\n## Identity & ritual seed policy\n\nComplete the ritual seed step in `generation-diversity` before hero prompt work. Log **`ritual_seed`** in manifest; reuse only on same-brief slop retry.\n\nCharacter continuity = **approved hero plate URL** + cast descriptor — not API `seed`. Pass **`api_seed`** in `input` only when the user explicitly locks reproducibility.\n\n## Natural voice (mandatory for avatar social / founder content)\n\n**`voice_script`** = speakable dialogue (contractions, short breaths). **`voice_prompt`** = performance direction only — never marketing copy or script text.\n\nGood/bad pairs: **[prompt-templates.md](./prompt-templates.md)**.\n\n## Source portrait / hero (same character across styles and scenes)\n\nFor **each** recurring character:\n\n1. Land **one** approved **source** still via **`p-image-ideogram`** or upload (`p-image` for a cheap draft). Run the slop gate on the hero before sign-off. Treat the approved file URL as the **identity anchor**.\n2. **Every** later look—including a new background, emotion, prop, or **style variation**—should be produced with **`p-image-edit`** from **that same source URL**, plus the shared style bible and a short delta (“change only: …”).\n3. **Each new scene** still starts from the same character source so faces stay one continuous role across the arc.\n\n## Confirmation gate (mandatory)\n\nAfter intake is complete:\n\n1. Present a **read-through package**: scene order and **type** per row; full **`voice_script`** for avatar rows; motion templates + reference stills + **alignment risks** for animate rows; cast ledger; hero URL(s); chosen **`resolution`**; legal/CTA lines **verbatim** if supplied.\n2. Ask clearly for approval (e.g. “Reply **approve** or **go** when this script and cast are final.”).\n3. **Do not** upload binaries for generation or call **`POST /v1/predictions`** until the user **explicitly confirms**.\n\n## How the agent runs this\n\nOnce the user confirms:\n\n1. Upload refs → hero `p-image-ideogram` → parallel per-scene `p-image-edit` → slop gates → **approve stills**.\n2. Parallel **`p-video-avatar`** (avatar rows) and **`p-video-animate`** (animate rows) via curl batches (`pruna-api`).\n3. For each animate row, build a **slider / comparison** MP4 with ffmpeg (below).\n4. ffmpeg concat in scene order → optional bed → **approve** final.\n\nPrefer one parallel lane per independent scene after the hero exists. Parent owns confirmation, manifest merge, and assembly.\n\n## Core rules\n\n1. **`p-video-avatar` `input.image`** — use an approved still URL from `/v1/files` that passed `generation-diversity` checklists.\n2. Run the **slop gate** on every hero and scene still **before** any avatar job.\n\n```text\nHero:     p-image-ideogram (or upload) → slop gate → approve anchor\nScene N:  p-image-edit(anchor) → slop gate → p-video-avatar\n```\n\n## API surface (this workflow)\n\n| Step | Model | Skill |\n|------|--------|--------|\n| Upload binaries | `POST /v1/files` | `pruna-api` |\n| Style-locked stills | `p-image-ideogram`, `p-image-edit` | `p-image-ideogram`, `p-image-edit` |\n| Talking clips | `p-video-avatar` | `p-video-avatar` |\n| Motion transfer | **`p-video-animate`** | `p-video-animate` |\n| Slider comparison | ffmpeg (below) | local |\n\nUse **`PRUNA_API_KEY`** and the **`apikey`** header on every call. **Async + parallel by default**: batch all avatar jobs once approved stills pass slop; batch all animate jobs once motion + still URLs are ready; poll all `get_url` together.\n\n## Parallel execution\n\n| Phase | Parallel? |\n|-------|-----------|\n| Hero `p-image-ideogram` → gate | Sequential |\n| Per-scene `p-image-edit` | **Yes** — all scenes |\n| Slop gate | **Yes** — review in parallel |\n| `p-video-avatar` | **Yes** — all avatar rows |\n| `p-video-animate` | **Yes** — all animate rows |\n| Slider render | **Yes** — all animate rows |\n| Assembly | Sequential order only |\n\n**Rule:** Never dispatch generation before user confirmation.\n\n## Slider comparison (animate rows)\n\nSide-by-side (motion template | animated):\n\n```bash\nffmpeg -y -i motion_template.mp4 -i animated.mp4 \\\n  -filter_complex \"[0:v]scale=960:1080[l];[1:v]scale=960:1080[r];[l][r]hstack=inputs=2[v]\" \\\n  -map \"[v]\" -map 1:a? -c:v libx264 -c:a aac -shortest scene_compare.mp4\n```\n\nOr present both clips and let the user’s editor build a wipe slider. Paths can follow [templates/batch.template.json](./templates/batch.template.json) (`source`, `render`, `samples[]`).\n\n## Workflow\n\n| Step | Action |\n|------|--------|\n| 1–3 | Intake → speakable script → **confirmation gate** (no API until approve) |\n| 4–5 | Upload refs → **`p-image-ideogram` hero** per character → slop gate |\n| 6–7 | Parallel **`p-image-edit`** scene stills → slop gate each |\n| 8 | Parallel **`p-video-avatar`** (cast ledger voices, unique `video_prompt` per scene) |\n| 9 | Parallel **`p-video-animate`** + ffmpeg sliders — [animate-beats.md](./animate-beats.md) |\n| 10 | ffmpeg concat ± optional bed — `stable-audio-2.5` |\n| 11 | Manifest: paths, prediction ids, slop notes, cast snapshot |\n\n```bash\nffmpeg -y -f concat -safe 0 -i clips.txt -c copy reel.mp4\n```\n\nShared ffmpeg recipes (concat, bed mix, sliders, export): **`video-editing`**.\n\n## Related\n\nRelated skills:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-single-scene` | Use when someone wants one polished host-on-camera beat — a speaking person with intake and approval gates before generation. | `npx skills add PrunaAI/pruna-skills@avatar-single-scene -y` |\n| `image-to-video` | Use when someone wants one short film beat from images — a narrated scene, story moment, or cinematic B-roll with optional voiceover. | `npx skills add PrunaAI/pruna-skills@image-to-video -y` |\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| `p-video-animate` | Use when someone wants a photo to move like another video — motion transfer, dance remixes, or performance variations from a template clip. | `npx skills add PrunaAI/pruna-skills@p-video-animate -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\": \"avatar-multi-scene\",\n  \"version\": \"1.0.12\",\n  \"publishedAt\": 1789048797356\n}\n\nFile v1.0.12:animate-beats.md\n\n# Animate beats in multi-scene reels\n\nHow **`p-video-animate`** fits into mixed **`avatar` + `animate`** pieces built with `avatar-multi-scene`.\n\n## What each model does\n\n| Model | Role in an animate row |\n|-------|------------------------|\n| **`p-image` / `p-image-edit`** | Reference stills — motion-source portrait and persona subjects |\n| **`p-video-avatar`** | Optional: generate a **motion template** (talking-head source video) when you don't have a licensed `.mp4` |\n| **`p-video-animate`** | Transfer motion from source video onto reference image |\n| **Slider render** | Optional comparison MP4 (motion template vs animated output) via `avatar-multi-scene` |\n\n**`p-video-animate`** takes:\n\n- **`video`** — motion, timing, camera path, acting beats, audio source\n- **`image`** — subject identity, style, wardrobe, environment look\n\nOutput keeps **motion from the video**, **appearance from the image**.\n\n## Animate row pipeline\n\n```text\nHero anchor (p-image-ideogram)\n  → motion-source still (p-image-edit)\n  → motion template (p-video-avatar OR upload .mp4)\n  → persona still(s) (p-image-ideogram or p-image-edit)\n  → p-video-animate (one job per persona)\n  → optional slider compare MP4\n```\n\n## Making motion templates work\n\nWhen **`p-video-avatar`** creates the source video for **`p-video-animate`**, prompt it like a **speaking** clip — not a portrait pose.\n\n| Field | Guidance |\n|-------|----------|\n| Motion-source still | `mouth clearly visible ready to speak`; medium close-up; unobstructed face |\n| **`video_prompt`** | `speaks directly to camera`, `clear lip movement`, explain gestures, head nods; prefix with `Camera moves continuously … never locked-off` |\n| **`voice_prompt`** | Conversational delivery throughout the line — not gesture-only direction at the end |\n\nSmile/wave/nod are fine **after** explicit speaking direction. Smile/wave **instead of** speaking produces silent templates — weak lip sync and poor slider demos.\n\n## Making `p-video-animate` work\n\n### Alignment (most important)\n\nMatch **shot size**, **facing direction**, and **visible limbs** between reference image and motion template.\n\n| Pairing | Outcome |\n|---------|---------|\n| Same framing and pose | Best transfer |\n| Same character type, slight angle difference | Good; optional repose with **`p-image-edit`** |\n| Stylized / mascot / chibi on human full-body motion | Limbs and contact points often break |\n| Profile motion + front-facing still | Head/shoulder artifacts |\n\nRepose before animate when close but not exact: *\"Change only: match pose and camera to reference video frame; keep identity and outfit.\"*\n\n### Reference stills (personas)\n\n- Face and mouth large enough for lip-sync when the template speaks\n- **`instruction_prompt`** steers behavior without fighting source motion:\n\n```text\nAnimate the reference subject using the exact motion, timing, and camera movement from the source video. Keep identity and outfit from the reference image.\n```\n\n- **Style variety** (photoreal, premium anime, claymation, Disney/Pixar 3D, cyberpunk, blockbuster movie, AAA game cinematic) on one motion template shows range in slider demos — each style still needs reasonable pose/framing alignment **and** its own background, camera angle, and lighting. Record `visual_style_tag`, `setting_tag`, `camera_tag`, and `lighting_tag` per ref. See generation-diversity.md#visual-variety (`generation-diversity`).\n\n### API fields\n\n- **`resolution`**: `720p` or `1080p`\n- **`target_fps`**: `original` (default), `24`, or `48`\n- **`save_audio`**: `true` when the motion template has dialogue\n- **`seed`**: lock per persona row when retrying\n\n### Persona style ladder (animate slider rows)\n\nWhen building eye-catching comparison reels, generate **3–4 persona stills per animate row** — each a different **`visual_style_tag`** with distinct **`setting_tag`**, **`camera_tag`**, and **`lighting_tag`**:\n\n| Ref slot | Example style | Example setting + light |\n|----------|---------------|-------------------------|\n| 1 | Photoreal UGC | neutral wall, soft ring light |\n| 2 | Premium anime | neon rain alley, dramatic anime key |\n| 3 | Claymation | miniature living room, warm practical lamp |\n| 4 | Disney / fairy-tale 3D | enchanted garden, golden hour |\n| 5 (optional) | Cyberpunk | rain-slick alley, magenta-cyan edge |\n| 6 (optional) | AAA game cinematic | alien canyon, volumetric sun shafts |\n\nFull prompt patterns: generation-diversity.md#visual-variety (`generation-diversity`).\n\nRun `video-prompting` on inputs and outputs.\n\n## Mixed reel structures\n\n### Interleaved avatar + animate\n\n| # | Type | Beat |\n|---|------|------|\n| 1 | avatar | Hook |\n| 2 | animate | Slider demo |\n| 3 | avatar | Feature / proof |\n| 4 | animate | Second demo |\n| 5 | avatar | CTA |\n\n### Slider-heavy + CTA close\n\n| # | Type | Beat |\n|---|------|------|\n| 1–N | animate | Slider comparisons (3–4 persona variations each) |\n| N+1 | avatar | CTA — return hero spokesperson, clean studio, short close |\n\nAvatar CTA rows use **`type: avatar`** → deliver `{id}_avatar.mp4`. Animate rows → `{id}_compare.mp4` (or animated-only if no slider).\n\n## Slider comparison (optional)\n\nSide-by-side before/after with ffmpeg (no extra Python deps):\n\n```bash\nffmpeg -y -i path/to/motion-template.mp4 -i path/to/animated-output.mp4 \\\n  -filter_complex \"[0:v][1:v]hstack=inputs=2[v]\" -map \"[v]\" -an path/to/scene_compare.mp4\n```\n\nFor several persona variations, repeat per sample and concat, or build a simple hstack grid in your editor.\n\n## Assembly\n\nConcat clips in scene-table order — avatar MP4s and animate comparison MP4s interleaved as planned. Level audio in your editor or ffmpeg.\n\nBatch config schema: [`batch.template.json`](./templates/batch.template.json) (`scenes[]` with `source`, `render`, and `samples[]` per row).\n\nFile v1.0.12:examples.md\n\n# Examples\n\n## Dynamic multi-scene avatar (partnership / founder social)\n\nProven pattern from production runs:\n\n1. **Character sheet** — photoreal founder, early 30s, locked **`seed`**, one **`voice`** preset.\n2. **Hero** — `p-image-ideogram` (documentary photoreal) → slop gate → approve identity anchor.\n3. **Per scene** — `p-image-edit` (from hero anchor; change **only** angle + background) → slop gate → `p-video-avatar`. **Run edits and avatar jobs in parallel batches** per phase once dependencies are met (pruna-api.md#parallel-async-multi-scene--batch (`pruna-api`)); use **one subagent per scene lane** when the host supports it.\n4. **Vary every scene** — e.g. dark close-up → mountain overlook → ISS cupola → desk window light → studio CTA. Never repeat the same office framing twice.\n5. **Natural voice** — contractions, conversational hooks; **`voice_prompt`** describes human delivery, not product copy.\n\nExample dialogue (single spokesperson, natural):\n\n```text\nScene 1: \"Hey — quick question. When you're making video with AI, how long do you actually wait between ideas?\"\nScene 2: \"And that's the real problem, right? It's not just slow — you lose momentum. The whole creative loop just breaks.\"\nScene 3: \"So we teamed up with Tellers — our whole model family is live inside their editor now.\"\nScene 4: \"What's actually cool is the speed — cheap enough that you can genuinely explore without worrying about every credit.\"\nScene 5: \"Anyway — check out Tellers. Link's in the post. I'd love to see what you build.\"\n```\n\nStore scenes in JSON (`v2_avatar_only_scripts.json` pattern in `prompt-templates.md`) with **`ritual_seed`**, per-scene **`video_prompt`**, and **`still_prompt`** deltas.\n\n## Mixed announcement (avatar + animate slider beats)\n\nPattern for product launches that interleave speaking scenes with motion-transfer demos:\n\n| # | Type | Beat |\n|---|------|------|\n| 1 | avatar | Hook — spokesperson intro |\n| 2 | animate | Slider — same UGC motion, new persona still |\n| 3 | avatar | Reveal — partnership / feature detail |\n| 4 | animate | Slider — second motion template, repose hero to match |\n| 5 | avatar | CTA |\n\n**Pipeline:** shared hero anchor → per-row still prep (edit for avatars; optional repose for animate) → parallel **`p-video-avatar`** + parallel **`p-video-animate`** → parallel slider renders for animate rows → ffmpeg concat in scene order.\n\nModel roles and alignment: [animate-beats.md](./animate-beats.md).\n\n**Alignment reminder:** animate rows fail when a meme/mascot still meets human full-body dance motion—pick bust-only templates or repose first (see SKILL **Alignment prep**).\n\n**Style ladder reminder:** each persona still in an animate slider row should use a different **`visual_style_tag`** (photoreal, anime, claymation, Disney 3D, cyberpunk, game cinematic) with its own background, camera angle, and lighting — generation-diversity.md#visual-variety (`generation-diversity`).\n\n## Motion-transfer-only reel (animate rows)\n\nAll-slider showcase (UGC variations, recasting demo):\n\n1. Scene table with only **`animate`** rows.\n2. Upload motion templates + reference stills in parallel.\n3. Parallel **`p-video-animate`** → batch slider render via [`batch.template.json`](./templates/batch.template.json).\n4. Concat comparison MP4s:\n\n```bash\n# concat_list.txt\nfile 'output/scene01_compare.mp4'\nfile 'output/scene02_compare.mp4'\n\nffmpeg -f concat -safe 0 -i concat_list.txt -c copy output/recast_reel.mp4\n```\n\n**End with avatar CTA** when the piece is a product launch — return the hero spokesperson in a clean studio close-up.\n\n**Slider-only** (animate outputs already exist):\n\nBuild side-by-side sliders with **ffmpeg hstack** (see `this skill` — agent runs ffmpeg locally; no Python runner).\n\n## Multi-scene rhythm (generic cast)\n\nPattern:\n\n1. Character A opens with a concrete hook tied to the product.\n2. Character B reacts with new information, not a repeat of A.\n3. Character C adds proof or stakes.\n4. Group tightens the argument.\n5. Final line is the exact client CTA.\n\nExample dialogue (fictional cast):\n\n```text\nRiva (host): \"One portrait, one line, and we already have motion—not a storyboard fantasy.\"\nKael (skeptic): \"Motion is cheap. Staying on-model is the invoice.\"\nMire (builder): \"Same API for the stills and the talk. Fewer handoffs, fewer drift days.\"\nJax (closer): \"Ship the cut when you are ready, [CLIENT TEAM NAME].\"\n```\n\n## Bad reference frame\n\nReject:\n\n- extreme action pose\n- hair or props across the mouth\n- weapon or hand occluding the face\n- tiny face in frame\n- background that belongs to a different story world than the bible\n- stray logos or UI\n\n**Fix:** regenerate with **`p-image-edit`**, narrowing the prompt to “talking-head, shoulders square, hands low, mouth clear, same identity as reference.”\n\n## Voice_prompt hygiene\n\nUse (realistic human):\n\n```text\nNatural conversational tone — like a founder on LinkedIn, not a TV announcer.\nRelaxed pacing, real pauses, slight smile when excited, honest not salesy.\n```\n\nAvoid stuffing script, product names, or brand slogans into **`voice_prompt`**—those belong in **`voice_script`** only.\n\n## Manifest skeleton (Pruna-only)\n\n```markdown\n# [Project] — multi-scene avatar (Pruna)\n\n## ritual_seed\n- ritual_seed: \"k7Qm2xP9\" (SSoT planning — do not pass to API)\n\n## Character sheet\n- role, age, hair, realism, wardrobe baseline, personality\n\n## Style bible\n- Text: ...\n\n## Scene table\n| # | type | setting/angle or motion template | deliverable |\n\n## Files (POST /v1/files)\n- ref_hero: url, id, expires\n- scene_02_motion_template: url, id  (animate rows)\n\n## Image predictions (p-image / p-image-edit)\n- job id, model, input summary, output url, slop pass y/n\n\n## Avatar predictions (p-video-avatar)\n- scene id, job id, seed, image url, voice, voice_script excerpt, video_prompt, output url\n\n## Animate predictions (p-video-animate)\n- scene id, job id, motion url, image url, instruction_prompt, animated mp4, slider compare mp4, alignment notes\n\n## Assembly\n- ordered clip list, tool used to join (editor name / internal script), final export path\n\n## Failed attempts\n- job id, model, error message, corrective action\n```\n\nFile v1.0.12:prompt-templates.md\n\n# Prompt templates (Pruna only)\n\nCompanion to `avatar-multi-scene` — cast ledger, character sheet, still edits, and per-scene voice/video fields.\n\n## Cast ledger (voice lock)\n\n| Character | Pruna `voice` | `voice_language` | Notes |\n|-----------|----------------|------------------|--------|\n| (example) | `Zephyr (Female)` | `English (US)` | Same preset every scene this character speaks |\n\n**Rule:** recurring characters **never** change `voice` between scenes unless the user requests a recast. Tweak delivery with **`voice_prompt`** only.\n\n## Reference gathering (research assistant prompt)\n\n```text\nCollect up to [N] high-quality, rights-clear reference images for [SUBJECT / CAST].\nPrefer official art packs, style guides, or assets the client can license.\nFor each file record: character, intended use, source, license note, and image quality (resolution, clarity).\n```\n\n## Upload rule\n\nUse **`POST /v1/files`** and then Pruna **`urls.get`** values in **`p-image-edit`** `images` and in **`p-video-avatar`** `image`. Do not pass arbitrary hotlinks you do not control.\n\n## Character sheet (fill before hero generation)\n\n```text\nName/role: [e.g. Alex — founder spokesperson]\nAge/build: [early 30s, medium build]\nFace/hair: [short dark hair, light stubble, brown eyes]\nRealism: photorealistic documentary portrait, not CGI, not illustration\nWardrobe baseline: [black crew-neck — keep unless scene script changes outfit]\nPersonality: [warm, direct, founder-energy, honest]\nritual_seed: [string — SSoT planning only; generate fresh, do not copy examples]\nPruna voice: [e.g. Puck (Male)] / [English (US)]\n```\n\n## Scene table (fill during intake — every row must differ)\n\n| # | Setting & camera | Emotion | still_prompt delta (change only) |\n|---|------------------|---------|----------------------------------|\n| 1 | extreme close-up, dark void | curious hook | (hero — no edit) |\n| 2 | 3/4, outdoor location | contemplative | background + angle |\n| 3 | medium low-angle, distinctive set | excited reveal | background + angle |\n| 4 | over-shoulder at desk | conversational proof | setting + angle |\n| 5 | straight-on medium studio | warm CTA | cleaner background |\n\nPair each row with its own **`voice_script`**, **`voice_prompt`**, and **`video_prompt`** in the manifest JSON.\n\n## Ritual seed (manifest snippet)\n\n```json\n{\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"ritual_seed_policy\": \"ssot_dag_before_every_generation\",\n  \"api_seed\": null\n}\n```\n\n`ritual_seed` is **SSoT planning only** — do not pass to API `input.seed`. Set `api_seed` only when the user explicitly locks API reproducibility.\n\nReplace strings with your random seed ritual (`generation-diversity`) — do not copy from this template.\n\n**Ritual:** generation-diversity.md#random-seed-ritual-mandatory-before-every-generation (`generation-diversity`) (SSoT) — generate a random string before every generation; derive prompt axes via sum-mod.\n\n## Fashion / ecommerce try-on path\n\nWhen the deliverable is **dressed model stills** or **fashion UGC avatar**:\n\n1. **`p-image`** photoreal editorial plate → slop gate — `image-prompting`\n2. **`p-image-try-on`** with garment refs (normal mode for complex stacks) — `image-prompting`\n3. Optional **`p-image-upscale`** → slop gate → **`p-video-avatar`** with **unique `video_prompt`** and natural **`voice_script`**\n\nLock **hero plate URL** from step 1 through step 3. Plan cast diversity for public example sets per generation-diversity.md#visual-variety (`generation-diversity`).\n\n## Style bible (paste into every image prompt)\n\n```text\nStyle lock: [2-4 sentences: medium, line quality, palette, lighting, camera era].\nSame character as reference: [identity anchors: species, age, outfit, iconic props].\n```\n\n## p-image: new photo generation (when you lack a photo reference)\n\n```text\n[Style bible]\nVertical 9:16 talking-head portrait, [CHARACTER] in [SETTING], shoulders toward camera,\nhands low in frame, face large and centered, mouth clearly visible for speech animation,\nneutral relaxed expression ready to speak.\n```\n\n## p-image-ideogram: photoreal hero (preferred for avatar pipelines)\n\n```text\nPhotorealistic documentary portrait photograph of a real person, not CGI, not 3D render.\n[Character sheet: age, hair, wardrobe, personality visible in expression]\nNatural skin with pores and subtle imperfections. Shot on 85mm lens, shallow depth of field.\n[Setting for scene 1 only]. 16:9 talking-head, face centered, mouth clearly visible mid-speech.\nNo text, no logos.\n```\n\nAfter hero succeeds: run slop gate on the hero output → approve anchor.\n\n## p-image-edit: match reference, change only what the scene needs\n\n```text\n[Style bible]\nUsing the attached reference(s) as identity, produce a vertical 9:16 talking-head frame for scene [N]: [POSE / EMOTION / BACKGROUND CHANGE ONLY].\nKeep face, species, and costume on-model; mouth unobstructed; no new text or logos in frame.\n```\n\nUse 1–5 **`images`** URLs per the `p-image-edit` skill. Reuse the **hero** URL in every edit that must stay on-model.\n\n## p-video-avatar: JSON field names (snake_case)\n\n| Field | Role |\n|--------|------|\n| `image` | Still URL from `/v1/files` or prior delivery URL your pipeline trusts |\n| `voice_script` | Exact spoken words for this clip |\n| `voice` | Pruna voice preset (see model doc list) |\n| `voice_language` | e.g. `English (US)` |\n| `voice_prompt` | Short performance direction only (not script text) |\n| `video_prompt` | Shot motion: framing, energy, head motion—positive wording only |\n| `resolution` | `720p` or `1080p` |\n\n## p-image-edit: per-scene still (avatar rows)\n\n```text\nUsing the attached reference(s) as identity — keep exact same person, face, skin texture, photorealistic quality.\nChange only: [ANGLE], [BACKGROUND/SETTING], [EXPRESSION]. [Character sheet wardrobe baseline unless scripted change].\n16:9, mouth clearly visible, ready to speak. No text, no logos.\n```\n\nRun slop gate on the edit output before **`p-video-avatar`**. Pass the approved still URL from `/v1/files`.\n\nUse 1–5 **`images`** URLs per the `p-image-edit` skill. Reuse the **hero** URL in every edit that must stay on-model.\n\n## Motion source still + template (animate rows)\n\nEach **`animate`** row needs a **speaking** motion template. Generate the still with **`p-image-edit`** off hero, then **`p-video-avatar`** on the approved still.\n\n**Motion-source `still_edit`:**\n\n```text\nRecast as [character]. Medium close-up in [SETTING], confident warm expression,\nmouth clearly visible ready to speak, documentary realism.\n```\n\n**Motion-template `video_prompt` (do):**\n\n```text\nCamera moves continuously for the full clip — smooth dolly push-in with subtle arc, never locked-off.\nSubject speaks directly to camera with natural open-hand explain gestures, clear lip movement,\nnatural head nods and eyebrow emphasis while talking, warm smile building toward a small wave at the close.\n```\n\n**Motion-template `video_prompt` (avoid — silent avatar):**\n\n```text\nSubject smile builds then small wave and nod at close, atmospheric fog drifting …\n```\n\n**Motion-template `voice_prompt` (do):**\n\n```text\nClear conversational delivery throughout — speaking directly to camera. Natural pacing with real pauses.\n```\n\nWhen motion-source prompts change, delete cached motion-source stills before regen. See [animate-beats.md](./animate-beats.md).\n\n## voice_script — natural human (do)\n\n```text\nHey — quick question. When you're making video with AI, how long do you actually wait between ideas?\nBecause for most people, it's way too long.\n```\n\n```text\nSo we teamed up with Tellers — they built this agentic video editor — and our whole model family is live inside it now.\n```\n\n## voice_script — corporate stiff (avoid)\n\n```text\nIf you work with AI video, you already know the problem. You ask for something, then you wait — and the creative loop breaks.\n```\n\n```text\nThat is why we are partnering with Tellers. Our full model family — P-Image, P-Video, P-Image-Upscale, and P-Video-Avatar — is now live inside their agentic video editor.\n```\n\n## voice_prompt — realistic human delivery (do)\n\nProject-level (reuse across scenes):\n\n```text\nNatural conversational tone — like a founder talking on LinkedIn, not a TV announcer.\nRelaxed pacing, real pauses, contractions in delivery, slight smile when excited, honest not salesy.\n```\n\nPer-scene tweak (optional, still non-spoken):\n\n```text\nSlightly urgent on the hook; empathetic on the problem beat; building excitement on the reveal.\n```\n\n## voice_prompt — avoid\n\n```text\nSay the following about our enterprise AI video platform partnership announcement.\n```\n\n```text\nP-Image, P-Video, P-Image-Upscale, P-Video-Avatar partnership with Tellers agentic editor.\n```\n\n## video_prompt — dynamic per scene (do)\n\nScene 1 close-up:\n\n```text\nExtreme close-up speaking directly to lens, subtle slow push-in, natural eyebrow movement,\nconversational energy, slight head tilt, cinematic dark background holds steady.\n```\n\nScene 2 outdoor 3/4:\n\n```text\nThree-quarter angle, speaks with natural hand gesture, golden hour light on face,\ngentle breeze in hair, lake and peaks softly blurred behind, empathetic honest tone.\n```\n\nScene 3 distinctive setting:\n\n```text\nMedium shot, speaks with building excitement, natural head nods, one open palm gesture,\ncamera holds with gentle float sensation, earth visible through window behind.\n```\n\nScene 4 over-shoulder:\n\n```text\nOver-shoulder angle turning toward camera, speaks like explaining to a friend,\nrelaxed shoulder movement, warm window light, subtle zoom in during key point.\n```\n\nScene 5 CTA:\n\n```text\nCamera moves continuously — stable portrait then gentle push-in on final line.\nSubject speaks directly to camera with clear lip movement, warm friendly smile building,\nsubtle wave gesture at end after the spoken line lands.\n```\n\n## video_prompt (generic — avoid for multi-scene)\n\n```text\nno subtitles, no text, no logos\n```\n\n## Shared cast voice direction (for voice_prompt)\n\nOne line for the whole project:\n\n```text\nShared read: [one line on pacing, genre, energy for every speaker in this piece].\n```\n\nThen per character, one short line each, still in **`voice_prompt`**, never in **`voice_script`**.\n\n## Voice preset lock (same actor, same preset)\n\nEach recurring character uses **one** Pruna **`voice`** + **`voice_language`** across **every** scene they speak—copy the same strings from your cast ledger into each **`p-video-avatar`** call for that character. Adjust performance only with **`voice_prompt`**, not by swapping presets mid-story.\n\n## Client-facing script → confirmation → run package\n\nDraft **`voice_script`** lines in **natural spoken English** (or the target language). Share the full read-through with the client or requester; obtain **explicit approval** before generating. After approval, paste approved lines verbatim into JSON **`voice_script`** fields and execute your chosen **run script** or **`curl`** sequence—no silent edits.\n\n## Manifest JSON (scene package)\n\nStore approved scenes in a machine-readable file (e.g. `v2_avatar_only_scripts.json`) before running API calls:\n\n```json\n{\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"cast\": {\n    \"voice\": \"Puck (Male)\",\n    \"voice_language\": \"English (US)\",\n    \"voice_prompt\": \"Natural conversational LinkedIn tone — like a founder talking to camera, not reading a script.\"\n  },\n  \"character_sheet\": {\n    \"role\": \"founder spokesperson\",\n    \"age\": \"early 30s\",\n    \"realism\": \"photorealistic documentary\"\n  },\n  \"scenes\": [\n    {\n      \"id\": 1,\n      \"still\": \"hero\",\n      \"still_prompt\": null,\n      \"video_prompt\": \"...\",\n      \"voice_script\": \"...\"\n    },\n    {\n      \"id\": 2,\n      \"still_prompt\": \"Change only: 3/4 angle, mountain summit overlooking alpine lake at golden hour...\",\n      \"video_prompt\": \"...\",\n      \"voice_script\": \"...\"\n    }\n  ]\n}\n```\n\n## Beat sheet (conversation)\n\n```text\nScene 1 [CHAR A]: [hook line tied to product beat]\nScene 2 [CHAR B]: [reaction, new information]\nScene 3 [CHAR C]: [proof or demo beat]\n...\nFinal scene: exact CTA wording: \"[CTA]\"\n```\n\nFile v1.0.12:skill-card.md\n\n## Description:\n\nUse when someone wants the same person hosting several clips - multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity.\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 creative operators use this skill to plan and run multi-scene Pruna avatar or motion-transfer reels with a consistent host, staged approval gates, API generation steps, and ffmpeg assembly.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Unpinned remote prerequisite install commands can change which dependent skills are loaded.\n\nMitigation: Review or pin prerequisite skill installer commands before running them.\n\nRisk: The skill may add workflow branding and approval-gate text to every agent reply while loaded.\n\nMitigation: Load it only for intended multi-scene avatar work and unload it outside that workflow.\n\nRisk: The workflow uses Pruna media uploads and API-key-authenticated generation.\n\nMitigation: Confirm media rights and sensitivity before upload, and use PRUNA_API_KEY only in the intended execution environment.\n\nRisk: Poor alignment between source stills and motion templates can produce flawed or misleading avatar and motion-transfer clips.\n\nMitigation: Use the plan, stills, and clips approval gates, plus alignment checks, before spending paid video generation credits.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/pruna-ai/skills/avatar-multi-scene)\n- [Prompt templates](artifact/prompt-templates.md)\n- [Animate beats](artifact/animate-beats.md)\n- [Examples](artifact/examples.md)\n- [Batch template](artifact/templates/batch.template.json)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown guidance with JSON snippets, shell commands, and configuration templates]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces staged plans, prompts, API call guidance, manifests, and ffmpeg assembly commands for multi-scene video workflows.]\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  \"templates\": [],\n  \"generation_phases\": {\n    \"default\": \"stills\",\n    \"phases\": [\n      \"stills\",\n      \"video\",\n      \"render\"\n    ]\n  }\n}\n\nFile v1.0.12:templates/batch.template.json\n\n{\n  \"scenes\": [\n    {\n      \"title\": \"Scene 01 · Persona variations\",\n      \"source\": \"output/scene01_motion.mp4\",\n      \"render\": \"output/scene01_compare.mp4\",\n      \"compare_mode\": \"single_pass_multi_slider\",\n      \"samples\": [\n        {\n          \"output\": \"output/scene01_persona_a.mp4\",\n          \"output_label\": \"Photoreal UGC\",\n          \"beat_label\": \"Variation A\"\n        },\n        {\n          \"output\": \"output/scene01_persona_b.mp4\",\n          \"output_label\": \"Premium anime\",\n          \"beat_label\": \"Variation B\"\n        }\n      ],\n      \"timing\": {\n        \"hook_seconds\": 0.5,\n        \"slider_seconds\": 2.5,\n        \"hold_output_seconds\": 0.3,\n        \"outro_seconds\": 0.5,\n        \"transition_seconds\": 0.4\n      }\n    },\n    {\n      \"title\": \"Scene 02 · Persona variations\",\n      \"source\": \"output/scene02_motion.mp4\",\n      \"render\": \"output/scene02_compare.mp4\",\n      \"compare_mode\": \"single_pass_multi_slider\",\n      \"samples\": [\n        {\n          \"output\": \"output/scene02_persona_a.mp4\",\n          \"output_label\": \"Claymation\",\n          \"beat_label\": \"Variation A\"\n        },\n        {\n          \"output\": \"output/scene02_persona_b.mp4\",\n          \"output_label\": \"Disney 3D\",\n          \"beat_label\": \"Variation B\"\n        }\n      ]\n    }\n  ]\n}\n\nArchive v1.0.11: 8 files, 20368 bytes\n\nFiles: animate-beats.md (5809b), examples.md (6222b), prompt-templates.md (12071b), skill-card.md (2922b), skill.manifest.json (165b), SKILL.md (16720b), templates/batch.template.json (1275b), _meta.json (138b)\n\nFile v1.0.11:SKILL.md\n\n---\nname: avatar-multi-scene\ndescription: Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity.\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-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| `p-video-animate` | Use when someone wants a photo to move like another video — motion transfer, dance remixes, or performance variations from a template clip. | `npx skills add PrunaAI/pruna-skills@p-video-animate -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 `` `avatar-multi-scene` `` in backticks. Restate the user's **continuity / UGC / host / segment** goal in one line. 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## Purpose\n\nProduce a **coherent multi-scene** piece stitched later with **ffmpeg** (Pruna does not ship a concat endpoint). Each beat is one of:\n\n| Beat type | Model | Deliverable |\n|-----------|--------|-------------|\n| **`avatar`** | **`p-video-avatar`** | Talking-head clip from approved still + `voice_script` |\n| **`animate`** | **`p-video-animate`** + slider render | Motion-transfer clip, usually wrapped in a **side-by-side or wipe comparison** MP4 (motion template vs animated subject) |\n\nMix types in one announcement reel—e.g. avatar hook → animate slider demo → avatar CTA.\n\nVisual continuity comes from **Pruna `p-image` / `p-image-edit`** on uploaded references.\n\nFollow this skill in **plain language** when talking to the person requesting the video. Use **natural, speakable copy** in every `voice_script`.\n\n**Staged generation:** `generation-diversity` · `generation-diversity`\n\n## Quick reference\n\n| Resource | Path |\n|----------|------|\n| Photoreal dynamic personas | `image-prompting` |\n| Cast ledger, character sheet, voice/video prompts | [prompt-templates.md](./prompt-templates.md) |\n| Animate rows, sliders, alignment | [animate-beats.md](./animate-beats.md) |\n| Examples | [examples.md](./examples.md) |\n| Feedback discipline | `generation-diversity` |\n| Slider (agent) | ffmpeg `hstack` / wipe — see **Slider comparison** below |\n| Batch template | [templates/batch.template.json](./templates/batch.template.json) |\n\n## Feedback gates (required)\n\n| Phase | What to show | Proceed when |\n|-------|--------------|--------------|\n| **0 — Plan** | Scene table, read-through, cast ledger | **approve plan** |\n| **A — Stills** | Hero + per-scene plates | **approve stills** |\n| **B — Video** | Avatar / animate clips + sliders | **approve clips** |\n| **C — Assembly** | Concat reel + optional bed | User accepts |\n\n## Intake: ask before generating\n\nOpen intake → **`generation-diversity`** clarification intake.\n\n**Do not** call `POST /v1/predictions` until the user has answered and you have recorded the answers (use defaults only if the user explicitly opts in):\n\n| Topic | Questions |\n|-------|-----------|\n| **Goal** | What is the piece for (pitch, tutorial, trailer, episode)? Primary audience? |\n| **Scope** | How many speaking scenes or beats? Approximate total runtime after assembly? |\n| **Cast** | Who speaks, in what order? One character throughout or multiple? |\n| **Look** | Aspect for stills and feel (`9:16` / `16:9`)? Avatar output `720p` or `1080p`? |\n| **Media source** | **Generate** hero plates with `p-image` / edits vs **upload-only** references; user-owned motion templates for animate beats? |\n| **Voice** | For **each named character**, pick **one** Pruna `voice` and `voice_language` and **reuse it in every scene** that character speaks. Any words that must be pronounced exactly (names, acronyms)? |\n| **Style** | Agreed **style bible** line for all image prompts? |\n| **Character sheet** | Per speaker: age range, wardrobe baseline, hair, skin/realism level, personality adjectives—record before hero generation (see **Character sheet** below). |\n| **Scene variety** | Each scene must differ in **camera angle**, **background/setting**, and/or **energy**—no two consecutive scenes with the same framing and location unless the user asks. Plan **`visual_style_tag`**, **`setting_tag`**, **`camera_tag`**, **`lighting_tag`** per row — `generation-diversity`. |\n| **Ritual seed (SSoT)** | Ritual seed at hero — generate and state a ritual string; log as **`ritual_seed`**; derive prompt axes via sum-mod. **Do not** pass ritual string to API `seed`. |\n| **References** | Which files to upload; rights cleared? |\n| **Beat mix** | Which scenes are **`avatar`** vs **`animate`**? All avatar, all animate, or mixed announcement? |\n| **Narrated B-rol\n\nArchive v1.0.10: 8 files, 20155 bytes\n\nFiles: animate-beats.md (5809b), examples.md (6222b), prompt-templates.md (12071b), skill-card.md (2440b), skill.manifest.json (165b), SKILL.md (16720b), templates/batch.template.json (1275b), _meta.json (138b)\n\nArchive v1.0.9: 8 files, 20221 bytes\n\nFiles: animate-beats.md (5809b), examples.md (6222b), prompt-templates.md (12071b), skill-card.md (2655b), skill.manifest.json (165b), SKILL.md (16719b), templates/batch.template.json (1275b), _meta.json (137b)\n\nArchive v1.0.8: 8 files, 20129 bytes\n\nFiles: animate-beats.md (5809b), examples.md (6222b), prompt-templates.md (12070b), skill-card.md (2525b), skill.manifest.json (165b), SKILL.md (16655b), templates/batch.template.json (1275b), _meta.json (137b)\n\nArchive v1.0.7: 8 files, 20061 bytes\n\nFiles: animate-beats.md (5809b), examples.md (6222b), prompt-templates.md (12070b), skill-card.md (2619b), skill.manifest.json (165b), SKILL.md (16440b), templates/batch.template.json (1275b), _meta.json (137b)\n\nArchive v1.0.6: 26 files, 71984 bytes\n\nFiles: animate-beats.md (6318b), apm.yml (515b), examples.md (6402b), prompt-templates.md (12567b), README-INSTALL.md (966b), references/approval-red-flags.md (2650b), references/generation-diversity.md (25910b), references/generation-quality-checklists.md (9786b), references/p-video-animate-quality-checklist.md (2181b), references/p-video-avatar-quality-checklist.md (2929b), references/parallel-execution.md (7863b), references/pruna-api.md (5138b), references/random-seed-ritual.md (3875b), references/staged-generation-gate.md (7290b), references/visual-variety-bible.md (21663b), references/workflow-feedback-gates.md (5042b), scripts/generate_video_comparison.py (40545b), scripts/pruna_paths.py (1162b), scripts/requirements-comparison.txt (15b), scripts/requirements.txt (15b), skill-card.md (3124b), skill.deps.json (1113b), skill.manifest.json (760b), SKILL.md (19231b), templates/batch.template.json (1275b), _meta.json (137b)\n\nArchive v1.0.2: 23 files, 57856 bytes\n\nFiles: animate-beats.md (6204b), apm.yml (524b), examples.md (6288b), prompt-templates.md (12504b), README-INSTALL.md (1232b), references/generation-quality-checklists.md (10463b), references/p-video-animate-quality-checklist.md (2122b), references/p-video-avatar-quality-checklist.md (2870b), references/parallel-execution.md (7846b), references/pruna-api.md (5118b), references/staged-generation-gate.md (7562b), references/visual-variety-bible.md (21679b), references/workflow-feedback-gates.md (5595b), scripts/generate_video_comparison.py (40545b), scripts/pruna_paths.py (1162b), scripts/requirements-comparison.txt (15b), scripts/requirements.txt (15b), skill-card.md (2906b), skill.deps.json (1113b), skill.manifest.json (812b), SKILL.md (17933b), templates/batch.template.json (1275b), _meta.json (137b)","readmeExcerpt":"Skill: avatar-multi-scene Owner: pruna-ai Summary: Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. 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:37:43.995Z | auto avatar-multi-scene 1.0.14 - Bumped version to 1.0.14 in metadata. - Removed redundant file:","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"Hero:     p-image-ideogram (or upload) → slop gate → approve anchor\nScene N:  p-image-edit(anchor) → slop gate → p-video-avatar"},{"language":"bash","snippet":"ffmpeg -y -i motion_template.mp4 -i animated.mp4 \\\n  -filter_complex \"[0:v]scale=960:1080[l];[1:v]scale=960:1080[r];[l][r]hstack=inputs=2[v]\" \\\n  -map \"[v]\" -map 1:a? -c:v libx264 -c:a aac -shortest scene_compare.mp4"},{"language":"bash","snippet":"ffmpeg -y -f concat -safe 0 -i clips.txt -c copy reel.mp4"},{"language":"text","snippet":"Hero anchor (p-image-ideogram)\n  → motion-source still (p-image-edit)\n  → motion template (p-video-avatar OR upload .mp4)\n  → persona still(s) (p-image-ideogram or p-image-edit)\n  → p-video-animate (one job per persona)\n  → optional slider compare MP4"},{"language":"text","snippet":"Animate the reference subject using the exact motion, timing, and camera movement from the source video. Keep identity and outfit from the reference image."},{"language":"bash","snippet":"ffmpeg -y -i path/to/motion-template.mp4 -i path/to/animated-output.mp4 \\\n  -filter_complex \"[0:v][1:v]hstack=inputs=2[v]\" -map \"[v]\" -an path/to/scene_compare.mp4"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: avatar-multi-scene\ndescription: Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity.\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-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| `p-video-animate` | Use when someone wants a photo to move like another video — motion transfer, dance remixes, or performance variations from a template clip. | `npx skills add PrunaAI/pruna-skills@p-video-animate -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 `` `avatar-multi-scene` `` in backticks. Restate the user's **continuity / UGC / host / segment** goal in one line. 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## Purpose\n\nProduce a **coherent multi-scene** piece stitched later with **ffmpeg** (Pruna does not ship a concat endpoint). Each beat is one of:\n\n| Beat type | Model | Deliverable |\n|-----------|--------|-------------|\n| **`avatar`** | **`p-video-avatar`** | Talking-head clip from approved still + `voice_script` |\n| **`animate`** | **`p-video-animate`** + slider render | Motion-transfer clip, usually wrapped in a **side-by-side or wipe comparison** MP4 (motion template vs animated subject) |\n\nMix types in one announcement reel—e.g. avatar hook → animate slider demo → avatar CTA.\n\nVisual continuity comes from **Pruna `p-image-ideogram` / `p-image-edit`** on uploaded references (`p-image` for cheap drafts).\n\nFollow this skill in **plain language** when talking to the person"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"avatar-multi-scene\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1790696263995\n}"},{"path":"animate-beats.md","content":"# Animate beats in multi-scene reels\n\nHow **`p-video-animate`** fits into mixed **`avatar` + `animate`** pieces built with `avatar-multi-scene`.\n\n## What each model does\n\n| Model | Role in an animate row |\n|-------|------------------------|\n| **`p-image` / `p-image-edit`** | Reference stills — motion-source portrait and persona subjects |\n| **`p-video-avatar`** | Optional: generate a **motion template** (talking-head source video) when you don't have a licensed `.mp4` |\n| **`p-video-animate`** | Transfer motion from source video onto reference image |\n| **Slider render** | Optional comparison MP4 (motion template vs animated output) via `avatar-multi-scene` |\n\n**`p-video-animate`** takes:\n\n- **`video`** — motion, timing, camera path, acting beats, audio source\n- **`image`** — subject identity, style, wardrobe, environment look\n\nOutput keeps **motion from the video**, **appearance from the image**.\n\n## Animate row pipeline\n\n```text\nHero anchor (p-image-ideogram)\n  → motion-source still (p-image-edit)\n  → motion template (p-video-avatar OR upload .mp4)\n  → persona still(s) (p-image-ideogram or p-image-edit)\n  → p-video-animate (one job per persona)\n  → optional slider compare MP4\n```\n\n## Making motion templates work\n\nWhen **`p-video-avatar`** creates the source video for **`p-video-animate`**, prompt it like a **speaking** clip — not a portrait pose.\n\n| Field | Guidance |\n|-------|----------|\n| Motion-source still | `mouth clearly visible ready to speak`; medium close-up; unobstructed face |\n| **`video_prompt`** | `speaks directly to camera`, `clear lip movement`, explain gestures, head nods; prefix with `Camera moves continuously … never locked-off` |\n| **`voice_prompt`** | Conversational delivery throughout the line — not gesture-only direction at the end |\n\nSmile/wave/nod are fine **after** explicit speaking direction. Smile/wave **instead of** speaking produces silent templates — weak lip sync and poor slider demos.\n\n## Making `p-video-animate` work\n\n### Alignment (most important)\n\nMatch **shot size**, **facing direction**, and **visible limbs** between reference image and motion template.\n\n| Pairing | Outcome |\n|---------|---------|\n| Same framing and pose | Best transfer |\n| Same character type, slight angle difference | Good; optional repose with **`p-image-edit`** |\n| Stylized / mascot / chibi on human full-body motion | Limbs and contact points often break |\n| Profile motion + front-facing still | Head/shoulder artifacts |\n\nRepose before animate when close but not exact: *\"Change only: match pose and camera to reference video frame; keep identity and outfit.\"*\n\n### Reference stills (personas)\n\n- Face and mouth large enough for lip-sync when the template speaks\n- **`instruction_prompt`** steers behavior without fighting source motion:\n\n```text\nAnimate the reference subject using the exact motion, timing, and camera movement from the source video. Keep identity and outfit from the reference image.\n```\n\n- **Style variety** (photoreal, premium"},{"path":"examples.md","content":"# Examples\n\n## Dynamic multi-scene avatar (partnership / founder social)\n\nProven pattern from production runs:\n\n1. **Character sheet** — photoreal founder, early 30s, locked **`seed`**, one **`voice`** preset.\n2. **Hero** — `p-image-ideogram` (documentary photoreal) → slop gate → approve identity anchor.\n3. **Per scene** — `p-image-edit` (from hero anchor; change **only** angle + background) → slop gate → `p-video-avatar`. **Run edits and avatar jobs in parallel batches** per phase once dependencies are met (pruna-api.md#parallel-async-multi-scene--batch (`pruna-api`)); use **one subagent per scene lane** when the host supports it.\n4. **Vary every scene** — e.g. dark close-up → mountain overlook → ISS cupola → desk window light → studio CTA. Never repeat the same office framing twice.\n5. **Natural voice** — contractions, conversational hooks; **`voice_prompt`** describes human delivery, not product copy.\n\nExample dialogue (single spokesperson, natural):\n\n```text\nScene 1: \"Hey — quick question. When you're making video with AI, how long do you actually wait between ideas?\"\nScene 2: \"And that's the real problem, right? It's not just slow — you lose momentum. The whole creative loop just breaks.\"\nScene 3: \"So we teamed up with Tellers — our whole model family is live inside their editor now.\"\nScene 4: \"What's actually cool is the speed — cheap enough that you can genuinely explore without worrying about every credit.\"\nScene 5: \"Anyway — check out Tellers. Link's in the post. I'd love to see what you build.\"\n```\n\nStore scenes in JSON (`v2_avatar_only_scripts.json` pattern in `prompt-templates.md`) with **`ritual_seed`**, per-scene **`video_prompt`**, and **`still_prompt`** deltas.\n\n## Mixed announcement (avatar + animate slider beats)\n\nPattern for product launches that interleave speaking scenes with motion-transfer demos:\n\n| # | Type | Beat |\n|---|------|------|\n| 1 | avatar | Hook — spokesperson intro |\n| 2 | animate | Slider — same UGC motion, new persona still |\n| 3 | avatar | Reveal — partnership / feature detail |\n| 4 | animate | Slider — second motion template, repose hero to match |\n| 5 | avatar | CTA |\n\n**Pipeline:** shared hero anchor → per-row still prep (edit for avatars; optional repose for animate) → parallel **`p-video-avatar`** + parallel **`p-video-animate`** → parallel slider renders for animate rows → ffmpeg concat in scene order.\n\nModel roles and alignment: [animate-beats.md](./animate-beats.md).\n\n**Alignment reminder:** animate rows fail when a meme/mascot still meets human full-body dance motion—pick bust-only templates or repose first (see SKILL **Alignment prep**).\n\n**Style ladder reminder:** each persona still in an animate slider row should use a different **`visual_style_tag`** (photoreal, anime, claymation, Disney 3D, cyberpunk, game cinematic) with its own background, camera angle, and lighting — generation-diversity.md#visual-variety (`generation-diversity`).\n\n## Motion-transfer-only reel (animate rows)\n\nAll-slider showc"},{"path":"prompt-templates.md","content":"# Prompt templates (Pruna only)\n\nCompanion to `avatar-multi-scene` — cast ledger, character sheet, still edits, and per-scene voice/video fields.\n\n## Cast ledger (voice lock)\n\n| Character | Pruna `voice` | `voice_language` | Notes |\n|-----------|----------------|------------------|--------|\n| (example) | `Zephyr (Female)` | `English (US)` | Same preset every scene this character speaks |\n\n**Rule:** recurring characters **never** change `voice` between scenes unless the user requests a recast. Tweak delivery with **`voice_prompt`** only.\n\n## Reference gathering (research assistant prompt)\n\n```text\nCollect up to [N] high-quality, rights-clear reference images for [SUBJECT / CAST].\nPrefer official art packs, style guides, or assets the client can license.\nFor each file record: character, intended use, source, license note, and image quality (resolution, clarity).\n```\n\n## Upload rule\n\nUse **`POST /v1/files`** and then Pruna **`urls.get`** values in **`p-image-edit`** `images` and in **`p-video-avatar`** `image`. Do not pass arbitrary hotlinks you do not control.\n\n## Character sheet (fill before hero generation)\n\n```text\nName/role: [e.g. Alex — founder spokesperson]\nAge/build: [early 30s, medium build]\nFace/hair: [short dark hair, light stubble, brown eyes]\nRealism: photorealistic documentary portrait, not CGI, not illustration\nWardrobe baseline: [black crew-neck — keep unless scene script changes outfit]\nPersonality: [warm, direct, founder-energy, honest]\nritual_seed: [string — SSoT planning only; generate fresh, do not copy examples]\nPruna voice: [e.g. Puck (Male)] / [English (US)]\n```\n\n## Scene table (fill during intake — every row must differ)\n\n| # | Setting & camera | Emotion | still_prompt delta (change only) |\n|---|------------------|---------|----------------------------------|\n| 1 | extreme close-up, dark void | curious hook | (hero — no edit) |\n| 2 | 3/4, outdoor location | contemplative | background + angle |\n| 3 | medium low-angle, distinctive set | excited reveal | background + angle |\n| 4 | over-shoulder at desk | conversational proof | setting + angle |\n| 5 | straight-on medium studio | warm CTA | cleaner background |\n\nPair each row with its own **`voice_script`**, **`voice_prompt`**, and **`video_prompt`** in the manifest JSON.\n\n## Ritual seed (manifest snippet)\n\n```json\n{\n  \"ritual_seed\": \"k7Qm2xP9\",\n  \"ritual_seed_policy\": \"ssot_dag_before_every_generation\",\n  \"api_seed\": null\n}\n```\n\n`ritual_seed` is **SSoT planning only** — do not pass to API `input.seed`. Set `api_seed` only when the user explicitly locks API reproducibility.\n\nReplace strings with your random seed ritual (`generation-diversity`) — do not copy from this template.\n\n**Ritual:** generation-diversity.md#random-seed-ritual-mandatory-before-every-generation (`generation-diversity`) (SSoT) — generate a random string before every generation; derive prompt axes via sum-mod.\n\n## Fashion / ecommerce try-on path\n\nWhen the deliverable is **dressed model stills** or **fashion UGC"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":2074,"uniquenessScore":43,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T11:11:08.115Z","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-10T11:11:08.115Z","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-10T13:32:28.464Z","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"}]}}}