Vidu Q3 Pro · Image to Video
Cheaper Per Second, and Permanently 540p
- image_url
- video
- task id
Here's the counter-intuitive bit: the "Pro" node costs less per second than plain Vidu Q3 - $0.054 against $0.07 - and its resolution dropdown has exactly one entry. 540p. Not a menu with one option greyed out; one option.
So what is "Pro" doing? It's the flagship quality tier of Vidu's Q3 line at a fixed output size, while the plain Q3 node is the one that scales up to 1080p. If you were assuming Pro meant "bigger and better," you'd have that exactly backwards on the resolution axis, and you'd notice after you'd already paid for a run.
Where it fits
Vidu is closed source, so this node is the only door into Vidu from ComfyUI - no weights exist to download. The whole Q3 family here is image-to-video: an opening still plus a movement prompt, one to sixteen seconds, with audio generated in the same pass rather than added afterwards. Which sibling you pick is basically a price/resolution trade:
- Q3 - up to 1080p, $0.07/s.
- Q3 Turbo - up to 720p, $0.042/s, the fast tier.
- Q3 Pro - 540p only, $0.054/s.
- Q3 Spicy - the unfiltered build, up to 1080p, and notably without a seed widget.
Pro sitting between Turbo and Q3 on price while offering less resolution than either is the kind of thing worth knowing before you wire it in. My read: reach for Pro when you want Vidu's better motion at a price you can iterate at, and take the 540p hit deliberately. If 540p is a deal-breaker, Turbo gives you 720p for less.
Inputs
- image_url - the opening frame, a proper
IMAGEsocket. The still is uploaded when the node runs, and the pack caches uploads per account for about twelve hours so repeated runs don't re-send the same bytes. - prompt - required. Describe what happens after the frame: action, camera, mood.
- movement_amplitude -
auto,small,medium,large. Auto lets the model read the frame; the other three are your manual override when a shot is too drifting or too locked off. - duration_seconds - 1 to 16, whole seconds. Straight multiplier on the bill.
- resolution -
540p. That's the list. - generate_audio - synchronised sound for the scene, on by default.
- bgm - a background music bed, on by default and independent of
generate_audio. Killing one doesn't kill the other; kill both for a silent clip. - seed - same seed and settings, same result.
Outputs: video (wire Save Video) and task id, the string you'd quote in a support request or paste into the console. Nothing auto-saves - connect a downstream node.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart ComfyUI, then Settings > SpicyAPI and paste a key from spicyapi.ai/console/keys, and restart once so the node list is rebuilt from your account. Headless: set SPICY_API_KEY instead.
There is no model to download and nothing to pip install - the project declares dependencies = [] and uses aiohttp, torch, Pillow and PyAV, all of which ComfyUI already ships. Given how often installing a node pack means watching pip rewrite the environment, a pack that installs nothing is a feature. Python 3.10+, V3 node API, tested at ComfyUI 0.39. Manager-installable by pack title.
Where people get burned
- The resolution dropdown isn't broken. It genuinely has one value on this node.
- Paying per second means drafts cost real money. Five seconds at the headline rate is around 27 cents, sixteen seconds about 86 cents. Put a ceiling in Settings > SpicyAPI > Max cost per run and over-budget runs are refused before anything is submitted.
- Seeds ship fixed. Queue the identical graph twice and the second run reuses the cached result rather than charging again - intentional, because every run is billed. Switch control-after-generate to
randomizewhen you want a new take, and expect the charge. - Cancelling doesn't stop the job. It stops your wait. The task finishes on SpicyAPI's side, is billed if it succeeds, and sits in your console for up to 14 days.
- Errors you'll actually see:
No SpicyAPI key is set,40310(unverified email),40004(no deployment serves that option combination - the message names the field), and anything ending inrequest_id ..., which belongs in a support message.
One workflow note, since it's cheap: feed a still you generated in Comfy locally, then let Pro's motion do the work at 540p, then upscale the video if you need more pixels. That's usually a better deal than paying Q3's rate for a shot you're not sure about yet.
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. | |
| movement_amplitude | COMBO | auto | How much things in the frame move. |
| duration_seconds | INT | 51–16 | Requested output length in seconds. |
| resolution | COMBO | 540p | Output resolution. |
| generate_audio | BOOLEAN | true | Request synchronised output audio. |
| bgm | BOOLEAN | true | Add a background music bed that fits the scene. |
| 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. |