WAN 3.0 is LIVE — 30s in one shot | Try in Video Generator →

pruna-ai/

Pruna P-Video-Edit is an instruction-based video editing model for modifying subjects, objects, attributes, and environments in existing videos, with optional reference-image guidance and Draft or Full quality modes. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

video-to-video
Input
Enable Safety Checker

Idle

$0.045per run·~22 / $1

Next:

ExamplesView all

Transform the entire video into a bold 1970s retro-futurist luxury world while preserving the man’s identity, facial features, walking motion, timing, and original camera movement. Replace the modern hotel lobby with a glamorous space-age lounge featuring curved white architecture, glossy orange furniture, chrome surfaces, circular doorways, geometric carpets, and large panoramic windows overlooking a stylized futuristic city. Change his dark suit into a cream-colored retro-futurist tailored suit with a burnt-orange shirt, wide collar, polished boots, and subtle metallic accessories. Transform the travel bag into a sleek rounded silver case with vintage space-age styling. Keep his original actions unchanged: walking through the lobby, checking his wristwatch, stopping, and looking toward the elevators. Use a bold orange, cream, teal, and chrome color palette, soft film grain, glossy reflections, symmetrical compositions, warm cinematic lighting, sophisticated 1970s science-fiction fashion editorial aesthetic.

Related Models

README

Pruna AI P-Video Edit

Pruna AI P-Video Edit edits an existing video using natural-language instructions. Upload a source video, describe the changes you want, and optionally add reference images to guide identity, appearance, style, object edits, or scene transformation.

Why Choose This?

  • Instruction-based video editing
    Edit videos with natural-language prompts instead of building a manual editing workflow.

  • Flexible visual changes
    Modify attributes, transform objects, adjust environments, or restyle a scene while preserving the source video's motion and structure.

  • Reference-guided editing
    Add up to 4 reference images to guide identity, appearance, object design, or visual style.

  • Draft and Full modes
    Use Draft mode for faster, lower-cost previews, or Full mode for higher-quality edits.

  • Audio preservation
    Preserve the source video's audio in the edited result with save_audio.

Parameters

ParameterRequiredDescription
videoYesSource video to edit. Maximum input length: 15 seconds.
promptYesNatural-language instructions describing the requested video changes.
imagesNoOptional reference images for guided editing. Supports up to 4 JPG, JPEG, PNG, or WebP images.
prompt_upsamplingNoExpand and optimize the editing prompt. Default: true.
draftNoEnable faster, lower-cost Draft mode. Default: false.
save_audioNoPreserve the source video's audio in the result. Default: true.
seedNoRandom seed for reproducible results. If omitted, the upstream model chooses a random seed.

How to Use

  1. Upload a source video — Provide a clip no longer than 15 seconds.
  2. Write the edit prompt — Describe what should change and what should remain consistent.
  3. Add reference images optional — Provide up to 4 images when identity, style, product, or object appearance matters.
  4. Choose Draft or Full mode — Use Draft mode for quick previews or Full mode for higher-quality output.
  5. Choose audio behavior — Keep save_audio enabled when the source audio should be preserved.
  6. Set seed optional — Use a fixed seed when reproducibility is needed.
  7. Submit — Generate the edited video and retrieve the output URL.

Pricing

Pricing is based on the source video duration and selected mode.

Billing duration is rounded up to the next whole second, with a minimum billed duration of 1 second and a maximum billed duration of 15 seconds.

ModePrice per billed second
Full$0.045
Draft$0.025

Example Costs

Input DurationBilled DurationFullDraft
0.5s1s$0.045$0.025
6.13s7s$0.315$0.175
15s15s$0.675$0.375

images, prompt_upsampling, save_audio, and seed do not add separate charges.

