{"id":"a6dc9320-2a0c-42e3-b74e-9ad2db1ef7e3","entityType":"agent","slug":"clawhub-pruna-ai-p-video-avatar","name":"p-video-avatar","canonicalUrl":"https://www.xpersona.co/agent/clawhub-pruna-ai-p-video-avatar","canonicalPath":"/agent/clawhub-pruna-ai-p-video-avatar","generatedAt":"2026-10-10T14:50:43.200Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T12:19:48.019Z","emptyReason":null},"description":"Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. Skill: p-video-avatar Owner: pruna-ai Summary: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. 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:35:00.026Z | auto p-video-avatar v1.0.14 - Updated SKILL.md to set version to 1.0.14. - Removed skill-card.md from the repository. -","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s173djpkkm1x4yfzg522h5vfp989mrn5:p-video-avatar","sourceUrl":"https://clawhub.ai/pruna-ai/p-video-avatar","homepage":"https://clawhub.ai/pruna-ai/skills/p-video-avatar","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/pruna-ai/p-video-avatar","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/pruna-ai/skills/p-video-avatar","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. Skill: p-video-avatar Own"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:19:48.019Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:19:48.019Z","emptyReason":null},"stars":null,"forks":null,"downloads":1436,"packageName":null,"latestVersion":"1.0.14","tractionLabel":"1.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T12:19:48.019Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T12:19:48.019Z","lastCrawledAt":"2026-10-10T12:19:48.019Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T12:19:48.019Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.14","createdAt":"2026-09-29T15:35:00.026Z","changelog":"p-video-avatar v1.0.14 - Updated SKILL.md to set version to 1.0.14. - Removed skill-card.md from the repository. - No changes to logic or prompting; documentation and metadata updates only.","fileCount":4,"zipByteSize":5161},{"version":"1.0.13","createdAt":"2026-09-17T13:57:33.348Z","changelog":"- Updated skill suggestions in \"When NOT to use\": replaced `p-video-2` with new `p-video-2-pro` and clarified distinctions between video generation skills. - Improved descriptions for similar skills to help users choose the correct workflow. - No changes to API usage or primary workflow guidance. - Removed `skill-card.md` file.","fileCount":4,"zipByteSize":5302},{"version":"1.0.12","createdAt":"2026-09-10T13:55:57.936Z","changelog":"p-video-avatar 1.0.12 - Updated \"When NOT to use\" section: added new recommendation for `p-video-2` (best quality short clips) and clarified distinctions between `p-video` and `p-video-2`. - Removed old skill-card documentation file (`skill-card.md`). - No changes to logic or API usage; documentation and guidance improvements only.","fileCount":4,"zipByteSize":5207},{"version":"1.0.11","createdAt":"2026-09-03T14:10:26.662Z","changelog":"p-video-avatar 1.0.11 - Updated SKILL.md to clarify that when both `audio` and `voice_script` are set, `audio` takes precedence. - Removed the file: skill-card.md.","fileCount":4,"zipByteSize":5261},{"version":"1.0.10","createdAt":"2026-08-28T07:56:35.977Z","changelog":"- Version bump to 1.0.10. - Documentation updated in SKILL.md. - skill-card.md file removed. - No changes to core functionality or API.","fileCount":4,"zipByteSize":5110},{"version":"1.0.9","createdAt":"2026-08-04T06:17:45.730Z","changelog":"- Bumped version to 1.0.9. - Removed the deprecated file `skill-card.md` for cleanup. - Minor internal or documentation updates in `SKILL.md`. - No changes to core functionality or usage.","fileCount":4,"zipByteSize":5285},{"version":"1.0.8","createdAt":"2026-07-28T17:19:53.291Z","changelog":"- Added explicit guidance to open clarification intake with `generation-diversity` before the first prediction. - Clarified agent habits for initial user interaction, especially for prompt and input intake. - No core logic or API changes. - Removed redundant/obsolete file: `skill-card.md`.","fileCount":4,"zipByteSize":5201},{"version":"1.0.7","createdAt":"2026-07-23T12:34:45.478Z","changelog":"p-video-avatar 1.0.7 - Major documentation update: SKILL.md rewritten for clarity, concise install/prereq steps, and separation of boundaries. - All redundant/legacy references, checklists, and detailed prompting guides removed; now referenced via prerequisites and related skills. - Stronger guidance on when *not* to use this skill—explicit redirects to specialized Pruna skills. - Workflow guidance clarified: one-clip-per-invocation boundary, explicit multi-scene redirect. - Usage examples and HTTP API snippets updated for latest usage patterns. - Manifest updated: now references package and latest versioning.","fileCount":4,"zipByteSize":5349}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s173djpkkm1x4yfzg522h5vfp989mrn5:p-video-avatar","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-p-video-avatar/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-p-video-avatar/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-p-video-avatar/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-p-video-avatar/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-p-video-avatar/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-p-video-avatar/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-10T14:50:43.194Z"}},"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-p-video-avatar/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-p-video-avatar/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-p-video-avatar/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pruna-ai-p-video-avatar/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T12:19:48.019Z","emptyReason":null},"readme":"Skill: p-video-avatar\n\nOwner: pruna-ai\n\nSummary: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\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:35:00.026Z | auto\n\np-video-avatar v1.0.14\n\n- Updated SKILL.md to set version to 1.0.14.\n- Removed skill-card.md from the repository.\n- No changes to logic or prompting; documentation and metadata updates only.\n\nv1.0.13 | 2026-09-17T13:57:33.348Z | auto\n\n- Updated skill suggestions in \"When NOT to use\": replaced `p-video-2` with new `p-video-2-pro` and clarified distinctions between video generation skills.\n- Improved descriptions for similar skills to help users choose the correct workflow.\n- No changes to API usage or primary workflow guidance.\n- Removed `skill-card.md` file.\n\nv1.0.12 | 2026-09-10T13:55:57.936Z | auto\n\np-video-avatar 1.0.12\n\n- Updated \"When NOT to use\" section: added new recommendation for `p-video-2` (best quality short clips) and clarified distinctions between `p-video` and `p-video-2`.\n- Removed old skill-card documentation file (`skill-card.md`).\n- No changes to logic or API usage; documentation and guidance improvements only.\n\nv1.0.11 | 2026-09-03T14:10:26.662Z | auto\n\np-video-avatar 1.0.11\n\n- Updated SKILL.md to clarify that when both `audio` and `voice_script` are set, `audio` takes precedence.\n- Removed the file: skill-card.md.\n\nv1.0.10 | 2026-08-28T07:56:35.977Z | auto\n\n- Version bump to 1.0.10.\n- Documentation updated in SKILL.md.\n- skill-card.md file removed.\n- No changes to core functionality or API.\n\nv1.0.9 | 2026-08-04T06:17:45.730Z | auto\n\n- Bumped version to 1.0.9.\n- Removed the deprecated file `skill-card.md` for cleanup.\n- Minor internal or documentation updates in `SKILL.md`. \n- No changes to core functionality or usage.\n\nv1.0.8 | 2026-07-28T17:19:53.291Z | auto\n\n- Added explicit guidance to open clarification intake with `generation-diversity` before the first prediction.\n- Clarified agent habits for initial user interaction, especially for prompt and input intake.\n- No core logic or API changes.\n- Removed redundant/obsolete file: `skill-card.md`.\n\nv1.0.7 | 2026-07-23T12:34:45.478Z | auto\n\np-video-avatar 1.0.7\n\n- Major documentation update: SKILL.md rewritten for clarity, concise install/prereq steps, and separation of boundaries.\n- All redundant/legacy references, checklists, and detailed prompting guides removed; now referenced via prerequisites and related skills.\n- Stronger guidance on when *not* to use this skill—explicit redirects to specialized Pruna skills.\n- Workflow guidance clarified: one-clip-per-invocation boundary, explicit multi-scene redirect.\n- Usage examples and HTTP API snippets updated for latest usage patterns.\n- Manifest updated: now references package and latest versioning.\n\nv1.0.6 | 2026-07-16T20:59:53.023Z | auto\n\np-video-avatar 1.0.6\n\n- Updated SKILL.md version and metadata to 1.0.6.\n- Reorganized guidance: added a concise summary up top and moved key policy requirements to a shared section.\n- Updated links throughout docs and references to point to new locations in the repo structure.\n- Clarified instructions and terminology for persona, scene diversity, and model parameter confirmation.\n- Removed legacy/internal files: references/parallel-execution.md and skill-card.md.\n\nv1.0.2 | 2026-07-16T13:33:51.746Z | auto\n\n- Added a dedicated agent-safety.md reference, with new guidance to confirm data handling and user confirmation before any uploads or API calls.\n- Documented the importance of confirming voice_language with the user; clarified example values are illustrative only.\n- Updated version metadata to 1.0.2 in SKILL.md and manifest.\n- Removed deprecated skill-card.md file.\n- Minor updates across references for clarity and cross-linking.\n\nv1.0.1 | 2026-07-14T15:48:29.834Z | auto\n\np-video-avatar 1.0.1\n\n- Updated skill metadata to version 1.0.1\n- Improved README installation and guidance docs\n- Updated and expanded references, including a new persona example prompt\n- Clarified field and workflow requirements in SKILL.md\n- Retired legacy files: pspm.json and skill-card.md\n\nv0.0.1 | 2026-07-14T15:05:06.129Z | auto\n\np-video-avatar 0.0.1 — Initial release.\n\n- Enables creation of talking-head videos from a single portrait image plus either a voice script or audio clip.\n- Supports dynamic avatars with realistic personas, natural human voice, and unique motion per clip.\n- Provides detailed workflow guidance for generating multi-scene clips and style-specific hosts (photoreal, anime, clay, etc.).\n- Introduces experimental negative prompting to suppress on-screen text artifacts.\n- Includes comprehensive API usage instructions, required/optional fields, and best practice templates for realistic avatar creation.\n\nv1.0.0 | 2026-06-30T16:55:02.488Z | auto\n\nInitial release of p-video-avatar, a service for generating talking-head videos from a single image and voice script or audio.\n\n- Generate lip-synced talking-head avatar videos from one portrait and either a script or audio.\n- Supports both photorealistic and stylized hosts (anime, clay, 3D), ensuring dynamic motion and natural voice delivery.\n- Advanced controls: per-clip video prompts, voice selection, resolution, seed locking, and experimental negative prompt for suppressing text artifacts.\n- Workflow guidance for multi-scene and single-scene avatar productions, with focus on realism and production quality.\n- Detailed usage documentation includes HTTP API patterns, required/optional fields, and prompt crafting tips.\n- MIT license.\n\nArchive index:\n\nArchive v1.0.14: 4 files, 5161 bytes\n\nFiles: skill-card.md (1734b), skill.manifest.json (23b), SKILL.md (10786b), _meta.json (134b)\n\nFile v1.0.14:SKILL.md\n\n---\nname: p-video-avatar\ndescription: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\nlicense: MIT\nmetadata:\n  version: \"1.0.14\"\n  package: pruna-skills\n  pruna_model: p-video-avatar\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| `generation-diversity` | Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | `npx skills add PrunaAI/pruna-skills@generation-diversity -y` |\n| `video-prompting` | Use when crafting video or motion prompts for any generative model — dramaturgy, camera, physics-safe motion, frame anchors, and clip chaining. | `npx skills add PrunaAI/pruna-skills@video-prompting -y` |\n| `image-prompting` | Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | `npx skills add PrunaAI/pruna-skills@image-prompting -y` |\n| `pruna-api` | Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | `npx skills add PrunaAI/pruna-skills@pruna-api -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## Agent habit\n\nIn the **first reply**, name `` `p-video-avatar` `` in backticks, confirm `PRUNA_API_KEY` (or stop with signup links from `pruna-api`), then ask for required inputs. Open intake → **`generation-diversity`** clarification intake before the first `POST`. **Multiple talking-head scenes with the same person → redirect to `avatar-multi-scene`** (this skill is one clip only). Draft host motion with **Prompt craft (dynamic + faithful)** — do not paste skill examples.\n\n## Skill boundary\n\nThis skill = **one `p-video-avatar` prediction** per invocation.\n\n**Out of scope (stop and redirect):**\n\n- Several host segments with continuity → `avatar-multi-scene`\n- Multi-scene assembly, concat, or parallel scene batches → workflow skills (`avatar-multi-scene`, `narrated-multi-scene`, …)\n- Silent B-roll / no talking head → `p-video`\n- Motion transfer from a template video → `p-video-animate`\n\n## Prompt craft (dynamic + faithful)\n\n`video_prompt` (and optional `voice_prompt`) must be **fresh per clip** and **faithful to the user's host beat**. Diversity applies to camera nuance and delivery wording — not to changing who speaks or what they say.\n\n| Do | Don't |\n| --- | --- |\n| Ritual seed from `generation-diversity` before drafting; unique `video_prompt` per clip in multi-scene work | Reuse one `video_prompt` string across a reel, or paste this skill's sample (`Medium close-up speaking directly to lens`) when the user asked for something else |\n| Lock portrait identity from `image`; match head motion and pacing to **`voice_script`** or uploaded **`audio`** | Invent a new persona, wardrobe, or script line the user did not approve |\n| Use `video-prompting` dramaturgy — one camera move, physics-safe head motion, mouth visible | Default `The person is talking.` for anything beyond a quick test |\n| Show `video_prompt` (+ script/voice fields) before `POST` when wording is not locked | Silent regen that changes tone, framing, or delivery from the brief |\n\n**Fidelity check (before pay):** the clip must still be the user's speaker, script/audio, and approved host beat. If mouth visibility or pacing drifts from the brief, rewrite.\n\n## When NOT to use\n\nUse a different skill instead:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-video-2-pro` | Use when someone wants a cinematic clip from text or start/end frames — product ads, documentary shots, or dialogue with generated audio. Not for 1080p, imported audio tracks, or talking-head-only hosts. | `npx skills add PrunaAI/pruna-skills@p-video-2-pro -y` |\n| `p-video-2` | Use when someone wants a polished short clip from text, images, or imported audio — 1080p B-roll, start/end frame animation, or a motion shot with a mixed track. Not for cinematic generated-audio clips or talking-head-only hosts. | `npx skills add PrunaAI/pruna-skills@p-video-2 -y` |\n| `p-video` | Use when someone wants a simple short clip from text or images — quick B-roll, drafts, or start/end frame animation. Not when the brief needs cinematic generation, highest quality, tight lip-sync, or imported audio at 1080p. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-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| `p-video-replace` | Use when someone wants to swap a person, outfit, or product inside existing footage while keeping the camera move and audio. | `npx skills add PrunaAI/pruna-skills@p-video-replace -y` |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\n## HTTP (curl)\n\n### Upload portrait\n\n```bash\ncurl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\"\n```\n\nUse `urls.get` as `input.image`.\n\n### Create (async — recommended)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\",\n      \"negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n      \"negative_prompt_strength\": 0.35\n    }\n  }'\n```\n\nPoll and download: follow `pruna-api`.\n\nComplete the random seed ritual from `generation-diversity` before writing prompts — omit `seed` unless the user supplied **`api_seed`**. Confirm `voice_language` with the user.\n\nFor multiple clips: create **all** jobs in parallel (async, no `Try-Sync`), then batch-poll.\n\n### Create (sync — quick test only)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\"\n    }\n  }'\n```\n\n### Uploaded narration (audio wins over voice_script)\n\nGenerate `gemini-3.1-flash-tts` → upload to `/v1/files`. Pass as `input.audio` with portrait `image`. If both `audio` and `voice_script` are set, `audio` wins.\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/PORTRAIT_ID\",\n      \"audio\": \"https://api.pruna.ai/v1/files/NARRATION_ID\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up, natural head motion matching narration\"\n    }\n  }'\n```\n\n## Before generating\n\n1. Complete Prerequisites guide reading order (`generation-diversity` → `video-prompting`).\n2. Ritual seed → draft a **dynamic + faithful** `video_prompt` (section above) → confirm **`image`** URL, **`voice_script`** (or **`audio`**), **`voice`** / **`voice_language`**, **`voice_prompt`**, **`video_prompt`**, and **`resolution`**. Explicit user confirmation before any paid call.\n3. **Pruna notes:** P-API uses **snake_case** (`voice_script`, `video_prompt`, …). Mouth must be visible on the plate. Unique **`video_prompt`** per clip — do not reuse one string across a multi-scene reel. Default `The person is talking.` is quick-test only.\n\n### Negative prompt (experimental — suppress on-screen text)\n\n| Field | Default | Rule |\n|-------|---------|------|\n| `negative_prompt` | `\"\"` | Comma-separated elements to **suppress** |\n| `negative_prompt_strength` | `0` | Both must be set: non-empty prompt **and** strength **> 0** |\n\nStarter: `subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words`. Start strength around **0.3–0.4**. See `avatar-single-scene` for gated host workflows.\n\n## Typical next steps\n\nCommon follow-ons after this skill:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\": \"p-video-avatar\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1790696100026\n}\n\nFile v1.0.14:skill-card.md\n\n## Description:\n\nGuides an agent in creating a single lip-synced talking-head video from a portrait and a script or narration using Pruna's API.\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 developers use this skill to guide an agent through preparing a portrait, confirming a script or narration, and requesting one speaking-avatar clip.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Runtime installation of unpinned external skills can expand agent behavior beyond the reviewed release.\n\nMitigation: Review and pin or preinstall dependencies; avoid automatically running install commands in sensitive environments.\n\nRisk: Portraits, scripts, and optional narration or voice data are sent to Pruna's API.\n\nMitigation: Confirm the data and intended use with the user before uploading or making a paid request.\n\n## Reference(s):\n\n- [p-video-avatar on ClawHub](https://clawhub.ai/pruna-ai/skills/p-video-avatar)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, API calls]\n\n**Output Format:** [Markdown with bash and JSON examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guides one avatar-video request per invocation; requires a Pruna API key and user-confirmed inputs.]\n\n## Skill Version(s):\n\n1.0.14 (source: ClawHub release 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.14:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.13: 4 files, 5302 bytes\n\nFiles: skill-card.md (2068b), skill.manifest.json (23b), SKILL.md (10786b), _meta.json (134b)\n\nFile v1.0.13:SKILL.md\n\n---\nname: p-video-avatar\ndescription: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\nlicense: MIT\nmetadata:\n  version: \"1.0.13\"\n  package: pruna-skills\n  pruna_model: p-video-avatar\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| `generation-diversity` | Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | `npx skills add PrunaAI/pruna-skills@generation-diversity -y` |\n| `video-prompting` | Use when crafting video or motion prompts for any generative model — dramaturgy, camera, physics-safe motion, frame anchors, and clip chaining. | `npx skills add PrunaAI/pruna-skills@video-prompting -y` |\n| `image-prompting` | Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | `npx skills add PrunaAI/pruna-skills@image-prompting -y` |\n| `pruna-api` | Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | `npx skills add PrunaAI/pruna-skills@pruna-api -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## Agent habit\n\nIn the **first reply**, name `` `p-video-avatar` `` in backticks, confirm `PRUNA_API_KEY` (or stop with signup links from `pruna-api`), then ask for required inputs. Open intake → **`generation-diversity`** clarification intake before the first `POST`. **Multiple talking-head scenes with the same person → redirect to `avatar-multi-scene`** (this skill is one clip only). Draft host motion with **Prompt craft (dynamic + faithful)** — do not paste skill examples.\n\n## Skill boundary\n\nThis skill = **one `p-video-avatar` prediction** per invocation.\n\n**Out of scope (stop and redirect):**\n\n- Several host segments with continuity → `avatar-multi-scene`\n- Multi-scene assembly, concat, or parallel scene batches → workflow skills (`avatar-multi-scene`, `narrated-multi-scene`, …)\n- Silent B-roll / no talking head → `p-video`\n- Motion transfer from a template video → `p-video-animate`\n\n## Prompt craft (dynamic + faithful)\n\n`video_prompt` (and optional `voice_prompt`) must be **fresh per clip** and **faithful to the user's host beat**. Diversity applies to camera nuance and delivery wording — not to changing who speaks or what they say.\n\n| Do | Don't |\n| --- | --- |\n| Ritual seed from `generation-diversity` before drafting; unique `video_prompt` per clip in multi-scene work | Reuse one `video_prompt` string across a reel, or paste this skill's sample (`Medium close-up speaking directly to lens`) when the user asked for something else |\n| Lock portrait identity from `image`; match head motion and pacing to **`voice_script`** or uploaded **`audio`** | Invent a new persona, wardrobe, or script line the user did not approve |\n| Use `video-prompting` dramaturgy — one camera move, physics-safe head motion, mouth visible | Default `The person is talking.` for anything beyond a quick test |\n| Show `video_prompt` (+ script/voice fields) before `POST` when wording is not locked | Silent regen that changes tone, framing, or delivery from the brief |\n\n**Fidelity check (before pay):** the clip must still be the user's speaker, script/audio, and approved host beat. If mouth visibility or pacing drifts from the brief, rewrite.\n\n## When NOT to use\n\nUse a different skill instead:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-video-2-pro` | Use when someone wants a cinematic clip from text or start/end frames — product ads, documentary shots, or dialogue with generated audio. Not for 1080p, imported audio tracks, or talking-head-only hosts. | `npx skills add PrunaAI/pruna-skills@p-video-2-pro -y` |\n| `p-video-2` | Use when someone wants a polished short clip from text, images, or imported audio — 1080p B-roll, start/end frame animation, or a motion shot with a mixed track. Not for cinematic generated-audio clips or talking-head-only hosts. | `npx skills add PrunaAI/pruna-skills@p-video-2 -y` |\n| `p-video` | Use when someone wants a simple short clip from text or images — quick B-roll, drafts, or start/end frame animation. Not when the brief needs cinematic generation, highest quality, tight lip-sync, or imported audio at 1080p. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-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| `p-video-replace` | Use when someone wants to swap a person, outfit, or product inside existing footage while keeping the camera move and audio. | `npx skills add PrunaAI/pruna-skills@p-video-replace -y` |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\n## HTTP (curl)\n\n### Upload portrait\n\n```bash\ncurl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\"\n```\n\nUse `urls.get` as `input.image`.\n\n### Create (async — recommended)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\",\n      \"negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n      \"negative_prompt_strength\": 0.35\n    }\n  }'\n```\n\nPoll and download: follow `pruna-api`.\n\nComplete the random seed ritual from `generation-diversity` before writing prompts — omit `seed` unless the user supplied **`api_seed`**. Confirm `voice_language` with the user.\n\nFor multiple clips: create **all** jobs in parallel (async, no `Try-Sync`), then batch-poll.\n\n### Create (sync — quick test only)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\"\n    }\n  }'\n```\n\n### Uploaded narration (audio wins over voice_script)\n\nGenerate `gemini-3.1-flash-tts` → upload to `/v1/files`. Pass as `input.audio` with portrait `image`. If both `audio` and `voice_script` are set, `audio` wins.\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/PORTRAIT_ID\",\n      \"audio\": \"https://api.pruna.ai/v1/files/NARRATION_ID\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up, natural head motion matching narration\"\n    }\n  }'\n```\n\n## Before generating\n\n1. Complete Prerequisites guide reading order (`generation-diversity` → `video-prompting`).\n2. Ritual seed → draft a **dynamic + faithful** `video_prompt` (section above) → confirm **`image`** URL, **`voice_script`** (or **`audio`**), **`voice`** / **`voice_language`**, **`voice_prompt`**, **`video_prompt`**, and **`resolution`**. Explicit user confirmation before any paid call.\n3. **Pruna notes:** P-API uses **snake_case** (`voice_script`, `video_prompt`, …). Mouth must be visible on the plate. Unique **`video_prompt`** per clip — do not reuse one string across a multi-scene reel. Default `The person is talking.` is quick-test only.\n\n### Negative prompt (experimental — suppress on-screen text)\n\n| Field | Default | Rule |\n|-------|---------|------|\n| `negative_prompt` | `\"\"` | Comma-separated elements to **suppress** |\n| `negative_prompt_strength` | `0` | Both must be set: non-empty prompt **and** strength **> 0** |\n\nStarter: `subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words`. Start strength around **0.3–0.4**. See `avatar-single-scene` for gated host workflows.\n\n## Typical next steps\n\nCommon follow-ons after this skill:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\": \"p-video-avatar\",\n  \"version\": \"1.0.13\",\n  \"publishedAt\": 1789653453348\n}\n\nFile v1.0.13:skill-card.md\n\n## Description:\n\nUse when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to prepare and submit one Pruna p-video-avatar prediction that turns a portrait plus a script or narration audio into a lip-synced talking-head avatar video.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill may send portraits, scripts, and optional narration audio to Pruna's API.\n\nMitigation: Use it only when the user accepts sending those inputs to Pruna and avoid submitting sensitive personal media or scripts without permission.\n\nRisk: The setup guidance can install changing external skill components through floating npx skills add commands.\n\nMitigation: Prefer pinned or pre-reviewed skill installs and install the optional full suite only when all included capabilities are intended.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/pruna-ai/skills/p-video-avatar)\n- [Pruna file upload endpoint](https://api.pruna.ai/v1/files)\n- [Pruna predictions endpoint](https://api.pruna.ai/v1/predictions)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with curl commands and JSON request bodies]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guides prompt drafting, input confirmation, API upload, prediction creation, polling, and download for a single avatar-video generation.]\n\n## Skill Version(s):\n\n1.0.13 (source: server release metadata and artifact 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}\n\nArchive v1.0.12: 4 files, 5207 bytes\n\nFiles: skill-card.md (2041b), skill.manifest.json (23b), SKILL.md (10452b), _meta.json (134b)\n\nFile v1.0.12:SKILL.md\n\n---\nname: p-video-avatar\ndescription: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\nlicense: MIT\nmetadata:\n  version: \"1.0.12\"\n  package: pruna-skills\n  pruna_model: p-video-avatar\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| `generation-diversity` | Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | `npx skills add PrunaAI/pruna-skills@generation-diversity -y` |\n| `video-prompting` | Use when crafting video or motion prompts for any generative model — dramaturgy, camera, physics-safe motion, frame anchors, and clip chaining. | `npx skills add PrunaAI/pruna-skills@video-prompting -y` |\n| `image-prompting` | Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | `npx skills add PrunaAI/pruna-skills@image-prompting -y` |\n| `pruna-api` | Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | `npx skills add PrunaAI/pruna-skills@pruna-api -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## Agent habit\n\nIn the **first reply**, name `` `p-video-avatar` `` in backticks, confirm `PRUNA_API_KEY` (or stop with signup links from `pruna-api`), then ask for required inputs. Open intake → **`generation-diversity`** clarification intake before the first `POST`. **Multiple talking-head scenes with the same person → redirect to `avatar-multi-scene`** (this skill is one clip only). Draft host motion with **Prompt craft (dynamic + faithful)** — do not paste skill examples.\n\n## Skill boundary\n\nThis skill = **one `p-video-avatar` prediction** per invocation.\n\n**Out of scope (stop and redirect):**\n\n- Several host segments with continuity → `avatar-multi-scene`\n- Multi-scene assembly, concat, or parallel scene batches → workflow skills (`avatar-multi-scene`, `narrated-multi-scene`, …)\n- Silent B-roll / no talking head → `p-video`\n- Motion transfer from a template video → `p-video-animate`\n\n## Prompt craft (dynamic + faithful)\n\n`video_prompt` (and optional `voice_prompt`) must be **fresh per clip** and **faithful to the user's host beat**. Diversity applies to camera nuance and delivery wording — not to changing who speaks or what they say.\n\n| Do | Don't |\n| --- | --- |\n| Ritual seed from `generation-diversity` before drafting; unique `video_prompt` per clip in multi-scene work | Reuse one `video_prompt` string across a reel, or paste this skill's sample (`Medium close-up speaking directly to lens`) when the user asked for something else |\n| Lock portrait identity from `image`; match head motion and pacing to **`voice_script`** or uploaded **`audio`** | Invent a new persona, wardrobe, or script line the user did not approve |\n| Use `video-prompting` dramaturgy — one camera move, physics-safe head motion, mouth visible | Default `The person is talking.` for anything beyond a quick test |\n| Show `video_prompt` (+ script/voice fields) before `POST` when wording is not locked | Silent regen that changes tone, framing, or delivery from the brief |\n\n**Fidelity check (before pay):** the clip must still be the user's speaker, script/audio, and approved host beat. If mouth visibility or pacing drifts from the brief, rewrite.\n\n## When NOT to use\n\nUse a different skill instead:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-video-2` | Use when someone wants the best-quality short clip from text, images, or audio — polished B-roll, start/end frame animation, or a motion shot with stronger lip-sync. Not for full multi-scene films or talking-head-only hosts. | `npx skills add PrunaAI/pruna-skills@p-video-2 -y` |\n| `p-video` | Use when someone wants a simple short clip from text or images — quick B-roll, drafts, or start/end frame animation. Not when the brief needs the highest quality or tight lip-sync. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-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| `p-video-replace` | Use when someone wants to swap a person, outfit, or product inside existing footage while keeping the camera move and audio. | `npx skills add PrunaAI/pruna-skills@p-video-replace -y` |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\n## HTTP (curl)\n\n### Upload portrait\n\n```bash\ncurl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\"\n```\n\nUse `urls.get` as `input.image`.\n\n### Create (async — recommended)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\",\n      \"negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n      \"negative_prompt_strength\": 0.35\n    }\n  }'\n```\n\nPoll and download: follow `pruna-api`.\n\nComplete the random seed ritual from `generation-diversity` before writing prompts — omit `seed` unless the user supplied **`api_seed`**. Confirm `voice_language` with the user.\n\nFor multiple clips: create **all** jobs in parallel (async, no `Try-Sync`), then batch-poll.\n\n### Create (sync — quick test only)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\"\n    }\n  }'\n```\n\n### Uploaded narration (audio wins over voice_script)\n\nGenerate `gemini-3.1-flash-tts` → upload to `/v1/files`. Pass as `input.audio` with portrait `image`. If both `audio` and `voice_script` are set, `audio` wins.\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/PORTRAIT_ID\",\n      \"audio\": \"https://api.pruna.ai/v1/files/NARRATION_ID\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up, natural head motion matching narration\"\n    }\n  }'\n```\n\n## Before generating\n\n1. Complete Prerequisites guide reading order (`generation-diversity` → `video-prompting`).\n2. Ritual seed → draft a **dynamic + faithful** `video_prompt` (section above) → confirm **`image`** URL, **`voice_script`** (or **`audio`**), **`voice`** / **`voice_language`**, **`voice_prompt`**, **`video_prompt`**, and **`resolution`**. Explicit user confirmation before any paid call.\n3. **Pruna notes:** P-API uses **snake_case** (`voice_script`, `video_prompt`, …). Mouth must be visible on the plate. Unique **`video_prompt`** per clip — do not reuse one string across a multi-scene reel. Default `The person is talking.` is quick-test only.\n\n### Negative prompt (experimental — suppress on-screen text)\n\n| Field | Default | Rule |\n|-------|---------|------|\n| `negative_prompt` | `\"\"` | Comma-separated elements to **suppress** |\n| `negative_prompt_strength` | `0` | Both must be set: non-empty prompt **and** strength **> 0** |\n\nStarter: `subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words`. Start strength around **0.3–0.4**. See `avatar-single-scene` for gated host workflows.\n\n## Typical next steps\n\nCommon follow-ons after this skill:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\": \"p-video-avatar\",\n  \"version\": \"1.0.12\",\n  \"publishedAt\": 1789048557936\n}\n\nFile v1.0.12:skill-card.md\n\n## Description:\n\nUse when someone wants a person on camera speaking a script - lip-synced host, spokesperson, or narrated avatar from a portrait photo.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal creators, marketers, and developers use this skill to prepare a single lip-synced talking-head avatar clip from a portrait and an approved script or uploaded narration. It guides prompt drafting, input confirmation, and Pruna API calls for one p-video-avatar prediction.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Prerequisite install commands add mutable third-party agent instructions with automatic confirmation.\n\nMitigation: Review the commands and use the skill only when the PrunaAI source is trusted.\n\nRisk: Portraits, narration, and scripts may contain sensitive or rights-restricted content and are sent to Pruna's API.\n\nMitigation: Confirm permission to process the content and avoid uploading sensitive material unless the user explicitly approves that use.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/pruna-ai/skills/p-video-avatar)\n- [ClawHub publisher profile](https://clawhub.ai/user/pruna-ai)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, markdown, shell commands, configuration, API calls]\n\n**Output Format:** [Markdown guidance with curl examples and JSON request bodies]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [One p-video-avatar prediction per invocation; async creation is recommended, while sync creation is framed as a quick test only.]\n\n## Skill Version(s):\n\n1.0.12 (source: evidence.json release.version and SKILL.md frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.12:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.11: 4 files, 5261 bytes\n\nFiles: skill-card.md (2448b), skill.manifest.json (23b), SKILL.md (10150b), _meta.json (134b)\n\nFile v1.0.11:SKILL.md\n\n---\nname: p-video-avatar\ndescription: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\nlicense: MIT\nmetadata:\n  version: \"1.0.11\"\n  package: pruna-skills\n  pruna_model: p-video-avatar\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| `generation-diversity` | Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | `npx skills add PrunaAI/pruna-skills@generation-diversity -y` |\n| `video-prompting` | Use when crafting video or motion prompts for any generative model — dramaturgy, camera, physics-safe motion, frame anchors, and clip chaining. | `npx skills add PrunaAI/pruna-skills@video-prompting -y` |\n| `image-prompting` | Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | `npx skills add PrunaAI/pruna-skills@image-prompting -y` |\n| `pruna-api` | Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | `npx skills add PrunaAI/pruna-skills@pruna-api -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## Agent habit\n\nIn the **first reply**, name `` `p-video-avatar` `` in backticks, confirm `PRUNA_API_KEY` (or stop with signup links from `pruna-api`), then ask for required inputs. Open intake → **`generation-diversity`** clarification intake before the first `POST`. **Multiple talking-head scenes with the same person → redirect to `avatar-multi-scene`** (this skill is one clip only). Draft host motion with **Prompt craft (dynamic + faithful)** — do not paste skill examples.\n\n## Skill boundary\n\nThis skill = **one `p-video-avatar` prediction** per invocation.\n\n**Out of scope (stop and redirect):**\n\n- Several host segments with continuity → `avatar-multi-scene`\n- Multi-scene assembly, concat, or parallel scene batches → workflow skills (`avatar-multi-scene`, `narrated-multi-scene`, …)\n- Silent B-roll / no talking head → `p-video`\n- Motion transfer from a template video → `p-video-animate`\n\n## Prompt craft (dynamic + faithful)\n\n`video_prompt` (and optional `voice_prompt`) must be **fresh per clip** and **faithful to the user's host beat**. Diversity applies to camera nuance and delivery wording — not to changing who speaks or what they say.\n\n| Do | Don't |\n| --- | --- |\n| Ritual seed from `generation-diversity` before drafting; unique `video_prompt` per clip in multi-scene work | Reuse one `video_prompt` string across a reel, or paste this skill's sample (`Medium close-up speaking directly to lens`) when the user asked for something else |\n| Lock portrait identity from `image`; match head motion and pacing to **`voice_script`** or uploaded **`audio`** | Invent a new persona, wardrobe, or script line the user did not approve |\n| Use `video-prompting` dramaturgy — one camera move, physics-safe head motion, mouth visible | Default `The person is talking.` for anything beyond a quick test |\n| Show `video_prompt` (+ script/voice fields) before `POST` when wording is not locked | Silent regen that changes tone, framing, or delivery from the brief |\n\n**Fidelity check (before pay):** the clip must still be the user's speaker, script/audio, and approved host beat. If mouth visibility or pacing drifts from the brief, rewrite.\n\n## When NOT to use\n\nUse a different skill instead:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-video` | Use when someone wants one short video clip from text or images — B-roll, start/end frame animation, or a quick motion shot. Not for full multi-scene films or lip-synced hosts. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-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| `p-video-replace` | Use when someone wants to swap a person, outfit, or product inside existing footage while keeping the camera move and audio. | `npx skills add PrunaAI/pruna-skills@p-video-replace -y` |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\n## HTTP (curl)\n\n### Upload portrait\n\n```bash\ncurl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\"\n```\n\nUse `urls.get` as `input.image`.\n\n### Create (async — recommended)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\",\n      \"negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n      \"negative_prompt_strength\": 0.35\n    }\n  }'\n```\n\nPoll and download: follow `pruna-api`.\n\nComplete the random seed ritual from `generation-diversity` before writing prompts — omit `seed` unless the user supplied **`api_seed`**. Confirm `voice_language` with the user.\n\nFor multiple clips: create **all** jobs in parallel (async, no `Try-Sync`), then batch-poll.\n\n### Create (sync — quick test only)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\"\n    }\n  }'\n```\n\n### Uploaded narration (audio wins over voice_script)\n\nGenerate `gemini-3.1-flash-tts` → upload to `/v1/files`. Pass as `input.audio` with portrait `image`. If both `audio` and `voice_script` are set, `audio` wins.\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/PORTRAIT_ID\",\n      \"audio\": \"https://api.pruna.ai/v1/files/NARRATION_ID\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up, natural head motion matching narration\"\n    }\n  }'\n```\n\n## Before generating\n\n1. Complete Prerequisites guide reading order (`generation-diversity` → `video-prompting`).\n2. Ritual seed → draft a **dynamic + faithful** `video_prompt` (section above) → confirm **`image`** URL, **`voice_script`** (or **`audio`**), **`voice`** / **`voice_language`**, **`voice_prompt`**, **`video_prompt`**, and **`resolution`**. Explicit user confirmation before any paid call.\n3. **Pruna notes:** P-API uses **snake_case** (`voice_script`, `video_prompt`, …). Mouth must be visible on the plate. Unique **`video_prompt`** per clip — do not reuse one string across a multi-scene reel. Default `The person is talking.` is quick-test only.\n\n### Negative prompt (experimental — suppress on-screen text)\n\n| Field | Default | Rule |\n|-------|---------|------|\n| `negative_prompt` | `\"\"` | Comma-separated elements to **suppress** |\n| `negative_prompt_strength` | `0` | Both must be set: non-empty prompt **and** strength **> 0** |\n\nStarter: `subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words`. Start strength around **0.3–0.4**. See `avatar-single-scene` for gated host workflows.\n\n## Typical next steps\n\nCommon follow-ons after this skill:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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.11:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"p-video-avatar\",\n  \"version\": \"1.0.11\",\n  \"publishedAt\": 1788444626662\n}\n\nFile v1.0.11:skill-card.md\n\n## Description:\n\nUse when someone wants a person on camera speaking a script: a lip-synced host, spokesperson, or narrated avatar from a portrait photo.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pruna-ai](https://clawhub.ai/user/pruna-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and creators use this skill to prepare and submit a single Pruna p-video-avatar job that turns a portrait plus either a script or uploaded narration into a talking-head avatar clip. It guides prompt drafting, user confirmation, portrait upload, prediction creation, polling, and download handoff.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uploads user-provided portraits, scripts, voice settings, and optional narration audio to Pruna's API.\n\nMitigation: Confirm the user is comfortable sharing those inputs with Pruna before installation or use.\n\nRisk: Avatar generation can involve a person's likeness or voice.\n\nMitigation: Confirm the user has the right to use the person's likeness and voice before generating the clip.\n\nRisk: The skill requires a PRUNA_API_KEY credential to create files and predictions.\n\nMitigation: Keep PRUNA_API_KEY scoped to the intended environment and avoid exposing it in shared logs or files.\n\nRisk: The skill depends on related Pruna skills for prompt craft and API handling.\n\nMitigation: Pin referenced Pruna skill installs when stricter supply-chain control is required.\n\n## Reference(s):\n\n- [ClawHub p-video-avatar skill page](https://clawhub.ai/pruna-ai/skills/p-video-avatar)\n- [Pruna AI publisher profile](https://clawhub.ai/user/pruna-ai)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, API calls, Configuration]\n\n**Output Format:** [Markdown guidance with curl commands and JSON request payloads]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires PRUNA_API_KEY and user confirmation before creating paid Pruna predictions; supports either voice_script or uploaded audio, with audio taking precedence when both are provided.]\n\n## Skill Version(s):\n\n1.0.11 (source: server release metadata 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.11:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.10: 4 files, 5110 bytes\n\nFiles: skill-card.md (2027b), skill.manifest.json (23b), SKILL.md (10197b), _meta.json (134b)\n\nFile v1.0.10:SKILL.md\n\n---\nname: p-video-avatar\ndescription: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\nlicense: MIT\nmetadata:\n  version: \"1.0.10\"\n  package: pruna-skills\n  pruna_model: p-video-avatar\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| `generation-diversity` | Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | `npx skills add PrunaAI/pruna-skills@generation-diversity -y` |\n| `video-prompting` | Use when crafting video or motion prompts for any generative model — dramaturgy, camera, physics-safe motion, frame anchors, and clip chaining. | `npx skills add PrunaAI/pruna-skills@video-prompting -y` |\n| `image-prompting` | Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | `npx skills add PrunaAI/pruna-skills@image-prompting -y` |\n| `pruna-api` | Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | `npx skills add PrunaAI/pruna-skills@pruna-api -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## Agent habit\n\nIn the **first reply**, name `` `p-video-avatar` `` in backticks, confirm `PRUNA_API_KEY` (or stop with signup links from `pruna-api`), then ask for required inputs. Open intake → **`generation-diversity`** clarification intake before the first `POST`. **Multiple talking-head scenes with the same person → redirect to `avatar-multi-scene`** (this skill is one clip only). Draft host motion with **Prompt craft (dynamic + faithful)** — do not paste skill examples.\n\n## Skill boundary\n\nThis skill = **one `p-video-avatar` prediction** per invocation.\n\n**Out of scope (stop and redirect):**\n\n- Several host segments with continuity → `avatar-multi-scene`\n- Multi-scene assembly, concat, or parallel scene batches → workflow skills (`avatar-multi-scene`, `narrated-multi-scene`, …)\n- Silent B-roll / no talking head → `p-video`\n- Motion transfer from a template video → `p-video-animate`\n\n## Prompt craft (dynamic + faithful)\n\n`video_prompt` (and optional `voice_prompt`) must be **fresh per clip** and **faithful to the user's host beat**. Diversity applies to camera nuance and delivery wording — not to changing who speaks or what they say.\n\n| Do | Don't |\n| --- | --- |\n| Ritual seed from `generation-diversity` before drafting; unique `video_prompt` per clip in multi-scene work | Reuse one `video_prompt` string across a reel, or paste this skill's sample (`Medium close-up speaking directly to lens`) when the user asked for something else |\n| Lock portrait identity from `image`; match head motion and pacing to **`voice_script`** or uploaded **`audio`** | Invent a new persona, wardrobe, or script line the user did not approve |\n| Use `video-prompting` dramaturgy — one camera move, physics-safe head motion, mouth visible | Default `The person is talking.` for anything beyond a quick test |\n| Show `video_prompt` (+ script/voice fields) before `POST` when wording is not locked | Silent regen that changes tone, framing, or delivery from the brief |\n\n**Fidelity check (before pay):** the clip must still be the user's speaker, script/audio, and approved host beat. If mouth visibility or pacing drifts from the brief, rewrite.\n\n## When NOT to use\n\nUse a different skill instead:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-video` | Use when someone wants one short video clip from text or images — B-roll, start/end frame animation, or a quick motion shot. Not for full multi-scene films or lip-synced hosts. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-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| `p-video-replace` | Use when someone wants to swap a person, outfit, or product inside existing footage while keeping the camera move and audio. | `npx skills add PrunaAI/pruna-skills@p-video-replace -y` |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\n## HTTP (curl)\n\n### Upload portrait\n\n```bash\ncurl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\"\n```\n\nUse `urls.get` as `input.image`.\n\n### Create (async — recommended)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\",\n      \"negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n      \"negative_prompt_strength\": 0.35\n    }\n  }'\n```\n\nPoll and download: follow `pruna-api`.\n\nComplete the random seed ritual from `generation-diversity` before writing prompts — omit `seed` unless the user supplied **`api_seed`**. Confirm `voice_language` with the user.\n\nFor multiple clips: create **all** jobs in parallel (async, no `Try-Sync`), then batch-poll.\n\n### Create (sync — quick test only)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\"\n    }\n  }'\n```\n\n### Uploaded narration (audio wins over voice_script)\n\nGenerate `gemini-3.1-flash-tts` → upload to `/v1/files`. Pass as `input.audio` with portrait `image` (optional `last_frame_image`).\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/PORTRAIT_START\",\n      \"last_frame_image\": \"https://api.pruna.ai/v1/files/PORTRAIT_END\",\n      \"audio\": \"https://api.pruna.ai/v1/files/NARRATION_ID\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up, natural head motion matching narration\"\n    }\n  }'\n```\n\n## Before generating\n\n1. Complete Prerequisites guide reading order (`generation-diversity` → `video-prompting`).\n2. Ritual seed → draft a **dynamic + faithful** `video_prompt` (section above) → confirm **`image`** URL, **`voice_script`** (or **`audio`**), **`voice`** / **`voice_language`**, **`voice_prompt`**, **`video_prompt`**, and **`resolution`**. Explicit user confirmation before any paid call.\n3. **Pruna notes:** P-API uses **snake_case** (`voice_script`, `video_prompt`, …). Mouth must be visible on the plate. Unique **`video_prompt`** per clip — do not reuse one string across a multi-scene reel. Default `The person is talking.` is quick-test only.\n\n### Negative prompt (experimental — suppress on-screen text)\n\n| Field | Default | Rule |\n|-------|---------|------|\n| `negative_prompt` | `\"\"` | Comma-separated elements to **suppress** |\n| `negative_prompt_strength` | `0` | Both must be set: non-empty prompt **and** strength **> 0** |\n\nStarter: `subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words`. Start strength around **0.3–0.4**. See `avatar-single-scene` for gated host workflows.\n\n## Typical next steps\n\nCommon follow-ons after this skill:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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.10:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"p-video-avatar\",\n  \"version\": \"1.0.10\",\n  \"publishedAt\": 1787903795977\n}\n\nFile v1.0.10:skill-card.md\n\n## Description:\n\nUse when someone wants a person on camera speaking a script - lip-synced host, spokesperson, or narrated avatar from a portrait photo.\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 content-production agents use this skill to prepare a single Pruna p-video-avatar prediction that turns an approved portrait and script or narration audio into a lip-synced talking-head avatar clip.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The workflow sends selected portraits, scripts, and optional narration audio to Pruna's API.\n\nMitigation: Confirm each media asset before generation, avoid uploading unnecessary optional files, and use a dedicated API key with normal account controls.\n\nRisk: Generated avatar output can drift from the approved speaker, script, or delivery intent.\n\nMitigation: Review the video prompt, voice fields, resolution, and source media with the user before any paid API call.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/pruna-ai/skills/p-video-avatar)\n- [Pruna files API endpoint](https://api.pruna.ai/v1/files)\n- [Pruna predictions API endpoint](https://api.pruna.ai/v1/predictions)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration]\n\n**Output Format:** [Markdown with curl commands and JSON request bodies]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces one p-video-avatar prediction workflow per invocation; async creation is recommended, with sync reserved for quick tests.]\n\n## Skill Version(s):\n\n1.0.10 (source: server release metadata and skill 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.10:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.9: 4 files, 5285 bytes\n\nFiles: skill-card.md (2573b), skill.manifest.json (23b), SKILL.md (10196b), _meta.json (133b)\n\nFile v1.0.9:SKILL.md\n\n---\nname: p-video-avatar\ndescription: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\nlicense: MIT\nmetadata:\n  version: \"1.0.9\"\n  package: pruna-skills\n  pruna_model: p-video-avatar\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| `generation-diversity` | Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | `npx skills add PrunaAI/pruna-skills@generation-diversity -y` |\n| `video-prompting` | Use when crafting video or motion prompts for any generative model — dramaturgy, camera, physics-safe motion, frame anchors, and clip chaining. | `npx skills add PrunaAI/pruna-skills@video-prompting -y` |\n| `image-prompting` | Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | `npx skills add PrunaAI/pruna-skills@image-prompting -y` |\n| `pruna-api` | Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | `npx skills add PrunaAI/pruna-skills@pruna-api -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## Agent habit\n\nIn the **first reply**, name `` `p-video-avatar` `` in backticks, confirm `PRUNA_API_KEY` (or stop with signup links from `pruna-api`), then ask for required inputs. Open intake → **`generation-diversity`** clarification intake before the first `POST`. **Multiple talking-head scenes with the same person → redirect to `avatar-multi-scene`** (this skill is one clip only). Draft host motion with **Prompt craft (dynamic + faithful)** — do not paste skill examples.\n\n## Skill boundary\n\nThis skill = **one `p-video-avatar` prediction** per invocation.\n\n**Out of scope (stop and redirect):**\n\n- Several host segments with continuity → `avatar-multi-scene`\n- Multi-scene assembly, concat, or parallel scene batches → workflow skills (`avatar-multi-scene`, `narrated-multi-scene`, …)\n- Silent B-roll / no talking head → `p-video`\n- Motion transfer from a template video → `p-video-animate`\n\n## Prompt craft (dynamic + faithful)\n\n`video_prompt` (and optional `voice_prompt`) must be **fresh per clip** and **faithful to the user's host beat**. Diversity applies to camera nuance and delivery wording — not to changing who speaks or what they say.\n\n| Do | Don't |\n| --- | --- |\n| Ritual seed from `generation-diversity` before drafting; unique `video_prompt` per clip in multi-scene work | Reuse one `video_prompt` string across a reel, or paste this skill's sample (`Medium close-up speaking directly to lens`) when the user asked for something else |\n| Lock portrait identity from `image`; match head motion and pacing to **`voice_script`** or uploaded **`audio`** | Invent a new persona, wardrobe, or script line the user did not approve |\n| Use `video-prompting` dramaturgy — one camera move, physics-safe head motion, mouth visible | Default `The person is talking.` for anything beyond a quick test |\n| Show `video_prompt` (+ script/voice fields) before `POST` when wording is not locked | Silent regen that changes tone, framing, or delivery from the brief |\n\n**Fidelity check (before pay):** the clip must still be the user's speaker, script/audio, and approved host beat. If mouth visibility or pacing drifts from the brief, rewrite.\n\n## When NOT to use\n\nUse a different skill instead:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-video` | Use when someone wants one short video clip from text or images — B-roll, start/end frame animation, or a quick motion shot. Not for full multi-scene films or lip-synced hosts. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-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| `p-video-replace` | Use when someone wants to swap a person, outfit, or product inside existing footage while keeping the camera move and audio. | `npx skills add PrunaAI/pruna-skills@p-video-replace -y` |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\n## HTTP (curl)\n\n### Upload portrait\n\n```bash\ncurl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\"\n```\n\nUse `urls.get` as `input.image`.\n\n### Create (async — recommended)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\",\n      \"negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n      \"negative_prompt_strength\": 0.35\n    }\n  }'\n```\n\nPoll and download: follow `pruna-api`.\n\nComplete the random seed ritual from `generation-diversity` before writing prompts — omit `seed` unless the user supplied **`api_seed`**. Confirm `voice_language` with the user.\n\nFor multiple clips: create **all** jobs in parallel (async, no `Try-Sync`), then batch-poll.\n\n### Create (sync — quick test only)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\"\n    }\n  }'\n```\n\n### Uploaded narration (audio wins over voice_script)\n\nGenerate `gemini-3.1-flash-tts` → upload to `/v1/files`. Pass as `input.audio` with portrait `image` (optional `last_frame_image`).\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/PORTRAIT_START\",\n      \"last_frame_image\": \"https://api.pruna.ai/v1/files/PORTRAIT_END\",\n      \"audio\": \"https://api.pruna.ai/v1/files/NARRATION_ID\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up, natural head motion matching narration\"\n    }\n  }'\n```\n\n## Before generating\n\n1. Complete Prerequisites guide reading order (`generation-diversity` → `video-prompting`).\n2. Ritual seed → draft a **dynamic + faithful** `video_prompt` (section above) → confirm **`image`** URL, **`voice_script`** (or **`audio`**), **`voice`** / **`voice_language`**, **`voice_prompt`**, **`video_prompt`**, and **`resolution`**. Explicit user confirmation before any paid call.\n3. **Pruna notes:** P-API uses **snake_case** (`voice_script`, `video_prompt`, …). Mouth must be visible on the plate. Unique **`video_prompt`** per clip — do not reuse one string across a multi-scene reel. Default `The person is talking.` is quick-test only.\n\n### Negative prompt (experimental — suppress on-screen text)\n\n| Field | Default | Rule |\n|-------|---------|------|\n| `negative_prompt` | `\"\"` | Comma-separated elements to **suppress** |\n| `negative_prompt_strength` | `0` | Both must be set: non-empty prompt **and** strength **> 0** |\n\nStarter: `subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words`. Start strength around **0.3–0.4**. See `avatar-single-scene` for gated host workflows.\n\n## Typical next steps\n\nCommon follow-ons after this skill:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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.9:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"p-video-avatar\",\n  \"version\": \"1.0.9\",\n  \"publishedAt\": 1785824265730\n}\n\nFile v1.0.9:skill-card.md\n\n## Description: <br>\nUse when someone wants a person on camera speaking a script, such as a lip-synced host, spokesperson, or narrated avatar from a portrait photo. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[pruna-ai](https://clawhub.ai/user/pruna-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users, developers, and content teams use this skill to prepare and call Pruna's p-video-avatar model for a single lip-synced talking-head video from a portrait plus script or uploaded narration. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill sends selected images, audio, scripts, prompts, and authenticated requests to Pruna's service. <br>\nMitigation: Review the media and prompt payloads before generation, use PRUNA_API_KEY only for intended calls, and confirm cost-bearing API requests before submission. <br>\nRisk: Optional related Pruna skills may be installed as prerequisites or follow-on workflow helpers. <br>\nMitigation: Review the related skills before installing optional dependencies and load only the skills needed for the requested workflow. <br>\nRisk: Generated talking-head output can drift from the approved speaker, script, audio, or host beat. <br>\nMitigation: Confirm the portrait, script or audio, voice, language, voice prompt, video prompt, and resolution before generation, then apply the skill's fidelity check before accepting output. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page for p-video-avatar](https://clawhub.ai/pruna-ai/skills/p-video-avatar) <br>\n- [Pruna file upload API endpoint](https://api.pruna.ai/v1/files) <br>\n- [Pruna predictions API endpoint](https://api.pruna.ai/v1/predictions) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Shell commands, Configuration, API calls] <br>\n**Output Format:** [Markdown guidance with curl command examples and JSON request bodies] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires PRUNA_API_KEY and explicit confirmation before cost-bearing generation; each invocation is scoped to one p-video-avatar prediction.] <br>\n\n## Skill Version(s): <br>\n1.0.9 (source: server release metadata and skill frontmatter metadata) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nFile v1.0.9:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.8: 4 files, 5201 bytes\n\nFiles: skill-card.md (2311b), skill.manifest.json (23b), SKILL.md (10196b), _meta.json (133b)\n\nFile v1.0.8:SKILL.md\n\n---\nname: p-video-avatar\ndescription: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\nlicense: MIT\nmetadata:\n  version: \"1.0.8\"\n  package: pruna-skills\n  pruna_model: p-video-avatar\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| `generation-diversity` | Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | `npx skills add PrunaAI/pruna-skills@generation-diversity -y` |\n| `video-prompting` | Use when crafting video or motion prompts for any generative model — dramaturgy, camera, physics-safe motion, frame anchors, and clip chaining. | `npx skills add PrunaAI/pruna-skills@video-prompting -y` |\n| `image-prompting` | Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | `npx skills add PrunaAI/pruna-skills@image-prompting -y` |\n| `pruna-api` | Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | `npx skills add PrunaAI/pruna-skills@pruna-api -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## Agent habit\n\nIn the **first reply**, name `` `p-video-avatar` `` in backticks, confirm `PRUNA_API_KEY` (or stop with signup links from `pruna-api`), then ask for required inputs. Open intake → **`generation-diversity`** clarification intake before the first `POST`. **Multiple talking-head scenes with the same person → redirect to `avatar-multi-scene`** (this skill is one clip only). Draft host motion with **Prompt craft (dynamic + faithful)** — do not paste skill examples.\n\n## Skill boundary\n\nThis skill = **one `p-video-avatar` prediction** per invocation.\n\n**Out of scope (stop and redirect):**\n\n- Several host segments with continuity → `avatar-multi-scene`\n- Multi-scene assembly, concat, or parallel scene batches → workflow skills (`avatar-multi-scene`, `narrated-multi-scene`, …)\n- Silent B-roll / no talking head → `p-video`\n- Motion transfer from a template video → `p-video-animate`\n\n## Prompt craft (dynamic + faithful)\n\n`video_prompt` (and optional `voice_prompt`) must be **fresh per clip** and **faithful to the user's host beat**. Diversity applies to camera nuance and delivery wording — not to changing who speaks or what they say.\n\n| Do | Don't |\n| --- | --- |\n| Ritual seed from `generation-diversity` before drafting; unique `video_prompt` per clip in multi-scene work | Reuse one `video_prompt` string across a reel, or paste this skill's sample (`Medium close-up speaking directly to lens`) when the user asked for something else |\n| Lock portrait identity from `image`; match head motion and pacing to **`voice_script`** or uploaded **`audio`** | Invent a new persona, wardrobe, or script line the user did not approve |\n| Use `video-prompting` dramaturgy — one camera move, physics-safe head motion, mouth visible | Default `The person is talking.` for anything beyond a quick test |\n| Show `video_prompt` (+ script/voice fields) before `POST` when wording is not locked | Silent regen that changes tone, framing, or delivery from the brief |\n\n**Fidelity check (before pay):** the clip must still be the user's speaker, script/audio, and approved host beat. If mouth visibility or pacing drifts from the brief, rewrite.\n\n## When NOT to use\n\nUse a different skill instead:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-video` | Use when someone wants one short video clip from text or images — B-roll, start/end frame animation, or a quick motion shot. Not for full multi-scene films or lip-synced hosts. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-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| `p-video-replace` | Use when someone wants to swap a person, outfit, or product inside existing footage while keeping the camera move and audio. | `npx skills add PrunaAI/pruna-skills@p-video-replace -y` |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\n## HTTP (curl)\n\n### Upload portrait\n\n```bash\ncurl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\"\n```\n\nUse `urls.get` as `input.image`.\n\n### Create (async — recommended)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\",\n      \"negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n      \"negative_prompt_strength\": 0.35\n    }\n  }'\n```\n\nPoll and download: follow `pruna-api`.\n\nComplete the random seed ritual from `generation-diversity` before writing prompts — omit `seed` unless the user supplied **`api_seed`**. Confirm `voice_language` with the user.\n\nFor multiple clips: create **all** jobs in parallel (async, no `Try-Sync`), then batch-poll.\n\n### Create (sync — quick test only)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\"\n    }\n  }'\n```\n\n### Uploaded narration (audio wins over voice_script)\n\nGenerate `gemini-3.1-flash-tts` → upload to `/v1/files`. Pass as `input.audio` with portrait `image` (optional `last_frame_image`).\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/PORTRAIT_START\",\n      \"last_frame_image\": \"https://api.pruna.ai/v1/files/PORTRAIT_END\",\n      \"audio\": \"https://api.pruna.ai/v1/files/NARRATION_ID\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up, natural head motion matching narration\"\n    }\n  }'\n```\n\n## Before generating\n\n1. Complete Prerequisites guide reading order (`generation-diversity` → `video-prompting`).\n2. Ritual seed → draft a **dynamic + faithful** `video_prompt` (section above) → confirm **`image`** URL, **`voice_script`** (or **`audio`**), **`voice`** / **`voice_language`**, **`voice_prompt`**, **`video_prompt`**, and **`resolution`**. Explicit user confirmation before any paid call.\n3. **Pruna notes:** P-API uses **snake_case** (`voice_script`, `video_prompt`, …). Mouth must be visible on the plate. Unique **`video_prompt`** per clip — do not reuse one string across a multi-scene reel. Default `The person is talking.` is quick-test only.\n\n### Negative prompt (experimental — suppress on-screen text)\n\n| Field | Default | Rule |\n|-------|---------|------|\n| `negative_prompt` | `\"\"` | Comma-separated elements to **suppress** |\n| `negative_prompt_strength` | `0` | Both must be set: non-empty prompt **and** strength **> 0** |\n\nStarter: `subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words`. Start strength around **0.3–0.4**. See `avatar-single-scene` for gated host workflows.\n\n## Typical next steps\n\nCommon follow-ons after this skill:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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.8:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"p-video-avatar\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1785259193291\n}\n\nFile v1.0.8:skill-card.md\n\n## Description: <br>\nUse when someone wants a person on camera speaking a script - lip-synced host, spokesperson, or narrated avatar from a portrait photo. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[pruna-ai](https://clawhub.ai/user/pruna-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and content teams use this skill to guide an agent through creating one lip-synced talking-head avatar video from a portrait, script, and optional narration through Pruna. It emphasizes prompt intake, user confirmation, and single-clip boundaries before generation. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill sends user-provided portraits, scripts, and optional voice or narration files to Pruna for processing. <br>\nMitigation: Use images and audio only with appropriate permission, and avoid sensitive media unless the user is comfortable with third-party processing. <br>\nRisk: Generated avatar videos may drift from the approved speaker identity, script, pacing, or delivery. <br>\nMitigation: Confirm the portrait, script or audio, voice settings, motion prompt, and resolution before paid API calls, then review generated output before use. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/pruna-ai/skills/p-video-avatar) <br>\n- [Pruna files API endpoint](https://api.pruna.ai/v1/files) <br>\n- [Pruna predictions API endpoint](https://api.pruna.ai/v1/predictions) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Shell commands, Configuration instructions, API calls] <br>\n**Output Format:** [Markdown with inline bash and JSON code blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires PRUNA_API_KEY and user-supplied media or script inputs; produces instructions and request payloads for a single Pruna p-video-avatar prediction.] <br>\n\n## Skill Version(s): <br>\n1.0.8 (source: server evidence and skill metadata) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nFile v1.0.8:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.7: 4 files, 5349 bytes\n\nFiles: skill-card.md (2717b), skill.manifest.json (23b), SKILL.md (10107b), _meta.json (133b)\n\nFile v1.0.7:SKILL.md\n\n---\nname: p-video-avatar\ndescription: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\nlicense: MIT\nmetadata:\n  version: \"1.0.7\"\n  package: pruna-skills\n  pruna_model: p-video-avatar\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| `generation-diversity` | Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | `npx skills add PrunaAI/pruna-skills@generation-diversity -y` |\n| `video-prompting` | Use when crafting video or motion prompts for any generative model — dramaturgy, camera, physics-safe motion, frame anchors, and clip chaining. | `npx skills add PrunaAI/pruna-skills@video-prompting -y` |\n| `image-prompting` | Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | `npx skills add PrunaAI/pruna-skills@image-prompting -y` |\n| `pruna-api` | Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | `npx skills add PrunaAI/pruna-skills@pruna-api -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## Agent habit\n\nIn the **first reply**, name `` `p-video-avatar` `` in backticks, confirm `PRUNA_API_KEY` (or stop with signup links from `pruna-api`), then ask for required inputs. **Multiple talking-head scenes with the same person → redirect to `avatar-multi-scene`** (this skill is one clip only). Draft host motion with **Prompt craft (dynamic + faithful)** — do not paste skill examples.\n\n## Skill boundary\n\nThis skill = **one `p-video-avatar` prediction** per invocation.\n\n**Out of scope (stop and redirect):**\n\n- Several host segments with continuity → `avatar-multi-scene`\n- Multi-scene assembly, concat, or parallel scene batches → workflow skills (`avatar-multi-scene`, `narrated-multi-scene`, …)\n- Silent B-roll / no talking head → `p-video`\n- Motion transfer from a template video → `p-video-animate`\n\n## Prompt craft (dynamic + faithful)\n\n`video_prompt` (and optional `voice_prompt`) must be **fresh per clip** and **faithful to the user's host beat**. Diversity applies to camera nuance and delivery wording — not to changing who speaks or what they say.\n\n| Do | Don't |\n| --- | --- |\n| Ritual seed from `generation-diversity` before drafting; unique `video_prompt` per clip in multi-scene work | Reuse one `video_prompt` string across a reel, or paste this skill's sample (`Medium close-up speaking directly to lens`) when the user asked for something else |\n| Lock portrait identity from `image`; match head motion and pacing to **`voice_script`** or uploaded **`audio`** | Invent a new persona, wardrobe, or script line the user did not approve |\n| Use `video-prompting` dramaturgy — one camera move, physics-safe head motion, mouth visible | Default `The person is talking.` for anything beyond a quick test |\n| Show `video_prompt` (+ script/voice fields) before `POST` when wording is not locked | Silent regen that changes tone, framing, or delivery from the brief |\n\n**Fidelity check (before pay):** the clip must still be the user's speaker, script/audio, and approved host beat. If mouth visibility or pacing drifts from the brief, rewrite.\n\n## When NOT to use\n\nUse a different skill instead:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `p-video` | Use when someone wants one short video clip from text or images — B-roll, start/end frame animation, or a quick motion shot. Not for full multi-scene films or lip-synced hosts. | `npx skills add PrunaAI/pruna-skills@p-video -y` |\n| `p-video-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| `p-video-replace` | Use when someone wants to swap a person, outfit, or product inside existing footage while keeping the camera move and audio. | `npx skills add PrunaAI/pruna-skills@p-video-replace -y` |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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\n## HTTP (curl)\n\n### Upload portrait\n\n```bash\ncurl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\"\n```\n\nUse `urls.get` as `input.image`.\n\n### Create (async — recommended)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\",\n      \"negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n      \"negative_prompt_strength\": 0.35\n    }\n  }'\n```\n\nPoll and download: follow `pruna-api`.\n\nComplete the random seed ritual from `generation-diversity` before writing prompts — omit `seed` unless the user supplied **`api_seed`**. Confirm `voice_language` with the user.\n\nFor multiple clips: create **all** jobs in parallel (async, no `Try-Sync`), then batch-poll.\n\n### Create (sync — quick test only)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\"\n    }\n  }'\n```\n\n### Uploaded narration (audio wins over voice_script)\n\nGenerate `gemini-3.1-flash-tts` → upload to `/v1/files`. Pass as `input.audio` with portrait `image` (optional `last_frame_image`).\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/PORTRAIT_START\",\n      \"last_frame_image\": \"https://api.pruna.ai/v1/files/PORTRAIT_END\",\n      \"audio\": \"https://api.pruna.ai/v1/files/NARRATION_ID\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up, natural head motion matching narration\"\n    }\n  }'\n```\n\n## Before generating\n\n1. Complete Prerequisites guide reading order (`generation-diversity` → `video-prompting`).\n2. Ritual seed → draft a **dynamic + faithful** `video_prompt` (section above) → confirm **`image`** URL, **`voice_script`** (or **`audio`**), **`voice`** / **`voice_language`**, **`voice_prompt`**, **`video_prompt`**, and **`resolution`**. Explicit user confirmation before any paid call.\n3. **Pruna notes:** P-API uses **snake_case** (`voice_script`, `video_prompt`, …). Mouth must be visible on the plate. Unique **`video_prompt`** per clip — do not reuse one string across a multi-scene reel. Default `The person is talking.` is quick-test only.\n\n### Negative prompt (experimental — suppress on-screen text)\n\n| Field | Default | Rule |\n|-------|---------|------|\n| `negative_prompt` | `\"\"` | Comma-separated elements to **suppress** |\n| `negative_prompt_strength` | `0` | Both must be set: non-empty prompt **and** strength **> 0** |\n\nStarter: `subtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words`. Start strength around **0.3–0.4**. See `avatar-single-scene` for gated host workflows.\n\n## Typical next steps\n\nCommon follow-ons after this skill:\n\n| Skill | Description | Install |\n| --- | --- | --- |\n| `avatar-multi-scene` | Use when someone wants the same person hosting several clips — multi-segment UGC, comparison reels, or mixed speaking and animated scenes with continuity. | `npx skills add PrunaAI/pruna-skills@avatar-multi-scene -y` |\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| `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.7:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"p-video-avatar\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1784810085478\n}\n\nFile v1.0.7:skill-card.md\n\n## Description: <br>\nUse when someone wants a person on camera speaking a script: a lip-synced host, spokesperson, or narrated avatar from a portrait photo. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[pruna-ai](https://clawhub.ai/user/pruna-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and creative operators use this skill to prepare one Pruna p-video-avatar generation for a portrait-based talking-head clip, including prompt drafting, media upload, API request construction, and confirmation gates before a paid call. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The workflow sends portrait images, scripts or audio, prompts, voice settings, and language choices to Pruna's API and may incur paid generation costs. <br>\nMitigation: Confirm PRUNA_API_KEY availability, media inputs, script or audio, voice settings, language, resolution, and prompts with the user before making any API call. <br>\nRisk: Using the skill for multi-scene continuity, silent B-roll, or motion transfer can produce the wrong workflow and mismatched expectations. <br>\nMitigation: Use this skill for one p-video-avatar prediction per invocation and redirect multi-scene, B-roll, and motion-transfer requests to the specialized Pruna skills named in the artifact. <br>\nRisk: A weak or reused prompt can drift from the user's intended speaker, host beat, or approved wording. <br>\nMitigation: Draft a fresh, faithful video prompt for the clip, keep the portrait identity and script or audio fixed, and show the prompt and voice fields before posting when wording is not locked. <br>\n\n\n## Reference(s): <br>\n- [ClawHub p-video-avatar Skill Page](https://clawhub.ai/pruna-ai/skills/p-video-avatar) <br>\n- [Pruna Files API Endpoint](https://api.pruna.ai/v1/files) <br>\n- [Pruna Predictions API Endpoint](https://api.pruna.ai/v1/predictions) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, shell commands, configuration] <br>\n**Output Format:** [Markdown guidance with curl examples and JSON request bodies] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces a single-stream agent workflow for one Pruna p-video-avatar prediction; the generated video is produced by Pruna's API.] <br>\n\n## Skill Version(s): <br>\n1.0.7 (source: server release metadata and SKILL.md frontmatter) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nFile v1.0.7:skill.manifest.json\n\n{\n  \"references\": []\n}\n\nArchive v1.0.6: 15 files, 44731 bytes\n\nFiles: README-INSTALL.md (934b), references/agent-safety.md (2037b), references/api-credentials.md (3064b), references/generation-diversity.md (25978b), references/generation-quality-checklists.md (10290b), references/p-video-avatar-quality-checklist.md (2929b), references/pruna-api.md (4818b), references/random-seed-ritual.md (4011b), references/realistic-persona-example-prompt.md (6724b), references/realistic-persona-showcase.md (22819b), references/scene-anchor-triple.md (10727b), skill-card.md (3181b), skill.manifest.json (300b), SKILL.md (13728b), _meta.json (133b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: p-video-avatar\ndescription: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\nlicense: MIT\nmetadata:\n  version: \"1.0.6\"\n  pruna_model: p-video-avatar\n---\n\n## Shared generation policy\n\n<!-- shared-generation-policy -->\n\nBefore any paid `POST /v1/predictions`:\n\n1. **[Random seed ritual](./references/random-seed-ritual.md)** — always first; derive axes via sum-mod.\n2. **[Generation diversity](./references/generation-diversity.md)** — explicit prompts; rotate ≥2 scenario axes per session.\n3. **[Quality checklists](./references/generation-quality-checklists.md)** — open output files and judge pass/fail before advancing.\n\n# p-video-avatar (Pruna)\n\nTalking-head video from one image plus **either** `voice_script` **or** `audio` (if both, audio wins). Full parameters: [P-Video-Avatar (Pruna docs)](https://docs.pruna.ai/en/stable/docs_pruna_endpoints/performance_models/p-video-avatar.html).\n\n**Dynamic personas & scenarios:** [realistic-persona-showcase.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/realistic-persona-showcase.md) · examples: [example-prompt.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/realistic-persona-example-prompt.md)\n\nShared HTTP patterns: [pruna-api.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/pruna-api.md) (upload, [poll](#poll), [download](#download))\n\n## HTTP (curl)\n\n### Upload portrait\n\n```bash\ncurl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\"\n```\n\nUse `urls.get` as `input.image`.\n\n### Create (async — recommended)\n\nSee **Example: async** below. Poll and download: [pruna-api.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/pruna-api.md#poll).\n\n## Before generating\n\n**Data handling:** follow [agent-safety.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/agent-safety.md) before any upload or `POST /v1/predictions` — media leaves the local environment; confirm output paths; never put API keys in prompts or subagent briefs.\n\nFollow [avatar-single-scene](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-single-scene/skills/avatar-single-scene/SKILL.md) or [avatar-multi-scene](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-multi-scene/skills/avatar-multi-scene/SKILL.md): **[generation diversity](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/generation-diversity.md)** first, then **natural human `voice_script`**, **realistic conversational `voice_prompt`**, **per-scene dynamic `video_prompt`**, **locked hero plate URL**, **one fixed `voice` per recurring character**, **confirm `voice_language` with the user** (examples that use `English (US)` are illustrative only), **explicit user confirmation** before any **`POST /v1/predictions`**, then emit and run the agreed generation steps.\n\nWhen calling the model directly for a small experiment: **random seed ritual (SSoT)** first, then confirm **`image`** URL (approved still from `/v1/files`), exact **`voice_script`**, **`voice`** / **`voice_language`**, **`voice_prompt`** (human delivery—not script text), **`video_prompt`** (camera/motion), and **`resolution`** with the user. Run [p-video-avatar-quality-checklist.md](./references/p-video-avatar-quality-checklist.md) on stills and outputs.\n\n## Dynamic realistic personas (production)\n\nA believable avatar needs **three layers** — not a static face on the default motion prompt:\n\n1. **Slop-gated still** — from **`p-image`** / **`p-image-edit`** / optional **`p-image-try-on`**; **any medium** (photoreal, cel anime, clay, CG 3D) with mouth visible; diverse cast, angle, and setting per [realistic-persona-showcase.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/realistic-persona-showcase.md)\n2. **Human voice** — natural **`voice_script`** + short realistic **`voice_prompt`** (never brochure copy in either field)\n3. **Unique motion per clip** — distinct **`video_prompt`** per scene (angle, gesture, glance, handheld vs dolly). **Do not** ship multi-scene reels where every row uses `medium close-up, gentle dolly push-in`\n\n**Stylized hosts (anime, clay, 3D):** same mouth-visibility gate; match **`voice_prompt`** and **`video_prompt`** energy to the style (*anime*: slightly more expressive motion; *documentary*: restrained). Cross-style reels need **separate hero stills per `visual_style_tag`** — do not edit photoreal into anime from one anchor.\n\n**Upstream plate quality caps avatar quality.** Regenerate mushy or synthetic stills before avatar. For fashion UGC: photoreal **`p-image`** → **`p-image-try-on`** → slop gate → avatar with same approved plate URL.\n\nMulti-scene: pair each clip’s **`video_prompt`** with a matching **`p-image-edit`** still (background/angle delta only). See [avatar-multi-scene/prompt-templates.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/avatar-multi-scene/prompt-templates.md) scene table.\n\n**Multi-scene:** after confirmation, create **all** avatar jobs **in parallel** (async, no `Try-Sync`); batch-poll. Prefer **one subagent per clip** — see [parallel-execution.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/parallel-execution.md).\n\n## Realistic human voice (defaults for social / founder content)\n\n| Field | Guidance |\n|-------|----------|\n| **`voice_script`** | Speakable copy: contractions, short sentences, light fillers (*\"Hey —\"*, *\"right?\"*). Avoid brochure language. |\n| **`voice_prompt`** | How they *sound*: *\"Natural conversational tone like a founder on LinkedIn, relaxed pacing, real pauses, honest not salesy.\"* Never paste product names or script lines here. |\n| **`video_prompt`** | **Unique per clip** — angle, push-in, gesture, setting motion, glance beats. Never copy one string across a multi-scene reel. Default `The person is talking.` is quick-test only. |\n| **`seed`** | Optional API reproducibility only — pass **`api_seed`** when user locks an integer. Ritual string is **not** passed to API. |\n\n**Motion-template use case (for `p-video-animate` beats):** When this model generates a **source motion video**, prompts must explicitly request **speaking** — `clear lip movement`, explain gestures, `speaks directly to camera`. Motion-source stills need `mouth clearly visible ready to speak`. See [animate-beats.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/avatar-multi-scene/animate-beats.md).\n\nTemplates and good/bad pairs: [avatar-multi-scene/prompt-templates.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/avatar-multi-scene/prompt-templates.md).\n\n## Field names (JSON)\n\nPruna P-API uses **snake_case** in `input`: `voice_script`, `video_prompt`, `voice_prompt`, `voice_language`. Some other products use camelCase; map accordingly.\n\n## Required input\n\n- `image` (string URL to jpg/jpeg/png/webp)\n\nPlus **one of**:\n\n- `voice_script` + optional `voice`, `voice_prompt`, `voice_language`, `video_prompt`, `resolution`, or\n- `audio` (URL to flac/mp3/wav)\n\n## Common optional fields\n\n- `voice` (default `Zephyr (Female)`); see model doc for full voice list\n- `resolution`: `720p` (default) or `1080p`\n- `video_prompt` (default `The person is talking.`)\n- `voice_prompt` (style / tone; keep short—can leak into performance if too verbose)\n- `seed`, `disable_safety_filter`, `disable_prompt_upsampling`\n- `negative_prompt` + `negative_prompt_strength` — **experimental** text/overlay suppression (see below)\n\n## Negative prompt (suppress on-screen text)\n\nPruna exposes **experimental** negative prompting on `p-video-avatar` to reduce burned-in subtitles, captions, and other text artifacts — especially when the start frame came from a still that tempted the model toward labels or signage.\n\n| Field | Default | Rule |\n|-------|---------|------|\n| `negative_prompt` | `\"\"` | Comma-separated elements to **suppress** — not things you want in frame |\n| `negative_prompt_strength` | `0` | **Both** must be set: non-empty prompt **and** strength **> 0**, or the API ignores them |\n\n**Starter `negative_prompt` (text triggers):**\n\n```text\nsubtitles, captions, on-screen text, burned-in text, watermark, logo, typography, letters, words, readable signage, UI overlay, lower third, chyron, title card, price tag, packaging label, menu text\n```\n\nStart `negative_prompt_strength` around **0.3–0.4** and tune per asset. Higher values can drift identity, motion, or background — increase gradually.\n\n**Still-side prevention (primary):** positive-only still lines (`plain unmarked walls`, `unprinted props`) — never `no text` or `avoid signage` in creative prompts. `negative_prompt` on the API is a **suppression token list** (nouns), not creative wording. Use it as a safety net, not a substitute for clean stills.\n\n**Workflow plans:** interactive-explainer runner applies defaults from `plan.defaults.avatar_negative_prompt` / `avatar_negative_prompt_strength`, with optional per-scene overrides (`negative_prompt`, `negative_prompt_strength`). Helper: [`p_video_avatar_payload.py`](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/_shared/scripts/p_video_avatar_payload.py).\n\n**Disable for a scene:** set `\"negative_prompt_strength\": 0` on that scene row.\n\n```json\n\"defaults\": {\n  \"avatar_negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n  \"avatar_negative_prompt_strength\": 0.35\n}\n```\n\n## Example: async (recommended — use for all production)\n\nOmit `Try-Sync`. For multiple clips, **create all jobs in parallel**, then batch-poll every `get_url`. See [parallel-execution.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/parallel-execution.md).\n\nComplete the [random seed ritual](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/random-seed-ritual.md) (SSoT) before writing prompts. Omit `seed` from API `input` unless the user supplied **`api_seed`**.\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\",\n      \"negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n      \"negative_prompt_strength\": 0.35\n    }\n  }'\n```\n\n`voice_language` in examples is illustrative — confirm locale with the user ([agent-safety.md](https://github.com/PrunaAI/pruna-skills/tree/main/references/policies/agent-safety.md)).\n\n## Example: sync (single quick test only)\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while. Sub-second images, video in seconds, and it actually feels usable in a real workflow.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — like a founder on LinkedIn, relaxed pacing, real pauses, honest not salesy.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in, natural head motion, warm confident energy\"\n    }\n  }'\n```\n\n## Example: uploaded narration (scene anchor triple — avatar variant)\n\nGenerate [Gemini TTS](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/gemini-3.1-flash-tts/skills/gemini-3.1-flash-tts/SKILL.md) → upload to `/v1/files`. Pass as `input.audio` with portrait `image` (and optional `last_frame_image` when the beat has a known end pose). Duration follows audio. See [scene-anchor-triple.md](./references/scene-anchor-triple.md).\n\n```bash\ncurl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/PORTRAIT_START\",\n      \"last_frame_image\": \"https://api.pruna.ai/v1/files/PORTRAIT_END\",\n      \"audio\": \"https://api.pruna.ai/v1/files/NARRATION_ID\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up, natural head motion matching narration\"\n    }\n  }'\n```\n\nIf both `audio` and `voice_script` are set, **audio wins**.\n\n## Typical next steps\n\n- One-scene avatar workflow: [avatar-single-scene](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-single-scene/skills/avatar-single-scene/SKILL.md)\n- Multi-scene avatar workflow: [avatar-multi-scene](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-multi-scene/skills/avatar-multi-scene/SKILL.md)\n- Pipeline: [pruna-generative-pipeline](https://github.com/PrunaAI/pruna-skills/tree/main/docs/WORKFLOW-RECIPES.md)\n\n## Related workflow\n\nAvatar + animate reels: [avatar-multi-scene](https://github.com/PrunaAI/pruna-skills/tree/main/plugins/avatar-multi-scene/skills/avatar-multi-scene/SKILL.md) — slider script: [`generate_video_comparison.py`](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/_shared/scripts/generate_video_comparison.py).\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"p-video-avatar\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1784235593023\n}\n\nFile v1.0.6:references/agent-safety.md\n\n# Agent safety (data, credentials, locale)\n\nRequired before the first paid generation call (`POST /v1/predictions`, Replicate prediction, or file upload to Pruna/Replicate). Link from tool and workflow skills that transmit media.\n\n## Privacy / external transmission\n\nLocal images, audio, scripts, and portraits are **uploaded to remote APIs** (primarily `https://api.pruna.ai/`; Replicate for TTS/song/bed/WhisperX). Uploads may include biometric-like portraits, personal voice, or copyrighted material.\n\n- Get **explicit user acknowledgment** before the first upload or prediction in a session (or when new media is introduced).\n- Do **not** use third-party likenesses or voices without the user’s confirmation that they have consent.\n- Tell the user that content leaves the local environment and is processed/stored remotely per the provider’s terms.\n\n## Credentials\n\n- Read `PRUNA_API_KEY` / `REPLICATE_API_TOKEN` from the **host environment** only (shell / `.env` — never commit).\n- **Never** embed keys in prompts, chat, manifests, plan JSON, logs, or subagent task text.\n- Prefer the **parent agent** to own API calls. Do not fan credentials across parallel subagents unless the host documents isolated secret injection.\n- If a key is missing, stop and use the templates in [api-credentials.md](./api-credentials.md).\n\n## Local disk\n\nDownloads (`curl -o …`, runners writing under an output dir) **create or overwrite** local files. Confirm the output path with the user before writing; avoid clobbering unrelated paths.\n\n## Locale and voice\n\n- Confirm **`voice_language`** (and voice preset) with the user before avatar/TTS jobs.\n- Examples that use `English (US)` are **illustrative only** — not a silent default override of user locale.\n\n## Related\n\n- [api-credentials.md](./api-credentials.md) — signup + header rules\n- [pruna-api.md](./pruna-api.md) — upload / poll / download\n- [staged-generation-gate.md](https://github.com/PrunaAI/pruna-skills/tree/main/policies/staged-generation-gate.md) — approval phases\n\nFile v1.0.6:references/api-credentials.md\n\n# API credentials (Pruna + Replicate)\n\n**Agent rule:** Before any `POST /v1/predictions`, Replicate prediction, or paid runner — check env vars. If a required key is **missing or empty**, **stop** and tell the user how to sign up. Do not guess, mock, or skip with placeholder keys.\n\n## Pruna P-API\n\n| | |\n|--|--|\n| **Env var** | `PRUNA_API_KEY` |\n| **Header** | `apikey: ${PRUNA_API_KEY}` (not `Authorization: Bearer`) |\n| **Sign up / get key** | [Pruna dashboard](https://dashboard.pruna.ai/) |\n| **Docs** | [Quickstart](https://docs.api.pruna.ai/guides/quickstart) · [pruna-api.md](./pruna-api.md) |\n\n**Used by:** all `p-image*`, `p-video*` tool skills and Pruna workflow runners.\n\n### If `PRUNA_API_KEY` is missing — agent message template\n\n> Pruna generation needs an API key. Sign up or sign in at **[dashboard.pruna.ai](https://dashboard.pruna.ai/)**, create an API key, then set:\n>\n> ```bash\n> export PRUNA_API_KEY=\"your_key_here\"\n> ```\n>\n> Add that to your shell profile or project `.env` (never commit the key). Reply when it’s set and we can continue.\n\n## Replicate\n\n| | |\n|--|--|\n| **Env var** | `REPLICATE_API_TOKEN` |\n| **Header** | `Authorization: Bearer ${REPLICATE_API_TOKEN}` |\n| **Sign up / get token** | [Replicate API tokens](https://replicate.com/account/api-tokens) ([sign in](https://replicate.com/signin) first if needed) |\n| **Docs** | [replicate-api.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/replicate-api/SKILL.md) |\n\n**Used by:** `music-2.5`, `gemini-3.1-flash-tts`, `stable-audio-2.5`, `whisperx`, and workflow beds/TTS/song phases.\n\n### If `REPLICATE_API_TOKEN` is missing — agent message template\n\n> This step uses Replicate (song, TTS, transcription, or background bed). Create a token at **[replicate.com/account/api-tokens](https://replicate.com/account/api-tokens)**, then set:\n>\n> ```bash\n> export REPLICATE_API_TOKEN=\"r8_...\"\n> ```\n>\n> Reply when it’s set and we can continue.\n\n## Which key does this job need?\n\n| Task | Keys required |\n|------|----------------|\n| `p-image`, `p-image-edit`, `p-image-upscale`, `p-image-try-on` | `PRUNA_API_KEY` |\n| `p-video`, `p-video-avatar`, `p-video-animate`, `p-video-replace` | `PRUNA_API_KEY` |\n| Music 2.5 song generation | `REPLICATE_API_TOKEN` |\n| Gemini TTS narration | `REPLICATE_API_TOKEN` |\n| Stable Audio background bed | `REPLICATE_API_TOKEN` |\n| WhisperX transcription | `REPLICATE_API_TOKEN` |\n| Music video / explainer (full pipeline) | **Both** — Pruna for stills/video; Replicate for song/TTS/bed as needed |\n\nWhen only one key is missing, suggest **only** that provider’s signup link — not both.\n\n## Security\n\n- Never print full keys in chat or commit them to git.\n- `.env` is gitignored; prefer env vars over hardcoding in plans or manifests.\n- Never embed keys in prompts, manifests, plan JSON, logs, or **subagent task text**.\n- Prefer the **parent agent** to own API calls; do not fan credentials across parallel subagents unless the host documents isolated secret injection.\n- Full rules: [agent-safety.md](./agent-safety.md).\n\nFile v1.0.6:references/generation-diversity.md\n\n# Generation diversity (all models)\n\nOne checklist so **every** Pruna output — **`p-image`**, **`p-video`**, try-on, avatar, replace, animate — is as **diverse** as the brief allows. Details live in linked docs; this page is the agent shortcut.\n\nUse the **full** checklist here for every generation.\n\n## Contents\n\n- [Three steps (every job)](#three-steps-every-job)\n- [Explicit prompt structure](#explicit-prompt-structure-required)\n- [Text & typography by model](#text--typography-by-model)\n- [SSoT axis derivation](#ssot-axis-derivation-sum-mod)\n- [Scenario axes](#scenario-axes-rotate-across-outputs)\n- [Render categories](#render-categories)\n- [Crowded scenes](#crowded-scenes-p-image)\n- [Body type spread](#body-type-spread)\n- [Location-matched crowds](#location-matched-crowds)\n- [Group classes](#group-classes--courses)\n- [Framing & camera](#framing--camera)\n- [Scene spice](#scene-spice-when-it-fits)\n- [Photoreal anti-slop](#photoreal-anti-slop-neon--stylized-briefs)\n- [Aspect ratio](#aspect-ratio-multi-example-sets)\n- [By model](#by-model-minimum-diversity)\n- [When not to maximize diversity](#when-not-to-maximize-diversity)\n- [Anti-patterns](#anti-patterns)\n\n## Three steps (every job)\n\n1. **[Random seed ritual](./random-seed-ritual.md) (SSoT)** — **always first**, before the prompt. Generate a fresh random string, **state it in the turn**, derive axes via [sum-mod](#ssot-axis-derivation-sum-mod). **Do not** pass the ritual string to API `seed`. **One new ritual string per independent generation**; reuse only on same-brief slop retry.\n2. **Write an [explicit prompt](#explicit-prompt-structure-required)** — name specific people, animals, objects, actions, setting, and camera/light. Add text/typography only when the brief needs it — see [text rules by model](#text--typography-by-model).\n3. **Diversify the scenario row** — change at least **two axes** from the previous output in the same session (cast, setting, camera, **`render_category_tag`**, **aspect_ratio**, creatures, props, … — unless user asked for continuity).\n4. **Log** — `ritual_seed`, axes chosen, prediction id (manifest or turn text).\n\n## Explicit prompt structure (required)\n\n**Vague prompts produce generic AI slop.** After the ritual and axis picks, every still prompt must be **specific and dynamic** — concrete nouns, frozen actions, named places. Prefer playground/creative briefs over marketing abstractions.\n\n**Name at least four of these per prompt (log tags in manifest):**\n\n| Clause | Log as | Agent must specify |\n|--------|--------|-------------------|\n| **People** | `cast_descriptor` | Named role + age band + expression (`fearless grandmother in floral apron`, not `woman`) |\n| **Animals / creatures** | `creature_tag` | Species + attitude (`otter DJ`, `luna moth knight`, `VIP anglerfish`) |\n| **Objects** | `prop_tag` | Concrete props (`vinyl record`, `chrome rocket sled`, `velvet rope`, `tiny boombox`) |\n| **Action** | `action_tag` | Frozen mid-motion verb (`scratching vinyl`, `lassoing runaway taco truck`, `cape mid-swing`) |\n| **Duration** | `duration_tag` | When timing matters (`1970s`, `8PM`, `45-minute spin class`, `Saturday-morning cartoon`) |\n| **Setting** | `setting_tag` | Named place + era + materials (`packed 1970s roller rink`, `abyss-depth jellyfish nightclub`, `Monument Valley dust storm`) |\n| **Text / typography** | `text_spec` | Only when brief needs readable type — exact strings + surface (see [by model](#text--typography-by-model)) |\n| **Camera + light** | `camera_tag`, `lighting_tag` | `fish-eye lens`, `tilt-shift macro`, `teal-magenta cinematic`, `golden hour sparkle` |\n| **Style** | `render_category_tag` | Medium (`cel-shaded anime`, `baroque oil painting`, `ink-wash storybook`, `photoreal documentary`) |\n\n**Template:**\n\n```text\n{people and/or creatures} {action} with/at {specific objects} in {named setting},\n{style or era cues}, {camera_tag}, {lighting_tag}\n```\n\n**Good examples (dynamic / specific):**\n\n```text\nDisco ball reflections on an otter DJ scratching vinyl at a packed 1970s roller rink,\nfish-eye lens, glitter confetti mid-air, funky energy\n```\n\n```text\nBioluminescent jellyfish nightclub at abyss depth, VIP anglerfish in sunglasses at velvet rope,\nteal-magenta cinematic lighting\n```\n\n```text\nCorgi cowboy lassoing a runaway taco truck through Monument Valley dust storm,\npulp western poster energy, dynamic diagonal composition\n```\n\n**Anti-pattern:** `cool cyberpunk portrait, neon vibes` — no subject, no action, no place. **Right:** name who, what they're doing, where, with which props.\n\n## Text & typography by model\n\n**Never use negation to suppress text** — `no text`, `without signs`, `no typography` often **invoke** the thing you are trying to avoid. Describe surfaces positively when you want blank walls (`plain unmarked walls`, `matte unprinted props`).\n\n| Model | Prompt upsampling | Typography in prompt |\n|-------|-------------------|----------------------|\n| **`p-image`** | **No** effective prompt upsampling | **Avoid** dense readable-type requests unless user explicitly wants `text_rendering`. Short prompts; skip `readable`, `legible`, `headline`, multi-sign lists — they drift to gibberish. Collage triggers still apply: [interactive-explainer-prompts.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/interactive-explainer-prompts.md) (`flat lay`, `grid`, `collage`, …). |\n\n**`p-image` text hygiene:** prefer scenes without copy. If a screen appears: `monitor soft colorful blur glow only` — not legible UI unless the user explicitly asked for readable text (then simplify the brief or drop copy).\n\n**Collage triggers (all T2I models):** still avoid `flat lay`, `packshot`, `grid`, `collage`, `montage`, `contact sheet`, `split`, `before and after` — use `single frame`, `one camera angle` instead. Full table: [interactive-explainer-prompts.md](https://github.com/PrunaAI/pruna-skills/tree/main/workflows/interactive-explainer-prompts.md).\n\n## SSoT axis derivation (sum-mod)\n\nAfter stating `ritual_seed` (random string), derive prompt choices — sum Unicode/ASCII char codes, mod list length:\n\n```text\nRATIOS = [\"1:1\", \"16:9\", \"9:16\", \"4:3\", \"3:4\", \"3:2\", \"2:3\"]\naspect_ratio  ← RATIOS[ sum(codes(ritual_seed)) % 7 ]\ncamera_tag    ← camera_tags[ sum(codes(ritual_seed[0:4])) % len(camera_tags) ]\nrender_tag    ← render_tags[ sum(codes(ritual_seed[4:8])) % len(render_tags) ]\n```\n\n`camera_tags` and `render_tags` — see [framing & camera](#framing--camera) and [render categories](#render-categories). State derived picks in the turn (*\"Aspect ratio: 16:9, camera: over-shoulder\"*).\n\n**User `api_seed`:** when the user supplies an integer for reproducibility, pass it as `input.seed` — separate from the ritual string.\n\n## Scenario axes (rotate across outputs)\n\n| Axis | Vary with | Applies to |\n|------|-----------|------------|\n| **Cast** | age, ethnicity, gender, archetype, **hairstyle**, **body type** (rotate — see [below](#body-type-spread)), disability aids (wheelchair, cane), visible age band twice in prompt | all person/content gens |\n| **Medium** | `render_category_tag` — rotate across [render categories](#render-categories) | `p-image`, avatar stills |\n| **Setting** | unique `setting_tag` — specific room/street/venue/era, not repeat adjacent rows | stills + video plates |\n| **Camera** | `camera_tag` — rotate across [framing ladder](#framing--camera); never default MC facing lens | stills, `video_prompt` |\n| **Lighting** | `lighting_tag` — golden hour · neon · overcast · practical | stills, video mood |\n| **Motion** | unique `video_prompt` per clip | `p-video`, `p-video-avatar`, animate |\n| **Voice** | natural `voice_script`; one `voice` preset per character | avatar, TTS-led video |\n| **Seed** | new ritual string per **independent** job; reuse only on same-brief slop retry | all generation skills |\n| **Aspect ratio** | different `aspect_ratio` per independent still in a batch — see [below](#aspect-ratio-multi-example-sets) | `p-image`, `p-image-edit` |\n| **Crowd density** | layered background population + activity cues — see [below](#crowded-scenes-p-image) | `p-image` plates with busy worlds |\n\nFull style/camera/lighting ladders: [visual-variety-bible.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/visual-variety-bible.md). Persona + try-on bar: [realistic-persona-showcase.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/realistic-persona-showcase.md).\n\n## Render categories\n\nRotate **`render_category_tag`** (and log it) so diversity batches cover more than photoreal portraits or anime. Category families below mirror arena leaderboards — pick a **different tag per independent output**.\n\n**Random seed ritual still applies** to every generation in [step 1](#three-steps-every-job); categories describe *what* to vary, not *when* to pick `seed`.\n\n### Text-to-image — `p-image`\n\nSources: [Arena text-to-image](https://arena.ai/leaderboard/text-to-image) · [AA text-to-image](https://artificialanalysis.ai/image/leaderboard/text-to-image)\n\n**Unified `render_category_tag`** (Arena bucket = tag — pick one per still):\n\n`product_branding_commercial` · `3d_imaging_modeling` · `cartoon_anime_fantasy` · `photoreal_cinematic` · `art` · `portraits` · `nature_environment` · `animals_creature` · `text_rendering`\n\n| Tag | Typical prompt lane |\n|-----|---------------------|\n| `product_branding_commercial` | single product on seamless studio, person + product in named setting, showroom (not `flat lay` / `packshot` words) |\n| `3d_imaging_modeling` | CG film still, clay/stop-motion, rounded 3D forms |\n| `cartoon_anime_fantasy` | cel anime, fantasy character, crowded stylized world |\n| `photoreal_cinematic` | documentary crowd scenes, film-scale wide, urban march |\n| `art` | oil, watercolor, gouache, charcoal, flat vector |\n| `portraits` | single-subject editorial or documentary portrait (crowd optional behind) |\n| `nature_environment` | landscape-wide; subject small in frame |\n| `animals_creature` | named species + handler; crowded market/park when it fits |\n| `text_rendering` | **user-requested only** — otherwise no readable text |\n\nLog `render_category_tag` in manifest. Combine with [crowded scenes](#crowded-scenes-p-image), [body type](#body-type-spread), and [scene spice](#scene-spice-when-it-fits) when the brief allows.\n\n### Image edit — `p-image-edit`\n\nSources: [Arena image edit](https://arena.ai/leaderboard/image-edit) · [AA image editing](https://artificialanalysis.ai/image/leaderboard/editing)\n\nArena modalities: `single_image_edit` · `multi_image_edit`\n\nEdit diversity tags: `background_swap` · `relight` · `wardrobe_on_plate` · `pose_or_angle_delta` · `multi_ref_composite` · `region_inpaint`\n\nVary **instruction** and **what changes** while identity URL stays fixed on character arcs.\n\n### Text-to-video — `p-video`\n\nSources: [Arena text-to-video](https://arena.ai/leaderboard/text-to-video) · [AA text-to-video](https://artificialanalysis.ai/video/leaderboard/text-to-video)\n\nMotion/scene tags: `character_performance` · `landscape_broll` · `urban_street` · `product_demo` · `abstract_mood` · `crowd_scene` · `dialogue_beat`\n\nRotate `video_prompt` grammar, start plate world, and `camera_tag` per clip.\n\n### Image-to-video — `p-video` (+ plate upload)\n\nSources: [Arena image-to-video](https://arena.ai/leaderboard/image-to-video) · [AA image-to-video](https://artificialanalysis.ai/video/leaderboard/image-to-video)\n\nPlate-driven tags: `animate_hero_still` · `camera_move_on_plate` · `environmental_parallax` · `avatar_lip_sync` · `hands_or_prop_motion`\n\nMatch motion to what the **still** already shows — do not contradict the plate.\n\n### Video edit — `p-video-replace` (and edit-style video)\n\nSource: [Arena video edit](https://arena.ai/leaderboard/video-edit)\n\nEdit tags: `face_recast` · `wardrobe_swap` · `accessory_swap` · `background_replace` · `object_in_hand_swap` · `style_transfer_on_subject`\n\nSame-gender / identity rules for talking-head beats still apply — see [visual-variety-bible.md](https://github.com/PrunaAI/pruna-skills/tree/main/shared/visual-variety-bible.md).\n\n## Crowded scenes (`p-image`)\n\nWhen the brief asks for **busy**, **crowded**, or **lively** worlds — not a lone subject on a blank wall — stack density in the prompt:\n\n1. **Three depth layers** — sharp foreground subject · readable midground faces/hands/props · landmark bokeh (stage, temple, billboards, ferris wheel).\n2. **Named population count** — `hundreds of pedestrians`, `dozens of faces in midground`, `20+ tiny clay figures` (stylized sets need explicit counts; models under-deliver on vague \"busy\").\n3. **Activity verbs** — raised hands, umbrellas open, food steam, confetti, market haggling, commuters pressed shoulder-to-shoulder.\n4. **Shallow DOF + single subject** — `single subject one frame` keeps one identity readable while the crowd stays behind them.\n5. **Age & angle lock** — repeat age band twice (`woman in her late 50s, visibly fifty`) and use [framing & camera](#framing--camera) — models drift younger, center-frame, and front-facing without it.\n\n| Crowd family | Density cues |\n|--------------|--------------|\n| **Urban rush** | crosswalk stripes, wet reflections, umbrellas, billboard bokeh |\n| **Festival / parade** | confetti, raised hands, costume layers, smoke haze |\n| **Market / bazaar** | overflowing stalls, hanging goods, steam, price tags as color blobs |\n| **Transit crush** | strap hangers, door windows, blurred faces pressed together |\n| **Stylized miniature** | counted clay/figurine shoppers (`20+`), cramped aisle, stacked crates |\n| **Institutional / ER** | framed oil portraits on beige walls, triage number board, wall sanitizer, vending machine, scuffed linoleum, TV blur, mixed-age seated patients |\n| **Urban march / protest** | named city, local landmarks, multiracial crowd cues separate from hero — see [location-matched crowds](#location-matched-crowds) |\n| **Group fitness class** | class name + duration, mixed-gender riders, realistic warm studio light — see [group classes](#group-classes--courses) |\n\n**Anti-pattern:** one blurred smear behind a portrait — name **what** the crowd is doing and **where** layers sit. **Institutional** scenes (ER, airport, classroom) need `benches full`, `standing room only`, or `shoulder-to-shoulder` — otherwise models default to a quiet hallway. Name **set dressing** too: framed portraits on walls, triage number board, vending machine glow, scuffed linoleum — generic mint corridors read AI-empty.\n\n## Body type spread\n\nModels default to one “average fitness” body. In diversity batches, **name build on the hero and vary background bodies**:\n\n| Build tag | Prompt cue |\n|-----------|------------|\n| **Plus-size / curvy** | `plus-size`, `curvy build`, `full-figured` |\n| **Athletic / muscular** | `broad shoulders`, `muscular arms`, `athletic build` |\n| **Petite / slim** | `petite frame`, `slim build`, `narrow shoulders` |\n| **Tall / lanky** | `tall and lanky`, `6-foot frame`, `long limbs` |\n| **Stocky / heavyset** | `stocky build`, `heavyset`, `barrel chest` |\n| **Lean wiry** | `lean wiry frame`, `weathered thin face` |\n\n**Rule:** rotate build across independent panels in a session — not every hero “athletic build”. Background crowd should mix ages **and** silhouettes (`elderly thin woman`, `heavyset man`, `pregnant woman seated`, `toddler on lap`).\n\n## Location-matched crowds\n\nWhen the prompt names a **real city or country**, background faces must match that place’s **demographic mix** — not clone the hero’s ethnicity.\n\n| Wrong | Right |\n|-------|--------|\n| South Asian hero + only South Asian protesters in “New York” | Hero is one identity; crowd explicitly `multiracial NYC march — Black, Latino, white, East Asian protesters` |\n| “Dense city march” with no geography | Name city + 3–4 crowd ethnicity cues + local landmarks (yellow cabs, art deco towers, steam vent) |\n| Festival in Lagos with only Nordic faces | Match crowd to `setting_tag` region |\n\n**Prompt pattern:** lock hero cast in sentence 1; sentence 2 lists **four+ distinct background silhouettes** unrelated to hero ethnicity; sentence 3 names **local landmarks** so the plate cannot read as generic stock.\n\n**Applies to:** protests, airports, transit, street markets, sports crowds — any scene where “crowded” implies a real place.\n\n## Group classes & courses\n\nWhen the scene is a **class, workshop, or team activity**, name the **course type** and **who else is in the room** — models default to monochrome crowds (all men, all one age).\n\n| Specify | Example cues |\n|---------|----------------|\n| **Class type** | `45-minute evening spin class`, `beginner yoga flow`, `HIIT bootcamp circuit` |\n| **Room realism** | warm overhead track lights, mirror wall, rubber floor, water bottles, towels — **not** magenta-cyan neon strips unless brief is explicitly nightclub |\n| **Gender mix** | hero is one person; crowd `mixed-gender class — women with ponytails, men with beards, nonbinary cyclist` |\n| **Body + age mix** | plus-size rider, petite woman, athletic man, woman in her 50s — same as [body type spread](#body-type-spread) |\n\n**Lighting rule for fitness:** real boutique studios are **dim warm overhead** or **single spotlight on instructor** — avoid `split gel`, `neon LED strips`, `magenta-cyan` on photoreal gym plates; those read AI-fake.\n\n**Prompt pattern:** `Documentary fitness portrait` + class name + instructor on bike at front + `20+ mixed-gender cyclists` with 3–4 named background silhouettes + realistic room props.\n\n## Framing & camera\n\nModels default to **centered subject, eyes at camera**. In diversity batches, **rotate `camera_tag` and frame placement** every row — log both in manifest.\n\n**Gaze rule:** `glance off-lens`, `profile`, `back to camera`, `looking down at [prop]`, or `watching the crowd` — **not** `facing camera` or `looking at viewer` unless the user asked for a direct-address avatar plate.\n\n**Placement rule:** name where the subject sits in frame — `left third`, `right third`, `lower right corner`, `edge of frame`, `small in environmental wide` — **not** centered mugshot every time.\n\n| `camera_tag` | Prompt cue |\n|--------------|------------|\n| **Overhead / bird's eye** | `overhead aerial view`, `top-down`, `drone shot looking straight down` |\n| **High corner** | `high angle from corner`, `surveillance-style downward angle` |\n| **Worm's eye** | `ground-level worm's eye`, `camera on pavement` |\n| **Crane-down** | `slight high angle crane-down` |\n| **Over-shoulder** | `over-shoulder from behind`, `seen past someone's shoulder` |\n| **Profile / side** | `profile side angle`, `walking across frame` |\n| **From behind** | `back to camera`, `three-quarter from behind` |\n| **Dutch tilt** | `dutch tilt` — tension scenes only |\n| **Through crowd** | `subject visible through gap in crowd`, `foreground heads out of focus` |\n\n**Batch rule:** no two adjacent stills share the same `camera_tag` **and** placement corner (e.g. don't do `left third` twice in a row).\n\nAvatar / lip-sync exception: face must stay readable and mouth visible — use `slight angle from the side` or `three-quarter`, still **off-center** and **off-lens gaze** when not delivering VO to camera.\n\n## Scene spice (when it fits)\n\nDefault plates are person + crowd + place. Add **one or two specific attributes** when the setting naturally supports them — not random clutter on every row.\n\n| Spice type | When to add | Example |\n|------------|-------------|---------|\n| **Animals** | setting implies them | dog park → `golden retriever on leash`; harbor → `seagulls overhead`; rooftop → `pigeons on water tower`; parade → `police horse midground` |\n| **Held / worn props** | role or weather | `red umbrella tucked under arm`, `wire beekeeper smoker`, `chipped ceramic mug`, `sample strawberry basket` |\n| **Micro-detail** | one th\n\nArchive v1.0.2: 16 files, 47726 bytes\n\nFiles: README-INSTALL.md (373b), references/agent-safety.md (2049b), references/api-credentials.md (3069b), references/generation-diversity.md (25952b), references/generation-quality-checklists.md (10487b), references/p-video-avatar-quality-checklist.md (2870b), references/parallel-execution.md (7808b), references/pruna-api.md (4704b), references/random-seed-ritual.md (4019b), references/realistic-persona-example-prompt.md (6714b), references/realistic-persona-showcase.md (22678b), references/scene-anchor-triple.md (10791b), skill-card.md (2983b), skill.manifest.json (429b), SKILL.md (12716b), _meta.json (133b)","readmeExcerpt":"Skill: p-video-avatar Owner: pruna-ai Summary: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. 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:35:00.026Z | auto p-video-avatar v1.0.14 - Updated SKILL.md to set version to 1.0.14. - Removed skill-card.md from the repository. - ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"curl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\""},{"language":"bash","snippet":"curl -X POST \"https://api.pruna.ai/v1/files\" \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -F \"content=@/path/to/portrait.png\""},{"language":"bash","snippet":"curl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{"},{"language":"bash","snippet":"curl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\",\n      \"negative_prompt\": \"subtitles, captions, on-screen text, watermark, logo, typography, letters, words\",\n      \"negative_prompt_strength\": 0.35\n    }\n  }'"},{"language":"bash","snippet":"curl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{"},{"language":"bash","snippet":"curl -X POST 'https://api.pruna.ai/v1/predictions' \\\n  -H 'Content-Type: application/json' \\\n  -H \"apikey: ${PRUNA_API_KEY}\" \\\n  -H 'Model: p-video-avatar' \\\n  -H 'Try-Sync: true' \\\n  -d '{\n    \"input\": {\n      \"image\": \"https://api.pruna.ai/v1/files/FILE_ID\",\n      \"voice_script\": \"Hey — so we shipped something I've wanted for a while.\",\n      \"voice\": \"Puck (Male)\",\n      \"voice_language\": \"English (US)\",\n      \"voice_prompt\": \"Natural conversational tone — relaxed pacing, real pauses.\",\n      \"resolution\": \"720p\",\n      \"video_prompt\": \"Medium close-up speaking directly to lens, subtle push-in\"\n    }\n  }'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: p-video-avatar\ndescription: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.\nlicense: MIT\nmetadata:\n  version: \"1.0.14\"\n  package: pruna-skills\n  pruna_model: p-video-avatar\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| `generation-diversity` | Use when writing any generative prompt — ritual seed, explicit structure, scenario axes, and quality gates before paid API calls. | `npx skills add PrunaAI/pruna-skills@generation-diversity -y` |\n| `video-prompting` | Use when crafting video or motion prompts for any generative model — dramaturgy, camera, physics-safe motion, frame anchors, and clip chaining. | `npx skills add PrunaAI/pruna-skills@video-prompting -y` |\n| `image-prompting` | Use when crafting still-image prompts for any generative model — composition, identity sheets, edits, try-on, and photoreal personas. | `npx skills add PrunaAI/pruna-skills@image-prompting -y` |\n| `pruna-api` | Use before any Pruna or Replicate HTTP call — credentials, upload/poll/download, parallel batches, and agent safety. | `npx skills add PrunaAI/pruna-skills@pruna-api -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## Agent habit\n\nIn the **first reply**, name `` `p-video-avatar` `` in backticks, confirm `PRUNA_API_KEY` (or stop with signup links from `pruna-api`), then ask for required inputs. Open intake → **`generation-diversity`** clarification intake before the first `POST`. **Multiple talking-head scenes with the same person → redirect to `avatar-multi-scene`** (this skill is one clip only). Draft host motion with **Prompt craft (dynamic + faithful)** — do not paste skill examples.\n\n## Skill boundary\n\nThis skill = **one `p-video-avatar` prediction** per invocation.\n\n**Out of scope (stop and redirect):**\n\n- Several host segments with continuity → `avatar-multi-scene`\n- Multi-scene assembly, concat, or parallel scene batches → workflow skills (`avatar-multi-scene`, `narrated-multi-scene`, …)\n- Silent B-roll / no talking head → `p-video`\n- Motion transfer from a template video → `p-video-animate`\n\n## Prompt craft (dynamic + faithful)\n\n`video_prompt` (and optional `voice_prompt`) must be **fresh per clip** and **faithful to the user's host beat**. Diversity applies to camera nuance and delivery wording — not to changing who speaks or what they say.\n\n| Do | Don't |\n| --- | --- |\n| Ritual seed from `generation-diversity` before drafting; unique `video_prompt` per clip in multi-scene work | Reuse one `video_prompt` string across a reel, or paste this skill's sample (`Medium close-up speaking directly to lens`) when the user asked for something else |\n| Lock portrait identity from `image`; match head motion and pacin"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7cagwf7q3t0cxrgteb7xk0bh81j0eb\",\n  \"slug\": \"p-video-avatar\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1790696100026\n}"},{"path":"skill-card.md","content":"## Description:\n\nGuides an agent in creating a single lip-synced talking-head video from a portrait and a script or narration using Pruna's API.\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 developers use this skill to guide an agent through preparing a portrait, confirming a script or narration, and requesting one speaking-avatar clip.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Runtime installation of unpinned external skills can expand agent behavior beyond the reviewed release.\n\nMitigation: Review and pin or preinstall dependencies; avoid automatically running install commands in sensitive environments.\n\nRisk: Portraits, scripts, and optional narration or voice data are sent to Pruna's API.\n\nMitigation: Confirm the data and intended use with the user before uploading or making a paid request.\n\n## Reference(s):\n\n- [p-video-avatar on ClawHub](https://clawhub.ai/pruna-ai/skills/p-video-avatar)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, API calls]\n\n**Output Format:** [Markdown with bash and JSON examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guides one avatar-video request per invocation; requires a Pruna API key and user-confirmed inputs.]\n\n## Skill Version(s):\n\n1.0.14 (source: ClawHub release 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."},{"path":"skill.manifest.json","content":"{\n  \"references\": []\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. Skill: p-video-avatar Owner: pruna-ai Summary: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. 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:35:00.026Z | auto p-video-avatar v1.0.14 - Updated SKILL.md to set version to 1.0.14. - Removed skill-card.md from the repository. -","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1361,"uniquenessScore":46,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T12:19:48.019Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T12:19:48.019Z","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-10T14:50:43.200Z","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"}]}}}