ModelsPrunaAIp-video-avatar
providerPrunaAI /

p-video-avatar

from 8.75 DZD / second
  • 8.75 DZD / second for 720p
  • 15.75 DZD / second for 1080p

Turn one portrait photo into a talking video. P-Video-Avatar makes the person in your image speak your script with natural lip sync, in one of 30 voices and 10 languages, in 720p or 1080p. Made for spokesperson clips, product explainers, customer messages and multilingual content.

PublicVideoAudioAvatarTalking HeadLipSyncTTSMultilingual
Resolutions720p1080p
Image-to-videoVoice
p-video-avatar
ArchitectureDiffusion (Talking-Head)
Context Windowvideo
First frame image
Required
Voice
zephyr_female · puck_male · charon_male · kore_female · fenrir_male · leda_female · orus_male · aoede_female · callirrhoe_female · autonoe_female · enceladus_male · iapetus_male · umbriel_male · algenib_male · despina_female · erinome_female · laomedeia_female · achernar_female · algieba_male · schedar_male · gacrux_female · pulcherrima_female · achird_male · zubenelgenubi_male · vindemiatrix_female · sadachbia_male · sadaltager_male · sulafat_female · alnilam_male · rasalgethi_male, default zephyr_female
Voice language
english_us · english_uk · spanish · french · german · italian · portuguese_brazil · japanese · korean · hindi, default english_us
Voice instructions
Up to 500 characters
Prompt
Up to 200 characters

P-Video-Avatar

P-Video by Pruna AI

P-Video-Avatar is Pruna AI's talking-head model in the P-Video family. Give it one portrait photo and a script, and it returns a video of that person speaking your words with lip sync, in one of 30 voices and 10 languages, in 720p or 1080p. No camera, no recording session, no editing: one image and one request.

CODE
PrunaAI/p-video-avatar

At a glance

DeveloperPruna AI
Model familyP-Video
TaskTalking-head video from a single image
InputA portrait image (required) and a script (prompt)
OutputAn MP4 video of the person speaking, with the speech in the audio track
Voices30 built-in voices (default zephyr_female)
Languages10 (default english_us)
Resolutions720p · 1080p
Default resolution720p
Aspect ratioFollows your image
ScriptUp to 200 characters per request
Clip lengthFollows the script

Why P-Video-Avatar

  • One photo is enough. A headshot, a product spokesperson, a brand mascot or an illustrated character becomes a speaking video.
  • Lip sync built in. The voice is generated from your script and the mouth follows it.
  • Thirty voices, ten languages. Pick the voice and the language; describe the delivery (warm, energetic, calm) in a sentence.
  • Pay for what is spoken. The clip is as long as the script, and you are billed per second of video.
  • Vertical or horizontal. The video takes the shape of your image: portrait for Reels and TikTok, landscape for YouTube and websites.
  • Fast. Pruna presents it as the fastest and cheapest avatar and lip-sync model it offers.

How it works

You sendIt does
imageThe face and the frame: the video starts on this picture
promptThe script: the words the person says
voiceWho speaks: one of 30 voices
voice_languageThe language of the speech
voice_instructionsHow the voice speaks: tone, pace, emotion

On this model, prompt is the script, not a description of the scene. Write exactly what the person should say.


Video options

OptionValuesDefaultWhat it does
imagea portrait imagerequiredThe person who speaks, and the first frame
prompttext, up to 200 charactersrequiredThe script the person says
voiceone of the 30 voices belowzephyr_femaleThe voice
voice_languageone of the 10 languages belowenglish_usThe language of the speech
voice_instructionstext, up to 500 charactersnoneDelivery: tone, pace, emotion
resolution720p, 1080p720pOutput resolution

Voices

FemaleMale
zephyr_female (default)puck_male
kore_femalecharon_male
leda_femalefenrir_male
aoede_femaleorus_male
callirrhoe_femaleenceladus_male
autonoe_femaleiapetus_male
despina_femaleumbriel_male
erinome_femalealgenib_male
laomedeia_femalealgieba_male
achernar_femaleschedar_male
gacrux_femaleachird_male
pulcherrima_femalezubenelgenubi_male
vindemiatrix_femalesadachbia_male
sulafat_femalesadaltager_male
alnilam_male
rasalgethi_male

The model page lists the exact values this model accepts.

Languages

english_us (default) · english_uk · spanish · french · german · italian · portuguese_brazil · japanese · korean · hindi

Write the script in the language you choose. A French script with voice_language: "french" sounds natural; an English script read as French does not.

Voice instructions

Describe the delivery, not the words: "Warm and friendly, at a calm pace.", "Energetic, like a product launch.", "Serious and reassuring."


The image

  • One clear face, looking toward the camera, well lit, with nothing covering the mouth.
  • The video takes the shape of your image: crop it to 9:16 for vertical video or 16:9 for horizontal video before sending.
  • Higher-resolution portraits keep the identity better; strong side angles, sunglasses, hands in front of the face and low-resolution images make it harder.

Each image can be sent as an https:// URL, a data URI (data:image/png;base64,..., data:image/jpeg;base64,... or data:image/webp;base64,...) or a file in a multipart/form-data field named image. PNG, JPEG or WebP, up to 10 MB and 4096 pixels on a side. Only use images of people who have agreed to it.


Quick start

Video generation is synchronous: one request can keep the connection open for a while. Set a long client timeout.

A spokesperson clip (cURL)

BASH
curl -X POST 'https://api.devupai.com/v1/video/generations' \
  -H "Authorization: Bearer $DEVUP_API_KEY" \
  -H "Content-Type: application/json" \
  --max-time 900 \
  -d '{
    "model": "PrunaAI/p-video-avatar",
    "image": "https://example.com/spokesperson.png",
    "prompt": "Welcome to our store. This week, every order ships for free.",
    "voice": "zephyr_female",
    "voice_language": "english_us",
    "voice_instructions": "Warm and friendly, at a calm pace.",
    "resolution": "720p"
  }'