Best Use Cases

  • Attribute editing — Change clothing, materials, colors, lighting, or visual traits.
  • Object modification — Replace, transform, add, or restyle objects in a scene.
  • Environment replacement — Move an existing performance into a different location, season, time of day, or visual atmosphere.
  • Reference-guided edits — Use images to guide identity, object appearance, product design, or visual style.
  • Creative iteration — Generate Draft previews before producing a Full-quality result.
  • Social and marketing video edits — Adapt short clips for ads, product showcases, and creative campaigns.

Pro Tips

  • Clearly describe both what should change and what should remain consistent.
  • Use reference images when identity, product details, object design, or style consistency matters.
  • Use Draft mode for fast iteration before running a Full edit.
  • Keep prompts focused on one main edit direction for more stable results.
  • Preserve save_audio=true when the original soundtrack, dialogue, or ambience should remain.
  • Use short, clean source videos with clear subjects and stable motion.
  • Set a fixed seed when comparing prompt or reference-image changes.

Notes

  • video and prompt are required.
  • The input video can be up to 15 seconds long.
  • images is optional and supports up to 4 reference images.
  • Defaults: prompt_upsampling=true, draft=false, and save_audio=true.
  • The completed prediction returns the edited video as a URL in outputs.
  • This endpoint does not expose output resolution, frame rate, duration, output format, or translation controls.

Related Models

Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

P Video Edit API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/pruna-ai/p-video/edit with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for P Video Edit below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "prompt_upsampling": true,
    "draft": false,
    "save_audio": true
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/pruna-ai/p-video/edit" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WAVESPEED_API_KEY" \
  -d "$REQUEST_BODY")

TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
    -H "Authorization: Bearer $WAVESPEED_API_KEY")
  RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
  STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
  case "$STATUS" in
    completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/pruna-ai/p-video/edit";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');

async function requestJson(url, options = {}) {
  const response = await fetch(url, options);
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
        "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
        "prompt": "A cinematic shot of a city at sunset, soft golden light",
        "prompt_upsampling": true,
        "draft": false,
        "save_audio": true
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;

// 2. Poll until the prediction finishes.
while (true) {
  const resultBody = await requestJson(resultUrl, {
    headers: { "Authorization": `Bearer ${apiKey}` },
  });
  const result = resultBody.data ?? resultBody;
  if (result.status === "completed") {
    console.log(result.outputs);
    break;
  }
  if (["failed", "cancelled", "timeout", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
  await new Promise(resolve => setTimeout(resolve, 2000));
}
Python example
import json
import os
import time
from urllib.request import Request, urlopen

api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
    "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "prompt_upsampling": True,
    "draft": False,
    "save_audio": True
}

def request_json(url, data=None):
    request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
    with urlopen(request) as response:
        return json.load(response)

# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/pruna-ai/p-video/edit", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
    raise RuntimeError("Submission response did not contain a prediction id")
result_url = f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"

# 2. Poll until the prediction finishes.
while True:
    result_body = request_json(result_url)
    result = result_body.get("data", result_body)
    status = result.get("status")
    if status == "completed":
        print(result.get("outputs", []))
        break
    if status in {"failed", "cancelled", "timeout", "deleted"}:
        raise RuntimeError(result)
    time.sleep(2)

P Video Edit API — Frequently asked questions

What is the P Video Edit API?

P Video Edit is a Pruna Ai model for video editing, exposed as a REST API on WaveSpeedAI. Pruna P-Video-Edit is an instruction-based video editing model for modifying subjects, objects, attributes, and environments in existing videos, with optional reference-image guidance and Draft or Full quality modes. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the P Video Edit API?

POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/pruna-ai/pruna-ai-p-video-edit.

How much does P Video Edit cost per run?

P Video Edit starts at $0.045 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.

What inputs does P Video Edit accept?

Key inputs: `prompt`, `images`, `video`, `seed`, `draft`, `prompt_upsampling`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/pruna-ai/pruna-ai-p-video-edit.

How do I get started with the P Video Edit API?

Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.

Can I use P Video Edit outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Pruna Ai). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.

Pruna P-Video-Edit API on WaveSpeedAI