ZImage Turbo LoRA Stack V4
Stack Z-Image Turbo LoRAs without the spaghetti — one node, up to 10 slots
- model
- clip
- MODEL
- CLIP
The name is a mouthful, but the job is simple: this node lets you pile up to ten LoRAs onto a Z-Image Turbo model in one place, instead of chaining Load LoRA nodes end to end until your graph looks like a plate of spaghetti. It's called "V4" and the README tags it "(No Nunchaku)" - that suffix matters more than it looks. Nunchaku is the MIT Han Lab SVDQuant inference stack that some Z-Image and Flux workflows lean on for low-VRAM quantized runs. This version deliberately doesn't need it: it's a standalone node that works on a stock ComfyUI install with the plain checkpoint loader, which is a feature. Fewer moving parts, no extra backend to babysit.
Why you'd reach for it at all: Z-Image Turbo's LoRA ecosystem grew fast - the community had character and style LoRAs on CivitAI within days of release, and it's still the easiest current model to train a LoRA for. The stock workflow is fine for one LoRA; the second, third, and fourth are where things get ugly. This packs them into a single node.
How it works
The mechanism is the interesting part, and it's why a plain Load LoRA chained several times sometimes misbehaves on Z-Image. ComfyUI's stock LoRA loader expects the LoRA's state-dict keys to match the model's internal names. Z-Image's transformer uses fused projection names like qkv and w13, but many community LoRAs were trained (or converted) with the separate to_q/to_k/to_v and w1/w3 naming that older trainers expect. So this node:
- Extracts the core transformer (
model.model.diffusion_model) and checks what names it actually uses. - Rewrites
to_qkv -> qkvkeys automatically. - For fused models, merges
to_q/to_k/to_vinto a singleqkvandw1/w3intow13using block-diagonal merging, carrying the alpha over. - Falls back to ComfyUI's default loader if its own translation fails, so you don't get a hard error - just the stock behavior.
It only patches the MODEL. The CLIP input passes through untouched, which is right for Z-Image: you don't touch the Qwen3-4B text encoder anyway.
The inputs that matter
Only a few are worth your time:
- model / clip - wire your loaded checkpoint in. Outputs are
MODEL(patched) andCLIP(pass-through); runMODELinto ModelSamplingAuraFlow (shift 7 is the community's default Turbo tweak) and then into the sampler. - lora_count - 1 to 10 slots. The node ships a JS widget with + Add LoRA / − Remove LoRA buttons that show and hide slots, so you rarely touch the number directly.
- toggle_all - this is a master on/off in disguise. Off means nothing gets applied and the model passes through unchanged, so the name is a little misleading; leave it on unless you want a quick bypass.
- lora_name_i / strength_i / enabled_i - per-slot picker, strength (−10 to 10), and enable flag. Strength 0 skips the slot entirely.
Installing
ComfyUI Manager is the easy path - search "ZImage Turbo LoRA Stack V4". Or clone it in:
cd ComfyUI/custom_nodes
git clone https://github.com/aistudynow/Z-Image-Turbo-Lora-Stack-V4
Restart ComfyUI, then find ZImage Turbo LoRA Stack V4 under the "loaders/lora" category. No model downloads here - it reads whatever's in ComfyUI/models/loras - and its only dependency is torch, which ComfyUI already has. Requires ComfyUI ≥ 0.3.0.
Where people get burned
- Stacking 2+ LoRAs on Turbo often collapses quality. That's a Z-Image property, not a node bug: the community consensus is that more than one LoRA at once degrades output, with LoKR-format LoRAs the partial exception. The ten slots are nice to have; expecting all ten to work is how you get a melted image.
- Base-trained LoRAs want more strength on Turbo. If a LoRA you trained on Z-Image Base looks weak here, crank the strength to 2.0+ before blaming the node.
- Empty
lora_namedropdowns mean ComfyUI isn't seeing your files - drop them inmodels/lorasand restart.
One honest caveat: this pack is a small, community utility with no user reviews or star history to lean on, and "V4" implies earlier versions exist without a changelog explaining what changed. Test it with one LoRA against a chained Load LoRA baseline; the fallback path means you should see identical output.
Inputs (34)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| lora_count | INT | 11–10 | — |
| toggle_all | BOOLEAN | true | — |
| enabled_1opt | BOOLEAN | true | — |
| lora_name_1opt | COMBO | 1 options: None | |
| strength_1opt | FLOAT | 1.00-10–10 | — |
| enabled_2opt | BOOLEAN | true | — |
| lora_name_2opt | COMBO | 1 options: None | |
| strength_2opt | FLOAT | 1.00-10–10 | — |
| enabled_3opt | BOOLEAN | true | — |
| lora_name_3opt | COMBO | 1 options: None | |
| strength_3opt | FLOAT | 1.00-10–10 | — |
| enabled_4opt | BOOLEAN | true | — |
| lora_name_4opt | COMBO | 1 options: None | |
| strength_4opt | FLOAT | 1.00-10–10 | — |
| enabled_5opt | BOOLEAN | true | — |
| lora_name_5opt | COMBO | 1 options: None | |
| strength_5opt | FLOAT | 1.00-10–10 | — |
| enabled_6opt | BOOLEAN | true | — |
| lora_name_6opt | COMBO | 1 options: None | |
| strength_6opt | FLOAT | 1.00-10–10 | — |
| enabled_7opt | BOOLEAN | true | — |
| lora_name_7opt | COMBO | 1 options: None | |
| strength_7opt | FLOAT | 1.00-10–10 | — |
| enabled_8opt | BOOLEAN | true | — |
| lora_name_8opt | COMBO | 1 options: None | |
| strength_8opt | FLOAT | 1.00-10–10 | — |
| enabled_9opt | BOOLEAN | true | — |
| lora_name_9opt | COMBO | 1 options: None | |
| strength_9opt | FLOAT | 1.00-10–10 | — |
| enabled_10opt | BOOLEAN | true | — |
| lora_name_10opt | COMBO | 1 options: None | |
| strength_10opt | FLOAT | 1.00-10–10 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |