ModelMergeByPreset
Merge two checkpoints with one dropdown instead of 25 sliders
- model1
- model2
- MODEL
ComfyUI's built-in model merge is powerful and, let's be honest, exhausting. Drop in a ModelMergeBlocks node and you get roughly two dozen sliders - one for every block of the UNet - plus separate knobs for the timestep and text embedding layers. That's the right tool when you want surgical control. It's the wrong tool when you just want to try, say, "model A up front, model B in the decoder" and see what happens.
ModelMergeByPreset (class Preset_Model_Merge) is the lazy path. It's one node from WASasquatch - yes, the same person behind the sprawling WAS Node Suite - that replaces the whole slider panel with a single preset dropdown and a strength dial. Pick a curve, pick how hard you want it applied, and the node fills in all 25 block ratios for you.
How it works
Under the hood it's a thin wrapper around ComfyUI's own ModelMergeBlocks. That node merges two models by assigning each structural block a ratio between 0 (all of model 1) and 1 (all of model 2), then interpolating the weights. The Preset Merger just computes those ratios for you from a table of 69 named curves - easing functions like CUBIC_EASE_IN and SMOOTHSTEP, waves like SINE_WAVE and SAWTOOTH*3, gradients like LINEAR_IN and EXP_DECAY, plus the flat ALL_A/ALL_B, rings, zigzags, and a couple of random options.
So the block layout is hardcoded to the classic 12 input / 1 middle / 12 output structure that SD 1.5 and SDXL use. If you're merging across architecture families - SD 1.5 weights into an SDXL model, say - nothing lines up and the output is garbage. Keep both inputs in the same family.
The node doesn't call any API and needs no key; it's pure math running in RAM. Feed it two loaded MODELs and it hands you back one merged MODEL, ready to plug straight into a KSampler. If you want to keep the result, wire that output into core's Save Checkpoint node - this one doesn't touch your disk.
The inputs that matter
You'll actually touch four of these:
- preset - the whole point. Sixty-nine curves, all named descriptively. If you don't know what
BACK_EASE_OUTdoes, pickGRAD_A(A up front, B in back) orGRAD_V(the reverse) and start there. - preset_strength (0–1, default 1) - the master dial. This scales the whole curve, so at 0 you get all of model 1 and at 1 you get the full preset. It's effectively "how much model 2 to let in," and it's the fastest way to dial a merge back when it turns to mush.
- seed - only does anything for the two random presets (
RANDOM,RANDOM (SCALE BLOCKED)). Everything else is a deterministic curve. - time_embed. and label_emb. (0–1) - passed straight through to the merge, controlling how the timestep and text-embedding layers blend. Leave them at 1 unless the merge's character drifts and you want to weight one parent's conditioning.
The single output is a MODEL. That's it.
Installing it
Easiest via ComfyUI Manager: search for ComfyUI Preset Merger and install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/ComfyUI_Preset_Merger
Then restart ComfyUI. There are no model downloads and no extra dependencies - the pack imports only numpy, which ComfyUI already ships. You'll find the node under advanced/model_merging.
Common issues
- Garbage output from mismatched architectures. The block count is hardcoded; only merge same-family checkpoints.
- The merge won't reproduce.
RANDOMre-rolls on every queue because its change-detection always reports "changed." If you want a random merge you can go back to, note the seed and be ready to re-run. Fun quirk:RANDOM (SCALE BLOCKED)has a typo in that same check, so it can sit on a cached result - bump something else (likepreset_strength) if you change the seed and nothing happens. - No help to be found. The README is one paragraph; this is a throwaway utility node, not a maintained flagship. Don't expect docs or updates, and treat it as a convenience wrapper rather than a supported piece of infrastructure.
Where does it fit? For actually producing a checkpoint you plan to share, a real merger with full block control is the better tool - merging is how a chunk of CivitAI gets made, and it's fast, but careless merges lose coherence fast. This node is for rapid what-if experimentation: throw two models in, flip through curves, see which direction your style actually wants to lean. It's a toy in the best sense - and sometimes a toy is exactly what you need.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model1 | MODEL | — | |
| model2 | MODEL | — | |
| seed | INT | 00–18446744073709550000 | — |
| time_embed. | FLOAT | 1.000–1 | — |
| label_emb. | FLOAT | 1.000–1 | — |
| preset | COMBO | 69 options: ALL_A, ALL_B, BACK_EASE_IN, BACK_EASE_OUT, BOUNCE_EASE_IN, BOUNCE_EASE_IN_OUT, +63 | |
| preset_strength | FLOAT | 1.0000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |