Omnihuman 1.5 Human Identification
The ten-second pre-flight check that saves you a render
- image_url
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
What it is
The most boring node in this pack, and one of the more useful ones. Human Identification takes a single portrait, hands it to KIE's detection endpoint, and tells you whether that image actually contains a usable human subject - before you spend a 1080p avatar render on it.
That's it. It generates nothing. It has one input. But it sits upstream of the expensive step, and the expensive step is where bad inputs get discovered the hard way. If you've ever fed a badly framed portrait into an audio-driven avatar and gotten back a clip where the mouth moves in the wrong place, you already know what this check buys you. It's the same instinct as validating prompts and payloads before a generation call rather than after.
How it works
The node is generated from KIE's request schema for the human-identification endpoint, which documents exactly one field: the image. The pack uploads your IMAGE to KIE's storage, sends the task, and polls it until it completes or timeout_seconds (1200 by default) expires.
The honest caveat: this is an analysis endpoint, so what comes back is a result payload rather than media. Its sockets look like its siblings' - the Media-shaped output set is what the pack attaches to everything in the video family - but you're here for the URL and the raw JSON, which is where the actual answer lives. Don't go looking for a playable clip.
Inputs and outputs
Required:
- image_url (IMAGE) - the portrait to check. Per the endpoint's documented requirements, upstream of this that means JPG/PNG/JPEG, under 5MB, resolution below 4096×4096, and ideally one person facing the camera with the face occupying a decent portion of the frame.
Optional:
- timeout_seconds - 1200 by default; this call finishes long before that.
- callback_url - leave empty for normal ComfyUI use.
Outputs: video, url, all_urls_json, task_id, raw_json, credits_consumed, credits_left.
How to actually use it
Put it in front of OmniHuman 1.5: load your portrait, run the identification node, read raw_json (or pipe url into a text/note node so it's visible on the canvas). If the image passes, queue the avatar render with confidence. If it fails, you've spent a fraction of a cent instead of a 1080p clip.
The other pairing is with OmniHuman 1.5 Subject Detection. Identification answers "is there a usable human here at all"; subject detection answers "which human, and where are they". On a group shot you'll want both - identify first, then mask.
Install
Manager: search KIE-Nodes-Next (author felipederosilva) and install, then restart. Manual route:
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. The key is validated against KIE before it replaces a saved one; you get a masked fingerprint, ✅ CONNECTED, and the credit balance. KIE_API_KEY as an environment variable also works and takes priority. requirements.txt is only requests, Pillow, numpy, PyYAML.
Where people get burned
Expecting media out. Same trap as its Subject Detection sibling: the output sockets are shaped for video because of how the pack generates nodes from the catalog, not because a clip comes back. Read raw_json.
Treating a pass as a guarantee. "A human is in this image" is not "this image will animate well". Framing, occlusion and expression still decide the quality of the render.
No key, no node. Like every KIE node, this errors immediately without a saved API key or a KIE_API_KEY environment variable. Nothing is sent; you just get an error saying so.
Endpoints get retired. This is a small analysis endpoint on a live third-party catalog. If it stops resolving one day, run KIE • Refresh Model Catalog - the pack rebuilds its library from KIE's current docs, and the offline bootstrap covers the gap in the meantime.
Don't build your whole pipeline on it. It's a pre-flight check, not a validator you should depend on to gate automated runs - the failure mode of "detection says yes, render still disappoints" is common enough that a human eye on the first attempt is still worth the minute.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | IMAGE | — | |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |