DvD LoRA Stack (Multi-Merge)
Three LoRAs, One Node, Zero Trigger-Typing
- model
- clip
- MODEL
- CLIP
- trigger_text
- info_log
Stacking LoRAs is where the wire-drawing starts: three loaders, three MODEL/CLIP chains, and somewhere in there you're hand-typing the trigger words for a style LoRA plus a character LoRA plus a concept LoRA. The DvD LoRA Stack (Multi-Merge) collapses that into one node. It loads up to three LoRAs in sequence and spits out a single trigger_text output with every trigger word comma-joined for you.
It's part of the same small pack as the DvD Standard loader - same trigger-reading machinery, same WebUI-compatible JSON save, same zero-dependency install. Where it differs is that it replaces a chain of loaders, not a single one.
How it works
You get three slots - lora_1, lora_2, lora_3 - each with a None option and a strength_1/2/3 float. The node runs them in order, feeding the output of one into the next (a true merge, not a blend: each LoRA patches the model that the previous one produced). The triggers from all three are collected, combined with anything in pre_text, and joined with commas into the trigger_text output. Wire that one string into your CLIP Text Encode and you're done - no text-concat nodes.
One thing to notice if you're coming from the Standard loader: the stack uses a single strength per LoRA that applies to both the model and the CLIP side, where Standard gives you separate strength_model and strength_clip. And the strength range here is ±10, not ±20 - the author is quietly discouraging you from cranking stacked LoRAs to eleven, which is probably wise.
The outputs are the usual quartet: MODEL, CLIP, trigger_text, info_log (a log line per slot, handy for confirming which LoRA contributed what).
Editing and saving
The read side is fully automatic, same as the rest of the pack: sidecar JSON → safetensors metadata → Civitai hash lookup, in that order. The write side is where the stack adds its own twist: save_target picks which LoRA gets updated - None (不保存) (don't save), Lora 1, Lora 2, or Lora 3. Set mode to Save (保存修改), type your new words into edit_text, set the target, and queue a prompt. The JSON next to that particular .safetensors gets written in A1111 WebUI format, preserving its other fields.
That's the whole UX, and it's worth being clear about: this is a batch loader, not a per-LoRA editor. You read triggers for all three at once, but you can only edit-and-save one at a time. If you want per-slot toggles and per-LoRA metadata browsing, rgthree's Power Lora Loader is the richer tool - this one's appeal is that it's one node, no dependencies, and the same file format as WebUI.
Install
cd ComfyUI/custom_nodes/
git clone https://github.com/idvdii/ComfyUI-DvD-LoraTriggerwordsManager.git
# restart ComfyUI
Or grab it via ComfyUI Manager (search "DvD LoRA"). No extra dependencies - this pack is pure Python plus safetensors, which you already have.
Stacking gotchas
The community's stacking advice applies here in full: interactions between LoRAs are unpredictable, so add one at a time with a fixed seed, and if stacked triggers give you black images or NaN errors, reorder with the larger LoRAs first. Also remember the save rule from the Standard loader: nothing is written until you actually queue a run in Save mode - and in the stack, an empty edit_text or a None save_target means the write is skipped entirely.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| lora_1 | COMBO | 1 options: None | |
| strength_1 | FLOAT | 1.00-10–10 | — |
| lora_2 | COMBO | 1 options: None | |
| strength_2 | FLOAT | 1.00-10–10 | — |
| lora_3 | COMBO | 1 options: None | |
| strength_3 | FLOAT | 1.00-10–10 | — |
| mode | COMBO | 2 options: Read (只读), Save (保存修改) | |
| save_target | COMBO | 4 options: None (不保存), Lora 1, Lora 2, Lora 3 | |
| edit_text | STRING | — | |
| pre_textopt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| trigger_text | STRING | — |
| info_log | STRING | — |