Power LoRA Merger Options
The tuning knobs behind WAS Power LoRA Merger
- options
This node produces nothing on its own - it's a settings bundle you plug into the options input on WAS Power LoRA Merger (its own article, and the node that actually does the merging). It's optional there, so you only need this when the merger's own defaults for your chosen mode aren't giving you what you want.
How it works
The fields are grouped by which merge mode they affect, and most of them are inert unless the Merger is set to the matching mode. Roughly:
SVD / rank group (affects svd, rebase, add-diff, add-orth, diff-export, moe): rank (default 32; set to 0 for auto-rank based on an energy threshold), auto_rank_threshold (default 0.99, only used when rank is 0 - higher keeps more singular-value energy, meaning a larger effective rank), preserve_norm (svd only - keeps the average per-module delta norm stable after merging, so overall strength doesn't drift), and cap_mult_enable/cap_mult (svd only - hard-caps the merged module norm to cap_mult × mean(source norms), a safety rail against one LoRA's contribution dominating).
Precision: dtype (default bf16 - what gets saved to disk), compute_dtype (default auto - the internal merge math precision; auto prefers bf16 when it hits mixed input dtypes), and cpu (force the merge onto CPU instead of GPU - slower, but frees VRAM if your GPU is busy).
Filtering: include_patterns/exclude_patterns - comma-separated substrings matched against module name prefixes, so you can restrict a merge to (say) only attention blocks, or exclude specific modules, without touching the rest of the LoRA.
MoE group (only used in the Merger's moe mode): moe_temperature (default 1 - softmax temperature for expert gating; lower means sharper, more winner-take-all selection) and moe_hard (skip the soft mixture and hard-pick a single best expert per module instead).
Block-mix group (only used in the Merger's block-mix mode): block_mix_method (svd = delta-merge-then-recompress, stack = exact rank stacking with no compression), block_mix_preset (routing families that match how different architectures actually name their blocks - zimg-turbo, flux, wan, qwen, sd, sdxl, or generic/auto), block_mix_weighted (turns hard A-or-B routing into a blend), and block_mix_concept_mix/block_mix_style_mix (when weighted, what fraction of LoRA A survives in concept/attention versus style/feed-forward modules - 0.5 splits evenly).
The inputs and outputs that matter
For a first merge you mostly need rank and dtype - leave the moe_* and block_mix_* groups alone unless the Merger node's mode is actually moe or block-mix, where they're otherwise inert. Output is a single options (WAS_LORA_MERGE_OPTIONS) socket that only plugs into the Merger's options input - nowhere else.
How to install it
Via ComfyUI Manager: search WAS_Extras, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/WAS_Extras
Restart ComfyUI. No extra dependencies.
Common issues & troubleshooting
Changed block_mix_* or moe_* settings and nothing happened. Check the Merger node's mode dropdown first - those groups are only read in block-mix and moe mode respectively. Everything else ignores them.
Merged LoRA looks washed out or has lost detail. rank too low, or auto_rank_threshold set too aggressively for an SVD-family mode - raise the rank, or push the threshold closer to 1.0 to keep more of the singular-value energy.
A merge that should take seconds is taking minutes. Check whether cpu got left on - it trades speed for VRAM headroom, and it's easy to forget you enabled it for a previous run.
Confused about dtype vs compute_dtype. dtype is what gets written to your .safetensors file. compute_dtype is only the precision used during the merge math itself - you can compute in fp32 for accuracy and still save the result as bf16 to keep the file small.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| rank | INT | 320–4096 | How much detail the merged LoRA keeps, for the modes that recompress it. Higher keeps more of the sources and makes a bigger file: 32 suits most merges, 64 to 128 holds a complicated one together. Set it to 0 to let each part of the model choose its own rank from auto_rank_threshold instead. |
| auto_rank_threshold | FLOAT | 0.99000.5–1 | Only read when rank is 0: how much of each part's strength an automatic rank has to keep. 0.99 keeps almost all of it and picks a generous rank; 0.9 is far more aggressive and gives a much smaller file. |
| preserve_norm | BOOLEAN | false | svd mode only. Rescales every merged part back to the average strength of the LoRAs it came from, which stops a merge of several strong LoRAs coming out overcooked at the strength you normally use. |
| cap_mult_enable | BOOLEAN | false | svd mode only. Switches on the ceiling set by cap_mult below. Use it when one source LoRA is far stronger than the rest and is taking over the merge. |
| cap_mult | FLOAT | 1.000–100 | The ceiling, as a multiple of the average source strength, applied when cap_mult_enable is on. 1.0 holds each part to the average, 1.5 allows half again. Ignored while cap_mult_enable is off. |
| dtype | COMBO | bf16 | Precision the merged file is written in. `bf16` is half the size of fp32 and is what most LoRAs ship as; `fp32` doubles the file for a difference nothing downstream is likely to see; `fp16` matches older LoRAs but has less range. |
| compute_dtype | COMBO | auto | Precision the merge arithmetic runs in, which is separate from what is saved. `auto` keeps the sources' own precision, moving to bf16 only when they disagree. Force `fp32` if a merge comes out with artefacts the sources do not have. |
| cpu | BOOLEAN | false | Merge on the processor instead of the graphics card. Slower, but it uses no video memory, which is what to reach for when a large merge runs out of it. |
| include_patterns | STRING | Comma-separated text to look for in module names: leave it empty to merge everything, or name parts to restrict the merge to them. 'lora_unet' merges only the image side and leaves the text encoder alone. | |
| exclude_patterns | STRING | Comma-separated text that keeps a module out of the merge, applied after include_patterns. 'lora_te' drops the text-encoder half, which is the usual way to keep one LoRA's trigger words out of a merge. | |
| moe_temperature | FLOAT | 1.000.000001–100 | moe mode only: how decisively each part of the model picks between the LoRAs. Low values such as 0.1 make it choose the strongest one almost outright; high values such as 5.0 blend them evenly. |
| moe_hard | BOOLEAN | false | moe mode only. Take each part of the model from a single LoRA, the strongest one there, instead of blending. Gives a sharper split between the sources than any temperature can. |
| block_mix_method | COMBO | svd | block-mix mode only: `svd` recompresses the routed result to the rank above and keeps the file small; `stack` keeps both sources' ranks exactly, which is more faithful and produces a larger file. |
| block_mix_preset | COMBO | auto | block-mix mode only: which model family's block naming the routing reads. `auto` works it out from the LoRA's own keys and is right almost always; name the family when a LoRA uses an unusual naming scheme and the routing report shows everything as unclassified. |
| block_mix_weighted | BOOLEAN | false | block-mix mode only. Blend the two LoRAs in each part of the model by the two ratios below, instead of giving each part to one of them outright. Use it when a straight route swings too far towards one LoRA. |
| block_mix_concept_mix | FLOAT | 0.500–1 | Only read while block_mix_weighted is on: how much of LoRA A goes into the parts carrying subject and composition, with LoRA B making up the rest. 1.0 is all A, 0.0 is all B, 0.5 is even. |
| block_mix_style_mix | FLOAT | 0.500–1 | Only read while block_mix_weighted is on: the same ratio for the parts carrying surface style and texture. Setting concept low and style high keeps A's subject in B's look. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| options | WAS_LORA_MERGE_OPTIONS | The settled settings, for the Power LoRA Merger's options socket. |