Wan 3.0 Spicy · Image to Video
Animate a still without the filter conversation
- image_url
- last_image_url
- video
- task id
Some workflows don't survive a moderating endpoint. This node is the uncensored image-to-video entry in the Wan 3.0 family: one opening frame, 2 to 30 seconds out, generated audio you can switch off, an optional ending frame, at $0.057/s and up. It's the cheapest of the Spicy-labelled video nodes in this pack, which makes it the sensible one to test the "does this host actually let me work" question on.
What it is, mechanically
The node doesn't run a model. It assembles a request from your widgets, uploads the IMAGE you wire into it (cached by content hash for 12 hours, so prompt iterations don't re-upload), asks SpicyAPI for a quote, submits the task, polls it - the node's own status line tracks "Queued"/"Generating" with elapsed time and the estimate - and downloads the finished clip as a standard ComfyUI VIDEO. The charge is printed on the node when it's done. If you cancel, the server-side job keeps going and is billed if it succeeds.
The inputs
- prompt - subject, action, camera, light, pacing, and sound. The sound part matters: audio is generated by default, so describing it helps.
- image_url - the opening frame.
- resolution - 720p by default; 480p and 1080p are the other options.
- aspect_ratio - defaults to
model default, which means the field isn't sent and the clip adapts to your opening image. Set one explicitly and a mismatched ratio crops the still. - duration_seconds - whole seconds, 2 to 30, default 5.
- generate_audio - on by default.
- enable_prompt_expansion - off by default here; the Pro tiers ship it on.
- seed - starts on
fixed. - Optional last_image_url, which makes the clip finish on an image you choose. Requires
image_urland is the single most effective control on the node.
Outputs: video (Save Video) and task id (STRING - for the console log or support).
What it costs, and the math that matters
$0.057/s at 480p, $0.114/s at 720p, $0.228/s at 1080p. A 10-second 1080p clip here is $2.28, so price the base Wan 3.0 image-to-video node before you commit: the pack's own copy describes that whole family as uncensored too, which means "Spicy" may be buying you nothing on this particular prompt. Test both with a short clip and pick the one that actually refuses you. So price both, and pick the one that actually refuses your prompt. Also put a ceiling in Max cost per run in the SpicyAPI settings; the pre-flight quote is checked against it and nothing gets charged if the worst case exceeds it.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Manager → SpicyAPI does the same thing. Restart ComfyUI, then Settings > SpicyAPI, paste a key from spicyapi.ai/console/keys, and restart again - the node list is rebuilt from your account at startup, so a model missing from the menu usually just needs another restart. On a server, set SPICY_API_KEY. There are no model downloads and no dependencies (empty dependency list; the pack uses libraries ComfyUI already ships). Python 3.10+ and the V3 node API, tested with ComfyUI 0.39.
Being a grown-up about it
An uncensored endpoint is not a privacy feature. Everything you send - the still, the prompt - goes to a third party and sits there. The vendor here has no visible community track record at all (nothing in the Reddit corpus mentions the name), so the sensible posture is: start with short 480p runs, keep your spend ceiling low, and read the code if you care what's transmitted. It's MIT and short enough to skim in one sitting.
Errors will be one of: No SpicyAPI key is set, 40310 (unverified email), 40004 (no deployment serves that combination - change the option the message names), or a failure ending in request_id ..., which support can trace.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the subject, action, camera, light, pacing, and sound for the shot. | |
| image_url | IMAGE | Opening-frame image. | |
| aspect_ratio | COMBO | model default | Output aspect ratio. Omit it to let the clip adapt to the opening image; a ratio that differs from the image crops it. |
| resolution | COMBO | 720p | Output resolution. |
| duration_seconds | INT | 52–30 | Requested output length in whole seconds. |
| generate_audio | BOOLEAN | true | Request generated audio with the video. |
| enable_prompt_expansion | BOOLEAN | false | Allow the service to expand the submitted creative brief before generation. |
| 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. |
| last_image_urlopt | IMAGE | Optional last frame: the clip ends on this image. Requires image_url. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |