Nodes/EasyLoRAMerger/🧩 Easy Component Merger
ComfyUI Node

🧩 Easy Component Merger

Merge Just the CLIPs, or Just the UNets, of Two Checkpoints

By Terpentinas·Created 7 months ago·Updated 4 months ago· 12
🧩 Easy Component Merger
  • component_data_a
  • component_data_b
  • component_data_c
  • merged_component_data
methodlinear
density1.00
weight_a1.00
weight_b1.00
weight_c1.00
uniqueness0.70
threshold0.20
blend0.50
blend_modeauto
deviceauto
precisionauto

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 - linear to start. For CLIPs you'll rarely need more.
  • weight_a / weight_b - remember this is checkpoint-scale math, not LoRA math: for linear, 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.

CategoryCheckpoint/Utils

Inputs (14)

NameTypeDefaultDescription
component_data_aCHECKPOINTPrimary component state dict (chained from Component Extractor)
component_data_bCHECKPOINTSecondary component state dict to merge with primary
methodCOMBOlinearHow tensors are combined per key
densityFLOAT1.000.1–1Density for DARE methods (keep top % of weights). WARNING: Values < 1.0 sparsify weights, may degrade quality.
component_data_coptCHECKPOINTTertiary component state dict (optional, for 3-way merge)
weight_aoptFLOAT1.00-5–5Strength of first component
weight_boptFLOAT1.00-5–5Strength of second component
weight_coptFLOAT1.00-5–5Strength of third component (only used if component_data_c provided)
uniquenessoptFLOAT0.700.1–1For feature_mix: higher = preserve more unique features from each source
thresholdoptFLOAT0.200–1For subtract: minimum magnitude threshold for subtraction
blendoptFLOAT0.500–1For magnitude: 0=strict max-magnitude selector, 1=fully blended
blend_modeoptCOMBOautoauto: Smart choice | active: Only merge non-zero regions | dense: Traditional weighted sum
deviceoptCOMBOauto3 options: auto, cuda, cpu
precisionoptCOMBOauto6 options: auto, float32, bfloat16, float16, fp8_e4m3fn, fp8_e5m2

Outputs (1)

NameTypeDescription
merged_component_dataCHECKPOINT