LoRA Multi-Merge (Enhanced DARE-Ties)
LoRA Multi-Merge (Enhanced DARE-Ties) — magnitude-aware LoRA merging for up to 8 LoRAs
- output_path
The tuned-up version of this pack's plain DARE-Ties merger. Where LoRA Multi-Merge (DARE-Ties) drops a flat percentage of each LoRA's small weight changes at random, Enhanced DARE-Ties - also from silveroxides' ComfyUI-ModelUtils - scales the odds of keeping a weight by how big that weight's contribution actually is. Bigger deltas get kept more often, tiny ones get dropped more often, instead of every parameter getting the same coin flip.
The mechanism, and what changed from plain DARE. Standard DARE picks a flat drop rate and applies it uniformly - every small-magnitude weight has the same chance of getting zeroed, regardless of just how small it is relative to its neighbors. The node's own description of this variant: "Uses dynamic probability masking based on value magnitudes." Instead of one drop rate, you get a masking curve: mask_power (default 2.0, described in its tooltip as "Curve. 2.0 = quadratic") controls how sharply the keep-probability scales with a weight's size - a higher power means small weights get punished harder relative to large ones. min_keep_prob (default 0.01) is a floor under that curve, so nothing hits exactly zero probability of survival - the tooltip calls this out directly as a guard "to prevent explosion," i.e. stopping the masking from being so aggressive in some region that a whole layer effectively collapses. mask_smooth (default 0) blends between hard dropout (0.0, a weight either survives or doesn't) and soft continuous scaling (1.0, weights get proportionally down-weighted rather than binary-dropped). TIES' sign-conflict resolution - trimming and picking the dominant direction when LoRAs disagree - still runs via trim_quantile (default 0.2), same as the plain version.
Inputs that matter. lora_1 through lora_8 (only lora_1 required) plus matching weight_1-weight_8 (default 1.0 each) are your sources and their contribution levels, gated by lora_count. base_model (default None) reconciles key-naming differences across LoRAs from different trainers - same role as in the plain DARE-Ties node, and worth setting if your LoRAs didn't all come from the same pipeline. mask_power, min_keep_prob, mask_smooth, and trim_quantile are the merge-quality knobs described above. seed (default 42) still matters for reproducibility, since masking involves randomness even with magnitude weighting. output_filename, save_dtype (fp16), and device (cuda) finish it off. One output: output_path.
Installing it. ComfyUI Manager, search "Model Utility Toolkit" - or cd ComfyUI/custom_nodes && git clone https://github.com/silveroxides/ComfyUI-ModelUtils, restart. No extra dependencies in the README.
When to reach for this over the plain version. Start with plain LoRA Multi-Merge (DARE-Ties) first - it's fewer knobs, and for most straightforward multi-LoRA merges (a couple of style LoRAs, a character plus a lighting LoRA) flat dropout does the job fine. Come here specifically when flat dropout is either wiping out small-but-meaningful details you wanted to keep, or conversely not being aggressive enough about killing noise in layers dominated by a few large-magnitude changes - magnitude-aware masking is the tool for "the size of the change should influence whether it survives," which flat dropout structurally can't express.
Where it bites. Same architecture constraint as the plain version - every LoRA needs to target the same base model, since DARE-Ties resolves conflicts between compatible deltas rather than reconciling incompatible ones. With more knobs than the plain node, it's also easier to end up somewhere odd: a very high mask_power combined with a low min_keep_prob can end up dropping almost everything below the largest few weights, so if a merge looks like it lost most of a LoRA's identity, that combination is the first thing to check before assuming the LoRAs themselves don't merge well together.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| base_model | COMBO | None | Optional reference model to resolve key naming issues across formats. If None, input keys are preserved verbatim. |
| lora_count | COMBO | 2 | 8 options: 1, 2, 3, 4, 5, 6, +2 |
| lora_1 | COMBO | First LoRA | |
| weight_1 | FLOAT | 1.00-10–10 | — |
| lora_2 | COMBO | None | 1 options: None |
| weight_2 | FLOAT | 1.00-10–10 | — |
| lora_3 | COMBO | None | 1 options: None |
| weight_3 | FLOAT | 1.00-10–10 | — |
| lora_4 | COMBO | None | 1 options: None |
| weight_4 | FLOAT | 1.00-10–10 | — |
| lora_5 | COMBO | None | 1 options: None |
| weight_5 | FLOAT | 1.00-10–10 | — |
| lora_6 | COMBO | None | 1 options: None |
| weight_6 | FLOAT | 1.00-10–10 | — |
| lora_7 | COMBO | None | 1 options: None |
| weight_7 | FLOAT | 1.00-10–10 | — |
| lora_8 | COMBO | None | 1 options: None |
| weight_8 | FLOAT | 1.00-10–10 | — |
| mask_power | FLOAT | 2.000.001–10 | Mask power (Curve. 2.0 = quadratic) |
| min_keep_prob | FLOAT | 0.010–1 | Minimum keep probability (Floor to prevent explosion) |
| mask_smooth | FLOAT | 0.000–1 | Mask smoothness factor (0.0 = pure dropout, 1.0 = soft scale) |
| trim_quantile | FLOAT | 0.200–1 | TIES trim quantile (drops smallest values) |
| seed | INT | 420–18446744073709550000 | — |
| output_filename | STRING | merged_lora_dare_enhanced | — |
| save_dtype | COMBO | fp16 | 3 options: fp16, bf16, fp32 |
| device | COMBO | cuda | 2 options: cuda, cpu |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output_path | STRING | — |