P-Video-2

P-Video-2 is Pruna AI's quality-focused successor to P-Video, creating clips from text, images, or audio-conditioned inputs through one model. It produces sharper close-ups and foreground subjects, stronger identity and input-image consistency, improved lip synchronization for natively generated speech, and clearer on-screen text while generating dialogue, music, and sound effects with the video. It supports optional first-and-last-frame guidance, draft iteration, durations up to 20 seconds, 720p or 1080p output, and 24 or 48 FPS.

Complete technical specification for integration
Ready-to-use code snippets for common workflows
Step-by-step tutorials for advanced use cases
← All GuidesAnimating a still with a first frame
How to drive Pruna P-Video-2 from an image with inputs.frameImages, why the still and not your parameters decides the output shape, and how to hold a product across a variant set.
Introduction
Text-to-video gives you a new scene every call. That is the wrong property for most commercial work, where the product, the person and the set are already decided and the only open question is what moves. Passing a still through inputs.frameImages fixes the first frame and leaves you prompting only the motion.
She turns her head slowly toward the lens and settles into a small confident smile as a light breeze moves the ends of her hair and the leaves of the olive trees behind her. The camera holds still. Audio: quiet rooftop ambience with a soft breeze, distant city hum, no music, no voice.
- First frame

A woman in her thirties in a scarlet tailored blazer over a white shirt stands on a sunlit rooftop terrace with potted olive trees behind her, one hand resting in her pocket, looking just past the lens. Bright late morning sun from the right, city rooftops soft in the far background. Photoreal fashion editorial photography, medium shot, shallow depth of field, no text.
The blazer is the same scarlet, the terrace is the same terrace and the face is the same face, because none of it was regenerated. This guide covers the request, the one parameter rule that surprises everyone, how to split work between the still and the prompt, and the variant-set pattern that makes this worth building a pipeline around.
The request
inputs.frameImages is an array, and P-Video-2 takes one item in it. Each item can be a bare image or an object that names the position it occupies.
{
"inputs": {
"frameImages": [
"https://im.runware.ai/image/os/a14d18/ws/2/ii/3b7d2c94-5f81-4a60-9e27-1c8a4d6f2b93.jpg"
]
}
}The explicit form does the same thing and reads better in a codebase that also builds requests for models with more frames:
{
"inputs": {
"frameImages": [
{
"image": "https://im.runware.ai/image/os/a14d18/ws/2/ii/3b7d2c94-5f81-4a60-9e27-1c8a4d6f2b93.jpg",
"frame": "first"
}
]
}
}frame accepts "first" or the index 0. To pin the closing frame as well, see first and last frame. The image itself can be a URL, a UUID from an earlier task, a data URI or base64, so a still generated in the same pipeline can be handed straight over without a round trip through your own storage.
import { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'prunaai:p-video@2',
positivePrompt: 'The handbag rotates very slowly a quarter turn to the left, the gold clasp catching a moving highlight as it goes, the top handle settling slightly with the movement. The camera holds still. Audio: quiet studio room tone, faint leather movement, no music, no voice.',
inputs: {
frameImages: [
{
image: 'https://im.runware.ai/image/os/a14d18/ws/2/ii/8e1a5c73-2d94-4b06-9f52-3a7c8d1e4b60.jpg',
frame: 'first'
}
]
},
resolution: '720p',
duration: 5,
seed: 6612408,
deliveryMethod: 'async'
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "prunaai:p-video@2",
"positivePrompt": "The handbag rotates very slowly a quarter turn to the left, the gold clasp catching a moving highlight as it goes, the top handle settling slightly with the movement. The camera holds still. Audio: quiet studio room tone, faint leather movement, no music, no voice.",
"inputs": {
"frameImages": [
{
"image": "https://im.runware.ai/image/os/a14d18/ws/2/ii/8e1a5c73-2d94-4b06-9f52-3a7c8d1e4b60.jpg",
"frame": "first"
}
]
},
"resolution": "720p",
"duration": 5,
"seed": 6612408,
"deliveryMethod": "async"
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "videoInference",
"taskUUID": "b93c47d1-8a25-4e60-9f13-7c2d5a8e1b04",
"model": "prunaai:p-video@2",
"positivePrompt": "The handbag rotates very slowly a quarter turn to the left, the gold clasp catching a moving highlight as it goes, the top handle settling slightly with the movement. The camera holds still. Audio: quiet studio room tone, faint leather movement, no music, no voice.",
"inputs": {
"frameImages": [
{
"image": "https://im.runware.ai/image/os/a14d18/ws/2/ii/8e1a5c73-2d94-4b06-9f52-3a7c8d1e4b60.jpg",
"frame": "first"
}
]
},
"resolution": "720p",
"duration": 5,
"seed": 6612408,
"deliveryMethod": "async"
}
]'runware run prunaai:p-video@2 \
positivePrompt="The handbag rotates very slowly a quarter turn to the left, the gold clasp catching a moving highlight as it goes, the top handle settling slightly with the movement. The camera holds still. Audio: quiet studio room tone, faint leather movement, no music, no voice." \
inputs.frameImages.0.image=https://im.runware.ai/image/os/a14d18/ws/2/ii/8e1a5c73-2d94-4b06-9f52-3a7c8d1e4b60.jpg \
inputs.frameImages.0.frame=first \
resolution=720p \
duration=5 \
seed=6612408 \
deliveryMethod=async{
"taskType": "videoInference",
"taskUUID": "b93c47d1-8a25-4e60-9f13-7c2d5a8e1b04",
"model": "prunaai:p-video@2",
"positivePrompt": "The handbag rotates very slowly a quarter turn to the left, the gold clasp catching a moving highlight as it goes, the top handle settling slightly with the movement. The camera holds still. Audio: quiet studio room tone, faint leather movement, no music, no voice.",
"inputs": {
"frameImages": [
{
"image": "https://im.runware.ai/image/os/a14d18/ws/2/ii/8e1a5c73-2d94-4b06-9f52-3a7c8d1e4b60.jpg",
"frame": "first"
}
]
},
"resolution": "720p",
"duration": 5,
"seed": 6612408,
"deliveryMethod": "async"
}Response
[
{
"taskType": "videoInference",
"taskUUID": "b93c47d1-8a25-4e60-9f13-7c2d5a8e1b04",
"videoUUID": "4f7e2a19-6c83-4d50-8b25-9a1d3c7f5e28",
"videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/4f7e2a19-6c83-4d50-8b25-9a1d3c7f5e28.mp4"
}
]The still sets the shape, not your parameters
This is the rule that catches people, and it is enforced rather than advisory. width and height are rejected outright when frameImages is present. A request carrying both comes back as a validation error, not a cropped video.
width and height are mutually exclusive with inputs.frameImages, and separately with resolution. With a first frame in the request there is no way to state output dimensions at all: the aspect ratio comes from the still and resolution selects the tier.
So the shape of your video is decided upstream, when you generate or choose the still. A square 1024 × 1024 packshot at 720p returns a 960 × 960 video, and the same still at 1080p returns 1408 × 1408. Those numbers are not typos: the tier is a pixel budget rather than an edge length, and every accepted size is a multiple of 64. Resolution and duration has the full set. Nothing you pass changes the ratio.
The handbag rotates very slowly a quarter turn to the left, the gold clasp catching a moving highlight as it goes, the top handle settling slightly with the movement. The camera holds still. Audio: quiet studio room tone, faint leather movement, no music, no voice.
The handbag rotates very slowly a quarter turn to the left, the gold clasp catching a moving highlight as it goes, the top handle settling slightly with the movement. The camera holds still. Audio: quiet studio room tone, faint leather movement, no music, no voice.
Both are square because the still was square. The difference is the grain of the leather and the edge of the clasp, which on a product listing is the difference between a clip that sells and one that looks like a compression artifact.
Square is also the one ratio where the two tiers have an identical shape. Every other ratio changes slightly between 720p and 1080p, so a non-square still stepped up a tier comes back reframed a little as well as sharper.
Plan the aspect at the still stage. If a campaign needs a 16:9 hero and a 9:16 cutdown, that is two stills, not one still and a crop. Cropping a finished clip throws away the pixels you paid the 1080p rate for.
What the still fixes and what the prompt moves
The still is not a suggestion. It is the literal first frame, so everything visible in it is settled: the subject, the wardrobe, the set, the palette, the lens and the light. What the prompt still owns is what happens over the next few seconds, and how much of it.
The handbag rotates very slowly a quarter turn to the left, the gold clasp catching a moving highlight as it goes, the top handle settling slightly with the movement. The camera holds still. Audio: quiet studio room tone, faint leather movement, no music, no voice.
A hand enters from the right, lifts the handbag by its top handle, swings it up out of frame and the camera whips left to follow it across the studio. Audio: quiet studio room tone, leather and clasp movement, no music, no voice.
Both are faithful to the still on frame one. By the end, only one of them is still a product shot. Motion that removes the subject from frame is motion that undoes the reason you used a still, which is why listing and PDP work sits at the subtle end almost without exception: a quarter turn, a settle, a highlight travelling across a surface.
The strong version is not a failure, it is a different deliverable. It belongs in a social edit where the swing is the beat and the product gets its own clean clip elsewhere.
Describe the motion, not the scene
A first frame answers every question a scene description would, and it answers them with more authority than the prompt has. Restate the scene and the model does not argue with the image, it ignores what you wrote. The description is not dangerous, it is wasted prompt budget, and it crowds out the one thing the prompt is there to say.

An unbranded tan pebbled leather handbag with a gold clasp and a short top handle, standing upright and centred on a plain bone-white seamless studio backdrop. Even soft studio lighting from both sides, a faint contact shadow under the base. Photoreal e-commerce packshot photography, square framing, sharp detail on the grain of the leather, no text.
The handbag rotates very slowly a quarter turn to the left, the gold clasp catching a moving highlight as it goes, the top handle settling slightly with the movement. The camera holds still. Audio: quiet studio room tone, faint leather movement, no music, no voice.
The working shape for an image-to-video prompt is short and verbs-first:
The chair rotates slowly and steadily through a quarter turn to the right,
the light moving across the frame and the seat pad as it goes. The camera
holds still.
Audio: quiet studio room tone, no music, no voice.Nothing in there says what the chair looks like. Name only what changes, plus the camera instruction and the sound. If you find yourself describing the subject, you are writing a text-to-video prompt with an image attached.
One exception is worth knowing: naming a subject you want preserved can help when the motion would otherwise tempt the model to reinterpret it. "The woven cane seat stays woven cane" is a preserve clause, not a scene description, and it costs six words.
Stills that animate well
Pruna's guidance is to start from a high-quality, well-lit image, and the failure case shows why it is not just a quality note. A still needs a clear subject with somewhere to move.

A dim cluttered home office photographed from the doorway at night, a desk buried under paperwork, cables, three mugs, a laptop, a stack of books and a desk lamp as the only light source, a bookshelf crammed with boxes behind it, deep shadows in every corner and no clear subject anywhere in the frame. Photoreal available-light photography, wide shot, no text.
A slow gentle push in toward the desk. Audio: quiet room tone, no music, no voice.
The objects rearrange themselves as the camera advances, because there is no hierarchy in the frame for the model to preserve. Three things make a still animate badly, and they compound: low light starves the detail the model needs to track, clutter removes the subject, and a flat frame with no depth gives a camera move nothing to parallax against.
The stills that work look like the packshots and portraits earlier in this guide. One subject, lit so its edges are unambiguous, with either room to move or a background that can fall away behind it.
A variant set from one motion prompt
This is the pattern that pays for the pipeline. Generate a still per SKU, then run one motion prompt on one seed across all of them. The motion is identical because the instruction and the seed are identical, and the products differ because only the stills differ.

A mid-century dining chair with a solid walnut frame and a pale oatmeal wool seat pad, angled three-quarters to camera on a plain warm grey seamless studio backdrop. Even soft studio lighting, faint contact shadow under the legs. Photoreal furniture e-commerce packshot photography, square framing, no text.

A mid-century dining chair with a matte black ash frame and a charcoal wool seat pad, angled three-quarters to camera on a plain warm grey seamless studio backdrop. Even soft studio lighting, faint contact shadow under the legs. Photoreal furniture e-commerce packshot photography, square framing, no text.

A mid-century dining chair with a pale oak frame and a woven natural cane seat, angled three-quarters to camera on a plain warm grey seamless studio backdrop. Even soft studio lighting, faint contact shadow under the legs. Photoreal furniture e-commerce packshot photography, square framing, no text.
The chair rotates slowly and steadily through a quarter turn to the right, the light moving across the frame and the seat pad as it goes. The camera holds still. Audio: quiet studio room tone, no music, no voice.
The chair rotates slowly and steadily through a quarter turn to the right, the light moving across the frame and the seat pad as it goes. The camera holds still. Audio: quiet studio room tone, no music, no voice.
The chair rotates slowly and steadily through a quarter turn to the right, the light moving across the frame and the seat pad as it goes. The camera holds still. Audio: quiet studio room tone, no music, no voice.
The three clips turn the same way, at a similar rate, under the same light, which is what makes them usable as a set on one category page. Expect the amount of rotation to vary between them, because a shared seed cannot fully hold motion when the starting still changes, so check the set and re-roll any that land noticeably short. Generated with fresh seeds instead, they would each pick their own staging and the grid would read as three shoots.
For the stills themselves, generating each colorway from a shared description with only the material swapped is what keeps the framing and the light consistent across the set. That work belongs to your image model, and it is worth doing carefully, because every inconsistency in the stills is inherited by the video.
Speaking from a portrait
A still with a person in it can deliver a line, which makes a single approved portrait into a whole library of clips. The identity comes from the image, the words from the prompt.
She holds the lens for a beat, then says, "We started this workshop with two people and one bench." Then she rests and breathes. The camera holds still. Audio: her natural speaking voice, calm and measured, quiet workshop tone underneath, no music.
- Portrait

A woman in her forties with short silver hair, wearing a black roll-neck, standing in a bright workshop with pale timber shelving softly out of focus behind her, arms relaxed, looking straight into the lens. Soft daylight from a large window on the left. Photoreal founder portrait photography, vertical framing, chest-up, shallow depth of field, no text.
The pattern scales the way a script does. One portrait plus N quoted lines is N clips of the same person, which is how you build a FAQ set or a localized announcement without the identity drifting between them. The delivery rules are the same as for text-to-video, and native audio covers the pacing that keeps lip sync honest.
Tips
-
Decide the aspect when you make the still.
widthandheightare rejected alongsideframeImages, so the still's ratio is the video's ratio. Two deliverable shapes means two stills. -
Prompt verbs, not nouns. Name what moves, the camera, and the sound. A subject description competes with the image and the clip drifts.
-
Keep the subject in frame. Motion that swings the product out of shot discards the reason you started from a still.
-
Pin one seed across a variant set. Same motion prompt, same seed, different stills gives you clips that turn at the same rate and cut together as a set.
-
Feed it a clean, well-lit still. Low light, clutter and a flat frame each break the animation in their own way, and together they guarantee it.
-
Pass the still by UUID inside a pipeline. The image task's UUID is accepted directly, so a still generated a moment earlier needs no upload of your own.
-
Use a preserve clause for materials that get reinterpreted. "The woven cane seat stays woven cane" is short and it is not a scene description.
-
Go 1080p for anything where surface detail is the product. From the same still and seed it buys you grain and edge definition. On a square still that is the only change; on any other ratio the framing shifts slightly too, so check the first one rather than assuming.