Seedream 5.0 Pro अब लाइव है | Image Generator में आज़माएं →
साइन इन

Avatar Omni Human

bytedance /

OmniHuman turns a single portrait photo into avatar video with lifelike motion and expressions ($0.12/sec). Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

digital-human
इनपुट

निष्क्रिय

$0.12प्रति रन·~83 / $10

उदाहरणसभी देखें

संबंधित मॉडल

README

Avatar Omni Human

Transform any portrait into a realistic talking avatar with Avatar Omni Human. Simply upload a photo and an audio clip, and watch the subject come to life with perfectly synchronized lip movements, natural expressions, and lifelike head motion — ideal for virtual presenters, digital content, and personalized video messages.

Why It Looks Great

  • Realistic lip sync: Advanced audio analysis ensures precise mouth movements matching every syllable.
  • Natural expressions: Generates authentic facial expressions and subtle head movements.
  • Simple workflow: Just two inputs — an image and audio — for complete avatar generation.
  • High fidelity: Preserves the original portrait's likeness and quality.
  • Versatile audio support: Works with speech, singing, and various audio types.

Parameters

ParameterRequiredDescription
imageYesPortrait image of the person to animate (upload or public URL).
audioYesAudio file for lip synchronization (upload or public URL).
enable_base64_outputNoAPI only: Returns base64 string instead of URL.

How to Use

  1. Upload your image — drag and drop a clear portrait photo or paste a public URL.
  2. Upload your audio — add the speech or audio you want the avatar to perform.
  3. Run — click the button to generate.
  4. Download — preview and save your talking avatar video.

Pricing

Per-second billing based on audio duration.

MetricCost
Per second$0.12

Examples

Audio LengthCalculationTotal Cost
5s5 × $0.12$0.60
15s15 × $0.12$1.80
30s30 × $0.12$3.60
1m (60s)60 × $0.12$7.20
5m (300s)300 × $0.12$36.00

Best Use Cases

  • Virtual Presenters — Create AI spokespeople for videos, presentations, and training content.
  • Personalized Messages — Generate custom video messages from a single photo.
  • Content Localization — Dub content into different languages with matching lip movements.
  • Social Media Content — Produce engaging talking-head videos without filming.
  • E-learning & Training — Create instructor-led content from static presenter images.
  • Digital Avatars — Bring character portraits and illustrations to life with speech.

Pro Tips for Best Results

  • Use clear, front-facing portrait photos with good lighting for best lip sync accuracy.
  • Ensure the face is clearly visible and not obscured by hair, accessories, or shadows.
  • High-quality audio with minimal background noise produces more accurate synchronization.
  • Neutral or slightly open mouth expressions in the source image work best.
  • The subject's face should be a reasonable size in the frame — not too small or cropped.
  • Test with shorter audio clips first before processing longer content.

Notes

  • If using URLs for image or audio, ensure they are publicly accessible.
  • The enable_base64_output option is only available through the API.
  • Processing time scales with audio duration.
  • Best results come from portrait-style images with clear facial features.
  • Works with various audio formats — speech, narration, singing, and more.
नोट:यह वेबसाइट तृतीय पक्षों द्वारा प्रदान किए गए AI मॉडलों का उपयोग करती है।

Avatar Omni Human API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/bytedance/avatar-omni-human 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 Avatar Omni Human 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"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/bytedance/avatar-omni-human" \
  -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=$(printf '%s' "$TASK" | jq -r '.urls.get // empty')
if [ -z "$RESULT_URL" ]; then
  RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
fi

# 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) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "$STATUS" >&2; exit 1 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/bytedance/avatar-omni-human";
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"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
  `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"].includes(result.status)) throw new Error(JSON.stringify(result));
  if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
  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"
}

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/bytedance/avatar-omni-human", 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 = task.get("urls", {}).get("get") or 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"}:
        raise RuntimeError(result)
    if status not in {"created", "processing"}:
        raise RuntimeError(f"Unexpected status: {status}")
    time.sleep(2)

Avatar Omni Human API — Frequently asked questions

What is the Avatar Omni Human API?

Avatar Omni Human is a ByteDance model for talking-avatar generation, exposed as a REST API on WaveSpeedAI. OmniHuman turns a single portrait photo into avatar video with lifelike motion and expressions ($0.12/sec). 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 Avatar Omni Human 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/bytedance/bytedance-avatar-omni-human.

How much does Avatar Omni Human cost per run?

Avatar Omni Human starts at $0.12 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 Avatar Omni Human accept?

Key inputs: `image`, `audio`, `enable_base64_output`. 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/bytedance/bytedance-avatar-omni-human.

How long does Avatar Omni Human take to generate?

Median end-to-end generation time on WaveSpeedAI is around 120 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.

Can I use Avatar Omni Human outputs commercially?

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

Avatar Omni Human | AI Digital Human API | WaveSpeedAI