Pruna Ai P Video Animate
Playground
Try it on WavespeedAI!Pruna AI P-Video Animate is a fast AI video animation model that animates images and visual assets using the Pruna p-video-animate workflow running on RunPod. Ready-to-use REST inference API for image animation, character motion, product visuals, social media clips, marketing creatives, and professional AI video generation workflows with simple integration, no coldstarts, and affordable pricing.
Features
Pruna AI P-Video Animate
Pruna AI P-Video Animate transfers motion from a source video onto a reference image to generate an animated video clip. It is designed for motion-driven character animation, stylized performance clips, social media content, and other workflows where you want a static image to follow the movement of an existing video.
Why Choose This?
-
Motion transfer workflow Use a source video to drive motion while preserving the subject or scene from a reference image.
-
Image-guided animation Start from a single image and generate a video with matched movement.
-
Flexible frame rate options Keep the original frame rate or choose
24or48FPS for output delivery needs. -
Resolution control Choose
720por1080pdepending on quality and budget. -
Optional audio preservation Enable
save_audiowhen you want the exported video to include audio. -
Seed support Use
seedfor more reproducible animation results.
Parameters
| Parameter | Required | Description |
|---|---|---|
| video | Yes | Source motion video URL. |
| image | Yes | Reference image URL for the subject or scene to animate. |
| prompt | No | Optional instruction describing how the image should follow the source video motion. Default: Animate the reference subject using the motion from the source video. |
| resolution | No | Output video resolution. Supported values: 720p, 1080p. Default: 720p. |
| fps | No | Target output frame rate. Supported values: original, 24, 48. Default: original. |
| save_audio | No | Save the output video with audio. Default: true. |
| seed | No | Random seed for reproducible generations. Default: -1. |
How to Use
- Upload your source motion video — provide the clip whose movement should be transferred.
- Upload your reference image — provide the character, subject, or scene you want to animate.
- Add a prompt (optional) — describe the desired motion behavior or stylistic handling.
- Choose resolution — use
720pfor lower cost or1080pfor higher quality. - Choose frame rate (optional) — keep
originalor select24or48FPS. - Set audio and seed (optional) — keep audio if needed and use a fixed seed for reproducibility.
- Submit — run the model and download the animated video.
Example Prompt
Animate the portrait subject using the motion from the source video, keeping facial identity stable and body movement natural.
Pricing
Pricing depends on source video duration and resolution.
Billing Rules
- Billing is based on the uploaded source
videoduration - Billed duration is rounded up to the next whole second
- Maximum billed duration is 20 seconds
- Minimum billed duration is 1 second
720pcosts $0.03 per billed second1080pcosts $0.06 per billed secondfps,save_audio,prompt, andseeddo not affect pricing
Example Costs
| Resolution | 1s | 5s | 10s | 20s |
|---|---|---|---|---|
| 720p | $0.03 | $0.15 | $0.30 | $0.60 |
| 1080p | $0.06 | $0.30 | $0.60 | $1.20 |
Best Use Cases
- Character animation — Transfer live-action motion onto an illustrated or stylized character.
- Avatar content — Animate a still portrait using source video performance.
- Creative prototyping — Test how a static design behaves under real movement.
- Social media clips — Turn still art or portraits into short motion-driven videos.
- Performance transfer — Apply gestures, posture, and body motion from one clip to another subject.
Pro Tips
- Use a clear reference image with a well-defined subject.
- Choose a source motion video with readable, stable movement for cleaner transfer.
- Keep the prompt simple and focused on motion behavior when possible.
- Use
720pfor fast iteration and1080pfor higher-quality final output. - Shorter source clips are good for testing before processing longer motion references.
- Reuse the same
seedwhen comparing prompt changes on the same inputs.
Notes
videoandimageare required.- Pricing is based on the source video duration, capped at
20seconds. save_audiocontrols whether the exported video includes audio, but does not affect pricing.seed = -1means random generation.- The generated output follows the motion source rather than a freeform prompt-only animation path.
Related Models
- Pruna AI P-Video Image-to-Video — Generate motion from a reference image and prompt without a source motion video.
- Pruna AI P-Video Text-to-Video — Generate videos directly from text prompts.
- Pruna AI P-Image Text-to-Image — Generate still images for image-first creative workflows.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
# Submit the task
curl --location --request POST "https://api.wavespeed.ai/api/v3/pruna-ai/p-video/animate" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
"prompt": "Animate the reference subject using the motion from the source video.",
"resolution": "720p",
"fps": "original",
"save_audio": true,
"seed": -1
}'
# Get the result
curl --location --request GET "https://api.wavespeed.ai/api/v3/predictions/${requestId}/result" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}"
Parameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| video | string | Yes | - | Source motion video URL. | |
| image | string | Yes | - | Reference image URL for the subject or scene to animate. | |
| prompt | string | No | - | Optional instruction describing how the image should follow the source video motion. | |
| resolution | string | No | 720p | 720p, 1080p | Output video resolution. |
| fps | string | No | original | original, 24, 48 | Target output frame rate. |
| save_audio | boolean | No | true | - | Save the output video with audio. |
| seed | integer | No | -1 | -1 ~ 2147483647 | Random seed for reproducible generations. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Array of URLs to the generated content (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction, the ID of the prediction to get |
| data.model | string | Model ID used for the prediction |
| data.outputs | string | Array of URLs to the generated content. |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |