Z-Image Turbo LoRA · Image Editing
Restyle a photo in about a second's worth of compute
- image_url
- loras
- images
- task id
Z-Image Turbo is an 8-step distilled model - the whole point of it is that a photoreal frame falls out of eight passes instead of thirty-five, which is why it's the variant that stuck and the one every local Z-Image workflow starts from. This node runs Turbo as an image-to-image endpoint with up to three of your own LoRAs attached, at $0.012 an image. Cheap enough that restyling a batch of fifty photos is sixty cents.
What it's for
Three real jobs. One: apply a style LoRA to photos you already have - the hosted equivalent of running a local img2img pass without a local pipeline. Two: test a LoRA you trained, on real images rather than prompts, which is the test most people skip. Three: fast, consistent restyling at scale, because per-image pricing and a distilled model mean a run of a hundred costs a dollar and change.
Turbo's honest limitation, straight from every distillation writeup: fewer steps means less time to refine, so it's a touch softer and less prompt-adherent than Z-Image Base on complicated compositions. For restyling at moderate strength, nobody will notice. For intricate multi-element prompts, Base or a different model is the better tool.
The inputs
- prompt - describe the image you want back, not the change you want made. "A person in a long coat, station platform, sodium lighting" - not "change the coat to red". "Make it a painting" is the kind of instruction this node ignores; it isn't an instruction editor.
- image_url - the source image; the output keeps its aspect ratio.
- resolution -
1k(1024) or1.5k(1536) on the long side, default 1k. Stay in that band; Z-Image's native range is about 1–2MP. - strength - 0 to 1, default 0.8. This is the knob you'll actually tune: 0.5–0.6 keeps the source recognisable, 0.9 lets the prompt take over. Start at the default, then walk it down if the photo is drifting away from you.
- output_format - jpeg (default), png or webp.
- seed - fix it while you tune strength, or you'll be comparing noise.
- Optional loras - a
SPICY_LORASsocket, fed by a SpicyAPI LoRA node holding a direct.safetensorsURL and a strength. Chain several LoRA nodes to stack them; up to three are accepted. The URL must open without a login.
Outputs: images (IMAGE - save it, or feed it into an upscale or a mask step) and task id (STRING, the SpicyAPI task id for the console or a support email).
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Manager → search SpicyAPI also works. Restart ComfyUI, then Settings > SpicyAPI → paste a key from spicyapi.ai/console/keys, and restart once more so the node list comes from your account. Remote: SPICY_API_KEY. No weights, no dependencies - the pack ships an empty dependency list and needs only ComfyUI's existing stack, Python 3.10+ and the V3 node API (tested with 0.39).
Housekeeping
Set Max cost per run. It sounds silly at a penny an image, but the ceiling is what stops a 500-image sweep from being a typo you find in your balance. Seeds default to fixed, so re-queueing an unchanged graph reuses the cached result; randomize gives you a new take and a new charge. If something fails, the message is usually actionable: No SpicyAPI key is set, 40310 (verify your email), 40004 (no deployment serves that combination - change the option named), or a LoRA that wouldn't load because the link needs a login.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the image you want back, not just the change. | |
| image_url | IMAGE | Source image. The result keeps its aspect ratio. | |
| resolution | COMBO | 1k | Length of the output's long side: 1k is 1024 pixels, 1.5k is 1536. The source's aspect ratio is kept. |
| strength | FLOAT | 0.800–1 | How far to move away from the source, from 0 to 1. |
| output_format | COMBO | jpeg | Container of the returned image. |
| 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. |
| lorasopt | SPICY_LORAS | Up to three LoRA weight files, each with its own strength. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |