Photo + audio → talking video
A single front-facing portrait and an audio track are all the input there is. Lip-sync, head motion and expression come from the audio.
Send a photo of a face and a piece of speech; get back a video of that face
Learn more about Avatar (Cloud)Audio up to 60s at 720p. The video is exactly as long as the audio, and that is what you pay for.
Sign in to run this.
Send a photo of a face and a piece of speech; get back a video of that face saying it, with the lips and head motion matched to the audio. The engine is BytePlus OmniHuman, called as a cloud service — there is no queue behind a GPU of ours, so a job's wait does not depend on what else is rendering.
The output is exactly as long as the audio you send, and that is also what you pay for. Nothing is generated beyond the end of the speech.
One asynchronous job: submit, get a job id, poll GET /v2/jobs/{job_id}.
A single front-facing portrait and an audio track are all the input there is. Lip-sync, head motion and expression come from the audio.
The video ends when the speech ends, so the duration you are billed for is the duration you supplied. No padding, no rounding up to a fixed clip length.
omnihuman-1-5 renders 720p up to 60s or 1080p up to 30s; omnihuman-1-0 renders 720p up to 15s. Audio longer than the tier's limit is rejected before the job starts, so an over-long clip costs nothing.
avatar-image-evaluate scores a photo for face visibility and sharpness. It is synchronous and cheap; running it first turns a wasted generation into a two-credit answer.
The gateway request id is the idempotency key — a retried submit returns the existing job instead of starting (and charging for) a second render.
Course narration with a presenter
Turn a recorded voice-over into a presenter reading it, without filming anyone.
Localised spokesperson
Dub a message into another language, then re-voice the same portrait with the translated audio.
Product and support clips
Short explainers where a face reads a script that changes often enough that filming is impractical.
input
imageUrl (a portrait photo) and audioUrl (the speech). Optional model and resolution.
output
A job id immediately; when the job completes, result_data.data.output_url carries the finished MP4 as a presigned URL, and result_data.data.duration_seconds is the billed length.
imageUrlrequiredstringPublic URL of the portrait photo. One clearly visible, front-facing face.
audioUrlrequiredstringPublic URL of the speech audio. MP3 is documented; WAV is verified. The video will be exactly this long.
modelstring · default: omnihuman-1-5Generation model. omnihuman-1-5 supports longer audio and 1080p.
enum: omnihuman-1-5, omnihuman-1-0
resolutionstring · default: 720pOutput resolution. 1080p is available on omnihuman-1-5 only and halves the audio limit to 30s.
enum: 720p, 1080p
expected_durationnumberLength of your audio in seconds. Used only to size the credit hold at submission; the final charge is always the real output length. Omit it and the tier maximum is held instead.
Billed per second of output video. Because the output ends with the audio, the number of seconds you are charged for is the length of the audio track you submitted — known before you send it.
The charge is settled from the finished video's real duration. At submission the gateway holds an estimate: expected_duration when you send it, otherwise the maximum the chosen tier allows. A held estimate is not a charge; the difference is released when the job settles.
Async jobs are billed only when they complete successfully. A rejected submit (audio too long, unreachable URL, failed portrait check) costs nothing.
A 10-second clip costs 240 credits, a 30-second clip 720, a 60-second clip 1440.
The portrait check (avatar-image-evaluate) is 2 credits per call and is charged separately.