Donut Simple Calibration (DEPRECATED)
Fix a merged SDXL model's magnitude drift, the lazy way
- merged_model
- reference_model
- model
- calibration_info
Model merges have a dirty little secret: even a good merge can come out "off" because the merged weights have different magnitudes than a clean model. Every block contributes to the output, and if a merge left some blocks' weights bigger or smaller than they should be, you get a model that's oversaturated, undersaturated, or just weirdly proportioned - and you can't fix that with a prompt.
Donut Simple Calibration is the no-knobs version of that fix. You feed it a merged SDXL model and a reference model, and it recalibrates the block magnitudes of the merged model so they match the reference. It's now deprecated - replaced by the more flexible Donut Block Calibration - but it's kept registered so old workflows still load.
What it does
Mechanically, it walks both models, groups parameters into SDXL blocks (input_blocks, middle_block, output_blocks, the final out), computes the average magnitude of each block, then rescales the merged model's blocks to match the reference's. That's the same logic the pack's "Donut Detailer XL Blocks" uses for per-block tuning, run automatically.
Where this matters in practice: you merge a couple of checkpoints - say, a base plus a character or style model - and the result renders but the color/contrast balance is off, or detail in some regions is oddly strong. The merge itself succeeded; the balance didn't survive it. Calibration is the after-merge correction that re-normalizes block strength against a model you trust.
The node's interface is deliberately tiny:
- merged_model - the model that came out of your merge.
- reference_model - the model whose block magnitudes you want to copy. Your base checkpoint is the usual choice.
Outputs are model (the calibrated model, ready to feed a KSampler) and calibration_info (a STRING reporting what got adjusted - useful for seeing which blocks moved and by how much).
Why it's deprecated
The successor Donut Block Calibration exposes what this node hid: per-region strength sliders (input_blocks_strength, middle_blocks_strength, output_1/2_blocks_strength) and a preset toggle. Donut Simple Calibration always runs the engine at full strength - every block group forced to 1.0 - which is why it has no inputs to tune. If an old workflow contains it, it will still run and do exactly that.
For new work, use Donut Block Calibration instead. And a word to the wise: calibration is a rescue tool, not a substitute for a good merge. If your merge is coming out broken every time, the merge ratios are the problem - calibration patches the symptom. One more honest caveat: this is SDXL-specific machinery (it classifies input_blocks/middle_block/output_blocks, the classic UNet layout), so don't point it at a Z-Image or Flux model and expect it to know what to do.
Install
Part of the ComfyUI-DonutNodes pack: ComfyUI Manager → search "DonutNodes" → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/DonutsDelivery/ComfyUI-DonutNodes.git donutnodes
cd donutnodes
python -m pip install -r requirements.txt
Requirements are opencv-python-headless, scipy, matplotlib, psutil, tqdm, requests - nothing to download, no heavy dependencies.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| merged_model | MODEL | — | |
| reference_model | MODEL | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| calibration_info | STRING | — |