Wan 2.2 Spicy LoRA · Image to Video
Uncensored endpoint, your weights on top
- image_url
- low_noise_loras
- high_noise_loras
- loras
- video
- task id
Two features from the Wan 2.2 corner of this pack, stapled together: the uncensored image-to-video endpoint, plus LoRA slots. It is the node you want when the style also matters - a character LoRA, a look, a motion LoRA - and you don't want to spend an evening debugging a local checkpoint stack to get both.
Clips are 5 or 8 seconds at 480p or 720p, from one opening frame. $0.0204/second.
What's different from the plain Spicy node
Mechanically, nothing much: an image goes up, a job gets polled, an MP4 comes back as a ComfyUI VIDEO. The difference is three LoRA inputs, and which one you use depends on what the LoRA does.
Wan 2.2 splits denoising between two experts - a high-noise pass that decides composition and motion, and a low-noise pass that refines detail. So the node exposes:
loras- everything, up to three files. The default slot. A character or style LoRA belongs here.high_noise_loras- the high-noise stage only, which is where composition and motion are set. A motion or camera-control LoRA goes here.low_noise_loras- the low-noise stage only, where texture and detail are refined. This is where distilled speed LoRAs live, at 0.4–0.6 strength; that's the habit the local community settled on, and it transfers.
Each slot takes up to three weights, each with its own strength from 0 to 4.
Feeding it LoRAs
The weights come from a SpicyAPI LoRA node, not from your models/loras folder - this is a hosted endpoint, and it can only load what it can fetch. Give it a direct .safetensors URL that opens without a login (the resolve/main form on Hugging Face), set scale, and wire its loras output into the model node. To stack, chain: LoRA → LoRA → model node. A gated or login-walled link is the single most common failure here, and it fails at request time, not at wiring time.
The rest of the inputs
image_url sets the frame the clip starts from, so treat prompt as motion direction, not description: action, camera, mood. Keep it short and physical. duration_seconds is 5 or 8, resolution is 480p or 720p, seed repeats a draw exactly - which is how you compare what a LoRA did at scale 0.6 versus 1.0 without changing anything else.
Outputs are video and task id. video goes to Save Video; if you want a longer shot, run the clip through the pack's video-extend node with the same LoRAs attached so the look holds across the seam.
Install and setup
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. Or search "SpicyAPI" in ComfyUI Manager. Nothing compiles, nothing downloads, no VRAM - the whole thing is an HTTP client over aiohttp, which ComfyUI already ships. The pack's own lora template in the template browser is a working example of the LoRA chain with a public pixel-art weight, and it's the fastest way to confirm your URL format is right before you blame the node.
Practical notes
Pricing is per second and the node shows the rate before you run, so a 8-second 720p take is what it says on the badge times eight. Set Max cost per run in the SpicyAPI settings and anything over it stops before a cent moves. The seed widget's control after generate defaults to fixed - leave it there unless you enjoy paying for the same clip twice. And a cancelled run keeps going server-side, so don't cancel as a cost-saving measure; it doesn't save anything.
When something breaks, the message usually tells you which: no key set, 40004 for an option combination no deployment serves (change the parameter it names), 40003 if an upload didn't match its ticket - just re-run the node. Anything ending in request_id is the string to hand to support, because it identifies the exact request.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | IMAGE | Opening frame. The clip starts from this image. | |
| prompt | STRING | Describe the action, the camera, and the mood of the shot. | |
| duration_seconds | COMBO | 5 | Requested output length in seconds. |
| resolution | COMBO | 480p | Output resolution. |
| 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. |
| low_noise_lorasopt | SPICY_LORAS | LoRAs applied only in the low-noise stage, which refines detail and texture. Up to three. | |
| high_noise_lorasopt | SPICY_LORAS | LoRAs applied only in the high-noise stage, which sets composition and motion. Up to three. | |
| lorasopt | SPICY_LORAS | LoRAs applied to the whole generation, up to three. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |