multiModelMerge
Blend three checkpoints in the graph with multiModelMerge
- model_A_override
- model_B_override
- model_C_override
- clip_A_override
- clip_B_override
- clip_C_override
- model
- clip
Merging checkpoints is normally a separate tool's job - you fire up a merge app, pick a formula, wait, and then load the result. tinyterra's multiModelMerge (ttN multiModelMerge) skips all of that: it loads up to three checkpoints and blends them in the graph, spitting out a model and a clip you can wire straight into a sampler.
The reason this is useful isn't the merge itself - it's the workflow. You can A/B test a 70/30 blend against the raw checkpoints by changing one slider and re-running, no round-trip through a merge utility and no 6 GB file sitting on disk. For "I wonder what happens ifβ¦" experiments it's genuinely the fastest path. If you want a permanent merged model you still want a real merge tool; this is for iterating live.
How the math works
The node takes checkpoints A, B and C and gives you two interpolation modes, selected with model_interpolation:
- Weighted sum -
A*(1-M) + B*M. The classic blend. At M=0 you get pure A, at M=1 pure B. This is what most people mean by "merge two models." - Add difference -
A + (B-C)*M. Model arithmetic: apply the difference between B and C onto A. This is how you do "add this style, subtract that one" merges, and it's where the third checkpoint earns its keep.
model_multiplier is the M - a float from 0 to 1. C is optional (set ckpt_C_name to "None" if you're only doing a two-way weighted sum).
What's easy to miss: the CLIP gets its own interpolation controls. clip_interpolation defaults to "Follow model interp", but you can instead pick its own weighted sum, add-difference, or just force "A Only", "B Only" or "C Only" with a separate clip_multiplier. That split exists because you sometimes want the model weights blended one way and the text encoder another - a checkpoint's CLIP heavily colors its style, and being able to keep one model's CLIP while blending the UNet is a real trick.
Inputs and outputs
Required: ckpt_A_name plus config_A_name (a config dropdown if you need something other than "Default"), ckpt_B_name, ckpt_C_name, and the interpolation/multiplier fields above.
Optional: model_A_override / model_B_override / model_C_override and clip_A_override / clip_B_override / clip_C_override. These let you merge models that already exist in your graph instead of reloading from disk - handy when one of them is already inside a pipe or came out of a LoRA stack.
Outputs are exactly two: model and clip. Wire them into a tinyKSampler, pipeKSampler, or any plain KSampler.
Install and the gotcha
Same pack install as everything in tinyterraNodes - ComfyUI Manager, search ComfyUI_tinyterraNodes, or git clone https://github.com/TinyTerra/ComfyUI_tinyterraNodes.git into ComfyUI/custom_nodes, then restart. No extra dependencies, no downloads.
The gotcha is memory, and it's a doozy: the node loads every checkpoint you name into VRAM/RAM. Merge three 6 GB checkpoints plus your sampler's own model and you can watch your memory vanish. If you're only doing A and B, leave C at "None" so it's not loaded at all. And note this path is classic SD1.5/SDXL territory - the checkpoint+config model of loading assumes the old architectures, so don't expect it to merge GGUF or the newest Flux-format checkpoints.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| ckpt_A_name | COMBO | 0 options: | |
| config_A_name | COMBO | Default | 12 options: Default, anything_v3.yaml, v1-inference.yaml, v1-inference_clip_skip_2.yaml, v1-inference_clip_skip_2_fp16.yaml, v1-inference_fp16.yaml, +6 |
| ckpt_B_name | COMBO | 1 options: None | |
| config_B_name | COMBO | Default | 12 options: Default, anything_v3.yaml, v1-inference.yaml, v1-inference_clip_skip_2.yaml, v1-inference_clip_skip_2_fp16.yaml, v1-inference_fp16.yaml, +6 |
| ckpt_C_name | COMBO | 1 options: None | |
| config_C_name | COMBO | Default | 12 options: Default, anything_v3.yaml, v1-inference.yaml, v1-inference_clip_skip_2.yaml, v1-inference_clip_skip_2_fp16.yaml, v1-inference_fp16.yaml, +6 |
| model_interpolation | COMBO | 3 options: Weighted sum = ( A*(1-M) + B*M ), Add difference = ( A + (B-C)*M ), A Only | |
| model_multiplier | FLOAT | 1.000β1 | β |
| clip_interpolation | COMBO | 6 options: Follow model interp, Weighted sum = ( A*(1-M) + B*M ), Add difference = ( A + (B-C)*M ), A Only, B Only, C Only | |
| clip_multiplier | FLOAT | 1.000β1 | β |
| model_A_overrideopt | MODEL | β | |
| model_B_overrideopt | MODEL | β | |
| model_C_overrideopt | MODEL | β | |
| clip_A_overrideopt | CLIP | β | |
| clip_B_overrideopt | CLIP | β | |
| clip_C_overrideopt | CLIP | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | β |
| clip | CLIP | β |