Z-Image Turbo LoRA · Edit
Two cents a redraw, and it shows in the good way
- image_url
- loras
- images
- task id
At 1.8 credits an image - less than two cents - this is the cheapest way to find out whether instruct-style editing suits your work at all. Not inpainting, not masking, no ControlNet: you hand it a photo and a sentence, and it gives you the photo you described. Turbo is the fast, distilled Z-Image, and the LoRA socket means your own style or character weights ride along for free.
What it's actually for
Z-Image Turbo is the 6B Apache-2.0 model that made a lot of people re-evaluate their hardware in late 2025: 8 NFEs, flow-matching, guidance-distilled, and good enough that "30 sec per gen on a 3060" was a top comment rather than a complaint. Here it's running on someone else's GPU, which removes the last reason to care about VRAM.
The edit task itself is prompt-as-instruction, which is a different mental model from a mask. You're not saying "paint this region"; you're saying "here is the photograph I want, make it so". If your edit is describable in a sentence, it works. If it's "keep everything pixel-identical except this one button", it will not, and you want a Fill node instead.
The loras input is why the node exists in this form. A style LoRA trained on Turbo + an edit pass is a genuinely useful pairing - same look across a batch of edits without touching a checkpoint.
The dials you get
image_url is the source, wired as an IMAGE socket. The output keeps its aspect ratio; you pick the long side with resolution, which is 1k (1024 px) or 1.5k (1536 px).
prompt should describe the image you want back. The tooltip's exact words are "describe the image you want back, not just the change", and it's the most valuable line on the node. Say the whole picture, and mention what has to survive.
strength defaults to 0.8 here, slightly hotter than the Base version's 0.7, which makes sense for a distilled model - it needs a firmer push to actually move. Range 0 to 1. Below 0.5 you get a gentle restyle; above 0.9 you get a new photo that shares a subject.
output_format is jpeg, png or webp. seed is fixed by default so a second queue of the same graph is a cache hit rather than a second charge.
loras accepts up to three files, each with its own strength, fed from PopNow LoRA nodes. source takes a local .safetensors from ComfyUI/models/loras (uploaded once, cached 12 hours), a Hugging Face repo id or page, a Civitai page, or a direct https:// link. Token-gated files read HF_TOKEN / CIVITAI_API_KEY from the environment - never from a node widget, since widget values get baked into every workflow you share.
Under the hood
The node is generated from alibaba/z-image-turbo-lora/edit's published input schema, so what you see is what the model takes. On run: upload the image, quote the job against your wallet, hold at most that, submit with an idempotency key (retries reuse it, so a flaky network never becomes two tasks), poll, download and decode into an IMAGE batch. Outputs are images and task id - the latter is what you quote to PopNow support.
Progress, queue position and the final charge all print on the node, so you never have to guess what a run cost.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui
Or search PopNow in ComfyUI Manager and install. Restart, grab a key at popnow.ai/api/console/keys, paste it under Settings > PopNow or export POPNOW_API_KEY, then restart once more so the node list is built from your account. Nothing else installs: no models, no extra packages, no GPU.
Where people get burned
The classic mistake is expecting masked behaviour. There's no mask input on this node - no mask_url at all - so "change only the background" is a prompt problem, not a setting. Describe the new background and the subject you're keeping, and accept that everything gets re-rendered.
Second, LoRA base mismatch: Turbo LoRAs belong on Turbo. A Base-trained LoRA here will look weak or broken, and usually needs a strength well above 1 to do anything, which the node's scale range allows for but the model may not enjoy.
Third, seed discipline. Fixed seed plus edited prompt means you're comparing one variable at a time - keep it that way while you hunt for the phrasing that works, then randomize.
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 | POPNOW_LORAS | Up to three LoRA weight files, each with its own strength. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| task id | STRING | The PopNow task id, for the API console logs or support. |