ByteDance OmniHuman 2.0
bytedance/omnihuman/2.0OmniHuman 2.0 by ByteDance turns a single image and an audio track into a talking or performing video that follows the audio.
- Base price
- $0.53USD / run
- Execution
- async
- Model type
- video
- Input fields
- 3
Try the model
Playground
PNG, JPEG, WebP, or GIF · 20 MiB maximum
Examples
Select an example to load its inputs and result into the playground.
Model card
Specifications
Pricing
- Base price
- $0.53 / run
Context & modalities
- Input
- Schema-defined
- Output
- video
Capabilities
- Chat
- Not supported
- Vision
- Not supported
- Reasoning
- Not supported
- Structured output
- Not supported
- Function calling
- Not supported
- Audio input
- Not supported
Access
- Provider
- ByteDance
- Model ID
- bytedance/omnihuman/2.0
- Execution
- async
- Base URL
- https://api.sandbase.ai
- API
- Unified Run API
- Endpoint
- /v1/run
API README
ByteDance OmniHuman 2.0
OmniHuman 2.0 turns a single image and an audio track into a talking or performing video, with lip sync, gestures and expressions that follow the audio.
Fields
| Field | Type | Default | Notes |
|---|---|---|---|
image | image URL, required | — | Person or character to animate. 300–6000 px per side, aspect ratio 0.4–2.5, up to 30 MB. |
audio | audio URL, required | — | Speech or song, WAV or MP3, 4–300 seconds, up to 15 MB. |
prompt | string | — | Optional direction for scene, gestures and camera. |
Billing
$0.105 per output second; the output is as long as the audio. The quote before submission assumes 5 seconds when the audio length cannot be read.
| Audio | Price |
|---|---|
| 5s audio | $0.525 |
| 30s audio | $3.15 |
| 60s audio | $6.30 |
| Failed runs are not charged. |
Prompting
- Describe gestures and camera; the lips follow the audio automatically.
Limits
- Audio must be 4–300 seconds.
Also on SandBase
Previous version: bytedance/omnihuman/1.5.
Start building
Send your first request
OpenAI-compatible endpoint with unified authentication and usage tracking.
# The quoted heredoc keeps Unicode and shell metacharacters unchanged.
result=$(curl --fail-with-body --silent \
-X POST "https://api.sandbase.ai/v1/run" \
-H "Authorization: Bearer $SANDBASE_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'SANDBASE_JSON'
{
"model": "bytedance/omnihuman/2.0",
"audio": "https://storage.googleapis.com/falserverless/example_inputs/omnihuman_v15_input_audio.mp3",
"image": "https://storage.googleapis.com/falserverless/example_inputs/omnihuman_v15_input_image.png"
}
SANDBASE_JSON
)
run_id=$(printf '%s' "$result" | jq -r .id)
for attempt in $(seq 1 120); do
status=$(printf '%s' "$result" | jq -r .status)
case "$status" in completed|failed|timeout) break ;; esac
sleep 2
result=$(curl --fail-with-body --silent \
-H "Authorization: Bearer $SANDBASE_API_KEY" \
"https://api.sandbase.ai/v1/run/$run_id")
done
status=$(printf '%s' "$result" | jq -r .status)
[ "$status" = completed ] || { echo "Generation ended: $status" >&2; exit 1; }
printf '%s\n' "$result"Choose your model
Compare models
| Model | Type | Default price | Released |
|---|---|---|---|
ByteDance OmniHuman 2.0This model ByteDance | Video | $0.53 / run | Oct 15, 2026 |
ByteDance | Video | $1.80 / run | Jul 1, 2026 |
ByteDance | Video | $1.80 / run | Jul 1, 2026 |
ByteDance | Video | $1.80 / run | Jul 1, 2026 |
ByteDance | Video | $0.60 / run | Jun 24, 2026 |
ByteDance | Video | $0.60 / run | Jun 24, 2026 |
Questions
FAQ
How do I call ByteDance OmniHuman 2.0 through SandBase?
Create a SandBase API key, then send requests with the model ID "bytedance/omnihuman/2.0" to Unified Run API (/v1/run) at https://api.sandbase.ai. The request examples on this page show the exact payload.
Do I need a separate ByteDance account?
No. One SandBase API key and balance gives you access to ByteDance OmniHuman 2.0 and the other models in the catalog; you do not need to sign up with ByteDance separately.
