🧩 Easy Component Merger
Merge Just the CLIPs, or Just the UNets, of Two Checkpoints
- component_data_a
- component_data_b
- component_data_c
- merged_component_data
Checkpoint merging treats a model as one giant blob of weights, which is fine most of the time. But sometimes you only want to merge a piece - two text encoders, two VAE sets, two UNets - and leave the rest of the model alone. Easy Component Merger is the piece-level merge node: it takes two (or three) component state dicts and runs the full merge-method suite on just those.
It slots into the extract → swap → combine pipeline: pull components out of two checkpoints with the Component Extractor, merge the pieces you care about here, and reassemble with the Component Combiner. It's a niche tool - you'll reach for it maybe once a month - but when you need it, nothing else does the job.
How it works
The two required inputs, component_data_a and component_data_b, are CHECKPOINT-typed state dicts (wire them from the *_data outputs of a Component Extractor; component_data_c is optional for a three-way merge). The method dropdown exposes the same 15 merge algorithms as the main merger - linear, magnitude, feature_mix, slerp, the TIES and DARE variants, and so on - with their per-method helper knobs: uniqueness (feature_mix), threshold (subtract), blend (magnitude). blend_mode defaults to auto, which picks a dense or active-region merge based on the data.
weight_a / weight_b / weight_c set the blend, and precision lets you emit the merged component at a different dtype. The single output, merged_component_data, feeds straight into a Component Combiner (or another merger for chained blending).
Inputs that matter
component_data_a/component_data_b- the two state dicts you're blending.method-linearto start. For CLIPs you'll rarely need more.weight_a/weight_b- remember this is checkpoint-scale math, not LoRA math: forlinear, weights should sum near 1.0, or you're doubling magnitudes.
Installing it
Part of the EasyLoRAMerger pack - Manager (search "Easy LoRA Merger") or:
cd ComfyUI/custom_nodes
git clone https://github.com/Terpentinas/EasyLoRAMerger
Restart ComfyUI. No downloads.
Gotchas
The same architecture rule as the rest of the component chain: merging an SDXL CLIP with a Flux CLIP is meaningless - the key namespaces don't line up and the result is garbage. Merge pieces from checkpoints built on the same architecture. And there's no preview output here (just the merged state dict), so the workflow shape is inherently "merge → combine → sample," with the sampler as your quality check. Keep save_trigger-style testing in mind even though this node doesn't have one - the combine step is where you'd preview.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| component_data_a | CHECKPOINT | Primary component state dict (chained from Component Extractor) | |
| component_data_b | CHECKPOINT | Secondary component state dict to merge with primary | |
| method | COMBO | linear | How tensors are combined per key |
| density | FLOAT | 1.000.1–1 | Density for DARE methods (keep top % of weights). WARNING: Values < 1.0 sparsify weights, may degrade quality. |
| component_data_copt | CHECKPOINT | Tertiary component state dict (optional, for 3-way merge) | |
| weight_aopt | FLOAT | 1.00-5–5 | Strength of first component |
| weight_bopt | FLOAT | 1.00-5–5 | Strength of second component |
| weight_copt | FLOAT | 1.00-5–5 | Strength of third component (only used if component_data_c provided) |
| uniquenessopt | FLOAT | 0.700.1–1 | For feature_mix: higher = preserve more unique features from each source |
| thresholdopt | FLOAT | 0.200–1 | For subtract: minimum magnitude threshold for subtraction |
| blendopt | FLOAT | 0.500–1 | For magnitude: 0=strict max-magnitude selector, 1=fully blended |
| blend_modeopt | COMBO | auto | auto: Smart choice | active: Only merge non-zero regions | dense: Traditional weighted sum |
| deviceopt | COMBO | auto | 3 options: auto, cuda, cpu |
| precisionopt | COMBO | auto | 6 options: auto, float32, bfloat16, float16, fp8_e4m3fn, fp8_e5m2 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| merged_component_data | CHECKPOINT | — |