Nodes/KIE.ai Nodes Next/Omnihuman 1.5
ComfyUI Node

Omnihuman 1.5

Make a portrait talk, and make one person in the crowd talk

By felipederosilva·Created about a month ago·Updated a day ago· 3
Omnihuman 1.5
  • image_url
  • audio_url
  • video
  • url
  • all_urls_json
  • task_id
  • raw_json
  • credits_consumed
  • credits_left
◄promptA person speaking naturally with gentle expressions.►
◄mask_url[ "https://your-domain.com/image/mask.png" ]►
◄output_resolution1080►
◄pe_fast_modefalse►
◄seed-1►
◄timeout_seconds1200►
◄callback_url►

What it is

This is the hosted OmniHuman 1.5 endpoint: you give it a still portrait and an audio track, it gives you video of that person speaking and moving to the audio. Audio-driven avatar work - the same job the local stack calls InfiniteTalk or LongCat Avatar (docs/knowledge/audio-generation.md § 3), except you don't need the VRAM and you're paying per clip.

The interesting part isn't the basic case, it's the mask. OmniHuman accepts an optional mask, which means you can make one person in a group shot speak while everyone else stays still. That's the thing local audio-driven avatars mostly make you fight for, and the pack ships the two helper nodes that produce the mask for you - see the Subject Detection and Human Identification articles in this folder for that loop.

How it works

The node is generated from KIE's request schema for the endpoint. image_url and audio_url are native IMAGE and AUDIO sockets, so the pack uploads both to KIE's storage and substitutes the URLs - you never host anything. The job runs as a task and the node polls until it finishes or timeout_seconds (1200 seconds by default, 20 minutes) expires, then the finished clip is downloaded as a ComfyUI VIDEO.

Inputs and outputs

Required:

  • image_url (IMAGE) - the portrait to animate. Front-facing, single subject, face taking up a decent share of the frame is the conventionally safe input.
  • audio_url (AUDIO) - the driving track. Any AUDIO output works: a TTS node, an audio loader, a song.
  • prompt (STRING, required) - how the person should perform, e.g. "A person speaking naturally with gentle expressions." The tooltip notes it's limited to Chinese, English, Japanese, Korean, Spanish and Indonesian, recommends ≤300 characters, and caps at 1000.

Optional:

  • mask_url (STRING, JSON array of URLs) - this is the one that catches people out. It stays a text field because KIE wants a list of hosted mask URLs, so you can't wire an IMAGE into it. Use OmniHuman 1.5 Subject Detection to generate the mask, then paste (or wire) its URL here. Multiple masks are supported, and this is how you pick which subject speaks.
  • output_resolution - 1080 (default) or 720.
  • pe_fast_mode - a speed/quality trade. Off by default; turn it on when you're iterating.
  • seed - -1 means random. A fixed positive integer with everything else identical gives you a highly consistent re-run.
  • timeout_seconds, callback_url.

Outputs: video, url, all_urls_json, task_id, raw_json, credits_consumed, credits_left.

Install

Manager: search KIE-Nodes-Next (author felipederosilva) and install, then restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next

Then Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key. Validated on save, shown as a masked fingerprint, with a ✅ CONNECTED status and your credit balance. KIE_API_KEY in the environment overrides the saved key. Dependencies are only requests, Pillow, numpy, PyYAML. The Windows .vbs installer in dist/ handles Desktop and Portable installs; use v0.3.1+ so old backups can't be imported as nodes.

Where people get burned

The mask is a URL list, not a socket. Wiring an IMAGE into mask_url does nothing useful - it's a string field with a JSON array default. Generate the mask with Subject Detection, get a URL, put it there.

Audio drives the performance, so pick it carefully. Pacing and pauses in the track become head movement and mouth shape. A rushed TTS read produces a rushed-looking avatar.

1080p and a 20-minute ceiling. Long audio at 1080 with a busy queue can hit timeout_seconds. Raise it before concluding the run failed.

The prompt's language list is a real limit. It's not a free-form style box - the endpoint documents six supported languages, and a 1000-character cap.

Per-clip pricing. Avatar video is billed like video, not like image. Iterate at 720p with pe_fast_mode on, then spend on the final pass.

Where this sits versus local. InfiniteTalk is the fast local default and LongCat is the quality-at-a-cost pick; both need a card and a stack that behaves. This node is the option when neither is available, or when you specifically want the masked multi-person case.

CategoryKIE Next/Video/OmniHuman

Inputs (9)

NameTypeDefaultDescription
image_urlIMAGE—
audio_urlAUDIO—
promptSTRINGA person speaking naturally with gentle expressions.Optional prompt text. Limited to Chinese, English, Japanese, Korean, Spanish, and Indonesian. Recommended 300 characters or less. Maximum length: 1000 characters.
mask_urloptSTRING[ "https://your-domain.com/image/mask.png" ]Optional mask image URL(s). To have a specific subject in the image speak, use 'Subject Detection' to get the corresponding mask image and pass it as input. Accepted file types: image/jpeg, image/png, image/webp. Max file size: 10MB. Multiple file upload is supported, up to 5 files.
output_resolutionoptCOMBO1080Output video resolution. - `720`: 720P - `1080`: 1080P (default)
pe_fast_modeoptBOOLEANfalseFast mode. Sacrifices some quality to speed up generation. Default value: `false`.
seedoptINT-1-2147483648–2147483647Random seed. Default is `-1` (random). When using the same positive integer and keeping all other parameters identical, the result will be highly consistent.
timeout_secondsoptINT120030–7200—
callback_urloptSTRINGOptional KIE callback URL. Leave empty for normal ComfyUI use.

Outputs (7)

NameTypeDescription
videoVIDEO—
urlSTRING—
all_urls_jsonSTRING—
task_idSTRING—
raw_jsonSTRING—
credits_consumedFLOAT—
credits_leftFLOAT—