A French message (Python)

PYTHON
import os
import requests

response = requests.post(
    "https://api.devupai.com/v1/video/generations",
    headers={
        "Authorization": f"Bearer {os.environ['DEVUP_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "model": "PrunaAI/p-video-avatar",
        "image": "https://example.com/presenter-vertical.png",
        "prompt": "Bonjour ! Notre nouvelle collection est disponible dès aujourd'hui.",
        "voice": "charon_male",
        "voice_language": "french",
        "voice_instructions": "Energetic and confident.",
        "resolution": "1080p",
    },
    timeout=900,
)

result = response.json()
if response.status_code != 200:
    raise RuntimeError(result["error"]["message"])

# Download right away: the link expires 5 minutes after the response.
with open("message.mp4", "wb") as f:
    f.write(requests.get(result["data"][0]["url"], timeout=120).content)

print(result["_devup"])

JavaScript (Node.js)

JAVASCRIPT
import { writeFile } from "node:fs/promises";

const response = await fetch("https://api.devupai.com/v1/video/generations", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.DEVUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "PrunaAI/p-video-avatar",
    image: "https://example.com/support-agent.png",
    prompt: "Your order is on its way. You will receive it within two days.",
    voice: "kore_female",
    resolution: "720p",
  }),
  signal: AbortSignal.timeout(900_000),
});

const result = await response.json();
if (!response.ok) throw new Error(result.error.message);

const video = await fetch(result.data[0].url);
await writeFile("update.mp4", Buffer.from(await video.arrayBuffer()));
console.log(result._devup);

Uploading the image as a file (cURL, multipart)

BASH
curl -X POST 'https://api.devupai.com/v1/video/generations' \
  -H "Authorization: Bearer $DEVUP_API_KEY" \
  --max-time 900 \
  -F model="PrunaAI/p-video-avatar" \
  -F image=@portrait.png \
  -F prompt="Thank you for joining us today." \
  -F voice="puck_male" \
  -F resolution="720p"

Response

JSON
{
  "data": [
    {
      "url": "<video-url>"
    }
  ],
  "_devup": {
    "cost_dzd": "<cost_dzd>",
    "balance_dzd": "<balance_dzd>",
    "request_id": "req_<id>"
  }
}
  • data[0].url is a signed link to the MP4. It expires 5 minutes after the response: download the file right away.
  • With "response_format": "b64_json", the video comes Base64-encoded in data[0].b64_json; a video larger than 20 MB is returned as a link instead, with a note in _devup.note.

Billing

  • You are billed per second of video actually generated, at the rate of the resolution you chose. A short script costs less than a long one.
  • Before the generation starts, your balance must cover 30 seconds at that rate; only the generated seconds are charged.
  • The voice, the language and the voice instructions do not change the price.

Errors

Every option is checked before anything is generated. A request the model cannot take returns HTTP 400, and nothing is charged.

A request without an image returns missing_required_parameter:

JSON
{
  "error": {
    "message": "This model needs `image` (the first frame).",
    "type": "devup_error",
    "code": "missing_required_parameter"
  }
}

A script longer than the model takes returns invalid_value:

JSON
{
  "error": {
    "message": "`prompt` can be up to 200 characters on this model.",
    "type": "devup_error",
    "code": "invalid_value"
  }
}

A voice or a language the model does not list, voice_instructions longer than 500 characters, or an image that cannot be used also return HTTP 400 invalid_value, and the message names what the model takes.

A request your balance cannot cover returns HTTP 402 before anything is generated.

Full reference: Voice, Image to video and Errors.


Writing scripts that work

  1. Write for the ear. Short sentences, one idea each. Read it aloud before sending.
  2. Use punctuation for pauses. Commas and full stops give the voice natural breaks.
  3. Write in the target language. Choose the matching voice_language.
  4. Keep the delivery in voice_instructions. Tone and pace go there; only the spoken words go in prompt.
  5. Spell out what must be read correctly: numbers, brand names and abbreviations.

A production workflow

  1. Prepare the portrait. One face, front-facing, well lit, cropped to the target shape.
  2. Pick the voice. Try two or three voices on the same short line at 720p.
  3. Set the delivery with voice_instructions.
  4. Render the final at 1080p with the chosen voice.
  5. Make other languages by changing the script and voice_language, with the same portrait.

About the model

P-Video-Avatar is developed by Pruna AI, a company specialized in making AI models faster and more efficient, as part of its P-Video family. Pruna describes it as "speech-driven avatar video from a single image", with "strong lip sync and multilingual speech", designed for spokesperson-style talking-head clips. Pruna has not published an architecture or a technical report for it.


Best use cases

  • Spokesperson and explainer clips: a presenter introduces a product, an offer or a service.
  • Customer messages: order updates, onboarding steps and support answers, as short videos.
  • Multilingual content: the same face speaking several languages.
  • Social content: vertical talking-head clips for Reels, Shorts and TikTok.
  • Characters and mascots: an illustrated brand character that speaks.

Limitations

  • One image, one speaker. The model animates the face in your image; it does not stage scenes or camera moves.
  • Scripts up to 200 characters per request on DEVUP AI. Split longer messages into several clips.
  • Your own audio (lip sync to an uploaded recording) is not available on DEVUP AI yet; the speech is generated from the script.
  • Identity is harder to keep with side angles, covered faces or low-resolution images.
  • 1080p maximum.
  • Consent matters. Only animate people who have agreed to it, and never make a real person appear to say something they did not say. Review every output before publishing.

Resources