Nodes/ComfyUI-DonutNodes/Donut Detailer ZIT
ComfyUI Node

Donut Detailer ZIT

Tuning Z-Image Turbo's 30 layers by what they actually do

By DonutsDelivery·Created about a year ago·Updated about 20 hours ago· 25
Donut Detailer ZIT
  • model
  • MODEL
early_weight1.000
early_bias1.000
lowmid_weight1.000
lowmid_bias1.000
upmid_weight1.000
upmid_bias1.000
late_weight1.000
late_bias1.000

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.

Categorydonut/Model Patches

Inputs (9)

NameTypeDefaultDescription
modelMODEL
early_weightFLOAT1.000-10–10Layers 0-5: Translation/encoding - converts prompt to internal representation
early_biasFLOAT1.000-10–10Layers 0-5: Translation/encoding
lowmid_weightFLOAT1.000-10–10Layers 6-14: Composition/layout - structural arrangement
lowmid_biasFLOAT1.000-10–10Layers 6-14: Composition/layout
upmid_weightFLOAT1.000-10–10Layers 15-23: Details/attributes - fine-grained features
upmid_biasFLOAT1.000-10–10Layers 15-23: Details/attributes
late_weightFLOAT1.000-10–10Layers 24-29: Refinement/aesthetics - style and quality
late_biasFLOAT1.000-10–10Layers 24-29: Refinement/aesthetics

Outputs (1)

NameTypeDescription
MODELMODEL