Arthemy Z-Image Tuner (LAB)
Per-layer weight surgery on Z-Image, when six sliders aren't enough
- model
- MODEL
The Simple version of this tuner groups Z-Image's 30 layers into six blocks because that's what a sane person uses day-to-day. Arthemy Z-Image Tuner (LAB) throws the grouping away and gives you a slider for every single layer, Layer_00 through Layer_29, plus the auxiliary components. It's the node for people who want to find out which layer actually owns "lighting" for their favorite seed - and the README's tone makes it clear the author expects exactly that kind of person. ("For those curious FREAKS that want to look under the hood" is a direct quote.)
What's different from the Simple tuner
Same mechanism, same in-place weight scaling on the diffusion model's state dict - it still needs ArthemyTunerLoader feeding it so edits never compound across queues. What changes is the input surface:
Layer_00…Layer_29- one float per transformer layer, each mapped to thelayers.N.keys by index. This is the entire point: you can hold a single layer at 1.0 while every other layer is untouched.Noise_RefinersandContext_Refiners- the Simple version folds these into onerefiners_strength; the Lab splits them apart so you can scale noise-handling and context-refinement weights independently.Embedders_Global- the input embedder signal, the sameembedders_strengthas Simple.unsafe_tune_normalization- off by default, and you should leave it off. Scaling norm layers is how images get "fried."
Everything else - mode (Real vs Soft Value), base_strength (0–10, a master gain in Real mode), the norm lock - behaves exactly as in the Simple tuner. Output is a single MODEL.
How to actually use it
This is a research tool, and it works best with a fixed seed:
- Lock a seed and a prompt you care about.
- Take one layer, push it to something like 2.0 in Soft Value, generate.
- Look at what changed. Push, pull, or leave it, then move to the next layer.
Keep notes. Layer→effect maps are seed-specific - what layer 17 does for your comic book prompt may be invisible for a photoreal one. The author's own block names (composition, detail, resolution...) are hypotheses layered on top of this same 30-layer stack, so your findings are genuinely the best map anyone has.
There's one quirk worth knowing: the final_layer key (the model's output head) is tied to Layer_29 rather than having its own slider, on the theory that it carries the exit flow of the last main layer. Fine to ignore unless you're digging into exactly how the stack closes out.
Wiring
Identical to the Simple tuner - just swap the node:
ArthemyTunerLoader ──> Arthemy Z-Image Tuner (LAB) ──> KSampler ──> SaveImage
The honest take
The Lab node is fiddly, 33 sliders is a lot of surface, and most of those layers will do nothing you can name. That's not a bug - it's the point. The Simple tuner is what you'll reach for to actually shape an image; the Lab is what you use when you want to understand the model, or when you've found something the Simple blocks can't isolate. If you discover a per-layer recipe that works, ArthemyZImage_Saver will freeze it into a standalone model you can load like any other checkpoint. That loop - poke the layers, find what matters, bake it - is the best thing this pack does.
Inputs (37)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| mode | COMBO | 2 options: Soft Value, Real Value | |
| base_strength | FLOAT | 1.000–10 | — |
| unsafe_tune_normalizationopt | BOOLEAN | false | — |
| Noise_Refinersopt | FLOAT | 1.000–10 | — |
| Context_Refinersopt | FLOAT | 1.000–10 | — |
| Embedders_Globalopt | FLOAT | 1.000–10 | — |
| Layer_00opt | FLOAT | 1.000–10 | — |
| Layer_01opt | FLOAT | 1.000–10 | — |
| Layer_02opt | FLOAT | 1.000–10 | — |
| Layer_03opt | FLOAT | 1.000–10 | — |
| Layer_04opt | FLOAT | 1.000–10 | — |
| Layer_05opt | FLOAT | 1.000–10 | — |
| Layer_06opt | FLOAT | 1.000–10 | — |
| Layer_07opt | FLOAT | 1.000–10 | — |
| Layer_08opt | FLOAT | 1.000–10 | — |
| Layer_09opt | FLOAT | 1.000–10 | — |
| Layer_10opt | FLOAT | 1.000–10 | — |
| Layer_11opt | FLOAT | 1.000–10 | — |
| Layer_12opt | FLOAT | 1.000–10 | — |
| Layer_13opt | FLOAT | 1.000–10 | — |
| Layer_14opt | FLOAT | 1.000–10 | — |
| Layer_15opt | FLOAT | 1.000–10 | — |
| Layer_16opt | FLOAT | 1.000–10 | — |
| Layer_17opt | FLOAT | 1.000–10 | — |
| Layer_18opt | FLOAT | 1.000–10 | — |
| Layer_19opt | FLOAT | 1.000–10 | — |
| Layer_20opt | FLOAT | 1.000–10 | — |
| Layer_21opt | FLOAT | 1.000–10 | — |
| Layer_22opt | FLOAT | 1.000–10 | — |
| Layer_23opt | FLOAT | 1.000–10 | — |
| Layer_24opt | FLOAT | 1.000–10 | — |
| Layer_25opt | FLOAT | 1.000–10 | — |
| Layer_26opt | FLOAT | 1.000–10 | — |
| Layer_27opt | FLOAT | 1.000–10 | — |
| Layer_28opt | FLOAT | 1.000–10 | — |
| Layer_29opt | FLOAT | 1.000–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |