Skip to main content
bytedance avatar

OmniHuman 1.5 API

bytedance/omnihuman/v1.5

Animate a still photo of a person to speak and move in sync with an audio track, producing a natural talking-head video.

0.16 per second of output video

Model Input

Input

URL of the source photo of the person to animate.

URL of the audio track the person should speak or sing. Keep audio under 30s at 1080p, under 60s at 720p.

Optional text prompt guiding the motion, gestures, and performance. Leave empty to let the audio drive the animation.

Optional mask image. When the photo has more than one person, only the person inside the white region of the mask will be animated to speak.

Generate faster with a slight quality trade-off. No price impact.

Output resolution. 1080p limits input audio to 30s; 720p allows up to 60s.

You need to be logged in to run this model and view results.
Log in

Model Output

Output

Loading
Generated in 169.322 seconds
Logs (1 lines)

Model Example Requests

Examples

Example output 1Example output 2

OmniHuman 1.5 API

OmniHuman 1.5 is a image-to-video AI model by bytedance. On ModelRunner it runs through a REST API or via MCP from any AI assistant, at $0.16 per second of video.

POST https://queue.modelrunner.run/bytedance/omnihuman/v1.5

cURL

# Submit a request to the queue. Input fields go at the top level of the
# body. The optional reserved "metadata" object holds your own flat string
# tags — stored on the request, never sent to the model; filter later with
# GET https://queue.modelrunner.run/requests?metadata=<url-encoded JSON>.
curl -X POST https://queue.modelrunner.run/bytedance/omnihuman/v1.5 \
  -H "Authorization: Key $MRUN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "natural presenter delivering the line, subtle head movement",
    "audio_url": "https://media.modelrunner.ai/v293WP0BkvLcoXC3MJLud.mp3",
    "image_url": "https://media.modelrunner.ai/ho4HXHjCrHjv7MZs-omnihuman_v15_input_image.png",
    "resolution": "720p",
    "turbo_mode": true,
    "metadata": {
      "project": "my-project"
    }
  }'
# → { "request_id": "...", "status_url": "...", "response_url": "..." }

# Poll status_url until "COMPLETED", then fetch the result
curl "https://queue.modelrunner.run/bytedance/omnihuman/v1.5/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/bytedance/omnihuman/v1.5/requests/$REQUEST_ID" \
  -H "Authorization: Key $MRUN_API_KEY"

JavaScript

import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("bytedance/omnihuman/v1.5", {
  input: {
    "prompt": "natural presenter delivering the line, subtle head movement",
    "audio_url": "https://media.modelrunner.ai/v293WP0BkvLcoXC3MJLud.mp3",
    "image_url": "https://media.modelrunner.ai/ho4HXHjCrHjv7MZs-omnihuman_v15_input_image.png",
    "resolution": "720p",
    "turbo_mode": true
  },
});
console.log(result);

Python

import os
import requests

headers = {"Authorization": f"Key {os.environ['MRUN_API_KEY']}"}

submitted = requests.post(
    "https://queue.modelrunner.run/bytedance/omnihuman/v1.5",
    headers=headers,
    json={
      "prompt": "natural presenter delivering the line, subtle head movement",
      "audio_url": "https://media.modelrunner.ai/v293WP0BkvLcoXC3MJLud.mp3",
      "image_url": "https://media.modelrunner.ai/ho4HXHjCrHjv7MZs-omnihuman_v15_input_image.png",
      "resolution": "720p",
      "turbo_mode": true
    },
).json()

# Poll submitted["status_url"] until "COMPLETED", then:
result = requests.get(submitted["response_url"], headers=headers).json()

Input parameters

Input parameters of OmniHuman 1.5
NameTypeRequiredDescription
image_urlstring (uri)yesURL of the source photo of the person to animate.
audio_urlstring (uri)yesURL of the audio track the person should speak or sing. Keep audio under 30s at 1080p, under 60s at 720p.
promptstringnoOptional text prompt guiding the motion, gestures, and performance. Leave empty to let the audio drive the animation.
mask_urlstringnoOptional mask image. When the photo has more than one person, only the person inside the white region of the mask will be animated to speak.
turbo_modebooleannoGenerate faster with a slight quality trade-off. No price impact. Default: false.
resolutionenumnoOutput resolution. 1080p limits input audio to 30s; 720p allows up to 60s. One of: 720p, 1080p. Default: "1080p".

Machine-readable: OpenAPI schema · llms.txt

Use OmniHuman 1.5 from Claude & Cursor (MCP)

Point Claude Code, Claude Desktop, Cursor, or any MCP client at the ModelRunner MCP server and OmniHuman 1.5 becomes a tool your assistant can call directly — it authorizes via OAuth (no API key in config) and runs this model with the run_model tool using the endpoint bytedance/omnihuman/v1.5.

MCP client config (Claude Desktop, Cursor)

{
  "mcpServers": {
    "modelrunner": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.modelrunner.run/mcp"]
    }
  }
}

Claude Code

claude mcp add --transport http modelrunner https://mcp.modelrunner.run/mcp

Then ask your assistant, for example: “Run bytedance/omnihuman/v1.5 on ModelRunner to generate video”. MCP setup guide.

Model Details

Model Details

OmniHuman 1.5 turns a single still photo of a person and an audio track into a talking-head video: the subject's mouth, expression, and head/body motion are animated to match the speech or singing in the audio, with an optional text prompt to steer the overall motion and performance. Provide a clear portrait plus the audio you want them to deliver and you get back an MP4 of that person speaking it. Its strength is tight audio-driven lip and facial sync with believable, non-robotic body movement from just one image.

## Best for - Turning a headshot or portrait into a spokesperson video that lip-syncs to a voiceover or narration - Avatar and digital-presenter clips for explainers, ads, training, and product demos - Making a character or illustration sing or speak in time with a supplied audio track - Localized/dubbed talking-head clips where you already have the translated audio - Quick social or UGC-style talking-head content from a single photo plus audio

## Choose another model when - You already have a talking-head video and only need to re-sync its lips to new audio rather than animate a still photo — use a lip-sync (video-to-video) model - You want to animate a scene or object from a text prompt with no driving audio — use an image-to-video or text-to-video model - You need a generic image-to-video clip with no speech and no audio track to drive the motion — use a standard image-to-video model

## Tips - Use a clear, front-facing photo with the full face visible and unobstructed for the most accurate sync - Audio length is capped by resolution: keep audio under 30s at 1080p, under 60s at 720p - Use `prompt` to guide gestures, energy, and camera feel (e.g. "calm presenter, slight head nods"); leave it empty to let the audio drive everything - Set `mask_url` to a mask image when the photo contains more than one person — only the person inside the white region of the mask will be animated to speak - `turbo_mode` trades a little quality for faster generation at no extra cost

## Limitations - Built for human subjects driven by an audio track; non-human subjects or audio with no clear speech/vocal signal give weaker results - Very long clips must be split to stay within the per-resolution audio-duration limits

To run via the ModelRunner JavaScript client: ```js import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("bytedance/omnihuman/v1.5", { input: { image_url: "https://media.modelrunner.ai/ho4HXHjCrHjv7MZs-omnihuman_v15_input_image.png", audio_url: "https://media.modelrunner.ai/v293WP0BkvLcoXC3MJLud.mp3", prompt: "natural presenter delivering the line, subtle head movement", resolution: "1080p", }, }); ```