Donut Detailer ZIT
Tuning Z-Image Turbo's 30 layers by what they actually do
- model
- MODEL
Z-Image Turbo is a transformer-based model - 30 layers, no UNet - so the SDXL-style "detailer" patches that poke at input_blocks don't apply to it. DonutDetailerZIT is the pack's answer: it splits those 30 layers into four functional groups and lets you multiply each group's weights and biases independently. Early layers handle translation/encoding (prompt to internal representation), lower-mid handles composition and layout, upper-mid handles details and attributes, late handles refinement and aesthetics. Tune a group, re-run, and the model's behavior at that stage of generation shifts.
Eight required inputs, four groups of two: early_weight/early_bias (layers 0–5), lowmid_weight/lowmid_bias (6–14), upmid_weight/upmid_bias (15–23), and late_weight/late_bias (24–29). Each defaults to 1.0 - a clean no-op. Output is the patched MODEL, and the patch is applied through ComfyUI's standard patch system (clone + delta), so nothing touches your checkpoint file on disk.
The practical read
This is a model tuning instrument, not a fix-a-bad-face node. The realistic workflow: you have a Z-Image Turbo checkpoint and a character or style LoRA, and the output is close but the composition is off or the texture is soft. That's the signal to push lowmid (composition) or upmid (fine detail). If the image is structurally right but the finish is plastic, nudge late - the refinement/aesthetics group is where that live.
The names encode a real opinion about the model's internals, and it's a defensible one: transformer layers in distillation-tuned models do settle into coarse-to-fine roles, with early layers encoding semantics and late layers polishing. But treat the layer-range labels as a guide, not gospel. The honest way to use this node is empirically - change one group by ±0.1, re-run, compare, revert if it's worse. The defaults are all 1.0 for a reason; this is a calibration instrument.
Where it fits, and gotchas
It's part of the DonutNodes pack, which is best known for the block-weighted LoRA workflow for Z-Image character generation - this node is the model-side companion to that workflow. Install via ComfyUI Manager (search DonutNodes) or git clone the repo into custom_nodes/ plus pip install -r requirements.txt with the same Python that runs ComfyUI. No model downloads; it reads whatever Z-Image checkpoint you load.
Two things to keep in mind. First, it only makes sense on Z-Image-family models (Turbo and its Lumina2-lineage relatives) - on a UNet model it has no matching layer keys and effectively no-ops, so don't use it as a general tuner. Second, because it patches at model load, changing a slider requires a full re-run; the preview won't update on its own. And if you're tuning alongside a LoRA stack, do one at a time - changing two variables per run makes it impossible to tell which one moved the needle.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| early_weight | FLOAT | 1.000-10–10 | Layers 0-5: Translation/encoding - converts prompt to internal representation |
| early_bias | FLOAT | 1.000-10–10 | Layers 0-5: Translation/encoding |
| lowmid_weight | FLOAT | 1.000-10–10 | Layers 6-14: Composition/layout - structural arrangement |
| lowmid_bias | FLOAT | 1.000-10–10 | Layers 6-14: Composition/layout |
| upmid_weight | FLOAT | 1.000-10–10 | Layers 15-23: Details/attributes - fine-grained features |
| upmid_bias | FLOAT | 1.000-10–10 | Layers 15-23: Details/attributes |
| late_weight | FLOAT | 1.000-10–10 | Layers 24-29: Refinement/aesthetics - style and quality |
| late_bias | FLOAT | 1.000-10–10 | Layers 24-29: Refinement/aesthetics |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |