ModelMergeBlockNumber
32 sliders, one per UNet block
- model1
- model2
- MODEL
This is the least glamorous node in the experiments pack, and the most literal: 32 sliders, each one the blend weight for a single block of a diffusion model's UNet. If you've ever wanted to take block 7 of checkpoint B and drop it into checkpoint A while keeping everything else from A, this is the tool.
It's a block-level checkpoint merge for SD 1.5-style layouts - 12 input blocks, 3 middle blocks, 12 output blocks, plus the time embedding, label embedding, and the final out projection. The node subclasses ComfyUI's own ModelMergeBlocks, which means it rides on current ComfyUI and produces a model you can feed straight into a sampler or save out with SaveCheckpoint.
How it works
ComfyUI's merge machinery treats the two models as a weighted blend per parameter. The node builds one weight per block, and the merge matches each weight to the model keys by prefix - so middle_block.1. applies to everything in that block unless a more specific knob exists. (There isn't one here; that's the point. The ...Transformers siblings in this same pack are the more specific ones.)
One thing the defaults will get you: every weight starts at 1.0, and in ComfyUI's merge convention 1.0 means "this block comes entirely from model2." So a fresh node with nothing touched doesn't give you a 50/50 blend - it hands you model2. That surprises everyone once. Lower a weight toward 0 and the block tilts back toward model1; 0.5 is a true halfway blend.
Inputs and output
- model1 and model2 - both MODEL type. The node reads both checkpoints' weights, no files to manage.
time_embed.andlabel_emb.- blend for the conditioning embeddings.input_blocks.0.…input_blocks.11.- the 12 encoding blocks.middle_block.0.…middle_block.2.- the bottleneck, where most "style" and "identity" live.output_blocks.0.…output_blocks.11.- the decoding side.out.- the final output layer.
All are FLOAT, 0 to 1, step 0.01. The single output is MODEL - wire it into a KSampler, or into SaveCheckpoint to write a merged checkpoint file.
Why you'd reach for it
Mostly: checkpoint chemistry. The classic move is borrowing a style or character model's middle and deep output blocks while keeping your base model's early blocks - early blocks carry the raw image structure, deep blocks carry semantics and style. With this node you can bisect that by hand and see what each block actually contributes, which is a great way to learn what a merge is.
Where it gets you in trouble: it's built for the 12-block SD 1.5 layout. Feed it an SDXL model and the block numbering won't line up with reality (SDXL has 9 input blocks and a different transformer structure), so the weights stop meaning what you think. Use the pack's SDXL merge nodes for that, or core ComfyUI's per-architecture ModelMergeSDXL.
Installing it
Via ComfyUI Manager, search ComfyUI_experiments and install. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/comfyanonymous/ComfyUI_experiments
Restart ComfyUI. No dependencies, no model downloads. It shows up under advanced/model_merging.
The honest verdict
Modern ComfyUI ships simpler merge nodes that are easier to reason about, and the per-architecture named merges are usually the better first choice. But if you want the raw, per-block, numbered control - and the mental model that comes with it - this is the node. Just remember the 1.0 default means "all model2," and save a copy of anything you're proud of before you touch block 7.
Inputs (32)
| Name | Type | Default | Description |
|---|---|---|---|
| model1 | MODEL | — | |
| model2 | MODEL | — | |
| time_embed. | FLOAT | 1.000–1 | — |
| label_emb. | FLOAT | 1.000–1 | — |
| input_blocks.0. | FLOAT | 1.000–1 | — |
| input_blocks.1. | FLOAT | 1.000–1 | — |
| input_blocks.2. | FLOAT | 1.000–1 | — |
| input_blocks.3. | FLOAT | 1.000–1 | — |
| input_blocks.4. | FLOAT | 1.000–1 | — |
| input_blocks.5. | FLOAT | 1.000–1 | — |
| input_blocks.6. | FLOAT | 1.000–1 | — |
| input_blocks.7. | FLOAT | 1.000–1 | — |
| input_blocks.8. | FLOAT | 1.000–1 | — |
| input_blocks.9. | FLOAT | 1.000–1 | — |
| input_blocks.10. | FLOAT | 1.000–1 | — |
| input_blocks.11. | FLOAT | 1.000–1 | — |
| middle_block.0. | FLOAT | 1.000–1 | — |
| middle_block.1. | FLOAT | 1.000–1 | — |
| middle_block.2. | FLOAT | 1.000–1 | — |
| output_blocks.0. | FLOAT | 1.000–1 | — |
| output_blocks.1. | FLOAT | 1.000–1 | — |
| output_blocks.2. | FLOAT | 1.000–1 | — |
| output_blocks.3. | FLOAT | 1.000–1 | — |
| output_blocks.4. | FLOAT | 1.000–1 | — |
| output_blocks.5. | FLOAT | 1.000–1 | — |
| output_blocks.6. | FLOAT | 1.000–1 | — |
| output_blocks.7. | FLOAT | 1.000–1 | — |
| output_blocks.8. | FLOAT | 1.000–1 | — |
| output_blocks.9. | FLOAT | 1.000–1 | — |
| output_blocks.10. | FLOAT | 1.000–1 | — |
| output_blocks.11. | FLOAT | 1.000–1 | — |
| out. | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |