Pruna AI's motion-transfer video model โ animates a reference image with the motion and audio of a source video. Optimized for speed and cost (about 5.24s of generation per 1s of output video).
Test this model instantly in the Console Playground โ no code required
Copy usage instructions for Claude, ChatGPT, or other AI
curl -X POST "https://api.core.today/v1/predictions" \
-H "Content-Type: application/json" \
-H "X-API-Key: cdt_your_api_key" \
-d '{
"model": "prunaai/p-video-animate",
"input": {
"video": "https://example.com/driver.mp4",
"image": "https://example.com/subject.jpg",
"resolution": "720p",
"save_audio": true
}
}'| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
video | string | Yes | - | Source RGB video (.mp4): motion + audio source. The output follows its duration and aspect ratio โ billing is per second of this video |
image | string | Yes | - | Reference image of the subject to animate |
instruction_prompt | string | No | - | Further instruction on how the reference subject should be animated using the motion of the input video |
resolution | string | No | 720p | Target ~megapixel budget: 720p โ 1 MP (70 credits/sec), 1080p โ 2 MP (140 credits/sec). Aspect ratio preserved 720p1080p |
target_fps | string | No | original | Target FPS for the working video original2448 |
save_audio | boolean | No | true | Mux the source audio into the output video |
ignore_audio | boolean | No | false | Don't condition generation on the source audio. If save_audio is true, the audio is still muxed into the final video |
turbo | boolean | No | false | Faster generation for slightly lower quality |
seed | integer | No | - | Random seed. Leave blank for random |
There are 3 ways to provide files for the videoimage parameters:
Pass a publicly accessible URL directly. With the Storage API (POST /v1/files/upload-url) the file uploads straight to S3 (50MB per file) and you pass the returned file_url.
{
"model": "prunaai/p-video-animate",
"input": {
"prompt": "your prompt here",
"video": "https://example.com/image.jpg"
}
}Attach files directly to POST /v1/predictions/upload. No separate upload step, but the bytes pass through the API server so the whole request is capped at 10MB.
curl -X POST "https://api.core.today/v1/predictions/upload" \
-H "X-API-Key: cdt_your_api_key" \
-F "model=prunaai/p-video-animate" \
-F 'input={"prompt":"your prompt here"}' \
-F "file:video=@your_file.png"Common parameters used when calling POST /v1/predictions.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
model | string | Yes | - | Model identifier |
input | object | Yes | - | Object containing the model-specific parameters from the table above |
output_folder | string | No | - | Folder path for output files (max 256 chars, '..' not allowed) |
webhook_url | string | No | - | Webhook URL to call on completion |
is_public | boolean | No | false | If true, output files are also available via permanent public URLs |
Swap the subject of a clip while keeping motion and audio
curl -X POST "https://api.core.today/v1/predictions" \
-H "Content-Type: application/json" \
-H "X-API-Key: cdt_your_api_key" \
-d '{
"model": "prunaai/p-video-animate",
"input": {
"video": "https://example.com/driver.mp4",
"image": "https://example.com/subject.jpg",
"resolution": "720p",
"save_audio": true
}
}'Add an instruction for how the subject should move
curl -X POST "https://api.core.today/v1/predictions" \
-H "Content-Type: application/json" \
-H "X-API-Key: cdt_your_api_key" \
-d '{
"model": "prunaai/p-video-animate",
"input": {
"video": "https://example.com/action.mp4",
"image": "https://example.com/character.jpg",
"instruction_prompt": "The man throws the swords to the floor, then performs the split",
"resolution": "720p"
}
}'POST /v1/predictions