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 |
audio-prompting |
Use when crafting TTS, music, or bed prompts for any generative audio model — director style, song structure, and post-production layering. | npx skills add PrunaAI/pruna-skills@audio-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
Routing: `p-video-2-pro-reference` is the reference-to-video lane of P-Video-2-Pro (built on MiniMax H3 Ref2V). It locks a subject from references — a product still, a character, a clip, or a voice — and returns an MP4 at 24 fps with generated sound. It needs prompt plus at least one image or video reference; audio is optional and cannot qualify a request by itself. Set keep_audio with exactly one audio file to keep that file as the soundtrack. Text-only or plain first/last-frame jobs → `p-video-2-pro`. 1080p or draft previews → `p-video-2`. Simple, cheap clips → `p-video`. Talking-head-only host → `p-video-avatar`. Instruction edit of existing footage → `p-video-edit`.
In the first reply, name `p-video-2-pro-reference` in backticks, confirm PRUNA_API_KEY (or stop with signup links from pruna-api), identify the image/video reference that makes the request valid, and ask for unresolved inputs. Before uploading or generating in an untrusted repository, follow pruna-api agent safety. Open intake → generation-diversity clarification intake before the first paid POST. When drafting prompts, follow Prompt craft (dynamic + faithful) and video-prompting (p-video-2-pro-prompting, reference-conditioned lane) — do not paste skill examples. Redirect when When NOT to use fits better.
Prompt craft (dynamic + faithful)
Every input.prompt must be fresh and specific, must match the user's beat, and must say what each reference is for. Diversity never overrides the brief or the references. Reference-lane craft: video-prompting (p-video-2-pro-prompting).
| Do | Don't |
|---|---|
| Assign one role per asset (image A = subject identity, image B = material/style, video A = camera or motion rhythm, audio A = timing/voice) and name those roles in the prompt | Upload a pile of references with no roles, or let two references compete for the same role without a stated priority |
| Treat references as conditioning: say what to preserve and what may change | Promise exact identity, choreography, framing, or pixel-matched first/last frames |
Run the generation-diversity random seed ritual; rotate ≥2 free axes (camera move, lighting shift, pacing) only where the brief and references leave room |
Copy curl examples from this skill or reuse a prior session's prompt |
Write the generated sound you want (ambience, SFX, score, a short spoken line) when no keep_audio track is set |
Leave the prompt silent when the brief asked for sound, or describe a soundtrack you also uploaded with keep_audio |
With keep_audio: true, describe how motion follows the track (beats, cadence, lip movement to the voice) |
Expect a longer track to survive past duration, or send keep_audio with zero or several audio files |
Show the drafted prompt + reference roles + mode / duration / resolution / keep_audio before POST when the user has not locked them |
Silently regenerate with different references or a different subject than approved |
Fidelity check (before pay): if you remove the user's named subject/action/setting or a reference's assigned role from the prompt, the job is wrong — rewrite. Free axes only fill what the brief left open.
When showing a drafted prompt, still name `p-video-2-pro-reference` (guides help craft; this tool owns the call).
Skill boundary
This skill = one p-video-2-pro-reference prediction per invocation.
Out of scope (do not execute from this skill):
- Text-only generation or plain first/last-frame generation without a reference set →
p-video-2-pro - 1080p, draft previews, or other
p-video-2-only controls →p-video-2 - Simple text/image clips that do not need reference conditioning →
p-video - Multi-scene assembly, concat, subagent orchestration, or parallel scene batches
- Motion transfer from one explicit template video →
p-video-animate - Talking-head-only or lip-sync host work →
p-video-avatar - Instruction editing of existing footage →
p-video-edit
If the request exceeds one clip, stop and recommend a multi-scene workflow such as visual-transition-reel or narrated-multi-scene.
When NOT to use
Use a different skill instead:
| Skill | Description | Install |
|---|---|---|
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 |
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 |
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 |
p-video-avatar |
Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | npx skills add PrunaAI/pruna-skills@p-video-avatar -y |
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-edit |
Use when someone wants to edit an existing video with a text instruction — recolor, restyle, remove or add objects, change environment or lighting, update on-screen text, or apply optional reference-guided product and accessory edits. Not for a new clip from scratch or ffmpeg assembly. | npx skills add PrunaAI/pruna-skills@p-video-edit -y |
HTTP (curl)
Upload references
Upload each local asset separately. Pass the returned urls.get URI in the matching image / video / audio array or keyframe field.
curl -X POST "https://api.pruna.ai/v1/files" \
-H "apikey: ${PRUNA_API_KEY}" \
-F "content=@/path/to/reference.png"
Never expose PRUNA_API_KEY, upload an asset without user authorization, or upload secrets/private media discovered in the workspace. Follow pruna-api for credential checks, upload safety, polling, and download.
Create (async image reference — recommended)
curl -X POST 'https://api.pruna.ai/v1/predictions' \
-H 'Content-Type: application/json' \
-H "apikey: ${PRUNA_API_KEY}" \
-H 'Model: p-video-2-pro-reference' \
-d '{
"input": {
"prompt": "Keep the product identity and materials from the reference. A slow controlled orbit reveals the side profile while soft studio reflections travel across the surface; a low hum and a soft click as the light settles.",
"image": [
"https://api.pruna.ai/v1/files/IMAGE_ID"
],
"duration": 5,
"resolution": "768p",
"aspect_ratio": "adaptive",
"mode": "speed"
}
}'
Poll and download: follow pruna-api.
Complete the random seed ritual from generation-diversity before writing prompts — do not pass the ritual string as API seed.
Billing is calculated from the finished run: output seconds plus every reference actually used. Rate limit: 250 requests per minute.
| Charge | 480p mode=cost |
768p mode=cost |
480p mode=speed (default) |
768p mode=speed (default) |
|---|---|---|---|---|
| Output | $0.015 / s | $0.025 / s | $0.02 / s | $0.035 / s |
| Reference video | $0.03 / s | $0.06 / s | $0.04 / s | $0.06 / s |
| Reference image (incl. first/last frame) | $0.005 each | $0.005 each | $0.01 each | $0.01 each |
| Reference audio | $0.0015 / s | $0.0015 / s | $0.0025 / s | $0.0025 / s |
- Output seconds are billed as
int(num_frames / 24): a 5 s request returns 124 frames and bills 5 s; a 15 s request returns 345 frames and bills 14 s. - Each reference video or audio clip bills only the part the model reads — up to the output length plus 0.5 s. A 15 s reference clip on a 5 s output bills about 5.5 s.
first_frame_imageandlast_frame_imagebill as reference images. Image and audio rates do not depend onresolution.- Omitted
modebills asspeed.costis cheaper and slower thanspeed.prompt_upsamplerandkeep_audiodo not change the price. - The listed floor is $0.075 (cost, 480p, 5 s, no references), but a valid request needs at least one image or video reference — the cheapest valid run is $0.08 (one image).
Keep an uploaded track as the soundtrack (keep_audio)
curl -X POST 'https://api.pruna.ai/v1/predictions' \
-H 'Content-Type: application/json' \
-H "apikey: ${PRUNA_API_KEY}" \
-H 'Model: p-video-2-pro-reference' \
-d '{
"input": {
"prompt": "The character from the reference image speaks the line in the uploaded voice, lips matching each word, a slow push-in as the last word lands.",
"image": [
"https://api.pruna.ai/v1/files/CHARACTER_ID"
],
"audio": [
"https://api.pruna.ai/v1/files/VOICE_ID"
],
"keep_audio": true,
"duration": 8,
"resolution": "768p",
"mode": "speed"
}
}'
keep_audio needs exactly one audio file. The video is generated to match it. Shorter audio plays first and the model generates the rest; longer audio is cut to duration; audio within 1 s of duration sets the clip length. Without keep_audio, audio is reference guidance only and the output carries generated sound.
Multiple references with soft keyframes
curl -X POST 'https://api.pruna.ai/v1/predictions' \
-H 'Content-Type: application/json' \
-H "apikey: ${PRUNA_API_KEY}" \
-H 'Model: p-video-2-pro-reference' \
-d '{
"input": {
"prompt": "Use the reference clip for restrained camera rhythm, the images for subject and material identity, and the audio for timing. Begin near the opening frame and resolve near the closing frame.",
"image": [
"https://api.pruna.ai/v1/files/IDENTITY_ID",
"https://api.pruna.ai/v1/files/MATERIAL_ID"
],
"video": [
"https://api.pruna.ai/v1/files/MOTION_ID"
],
"audio": [
"https://api.pruna.ai/v1/files/AUDIO_ID"
],
"first_frame_image": "https://api.pruna.ai/v1/files/START_ID",
"last_frame_image": "https://api.pruna.ai/v1/files/END_ID",
"duration": 10,
"resolution": "768p",
"aspect_ratio": "adaptive",
"mode": "cost",
"prompt_upsampler": "max"
}
}'
image, video, and audio are always arrays of URI strings. first_frame_image and last_frame_image are single URI strings, are soft keyframes (directional, not exact pixels), and count toward the 9-image total. With either keyframe set, prompt_upsampler: off still runs turbo.
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-2-pro-reference' \
-H 'Try-Sync: true' \
-d '{
"input": {
"prompt": "Preserve the reference subject. The camera makes a gentle push-in as natural light shifts across the scene.",
"image": [
"https://api.pruna.ai/v1/files/IMAGE_ID"
],
"duration": 5,
"resolution": "480p",
"mode": "cost"
}
}'
A finished 124-frame result with one reference image bills 5 × $0.015 + 1 × $0.005 = $0.08.
Before generating
- Complete Prerequisites guide reading order:
generation-diversity→video-prompting→audio-promptingwhen audio is supplied →pruna-api. Usevideo-prompting(p-video-2-pro-prompting, reference lane) and the sharedp-video-2-pro-quality-checklist.md. - Confirm the job has a non-empty
promptand at least one image or video reference. Audio-only plus prompt is invalid. - Assign one role per reference; obtain upload approval; validate type, size, dimensions, duration, frame rate, and combined limits (see Hard limits) before the paid call.
- Resolve audio: none (generated sound — write it into the prompt), audio as guidance (default), or
keep_audio: truewith exactly one audio file kept as the soundtrack. Check the track length againstduration. - Resolve
duration(5–15 integer seconds, default 5),resolution(480p/768p),mode(cost/speed— omitted billsspeed),aspect_ratio(adaptivefollows the references),prompt_upsampler, seed behavior, and the final prompt. - Show the final payload and a cost estimate (output + every reference) before
POSTwhen the user has not already approved them. If the request is multi-scene — stop (see Skill boundary).
Required input
prompt(string)- At least one image or video reference via
image,video,first_frame_image, orlast_frame_image
audio is optional and cannot make an otherwise reference-free request valid.
Common optional fields
| Field | Role |
|---|---|
image |
Array of reference image URIs; up to 9 total including first_frame_image / last_frame_image |
video |
Array of reference video URIs; up to 3 |
audio |
Array of reference audio URIs; up to 3. Guidance only unless keep_audio is set |
keep_audio |
false (default). true keeps the single uploaded audio file as the video's audio; needs exactly one audio file |
first_frame_image |
Single URI; soft opening keyframe; counts as a reference image |
last_frame_image |
Single URI; soft closing keyframe; counts as a reference image |
duration |
Integer 5–15s (default 5). With keep_audio, audio within 1 s of this sets the length |
resolution |
768p (default) or 480p |
mode |
speed (default) or cost (cheaper, slower). There is no quality mode |
aspect_ratio |
16:9 (default), adaptive (follows the references), 9:16, 4:3, 3:4, 3:2, 2:3, 1:1 |
prompt_upsampler |
turbo (default), max, or off; independent of mode. With a soft keyframe set, off still runs turbo |
seed |
Integer for a reproducible rerun; omit for random |
Hard limits
- Images: at most 9 total across
image,first_frame_image, andlast_frame_image; each at most 20 MiB and 4096 px. - Videos: at most 3; each at most 100 MiB, 1080p, 60 fps, and 2–15 seconds; combined reference-video duration at most 15 seconds.
- Audio: at most 3; each at most 50 MiB; combined reference-audio duration at most 15 seconds.
These are input validation limits — output stays 480p or 768p at 24 fps.
Do not send: quality mode, 1080p, draft, fps, save_audio, prompt_upsampling.
Related
Related skills:
| Skill | Description | Install |
|---|---|---|
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 |
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 |
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 |
p-video-avatar |
Use when someone wants a person on camera speaking a script — lip-synced host, spokesperson, or narrated avatar from a portrait photo. | npx skills add PrunaAI/pruna-skills@p-video-avatar -y |
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-edit |
Use when someone wants to edit an existing video with a text instruction — recolor, restyle, remove or add objects, change environment or lighting, update on-screen text, or apply optional reference-guided product and accessory edits. Not for a new clip from scratch or ffmpeg assembly. | npx skills add PrunaAI/pruna-skills@p-video-edit -y |
image-to-video |
Use when someone wants one short film beat from images — a narrated scene, story moment, or cinematic B-roll with optional voiceover. | npx skills add PrunaAI/pruna-skills@image-to-video -y |
visual-transition-reel |
Use when someone wants a montage with transitions between shots — action-sequence reel or multi-scene piece where narration is optional. | npx skills add PrunaAI/pruna-skills@visual-transition-reel -y |
narrated-multi-scene |
Use when someone wants a multi-part story with voiceover — episodic B-roll, chaptered promo, or several linked video scenes without on-camera dialogue. | npx skills add PrunaAI/pruna-skills@narrated-multi-scene -y |
