Nodes/ComfyUI-easygoing-nodes/Model Scale Z-Image
ComfyUI Node

Model Scale Z-Image

Per-block dials on the 6B model that became SDXL's successor

By easygoing0114·Created 12 months ago·Updated 5 days ago· 5
Model Scale Z-Image
  • model
  • MODEL
cap_embedder.1.00
cap_pad_token1.00
context_refiner.0.1.00
context_refiner.1.1.00
layers.0.1.00
layers.1.1.00
layers.2.1.00
layers.3.1.00
layers.4.1.00
layers.5.1.00
layers.6.1.00
layers.7.1.00
layers.8.1.00
layers.9.1.00
layers.10.1.00
layers.11.1.00
layers.12.1.00
layers.13.1.00
layers.14.1.00
layers.15.1.00
layers.16.1.00
layers.17.1.00
layers.18.1.00
layers.19.1.00
layers.20.1.00
layers.21.1.00
layers.22.1.00
layers.23.1.00
layers.24.1.00
layers.25.1.00
layers.26.1.00
layers.27.1.00
layers.28.1.00
layers.29.1.00
noise_refiner.0.1.00
noise_refiner.1.1.00
final_layer.1.00
t_embedder.1.00
x_embedder.1.00
x_pad_token1.00

Z-Image is the 6B model that put near-Flux quality on a 12GB card and, by 2026, became the community's default for local photorealism - Apache 2.0, a Qwen3-4B text encoder, and an S3-DiT backbone. Model Scale Z-Image is this pack's per-block weight-scaling node for that backbone: feed it a loaded Z-Image model and it hands you a dial for every major component, letting you scale a block's weights from 0 (zeroed) to 2.0 (doubled).

Let's be plain about what this is: a research and experimentation tool for people who want to understand which parts of a DiT do what, or who like the kind of model surgery that SDXL's merge culture made famous. If you just want good Z-Image pictures, this node is not for you - leave it installed and ignore it, the model is excellent with zero intervention.

What the widgets map to

Z-Image's architecture is a single-stream diffusion transformer, and the widget list mirrors it directly. The names are the model's own key names:

  • t_embedder. and x_embedder. - the time and input-patch embeddings
  • cap_embedder. plus cap_pad_token - the caption embedding path
  • context_refiner.0. / context_refiner.1. - the text-context refinement blocks
  • layers.0. through layers.29. - the 30 main transformer blocks, the meat of the model
  • noise_refiner.0. / noise_refiner.1. - the noise/refiner stages
  • final_layer. and x_pad_token - the output head

Each defaults to 1.0 and runs 0.0–2.0. The pack matches every weight to the longest matching prefix, so a dial on layers.12. touches only block 12, and a value of 1.0 is skipped entirely - untouched weights pass through unchanged.

How it works (and why it's light)

This one is different from the pack's VAE nodes. Instead of materializing a whole new model, it clones the model patcher and applies weight patches: for each layer you've changed, it registers weight × scale as a patch on the patcher, which ComfyUI folds in at sampling time. No full state-dict rebuild, no big memory spike - just a patched model. The single MODEL output wires straight into a KSampler's model socket like any other model.

The honest warnings

Zeroing or doubling arbitrary blocks of a trained model is a fast way to break it - expect garbage, black output, or weird artifacts as a first result, not insight. The productive approach is scientific: change one dial at a time, small steps around 1.0 (0.9, 1.1), and actually look at what changes. If you want a map of which keys exist before you start, the pack's Key Name Inspector prints the model's full key list to the console - it's the right first node to drop in. And remember Z-Image shares the Flux 1 VAE, so if output looks structurally broken at scale 1.0, check your VAE wiring before you blame the dials.

Installing it

Part of the easygoing0114/ComfyUI-easygoing-nodes pack. ComfyUI Manager → search Easygoing, or:

cd ComfyUI/custom_nodes
git clone https://github.com/easygoing0114/ComfyUI-easygoing-nodes.git

Restart. No model downloads (you still load Z-Image yourself with a normal loader) and no extra dependencies. The pack is written against the V3 node API, so it needs a current ComfyUI build; on an old one the nodes won't register at all.

This is deep tinkering territory. But if you've ever wanted to know what a specific transformer block in Z-Image actually contributes, this is the cleanest way to find out.

Categoryadvanced/model_merging/model_specific

Inputs (41)

NameTypeDefaultDescription
modelMODEL
cap_embedder.FLOAT1.000–2
cap_pad_tokenFLOAT1.000–2
context_refiner.0.FLOAT1.000–2
context_refiner.1.FLOAT1.000–2
layers.0.FLOAT1.000–2
layers.1.FLOAT1.000–2
layers.2.FLOAT1.000–2
layers.3.FLOAT1.000–2
layers.4.FLOAT1.000–2
layers.5.FLOAT1.000–2
layers.6.FLOAT1.000–2
layers.7.FLOAT1.000–2
layers.8.FLOAT1.000–2
layers.9.FLOAT1.000–2
layers.10.FLOAT1.000–2
layers.11.FLOAT1.000–2
layers.12.FLOAT1.000–2
layers.13.FLOAT1.000–2
layers.14.FLOAT1.000–2
layers.15.FLOAT1.000–2
layers.16.FLOAT1.000–2
layers.17.FLOAT1.000–2
layers.18.FLOAT1.000–2
layers.19.FLOAT1.000–2
layers.20.FLOAT1.000–2
layers.21.FLOAT1.000–2
layers.22.FLOAT1.000–2
layers.23.FLOAT1.000–2
layers.24.FLOAT1.000–2
layers.25.FLOAT1.000–2
layers.26.FLOAT1.000–2
layers.27.FLOAT1.000–2
layers.28.FLOAT1.000–2
layers.29.FLOAT1.000–2
noise_refiner.0.FLOAT1.000–2
noise_refiner.1.FLOAT1.000–2
final_layer.FLOAT1.000–2
t_embedder.FLOAT1.000–2
x_embedder.FLOAT1.000–2
x_pad_tokenFLOAT1.000–2

Outputs (1)

NameTypeDescription
MODELMODEL