Install
openclaw skills install @pruna-ai/p-video-animateUse when the user wants to animate a still using motion from another video, motion-transfer remixes, or performance variations from a template clip—not replacing someone inside existing footage.
openclaw skills install @pruna-ai/p-video-animateP-Video-Animate animates a single image using the motion, timing, and camera movement from a given video.
User question this answers: How can I animate this picture with some motion?
Given a reference input image and video, the model generates a new video using (1) the style of the reference image, and (2) preserving the original motion, acting, timing, camera movement, and scene structure of the reference video.
Also on Replicate: prunaai/p-video-animate. Full P-API parameters: p-video-animate model docs · operational guide (Runware host): animating images from video
Shared HTTP patterns: pruna-api.md
| p-video-animate (this skill) | p-video-replace | |
|---|---|---|
| User question | How can I animate this picture with some motion? | How can I replace this person in this video? |
| Inputs | One image + motion-template video | Source video + images (1–4 identity refs in one call) |
| Job | Still performs using copied motion | People in footage swapped for reference identities |
Use p-video-replace for in-place identity swap on real clips. Use this skill for motion-transfer showcases, persona variants, and slider before/after demos.
seed when set.video URL — motion/audio source (upload .mp4 to /v1/files first)image URL — subject to animate (upload jpg/jpeg/png/webp first)resolution: 720p or 1080ptarget_fps: original, 24, or 48instruction_prompt — how the reference subject should follow the source motionsave_audio, seed, disable_safety_checkerRun p-video-animate-quality-checklist.md on inputs and outputs.
Batch runs: when several image+video pairs are independent, create all predictions in one parallel async batch, then batch-poll. See parallel-execution.md.
Appearance from image, motion from video. The largest quality factor is how well the reference image matches the first frame of the source video. Ask before every pair:
When all three line up, motion transfers cleanly — including secondary cues (camera drift, hair movement, shadow shift). Mismatched pairs lose those.
| Factor | Guidance |
|---|---|
| Shot size | Match close-up / medium / full between image and template |
| Facing | Front-facing still + profile motion → head/shoulder artifacts |
| Limbs | If template waves arms, still must show arms |
| Proportions | Human full-body motion on chibi/mascot subjects often breaks legs and gait |
| Speaking templates | When source video has dialogue, persona mouth must be clear and large enough |
When pairing fails: head-and-shoulders still + full-body dance → the model does not hallucinate limbs; the head drifts subtly and most choreography is lost. Generate a full-body reference or pick a closer template.
Before generate: repose with p-image-edit when framing or pose is close but not exact. Upscale reference stills for identity detail.
Long clips: ~5 s compute per 1 s of video — split the source and animate segments separately for long templates.
Wrong tool: not for object removal, background replacement, scene rewriting, or frame-exact pixel edits — use p-image-edit, p-video-replace, or inpainting workflows instead.
instruction_prompt — optional; overrides behavior, not who is on screen. Leave blank when the source motion is already right.
Useful (one specific beat on top of source motion):
At the very end of the clip, just after her last gesture, she gives a clear thumbs-up toward the camera. Keep the source motion otherwise.
Less useful (repeats what the image already shows):
A confident woman in a charcoal blazer speaks to the camera in a modern office.
Style variety: photoreal, cartoon, 3D, and mascot stills can share one motion template when framing aligns — the reference image's rendering style carries through.
Runware field map: referenceImages[0] → image, referenceVideos[0] → video, positivePrompt → instruction_prompt, settings.preserveAudio → save_audio.
Mixed-reel context (motion templates, sliders, avatar CTA): animate-beats.md.
video (string URL): source RGB video (.mp4); motion and audio sourceimage (string URL): reference subject to animateresolution: 720p (default) or 1080ptarget_fps: original (default), 24, or 48instruction_prompt (string): extra guidance on how the subject should follow source motionsave_audio (boolean, default true)seed (integer)disable_safety_checker (boolean, default false)curl -X POST "https://api.pruna.ai/v1/files" \
-H "apikey: ${PRUNA_API_KEY}" \
-F "content=@/path/to/source-video.mp4"
curl -X POST "https://api.pruna.ai/v1/files" \
-H "apikey: ${PRUNA_API_KEY}" \
-F "content=@/path/to/reference-image.png"
Use each response urls.get (or https://api.pruna.ai/v1/files/{id}) in input.video and input.image.
Omit Try-Sync. Output duration follows the source video.
curl -X POST 'https://api.pruna.ai/v1/predictions' \
-H 'Content-Type: application/json' \
-H "apikey: ${PRUNA_API_KEY}" \
-H 'Model: p-video-animate' \
-d '{
"input": {
"video": "https://api.pruna.ai/v1/files/source-video-abc123",
"image": "https://api.pruna.ai/v1/files/reference-image-def456",
"resolution": "720p",
"target_fps": "original",
"instruction_prompt": "Animate the reference subject using the motion from the source video."
}
}'
Poll and download: pruna-api.md.
curl -X POST 'https://api.pruna.ai/v1/predictions' \
-H 'Content-Type: application/json' \
-H "apikey: ${PRUNA_API_KEY}" \
-H 'Model: p-video-animate' \
-H 'Try-Sync: true' \
-d '{
"input": {
"video": "https://api.pruna.ai/v1/files/source-video-abc123",
"image": "https://api.pruna.ai/v1/files/reference-image-def456"
}
}'
animate rows)Animate slider reels: generate_video_comparison.py + avatar-multi-scene animate rows.