Donut Block Calibration
The answer to 'which of my 76 detailer sliders should I even touch'
- merged_model
- reference_model
- model
- calibration_info
Merging two checkpoints is easy. Knowing whether the merge made the model better is the hard part, and Donut Block Calibration attacks it from a very specific angle: it compares the block-level magnitudes of your merged model against a reference model, then patches the merged model so its blocks match the reference's energy profile. The source is blunt about what it's doing - "works like automatic Donut Detailer XL Blocks adjustment." In other words, it replaces the 76-slider guessing game with an automatic measurement.
Inputs: merged_model (the model after your merge), reference_model (the model whose block magnitudes you want to copy), and four strength controls - input_blocks_strength, middle_blocks_strength, output_1_blocks_strength (output blocks 0–4), and output_2_blocks_strength (output blocks 5–8). There's an optional preset dropdown with Manual (default) and Auto (full strength), where Auto just forces all four strengths to 1.0. Outputs are the calibrated model and a calibration_info string that reports what it did - wire that into a Show Text node if you want to audit the result.
How it works
It extracts the average magnitude of each block group from both models, computes the ratio, and applies the merged model's blocks toward the reference's levels by the per-group strength you set. A strength of 1.0 means "match fully"; 0.5 means "halfway to the reference"; 0 means "leave as merged." The design assumption - that a good merged model should resemble its reference's per-block energy distribution - is reasonable and is the same assumption behind renormalizing merges, which this pack does elsewhere.
This is a diagnostic-and-fix workflow in one node: it tells you (via calibration_info) what the block energy gaps are and patches them. If a merge comes out soft in fine detail, that usually shows up as underpowered output blocks, and this node will push them toward the reference's levels with far less trial-and-error than hand-dialing Donut Detailer XL Blocks.
Honest advice on when to use it
Reach for it right after a merge when the result is "close but different" - especially a WidenMerge or a block-weighted merge where the magnitudes can drift in ways a flat strength slider can't see. Set the preset to Auto first to see the full-strength result, then back individual group strengths off if the fix overshoots (output_1/output_2 are where detail lives and where overshoot shows first).
The limitations are the same as any reference-matching tool: it matches energy, not semantics. A block can have the right magnitude and the wrong content. Use it as a first-order correction, then judge the actual images. And note the category - donut/calibration - this is squarely aimed at the pack's model-merging users, so if you never merge models, this node is not for you.
Installing
Part of the pack: ComfyUI Manager → search DonutNodes, or git clone the repo into custom_nodes/ and pip install -r requirements.txt with the same Python that runs ComfyUI. No model downloads - it works on whatever you load. And like every patching node here, changes apply at run time, so re-run the graph after touching a strength slider.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| merged_model | MODEL | — | |
| reference_model | MODEL | — | |
| input_blocks_strength | FLOAT | 1.000–2 | — |
| middle_blocks_strength | FLOAT | 1.000–2 | — |
| output_1_blocks_strength | FLOAT | 1.000–2 | — |
| output_2_blocks_strength | FLOAT | 1.000–2 | — |
| presetopt | COMBO | Manual | 2 options: Manual, Auto (full strength) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| calibration_info | STRING | — |