Vidu Q3 Spicy · Image to Video
The Unfiltered Vidu Node, and What It Doesn't Have
- image_url
- video
- task id
"Spicy" is this pack's naming convention for the unfiltered builds, and in the Vidu Q3 line it means exactly one thing: an uncensored LoRA stacked on top. The result is still Vidu Q3 - 1 to 16 seconds, up to 1080p, audio generated in the same pass - with the content filter opened up.
Two consequences follow from that, and both change how you use the node. Your own still carries the content, so the prompt is optional here, unlike its three siblings. And this is the one node in the Vidu family with no seed field at all.
Why prompt-optional matters more than it sounds
On Q3, Q3 Pro and Q3 Turbo, prompt is required and means "what happens after the opening frame." Here it's optional - the author's framing is that your own still does the describing. That makes this the node for animating an image you already made rather than directing a move from text: drop in the frame, leave the prompt empty, pick a duration, run.
It also makes the node the odd one out on repeatability. There is no seed to hold. The pack's global habit is to ship seeds fixed so that re-queueing a graph reuses the cached result instead of billing you again, and that still applies to identical inputs - but you have no seed to pin or randomise. If you want a different take, change something real: the prompt wording, a second of duration_seconds, movement_amplitude. That's the lever, and it's a slightly different mental model from the rest of the pack.
Price sits at $0.0665 per second - between plain Q3 ($0.07) and Q3 Pro ($0.054). A five-second clip lands around 33 cents, sixteen seconds a little over a dollar. Resolution goes to 1080p, so you're not paying a premium for a capped output.
The inputs
- image_url - the opening frame, a real
IMAGEsocket. Uploaded when the node runs; the pack caches uploads per account for roughly twelve hours. - prompt - optional. Use it for motion and camera when you want direction.
- duration_seconds - 1 to 16, whole seconds.
- resolution -
540p,720por1080p. - movement_amplitude -
auto,small,medium,large. - generate_audio - synchronised audio for the scene.
- bgm - a music bed, separate from
generate_audio. Both default on; turning off one leaves the other. Turn off both for silence.
Outputs: video and task id. Save Video for the first, and the second is what you paste into the console or a support message.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart ComfyUI, then Settings > SpicyAPI, paste a key from spicyapi.ai/console/keys, restart once more so the node menu is rebuilt from your account catalogue. On a server, SPICY_API_KEY in the environment is the tidier option.
Nothing to download and nothing to install beyond the pack - dependencies = [], and it uses aiohttp, torch, Pillow and PyAV, all already present in ComfyUI. Python 3.10+, V3 node API, tested at 0.39. ComfyUI Manager installs it by pack title.
Where people get burned
Be clear about the shape of this one. It's a hosted node: your still and your prompt go to SpicyAPI's servers, and the clip comes back. That's not a bug or a leak - it is what an API node is - but it's the specific trade you're making when you route NSFW work through someone else's infrastructure, and it's worth reading a fresh API pack before your first run for the same reason. The pack itself is MIT, its key lives in user/spicyapi/config.json rather than in your workflow or image metadata, and it only ever makes the calls its nodes describe.
Operationally, the same rules as every other node here:
- Every run is billed. Set Max cost per run in Settings > SpicyAPI and anything quoted above it stops before submission.
- Cancelling ends your wait, not the job. It keeps running, is charged if it succeeds, and its result sits in your console for up to 14 days.
- A restart is how the menu updates. The node list is built at startup from your account.
- Errors:
No SpicyAPI key is set,40310unverified email,40004when an option combination has no deployment, and unknown failures ending inrequest_id ...- that id is for support.
One last note on framing. This is a LoRA on a closed model you can't inspect, so "uncensored" means the filter pressure is lower, not that everything goes. Budget a couple of runs to find out where this model's own limits are before you plan a project around it.
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, from 1 to 16. |
| 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 a generated audio track synchronised with the picture. |
| 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 | This model takes no seed, so the number is never sent. Changing it makes ComfyUI run the node again: set 'control after generate' to randomize for 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. |