Nodes/ComfyUI-DareMerge/Model Merger (MBW/DARE)
ComfyUI Node

Model Merger (MBW/DARE)

DARE merging with MBW-style per-block weights

By 54rt1n·Created 3 years ago·Updated about a year ago· 98
Model Merger (MBW/DARE)
  • model_a
  • model_b
  • model_mask
  • MODEL
time1.00
label1.00
input_blocks.00.00
input_blocks.10.00
input_blocks.20.00
input_blocks.30.00
input_blocks.40.00
input_blocks.50.00
input_blocks.60.00
input_blocks.70.00
input_blocks.80.00
input_blocks.90.00
input_blocks.100.00
input_blocks.110.00
middle_block.00.00
middle_block.10.00
middle_block.20.00
output_blocks.00.00
output_blocks.10.00
output_blocks.20.00
output_blocks.30.00
output_blocks.40.00
output_blocks.50.00
output_blocks.60.00
output_blocks.70.00
output_blocks.80.00
output_blocks.90.00
output_blocks.100.00
output_blocks.110.00
out0.00
drop_rate0.90
tiessum
rescaleoff
seed1
methodcomfy
iterations1

Model Merger (MBW/DARE) is the one with the giant wall of sliders. MBW stands for "merge block weighted" - the classic approach, inherited from the A1111-era merge tools, where instead of six coarse stage ratios you get a weight for every individual block of the UNet: 12 input blocks, 3 middle blocks, 12 output blocks, plus the out layer and the time/label embeddings. Now take that fine-grained control and run DARE-TIES on top of it, and you have this node.

If that sounds like overkill, it is - and that's the appeal. The six-slider Block/DARE node groups the whole encoder under one knob; MBW/DARE lets you say "blocks 4 and 7 of the input stay fully on model A, block 2 of the output is fully model B, everything else gets DARE'd at full strength." That level of granularity is how people chase specific failure modes - a merge that collapses hands or melts the background can often be traced to a specific block range, and MBW is the tool that lets you pin the blame to a block and zero it out.

The inputs that matter

  • model_a, model_b - base and injected model.
  • input_blocks.0 through input_blocks.11 - one slider per encoder block. 1 = keep model A, 0 = take model B.
  • middle_block.0 through middle_block.2 - the bottleneck blocks.
  • output_blocks.0 through output_blocks.11 - one slider per decoder block.
  • out, time, label - the output layer and the conditioning embeddings.
  • drop_rate (default 0.9), ties, rescale, seed, method, iterations - the standard DARE controls, all defaulted to the pack's recommended settings (rescale off, ties on sum).
  • model_mask (optional) - parameter-level protection on top of the block weights.

Note the block sliders all default to 0 on this node, unlike the six-ratio nodes which default to 1. That means out of the box, every block is set to "take model B" - so if you wire one up fresh and it just hands you model B, that's not a bug, that's the defaults staring at you. Push the blocks you care about up toward 1 before you judge the result.

How it works

Under the hood it's the same engine as Model Merger (Advanced/DARE): your per-block sliders become a LAYER_GRADIENT (each layer inherits the weight of the block it belongs to), and the DARE merge reads that gradient per layer. The block structure is hardcoded for the SD1.5 layout - 12/3/12 - which is what the pack's sniff_model_type checks for. SDXL's block count differs, so treat this node as SD1.5-flavored in practice.

The output

A MODEL patch for the KSampler or the Save Checkpoint node (MODEL + CLIP + VAE). In-memory only until you save it.

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 - nothing to download.

The honest caveat: this is a fiddly, expert-oriented node, and the community threads about this pack are overwhelmingly beginners asking "how do I use these?" - there isn't a well-trodden MBW recipe waiting for you. Start from a working Block/DARE merge, then zero out one block at a time and see what changes; don't try to tune all 30 sliders at once, because with a stochastic merge behind them you won't be able to tell which slider did what. Fix the seed, change one block, compare.

CategoryDareMerge/unet

Inputs (39)

NameTypeDefaultDescription
timeFLOAT1.000–1
labelFLOAT1.000–1
input_blocks.0FLOAT0.000–1
input_blocks.1FLOAT0.000–1
input_blocks.2FLOAT0.000–1
input_blocks.3FLOAT0.000–1
input_blocks.4FLOAT0.000–1
input_blocks.5FLOAT0.000–1
input_blocks.6FLOAT0.000–1
input_blocks.7FLOAT0.000–1
input_blocks.8FLOAT0.000–1
input_blocks.9FLOAT0.000–1
input_blocks.10FLOAT0.000–1
input_blocks.11FLOAT0.000–1
middle_block.0FLOAT0.000–1
middle_block.1FLOAT0.000–1
middle_block.2FLOAT0.000–1
output_blocks.0FLOAT0.000–1
output_blocks.1FLOAT0.000–1
output_blocks.2FLOAT0.000–1
output_blocks.3FLOAT0.000–1
output_blocks.4FLOAT0.000–1
output_blocks.5FLOAT0.000–1
output_blocks.6FLOAT0.000–1
output_blocks.7FLOAT0.000–1
output_blocks.8FLOAT0.000–1
output_blocks.9FLOAT0.000–1
output_blocks.10FLOAT0.000–1
output_blocks.11FLOAT0.000–1
outFLOAT0.000–1
model_aMODEL
model_bMODEL
drop_rateFLOAT0.900–1
tiesCOMBOsum3 options: sum, count, off
rescaleCOMBOoff2 options: off, on
seedINT10–99999999999
methodCOMBOcomfy12 options: comfy, lerp, slerp, slice, cyclic, gradient, +6
iterationsINT11–100
model_maskoptMODEL_MASK

Outputs (1)

NameTypeDescription
MODELMODEL