Gemini Omni Video
One node that takes images, clips, voices and characters at once
- image_urls
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Most video nodes take a prompt and maybe a start frame. This one takes a prompt, an image batch, trimmed source clips, registered characters and voice IDs, then lets you ask for 4K. It's the assembly point for everything else in the Gemini Omni group, and the budget rules are the part you need to read before you queue anything.
What it is
A text/image/character-to-video node on KIE's Gemini Omni API. The reason it exists rather than a generic API node is the pack's whole design decision - one ComfyUI node per KIE model/operation, with the provider's documented request fields turned into real widgets and the URL plumbing replaced by native IMAGE, VIDEO and AUDIO sockets. Connected media gets uploaded to KIE automatically.
That design is why people put up with a marketplace in the first place. The community's argument for KIE is price against Comfy's official API nodes - public comparisons have put some Google models roughly 40–60% cheaper through KIE's route - and the trade is that you're calling a reseller with its own model churn instead of a first-party integration. Both things are true; pick accordingly.
Inputs
prompt (required) - the shot, in prose. The default is a night-city push-in, which tells you the register they expect: camera language, action, subject.
duration - a string, 4 by default. Documented values are 4, 6, 8 and 10 - and the tooltip is explicit that when you supply video input, the model decides the output length and this setting is ignored.
image_urls - a native IMAGE socket. Your reference images.
resolution - 720p, 1080p or 4k. Pick deliberately; this is the biggest cost lever on the node.
aspect_ratio - 16:9 or 9:16. That's it.
seed - INT, 0 by default. KIE notes results can still vary at a fixed seed, so treat it as a nudge, not a reproducibility guarantee.
audio_ids - a JSON array string of voice IDs from the Omni audio endpoint. Max 3 items. Good for narration or dialogue.
character_ids - a JSON array string of IDs from the Omni character endpoint. This is where the budget bites: each character consumes 1 image slot, the base limit is 7 image slots, and if you also pass a video_list that eats 2 slots, leaving fewer for characters.
video_list - a JSON array of clips to work from. Each entry takes a URL plus a trim range (start / ends). Documented limits: 100MB per file, 30 seconds max duration, and ends has to be greater than start.
timeout_seconds - 1200 by default, 30–7200.
callback_url - leave empty for normal ComfyUI use.
Outputs
video, url, all_urls_json, task_id, raw_json, credits_consumed, credits_left. The video socket is a real ComfyUI VIDEO object, so it goes into a Save Video, a preview, or another node that accepts video. url is the primary result, all_urls_json keeps everything the API reported (useful when a job returns extra artifacts), and the credit floats plus the on-node receipt tell you what the render cost.
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: requests, Pillow, numpy, PyYAML. Nothing renders locally - this node is a client, and the GPU work happens on KIE's side at per-call prices.
Key: Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key; validated before saving, masked fingerprint afterwards. Headless: KIE_API_KEY wins over the saved key.
Gotchas
Media slots are the trap. Characters and source clips compete for the same 7-slot image budget. Two characters plus a video_list is 4 slots before you've added an image reference.
JSON fields are strings. audio_ids, character_ids and video_list are text fields containing JSON arrays. Malformed JSON fails locally rather than at KIE - which is the good outcome, but it still means the node errors before spending anything.
Duration is a red herring with video input. It's ignored by design when a source clip is present. Don't tune it and wonder why the length didn't change.
4K takes time. Raise timeout_seconds if you're queuing a long 4K job rather than assuming the run hung.
The card list is provider-driven. Nodes are generated from KIE's live API documentation at startup with a daily re-check, so field-level changes arrive with a restart, and the occasional model disappearing is upstream, not your install.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Create a futuristic night city short film with a slow push-in shot as the character walks out from a neon-lit street. | Video prompt used to describe the target content, style, camera language, or character actions in the generated video. |
| duration | COMBO | 4 | The duration of the generated video in seconds. Available values are 4, 6, 8, and 10. When video input is provided, the output duration is determined by the model automatically. This duration parameter will not take effect.Note: when video input is provided, the output duration is determined by the model automatically. This duration parameter will not take effect. |
| image_urlsopt | IMAGE | — | |
| audio_idsopt | STRING | [ "audio_01hx8p0demo" ] | Array of audio IDs generated by the `gemini-omni-audio` endpoint. Useful for narration, dialogue, music, or audio guidance in the generated video. Max 3 items. |
| video_listopt | STRING | [ { "url": "https://example.com/assets/source-video.mp4", "start": 0, "ends": 10 } ] | Array of video clips. Each item defines a source video and the trim range to use during generation. Video limits: - Each file must be no larger than `100MB` - Video duration must not exceed `30s` - `ends` should be greater than `start` - The difference between the end time and the start time must not exceed `10s`. - Max 1 items. Equal 2 images |
| character_idsopt | STRING | [ "character_01hx8p0demo" ] | An array of character IDs generated by the `gemini-omni-character` API. Used to provide character appearance, identity, or person references for the video. Each character_id uses 1 image slot. The base limit is 7 image slots; if video_list is also provided, video_list uses 2 image slots, so character_ids can contain up to 3 IDs. If the incoming character_id is a dual-image set [portrait + body], it will occupy two slots. |
| aspect_ratioopt | COMBO | 16:9 | The aspect ratio of the generated video. `16:9` is landscape, and `9:16` is portrait. |
| seedopt | INT | 0-2147483648–2147483647 | Random seed. Range: [0, 2147483647]. If not specified, the system generates a seed automatically. Fixing the seed can improve reproducibility, but results may still vary due to the model’s stochasticity. |
| resolutionopt | COMBO | 720p | The resolution of the generated video. Available values are 720p, 1080p, and 4k. |
| 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 | — |