Prerequisites
Install and load these skills before generating (skip if already in context via @pruna):
| Skill |
Description |
Install |
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 |
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 |
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 |
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 |
Or install the full suite once: npx skills add PrunaAI/pruna-skills@pruna -y
Follow each skill's Before generating / craft sections — do not restate guide content here.
Agent habit
In 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.
Skill boundary
This skill = one p-video-avatar prediction per invocation.
Out of scope (stop and redirect):
- Several host segments with continuity →
avatar-multi-scene
- Multi-scene assembly, concat, or parallel scene batches → workflow skills (
avatar-multi-scene, narrated-multi-scene, …)
- Silent B-roll / no talking head →
p-video
- Motion transfer from a template video →
p-video-animate
Prompt craft (dynamic + faithful)
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.
| Do |
Don't |
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 |
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 |
Use video-prompting dramaturgy — one camera move, physics-safe head motion, mouth visible |
Default The person is talking. for anything beyond a quick test |
Show video_prompt (+ script/voice fields) before POST when wording is not locked |
Silent regen that changes tone, framing, or delivery from the brief |
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.
When NOT to use
Use a different skill instead:
| Skill |
Description |
Install |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
HTTP (curl)
Upload portrait
curl -X POST "https://api.pruna.ai/v1/files" \
-H "apikey: ${PRUNA_API_KEY}" \
-F "content=@/path/to/portrait.png"
Use urls.get as input.image.
Create (async — recommended)
curl -X POST 'https://api.pruna.ai/v1/predictions' \
-H 'Content-Type: application/json' \
-H "apikey: ${PRUNA_API_KEY}" \
-H 'Model: p-video-avatar' \
-d '{
"input": {
"image": "https://api.pruna.ai/v1/files/FILE_ID",
"voice_script": "Hey — so we shipped something I've wanted for a while.",
"voice": "Puck (Male)",
"voice_language": "English (US)",
"voice_prompt": "Natural conversational tone — relaxed pacing, real pauses.",
"resolution": "720p",
"video_prompt": "Medium close-up speaking directly to lens, subtle push-in",
"negative_prompt": "subtitles, captions, on-screen text, watermark, logo, typography, letters, words",
"negative_prompt_strength": 0.35
}
}'
Poll and download: follow pruna-api.
Complete the random seed ritual from generation-diversity before writing prompts — omit seed unless the user supplied api_seed. Confirm voice_language with the user.
For multiple clips: create all jobs in parallel (async, no Try-Sync), then batch-poll.
Create (sync — quick test only)
curl -X POST 'https://api.pruna.ai/v1/predictions' \
-H 'Content-Type: application/json' \
-H "apikey: ${PRUNA_API_KEY}" \
-H 'Model: p-video-avatar' \
-H 'Try-Sync: true' \
-d '{
"input": {
"image": "https://api.pruna.ai/v1/files/FILE_ID",
"voice_script": "Hey — so we shipped something I've wanted for a while.",
"voice": "Puck (Male)",
"voice_language": "English (US)",
"voice_prompt": "Natural conversational tone — relaxed pacing, real pauses.",
"resolution": "720p",
"video_prompt": "Medium close-up speaking directly to lens, subtle push-in"
}
}'
Uploaded narration (audio wins over voice_script)
Generate 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.
curl -X POST 'https://api.pruna.ai/v1/predictions' \
-H 'Content-Type: application/json' \
-H "apikey: ${PRUNA_API_KEY}" \
-H 'Model: p-video-avatar' \
-d '{
"input": {
"image": "https://api.pruna.ai/v1/files/PORTRAIT_ID",
"audio": "https://api.pruna.ai/v1/files/NARRATION_ID",
"resolution": "720p",
"video_prompt": "Medium close-up, natural head motion matching narration"
}
}'
Before generating
- Complete Prerequisites guide reading order (
generation-diversity → video-prompting).
- 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.
- 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.
Negative prompt (experimental — suppress on-screen text)
| Field |
Default |
Rule |
negative_prompt |
"" |
Comma-separated elements to suppress |
negative_prompt_strength |
0 |
Both must be set: non-empty prompt and strength > 0 |
Starter: 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.
Typical next steps
Common follow-ons after this skill:
| Skill |
Description |
Install |
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 |
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 |
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 |
1---2name: p-video-avatar3description: Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo.4license: MIT5---67## Prerequisites89Install and load these skills before generating (skip if already in context via `@pruna`):1011| Skill | Description | Install |12| --- | --- | --- |13| `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` |14| `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` |15| `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` |16| `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` |1718Or install the full suite once: `npx skills add PrunaAI/pruna-skills@pruna -y`1920Follow each skill's **Before generating** / craft sections — do not restate guide content here.2122## Agent habit2324In 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.2526## Skill boundary2728This skill = **one `p-video-avatar` prediction** per invocation.2930**Out of scope (stop and redirect):**3132- Several host segments with continuity → `avatar-multi-scene`33- Multi-scene assembly, concat, or parallel scene batches → workflow skills (`avatar-multi-scene`, `narrated-multi-scene`, …)34- Silent B-roll / no talking head → `p-video`35- Motion transfer from a template video → `p-video-animate`3637## Prompt craft (dynamic + faithful)3839`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.4041| Do | Don't |42| --- | --- |43| 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 |44| 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 |45| Use `video-prompting` dramaturgy — one camera move, physics-safe head motion, mouth visible | Default `The person is talking.` for anything beyond a quick test |46| Show `video_prompt` (+ script/voice fields) before `POST` when wording is not locked | Silent regen that changes tone, framing, or delivery from the brief |4748**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.4950## When NOT to use5152Use a different skill instead:5354| Skill | Description | Install |55| --- | --- | --- |56| `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` |57| `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` |58| `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` |59| `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` |60| `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` |61| `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` |62| `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` |6364## HTTP (curl)6566### Upload portrait6768```bash69curl -X POST "https://api.pruna.ai/v1/files" \70 -H "apikey: ${PRUNA_API_KEY}" \71 -F "content=@/path/to/portrait.png"72```7374Use `urls.get` as `input.image`.7576### Create (async — recommended)7778```bash79curl -X POST 'https://api.pruna.ai/v1/predictions' \80 -H 'Content-Type: application/json' \81 -H "apikey: ${PRUNA_API_KEY}" \82 -H 'Model: p-video-avatar' \83 -d '{84 "input": {85 "image": "https://api.pruna.ai/v1/files/FILE_ID",86 "voice_script": "Hey — so we shipped something I've wanted for a while.",87 "voice": "Puck (Male)",88 "voice_language": "English (US)",89 "voice_prompt": "Natural conversational tone — relaxed pacing, real pauses.",90 "resolution": "720p",91 "video_prompt": "Medium close-up speaking directly to lens, subtle push-in",92 "negative_prompt": "subtitles, captions, on-screen text, watermark, logo, typography, letters, words",93 "negative_prompt_strength": 0.3594 }95 }'96```9798Poll and download: follow `pruna-api`.99100Complete the random seed ritual from `generation-diversity` before writing prompts — omit `seed` unless the user supplied **`api_seed`**. Confirm `voice_language` with the user.101102For multiple clips: create **all** jobs in parallel (async, no `Try-Sync`), then batch-poll.103104### Create (sync — quick test only)105106```bash107curl -X POST 'https://api.pruna.ai/v1/predictions' \108 -H 'Content-Type: application/json' \109 -H "apikey: ${PRUNA_API_KEY}" \110 -H 'Model: p-video-avatar' \111 -H 'Try-Sync: true' \112 -d '{113 "input": {114 "image": "https://api.pruna.ai/v1/files/FILE_ID",115 "voice_script": "Hey — so we shipped something I've wanted for a while.",116 "voice": "Puck (Male)",117 "voice_language": "English (US)",118 "voice_prompt": "Natural conversational tone — relaxed pacing, real pauses.",119 "resolution": "720p",120 "video_prompt": "Medium close-up speaking directly to lens, subtle push-in"121 }122 }'123```124125### Uploaded narration (audio wins over voice_script)126127Generate `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.128129```bash130curl -X POST 'https://api.pruna.ai/v1/predictions' \131 -H 'Content-Type: application/json' \132 -H "apikey: ${PRUNA_API_KEY}" \133 -H 'Model: p-video-avatar' \134 -d '{135 "input": {136 "image": "https://api.pruna.ai/v1/files/PORTRAIT_ID",137 "audio": "https://api.pruna.ai/v1/files/NARRATION_ID",138 "resolution": "720p",139 "video_prompt": "Medium close-up, natural head motion matching narration"140 }141 }'142```143144## Before generating1451461. Complete Prerequisites guide reading order (`generation-diversity` → `video-prompting`).1472. 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.1483. **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.149150### Negative prompt (experimental — suppress on-screen text)151152| Field | Default | Rule |153|-------|---------|------|154| `negative_prompt` | `""` | Comma-separated elements to **suppress** |155| `negative_prompt_strength` | `0` | Both must be set: non-empty prompt **and** strength **> 0** |156157Starter: `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.158159## Typical next steps160161Common follow-ons after this skill:162163| Skill | Description | Install |164| --- | --- | --- |165| `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` |166| `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` |167| `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` |168