Vidu Q4 Reference To Video
Hold the cast together instead of the first frame
- reference_image_urls
- reference_audio_1
- reference_audio_2
- reference_audio_3
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
What you're actually wiring up
This node does not run a model. No weights, no VRAM budget - your GPU only does a PNG encode on the way out. It's a well-behaved HTTP client pointed at KIE.ai, one of the reseller layers sitting in front of closed models, and it spends credits every time you hit Run. Prompts, images and audio leave the machine. That's the mechanism, not a bug.
So why bother? Every image-to-video node you already have takes one first frame and extrapolates. This one takes a set of references - 1 to 15 - plus a prompt that names them by number, and composes a shot out of them. That's the gap between "animate this picture" and "put these three people in this room and have one of them talk." The failure mode with local video models is precisely that drift: right in shot one, wrong by shot three, no cheap fix.
Vidu gets plenty of discussion as a Sora competitor and basically none about Q4. Reference-to-video as a workflow is trending hard in 2026; you're early on this endpoint.
How it works
The pack posts to KIE's createTask endpoint with the Vidu Q4 reference-to-video model. Images aren't sent as tensors - each one is uploaded to KIE's file storage as a PNG, and the returned URLs go into reference_image_urls in order. Then the node polls the task until it succeeds, downloads the MP4, and hands back a native ComfyUI VIDEO.
That ordering is the whole game. Batch frame 0 becomes "reference image 1", frame 1 becomes "reference image 2", because the uploader walks the tensor batch front to back. If your refs come out of a video batch or a merge, your prompt points at the wrong people.
Before anything uploads, the node checks the documented schema locally - required fields, enums, the 3–16 duration range, the 15-image cap - and fails on your machine with a readable error instead of spending a credit. Right-click → KIE Next · Check inputs & model controls runs the same inspection on demand.
The inputs worth setting
prompt is required and gets a proper multiline box, up to 20,000 characters. The author's tooltip is the instruction you need: refer to inputs by order - "the man in reference image 2 says … using reference audio 1." Vague prompts waste good references.
reference_image_urls is the required IMAGE socket and it takes a batch. One image is legal; fifteen is the cap. Want a specific order? Build an ImageBatch chain - don't trust whatever order your loader hands you. More isn't better either: past three or four you're splitting the model's attention, and the prompt has to work harder to keep them straight.
duration runs 3–16 seconds (default 5). resolution defaults to 1080p, with 540p / 720p / 2k / 4k available - it's preselected because KIE's request example uses it, not because it's free. aspect_ratio gives 16:9, 9:16, 1:1, 4:3, 3:4.
audio is on by default and generates synchronized dialogue and effects; kill it for a silent plate. Three optional AUDIO sockets - reference_audio_1 to reference_audio_3 - take voice references, and per KIE's spec they want MP3, 3–12 seconds each. timeout_seconds (default 1200) is the polling budget; callback_url is for webhooks, so leave it empty.
Outputs and what to plug in
video is the one that matters: send it to KIE • Preview Video to watch it in the graph, or KIE • Save Video to export to output/KIE-Videos/. url and all_urls_json hold the provider links, task_id is what KIE • Reuse Completed Video needs to re-fetch without resubmitting, and raw_json is the full response for when something looks wrong. credits_consumed and credits_left are right on the node, so you can see what a shot cost instead of guessing.
Installing it
Comfy Registry - comfy node install kie-ai-nodes-next - or search the pack title in ComfyUI Manager. The manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next && pip install -r requirements.txt
Restart, then go to Settings → KIE.ai Nodes Next → Connection, paste your KIE key, and wait for the ✅ CONNECTED row with a masked fingerprint. Dependencies are trivial - requests, Pillow, numpy, PyYAML. No torch upgrade, no model files. The key stays backend-side, out of your workflow JSON; env-var config is deliberately unsupported.
Where people get burned
Reference drift in the prompt is the classic one. Fifteen images and a one-liner means the model picks whichever refs it likes. Number them, describe the action, keep the cast small.
Batches over 15 fail locally before upload - usually someone feeding a whole frame sequence from KIE • Sample Video Frames straight in. Slice it down.
Big renders can outlive the 1200-second default and timeout after you've paid. Bump timeout_seconds to 3600 for a heavy shot.
And if the node is missing from the menu, the catalog sync probably hasn't run: the pack builds its node list from KIE's docs at startup on a 24-hour refresh, and the offline bootstrap may not include Vidu. Restart, let it sync, look again. Old Any KIE API workflows won't save you - that node is gone, replaced by one node per model.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | In the scene of reference image 1, the person in reference image 2 turns to the person in reference image 3 and says: "What are you doing?" | Text description of the video. Refer to inputs by order, e.g. "the man in reference image 2 says ... using reference audio 1". Up to 20,000 characters. |
| reference_image_urls | IMAGE | — | |
| durationopt | INT | 53–16 | Video length in seconds. Integer from 3 to 16. |
| resolutionopt | COMBO | 1080p | Output resolution. |
| aspect_ratioopt | COMBO | 16:9 | Output aspect ratio. |
| audioopt | BOOLEAN | true | Generate synchronized audio (dialogue and sound effects). Set false for a silent video. |
| reference_audio_1opt | AUDIO | — | |
| reference_audio_2opt | AUDIO | — | |
| reference_audio_3opt | AUDIO | — | |
| 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 | — |