Nodes/ComfyUI-DareMerge/Model Merger (Block)
ComfyUI Node

Model Merger (Block)

Block merging, the six-slider way

By 54rt1n·Created 3 years ago·Updated about a year ago· 98
Model Merger (Block)
  • model_a
  • model_b
  • model_mask
  • MODEL
time1.00
label1.00
input1.00
middle1.00
output1.00
out1.00
methodcomfy

Model Merger (Block) is the plain, no-DARE way to merge two checkpoints with block-level control. It's the node you reach for when you know which part of the network you want to swap - the early input layers, the middle, the decoder - and you don't need the stochastic sparsification of the DARE family to get there.

Block merging is the classic merge idiom that's been around since before ComfyUI: a UNet isn't a monolith, it's a stack of recognizable stages, and you can blend two models differently per stage. This node gives you six ratios for those stages, which is the same shape as the classic A1111-era "block weight" merges but in graph form. If you've used MergeMonster or the block-weight extension on another UI, this will feel familiar immediately.

The inputs that matter

  • model_a, model_b - the two checkpoints. 1 = keep model A's weight for that block, 0 = keep model B's.
  • time and label - the embedding layers: time conditioning and (on SDXL) label embedding.
  • input, middle, output, out - the four main UNet stages. Input is where image structure enters; middle is the bottleneck that holds the most abstract learned representation; output is where detail gets painted back in. A common starting experiment is input at 1 (keep A's early layers) and output at 0 (take B's decoder), leaving the middle blended.
  • method - same 12-way dropdown as Model Merger (Advanced): comfy by default, then lerp/slerp and a shelf of exotic options.
  • model_mask (optional) - a MODEL_MASK that pins specific parameters to model A regardless of the ratios.

Internally, this node is just Model Merger (Advanced) with a Block Gradient generated for you on the fly - the six sliders become a per-layer gradient, and the same merge engine runs. There's nothing magic in the block node itself; the magic is that it saves you from building the gradient by hand.

The output

A MODEL, patched in memory. Test it in a KSampler, or save it permanently by wiring MODEL + CLIP + VAE into the core Save Checkpoint node. Note that like everything in this pack it works on SD1.5 and SDXL - the block layout is different between them, and the pack sniffs which one it's looking at.

Install and gotchas

ComfyUI Manager (search "DareMerge") or:

cd ComfyUI/custom_nodes
git clone https://github.com/54rt1n/ComfyUI-DareMerge

Restart ComfyUI. Dependencies are matplotlib, numpy, torch, pillow; no model downloads, nothing heavy.

Two things to keep in mind. First, a "block" in this node is a coarse bucket - every parameter in the input stage gets the same ratio. If you want per-layer precision (say, only the attention sublayers), that's what the gradient nodes are for. Second, remember that plain block blending is averaging, and averaging is why a lot of community merges dilute both parents - the checkpoint lore is full of merges that inherit each other's defects. If a block merge comes out muddy, that's not a bug in this node; that's the nature of weight interpolation. The DARE variants exist precisely because they're less naive about which weights to mix.

CategoryDareMerge/unet

Inputs (10)

NameTypeDefaultDescription
timeFLOAT1.000–1
labelFLOAT1.000–1
inputFLOAT1.000–1
middleFLOAT1.000–1
outputFLOAT1.000–1
outFLOAT1.000–1
model_aMODEL
model_bMODEL
methodCOMBOcomfy12 options: comfy, lerp, slerp, slice, cyclic, gradient, +6
model_maskoptMODEL_MASK

Outputs (1)

NameTypeDescription
MODELMODEL