p-video-avatar
- 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.
- 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-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.
PrunaAI/p-video-avatarAt a glance
| Developer | Pruna AI |
| Model family | P-Video |
| Task | Talking-head video from a single image |
| Input | A portrait image (required) and a script (prompt) |
| Output | An MP4 video of the person speaking, with the speech in the audio track |
| Voices | 30 built-in voices (default zephyr_female) |
| Languages | 10 (default english_us) |
| Resolutions | 720p · 1080p |
| Default resolution | 720p |
| Aspect ratio | Follows your image |
| Script | Up to 200 characters per request |
| Clip length | Follows 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 send | It does |
|---|---|
image | The face and the frame: the video starts on this picture |
prompt | The script: the words the person says |
voice | Who speaks: one of 30 voices |
voice_language | The language of the speech |
voice_instructions | How 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
| Option | Values | Default | What it does |
|---|---|---|---|
image | a portrait image | required | The person who speaks, and the first frame |
prompt | text, up to 200 characters | required | The script the person says |
voice | one of the 30 voices below | zephyr_female | The voice |
voice_language | one of the 10 languages below | english_us | The language of the speech |
voice_instructions | text, up to 500 characters | none | Delivery: tone, pace, emotion |
resolution | 720p, 1080p | 720p | Output resolution |
Voices
| Female | Male |
|---|---|
zephyr_female (default) | puck_male |
kore_female | charon_male |
leda_female | fenrir_male |
aoede_female | orus_male |
callirrhoe_female | enceladus_male |
autonoe_female | iapetus_male |
despina_female | umbriel_male |
erinome_female | algenib_male |
laomedeia_female | algieba_male |
achernar_female | schedar_male |
gacrux_female | achird_male |
pulcherrima_female | zubenelgenubi_male |
vindemiatrix_female | sadachbia_male |
sulafat_female | sadaltager_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)
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)
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)
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)
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
{
"data": [
{
"url": "<video-url>"
}
],
"_devup": {
"cost_dzd": "<cost_dzd>",
"balance_dzd": "<balance_dzd>",
"request_id": "req_<id>"
}
}data[0].urlis 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 indata[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:
{
"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:
{
"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
- Write for the ear. Short sentences, one idea each. Read it aloud before sending.
- Use punctuation for pauses. Commas and full stops give the voice natural breaks.
- Write in the target language. Choose the matching
voice_language. - Keep the delivery in
voice_instructions. Tone and pace go there; only the spoken words go inprompt. - Spell out what must be read correctly: numbers, brand names and abbreviations.
A production workflow
- Prepare the portrait. One face, front-facing, well lit, cropped to the target shape.
- Pick the voice. Try two or three voices on the same short line at 720p.
- Set the delivery with
voice_instructions. - Render the final at 1080p with the chosen voice.
- 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.
