Kling 4.0 is LIVE — Unbelievably Real Video | Try Now →

pruna-ai/p-video-2-pro/avatar

Pruna P-Video-2-Pro Avatar creates talking-avatar videos from a portrait image and uploaded speech audio, making it suitable for digital humans, presenters, dubbing, and avatar video workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Talking Avatar
Input

Drag & drop or click to upload

preview

Drag & drop or click to upload

Loading…
Enhance the movement and expression prompt automatically.

Idle

$0.02per run·~50 / $1

ExamplesView all

Related Models

README

P-Video-2 Pro Avatar

P-Video-2 Pro Avatar creates a talking-avatar video from a portrait image and a speech audio recording. The portrait defines the character and visual appearance, while the supplied audio drives the speaking performance and determines the video duration.

Use an optional prompt to guide expression, movement, or framing, and choose between 480p and 768p output for avatar presentations, explainers, social content, and other speech-driven video workflows.

Why Choose This?

  • Image-and-audio avatar generation
    Turn a portrait image and recorded speech into a talking video.

  • Audio-driven performance
    The input audio controls the speaking performance and output duration.

  • Up to 3 minutes of speech
    Generate avatar videos from audio clips up to 180 seconds.

  • Prompt-guided movement
    Describe desired expressions, gestures, movement, or framing through an optional prompt.

  • 480p and 768p output
    Choose the resolution that fits your quality and cost requirements.

  • Seed control
    Use an optional seed when reproducibility is useful.

Parameters

ParameterRequiredDescription
imageYesPortrait image URL used to define the avatar's appearance.
audioYesSpeech audio URL used to drive the talking performance. Maximum processed duration: 180 seconds.
promptNoOptional guidance for movement, expression, gestures, or framing. Default: The person is talking.
resolutionNoOutput resolution: 480p or 768p. Default: 768p.
prompt_upsamplingNoAutomatically enhance the performance prompt. Default: false.
seedNoOptional random seed for generation.

How to Use

  1. Upload a portrait — Provide a clear image with the person's face visible.
  2. Upload speech audio — Supply a clean speech recording.
  3. Add performance guidance optional — Use prompt to describe expressions, gestures, movement, or framing.
  4. Choose resolution — Select 480p or 768p.
  5. Set seed optional — Use a fixed seed when reproducibility is needed.
  6. Submit — Generate and retrieve the talking-avatar video.

Pricing

Pricing is based on the input audio duration and selected resolution.

Audio duration is rounded up to the next whole second, with a minimum of 1 billed second and a maximum of 180.

ResolutionPer Billed Second10s60s180s
480p$0.02$0.20$1.20$3.60
768p$0.04$0.40$2.40$7.20

prompt, prompt_upsampling, and seed do not add separate charges.

Best Use Cases

  • Virtual presenters — Create avatar-led introductions, announcements, and presentations.
  • Product explainers — Turn recorded narration into a character-led product presentation.
  • Educational content — Generate presenter-style videos for lessons, training, and instructional material.
  • Social media content — Create talking-character videos from existing portraits and speech.
  • Digital characters — Animate character portraits with recorded dialogue.
  • Localized presentations — Reuse the same portrait with different speech recordings for multiple versions.

Pro Tips

  • Use a clear, well-lit portrait with the face fully visible.
  • Use clean speech audio without loud background music or overlapping speakers.
  • Keep movement instructions simple and consistent with the source portrait.
  • Describe natural expressions and gestures when you want more than a basic talking performance.
  • Use 480p for lower-cost testing before moving to 768p.
  • Start with shorter audio clips when testing a new portrait or prompt.
  • Use a fixed seed when comparing prompt changes.

Notes

  • image and audio are required.
  • Use an audio clip from 1 to 180 seconds, up to 64 MiB.
  • Portraits support JPG, JPEG, PNG, and WebP, up to 20 MiB.
  • prompt_upsampling is off by default.
  • Output video duration follows the processed input audio.
  • Billing duration is rounded up to the next whole second.
  • The minimum billed duration is 1 second and the maximum is 180 seconds.
  • resolution defaults to 768p.
  • prompt is optional and defaults to The person is talking.
  • Public URLs must remain accessible while the request is processing.
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 2 Pro Avatar API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/pruna-ai/p-video-2-pro/avatar 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 2 Pro Avatar below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
    "resolution": "768p",
    "prompt_upsampling": false
}
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-2-pro/avatar" \
  -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-2-pro/avatar";
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({
        "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
        "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
        "resolution": "768p",
        "prompt_upsampling": false
}),
});
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 = {
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
    "resolution": "768p",
    "prompt_upsampling": False
}

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-2-pro/avatar", 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 2 Pro Avatar API — Frequently asked questions

What is the P Video 2 Pro Avatar API?

P Video 2 Pro Avatar is a Pruna Ai model for talking-avatar generation, exposed as a REST API on WaveSpeedAI. Pruna P-Video-2-Pro Avatar creates talking-avatar videos from a portrait image and uploaded speech audio, making it suitable for digital humans, presenters, dubbing, and avatar video workflows. 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 2 Pro Avatar 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 Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/pruna-ai/pruna-ai-p-video-2-pro-avatar.

How much does P Video 2 Pro Avatar cost per run?

P Video 2 Pro Avatar starts at $0.02 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 2 Pro Avatar accept?

Key inputs: `prompt`, `image`, `audio`, `resolution`, `seed`, `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-2-pro-avatar.

How do I get started with the P Video 2 Pro Avatar 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 2 Pro Avatar outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Pruna Ai). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.

llms.txt — pruna-ai/p-video-2-pro/avatar for AI agents and LLMs