OmniHuman-1.5
Same Party Trick, Now With a Mask and a Fast Lane
- image
- mask
- video
OmniHuman-1.5 is the follow-up to ByteDance's audio-driven human animation model, and it's the one I'd reach for of the two. Same core trick - one image of a person plus an audio clip becomes a talking, moving video - but 1.5 adds two genuinely useful things: a mask input that tells the model what is allowed to move, and a fast mode that trades a little quality for much quicker iteration. Still fully closed-source and cloud-hosted, so it's a pay-per-run node, but for iterating on a talking-head shot it earns its keep.
How it works
Like v1, the audio clip is the puppeteer: it conditions lip sync, expression, and motion on the audio signal. The request goes up to Runware's cloud, ByteDance's model renders, and a native VIDEO comes back. The new mask input is the interesting addition - feed it a mask and the model restricts animation to that region, which is exactly what you want when you have a still background and only the person should move, or when you want to keep part of the frame frozen.
The inputs that matter
- image (IMAGE, required) - the person. A clear front-facing shot still does the heavy lifting; this is your identity anchor.
- audio (STRING, required) - the driving audio as a UUID or URL. Clean clip, one voice.
- mask (IMAGE, optional) - the v1.5 upgrade. Restrict animation to the masked region. Great for keeping backgrounds rock-steady. Leave it empty to animate everything.
- seed - the v1.5 upgrade number two. v1 didn't expose it; 1.5 does, so you can lock a take and reproduce it.
- providerSettings.bytedance.fastMode (BOOLEAN) - the accelerated pipeline. Use it for exploration, switch it off for the final render.
- numberResults (1–4) - seed-based variations, the cheap hedge on which take nails the expression.
- outputFormat / outputQuality - delivery format (MP4/WEBM/MOV) and compression. Same as the rest of the video catalog.
- safety - the usual toggle gating
safety.checkContentandsafety.mode(none/fast/full). With human animation, leaving a content check on for shared workflows is cheap insurance; the node reports the result in its title bar.
Wiring it up
Output is video (native VIDEO). Source the image from anywhere in your graph - a generation node, a loaded photo - and the audio from a URL or uploaded UUID. If you're using the mask, it's an IMAGE too, so you can build it locally (a loaded mask, a black-white composite) and let the model do the rest.
Install and setup
The pack installs once and every node comes along: ComfyUI Manager → "Runware" → install → restart, or clone and pip install -r ComfyUI-Runware/requirements.txt. Dependencies are just runware-sdk, pillow, and soundfile. API key via Settings → Runware API key, RUNWARE_API_KEY, or runware auth login, plus funded credits - the community's standard gripe is the ~$20 minimum top-up with a card on file, and video runs burn credits faster than images, so watch the per-run cost on the title bar.
Troubleshooting
- Video appears as a path, not a VIDEO socket - older ComfyUI lacks
VideoFromFile, and the pack falls back to saving to the output folder. The file's there; grab it. - Fast mode output is rougher than expected - that's the trade, not a bug. Iterate in fast mode, flip it off for the final.
- Everything animates when you wanted a locked background - you skipped the mask. Feed one.
- Reproducibility - if a run gave you exactly the take you want, note the seed and reuse it; that's what it's for.
1.5 is the version I'd install for - the mask and the seed make it controllable where v1 felt like a lottery ticket. Still a cloud model, still per-run, but it's the most polished "photo speaks" node in the catalog.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| audio | STRING | The audio file used to drive the animation (UUID or URL). | |
| maskopt | IMAGE | — | |
| seedopt | INT | 11–9223372036854776000 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| numberResultsopt | INT | 11–4 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| providerSettings.bytedance.fastModeopt | BOOLEAN | false | Enable accelerated generation by optimizing the processing pipeline. |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. |
| safety.modeopt | COMBO | fast | Safety checking mode for video generation. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | MP4 | File format for the generated video. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |