Power LoRA Merger Options
The dial box behind a merge
- options
This node has no inputs, one output, and about seventeen widgets - which tells you what it is. It's the settings panel that Power LoRA Merger doesn't show you. Unwire it and the merger runs at rank 32 in bf16 with every module included, which is a fine default and all most people need. Wire it in when a merge has gone wrong and you need to know why.
If you're not merging anything, this node does nothing. It exists so the merger's own widget row doesn't look like a mixing desk.
The three settings that fix most bad merges
rank (default 32) is how much detail the merged file keeps, for every mode that recompresses. Too low and fine detail quietly disappears from the sources; 64 to 128 holds a complicated merge together at the cost of size. Set it to 0 and each part of the model picks its own rank instead, sized by auto_rank_threshold - that's how much of a module's strength the automatic rank is allowed to throw away. 0.99 keeps almost all of it and picks a generous rank; 0.9 is far more aggressive and gives you a much smaller file. If you want a small file and don't mind finding out later, that's your lever.
preserve_norm (svd mode) rescales every merged part back to the average strength of the LoRAs it came from. Merging sums, so three strong LoRAs at weight 1 produce something distinctly hotter than loading them at weight 1 each. Turn this on and the merge comes out at roughly the strength you're used to. cap_mult_enable plus cap_mult is the same idea with one rogue source: hold every part to a multiple of the average, so the loudest LoRA can't take over.
compute_dtype (auto, bf16, fp16, fp32) is the arithmetic, separate from dtype (fp16, fp32, bf16) which is what lands in the file. auto follows the sources' own precision and only steps to bf16 when they disagree. Force fp32 when a merge has artefacts its inputs don't - that's a precision problem, not a mode problem, and no amount of mode-switching fixes it.
Filtering what gets merged
include_patterns and exclude_patterns are comma-separated text matched against module names, applied in that order. Empty means merge everything. This is the feature that makes the node more than a compressor, because LoRA files carry two halves: the UNet side that changes how images look, and the text-encoder side that carries the trigger words.
So lora_te in exclude_patterns drops the text-encoder half of every source and you get a purely visual merge - the usual cure for a merged LoRA where one contributor's trigger words stomp over everything else. lora_unet in include_patterns does the same thing from the other direction. On a diffusion-transformer LoRA the key naming differs, so read the log rather than assuming the strings match.
cpu runs the merge on the processor. Slower, no video memory, and the answer when a six-LoRA merge at high rank won't fit.
The per-mode controls
These only do anything in the mode they name, and the node is happy to carry settings you never use.
moe_temperature (default 1.0) sets how decisively moe mode picks between sources per module - 0.1 chooses the strongest almost outright, 5.0 blends them evenly. moe_hard skips the blending and takes each module from its single strongest source.
For block-mix: block_mix_method chooses svd (recompress the routed result, small file) or stack (keep both sources' ranks exactly, bigger and more faithful). block_mix_preset names the model family the routing reads its block names from - auto reads it off the LoRA's keys and is right nearly always; set it explicitly when the routing report shows everything unclassified. block_mix_weighted turns a hard route into a blend, with block_mix_concept_mix and block_mix_style_mix as the two ratios. Setting concept low and style high keeps A's subject wearing B's look, which is the whole reason the mode exists.
Output is a single options socket. Plug it into the merger's options input and the settings are settled at that moment.
Install
ComfyUI Manager, search WAS Node Suite v3, install, restart. Or clone the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
No packages installed, no weights downloaded, ComfyUI 0.14.0+ and Python 3.10+. Both LoRA nodes come from the extras group, which is on by default in config.yaml; switch that off to run the standalone WAS Extras pack instead and this node disappears from the menu.
Where people get burned
The options node with nothing plugged into it is dead weight, and options left unconnected on the merger is not an error - you'll just merge at rank 32/bf16 and wonder why your knobs did nothing. Wire the socket; it's one link.
Naming the wrong block_mix_preset doesn't error, it just misroutes. If a block-mix merge looks like it only relabelled the file, read the routing report in the log before touching anything else.
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. |