Nodes/KIE.ai Nodes Next/Gemini Omni Character
ComfyUI Node

Gemini Omni Character

Register a face once, reuse it across shots

By felipederosilva·Created about a month ago·Updated about 22 hours ago· 3
Gemini Omni Character
  • image_urls
  • video
  • url
  • all_urls_json
  • task_id
  • raw_json
  • credits_consumed
  • credits_left
◄descriptionsA young female character with short silver hair and a futuristic utility jacket, calm, agile, and strongly cyberpunk in style.►
◄descriptionA young female character with short silver hair and a futuristic utility jacket, calm, agile, and strongly cyberpunk in style.►
◄audio_ids[ "audio_01hx8p0demo" ]►
◄character_nameJenny►
◄timeout_seconds1200►

Keeping the same face across a sequence of generated shots is the problem this node is aimed at, and it's aimed at it the API way: you register a character - a reference image plus a written description, optionally a voice - and get an ID back that the video node can reference. One decision up front, reused by every shot after it.

Why this is the interesting half of the Omni set

Character consistency is the part of AI video people actually fight with. The KB's write-up on the topic is honest about the state of the art: a reference image plus a prompt is not a universal identity lock, and how much consistency you get depends entirely on the model and the operation behind it. What a registration endpoint buys you is the cheap half of the fix - instead of re-attaching the same portrait to every shot and hoping, you attach an identifier the provider maintains, and the appearance description travels with it.

The description is where your taste goes. Naming only the face gets you a generic face; naming the hair, the wardrobe silhouette, the overall read gets you something repeatable. KIE's own example prompt on this page is a good model to copy in shape: age range, hair, clothing, temperament, style.

And the honest caveat: this is a closed Google-family model accessed through a reseller, so the provider's filters apply to what the registered character can look like. Some identities just won't render, and that's upstream policy, not a node bug.

Inputs

  • image_urls - required, and it's a native IMAGE socket, so you connect a Load Image straight in. Multi-image reference is the intended use.
  • descriptions - required text: the appearance and identity description. KIE's page carries a long example, and it's worth writing in that register: who they are, what they wear, how they carry themselves.
  • description - a second, optional copy of the same field. KIE's documentation carries both spellings, and this pack surfaces both rather than guessing which one the endpoint honours. Fill them consistently.
  • character_name - a label, defaulting to Jenny.
  • audio_ids - a JSON array string of voice IDs minted by the Omni audio endpoint. The tooltip spells the shape out: ["audio_01hx8p0demo"]. Connect a voice here to give the character a speaking identity as well as a face.
  • timeout_seconds - how long the node waits, default 1200s, 30–7200.

Outputs

video, url, all_urls_json, task_id, raw_json, credits_consumed, credits_left. Note what's not there: a dedicated character-ID socket. The ID you need for the next step lives in task_id / raw_json - read it out of the response and paste it into the video node's character_ids field. That's the workflow, and it's why running this node before the video node matters.

Install

ComfyUI Manager (search the pack title), or:

cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
pip install -r ComfyUI-KIE-Nodes-Next/requirements.txt

Restart. Dependencies are requests, Pillow, numpy, PyYAML - nothing local to run, no model files. Each call is metered on KIE's side.

Key: Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key; it's checked against KIE before replacing a saved key, and you get a masked fingerprint plus CONNECTED. Servers can use KIE_API_KEY instead, which takes priority.

Gotchas

Both description fields. Because the card exposes descriptions and description, it's easy to fill one, leave the other defaulted, and wonder which text the character actually got. Fill both the same, or test once and see what comes back in raw_json.

The reference image leaves your machine. Every node in this pack uploads connected media to KIE. That's the mechanism, not a bug - the pack hides the URL plumbing, not the network call.

ID handoff is manual. No socket carries the character ID forward, so a workflow that reruns this step will generate fresh IDs. If you have an approved character, store its ID and put it straight into the video node.

Catalogue drift. Node fields come from KIE's live documentation - the pack indexes it at startup and re-checks about daily - so an endpoint that gains a field will show up after a restart rather than after a plugin update.

CategoryKIE Next/Video/Google/Gemini Omni

Inputs (6)

NameTypeDefaultDescription
image_urlsIMAGE—
descriptionsSTRINGA young female character with short silver hair and a futuristic utility jacket, calm, agile, and strongly cyberpunk in style.Character description used to define the appearance, identity, style, clothing, or personality of the character.
descriptionoptSTRINGA young female character with short silver hair and a futuristic utility jacket, calm, agile, and strongly cyberpunk in style.—
audio_idsoptSTRING[ "audio_01hx8p0demo" ]Array of audio IDs generated by the `gemini-omni-audio` endpoint. These can be used to provide voice traits, tone, or persona guidance for the character.
character_nameoptSTRINGJennyCharacter name
timeout_secondsoptINT120030–7200—

Outputs (7)

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