Vidu Q3 · Image to Video
Sound Included, at 1080p and Seven Cents a Second
- image_url
- video
- task id
Vidu is the quiet one among the Chinese video labs - big in 2024 as "China's Sora competitor," then eclipsed by Kling and Hailuo in the conversation while it kept shipping. It's closed source, so there is no local option and no checkpoint to download: a hosted node like this one is the only way Vidu ever appears inside a ComfyUI graph.
This is the full Q3 tier. Opening frame plus a required prompt, one to sixteen whole seconds, up to 1080p, and - the part that changes your workflow - audio generated in the same pass. Not bolted on afterwards: the clip arrives already sounding like something.
What you're paying for
From $0.07 per second. Five seconds is about 35 cents; a full 16-second take is over a dollar. That's the expensive end of this pack's video range, and unlike the image nodes there's no flat fee to hide behind - duration and resolution are the bill, and they're both on the node. Set Max cost per run in Settings > SpicyAPI before you start experimenting, because "one more second" sixteen times adds up.
The node's badge shows the current rate for whatever combination you've picked, and it re-quotes on the way in, so the number you see isn't a guess.
How it works
image_url is a real IMAGE socket: Load Image or anything upstream that emits an image. The clip starts from that frame, and the still is uploaded to SpicyAPI when the node runs - the pack hashes and caches uploads per account for around twelve hours, so re-running with a tweaked prompt doesn't re-send the same picture.
The prompt is required here, and it means something specific: what happens after the opening frame. Action, camera, mood. Describing the still is wasted tokens; the model can see it.
Outputs: video (a VIDEO, so Save Video downstream) and task id - a string worth keeping, since it's what identifies the run in the console or to support. Neither of the outputs saves anything by itself; this isn't an output node.
The inputs that matter
- duration_seconds - 1 to 16, whole numbers. This is your bill and your shot length at once.
- resolution -
540p,720por1080p. One of the few nodes here that reaches 1080p. - movement_amplitude -
auto,small,medium,large. Leave it on auto and the model reads the opening frame; nudge it down when a shot drifts and up when it's too static. This is the dial people forget exists and then complain about "the model is too twitchy." - generate_audio - synchronised sound for the scene.
- bgm - a separate background music bed. These two are independent and both default on, which trips people up: switch off
generate_audioand you still get music, switch offbgmand you still get scene sound. Want silence? Turn off both. - seed - same seed and settings, same result.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart, then Settings > SpicyAPI and paste a key from spicyapi.ai/console/keys. Restart once more afterwards so the node menu is rebuilt from your account. On a remote box, SPICY_API_KEY in the environment avoids the settings dance.
You're installing an HTTP client, not a model: dependencies = [] in the project file, and it runs on aiohttp, torch, Pillow and PyAV - everything ComfyUI already ships. Python 3.10+, V3 node API, tested at 0.39. ComfyUI Manager finds it by pack title.
Where people get burned
The common ones, in the order you'll meet them:
No SpicyAPI key is set- the key isn't configured, or you didn't restart after adding it.40004- "no deployment serves this combination." One of your option picks isn't served; the message names the field. Usually it's a resolution/duration pairing.40310- email not verified, on your SpicyAPI account, not in ComfyUI.- Anything ending in
request_id ...- quote it to support rather than debugging it yourself.
And the policy facts, which apply every time you use a hosted node: every run is billed; the pack ships seeds fixed so a double-queue doesn't quietly charge twice; cancelling stops your wait but not the job, which finishes on SpicyAPI and is charged if it succeeds, with the result in your console for up to 14 days. Your still and prompt do leave your machine - that's the mechanism, not a bug, and it's the standing trade of every API node in the ecosystem.
Practical route: draft at 540p for 4 seconds while you're finding the move, then re-run the winner at 1080p. Same node, same prompt, a tenth of the exploration cost.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | IMAGE | Opening frame. The clip starts from this image. | |
| prompt | STRING | Describe what happens after the opening frame: the action, the camera, and the mood. | |
| duration_seconds | INT | 51–16 | Requested output length in seconds. |
| resolution | COMBO | 720p | Output resolution. |
| movement_amplitude | COMBO | auto | How much the subject and scene move. Leave it on auto to let the model read the opening frame. |
| generate_audio | BOOLEAN | true | Request synchronised output audio. |
| bgm | BOOLEAN | true | Add background music to the clip. Separate from generate_audio, which covers the sound of the scene itself. |
| seed | INT | 00–2147483647 | Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |