Nodes/Comfyui-xbhh-main/XBHH Multi Lora Loader Plus 🎨⭐
ComfyUI Node

XBHH Multi Lora Loader Plus 🎨⭐

The multi-LoRA loader that saves your favorite LoRA stacks as one reusable preset

By xbhh123456·Created 8 months ago·Updated 18 days ago· 11
XBHH Multi Lora Loader Plus 🎨⭐
  • model
  • clip
  • MODEL
  • CLIP
  • preset_text
  • triggers
lora_preset

If you've ever rebuilt the same six-LoRA stack from memory across three workflows, this is the node. XBHHMultiLoraLoaderPlus is the base XBHH Multi Lora Loader with preset bookkeeping bolted on: you assemble a stack once, export it as a plain-text preset, and reapply it anywhere - in another workflow, another machine, or a friend's graph. Same flexible "Add Lora" slots, same tree picker, same previews; it just remembers your combos.

LoRA stacking is how character + style + fix adapters get combined, and the friction has never been the loading - it's the remembering. Stock ComfyUI forces you to re-chain nodes each time. The Plus version makes a saved stack as portable as a text file.

How it works

Like the base node, it calls ComfyUI's own LoraLoader for every enabled slot at execution time. Plus adds two things.

First, preset import/export. The node can emit (and accept) a lora_preset string, formatted as one line per LoRA: enabled|lora_name|model_strength|clip_strength|trigger|trigger_weight. You can paste that into the lora_preset input, save it to a file, or feed it back into another instance of the node. Import is merge-mode, not overwrite: LoRAs already configured manually take precedence, and preset entries that don't exist yet get appended. The v1.2.0 changelog calls this out explicitly - the author moved away from "brutal overwrite" on purpose.

Second, a trigger-word output. For every enabled LoRA with a trigger word, the node assembles a comma-joined prompt fragment and emits it as triggers. It's smart about weights: if you didn't hand-set a custom weight it syncs the trigger to the LoRA's model strength, wraps single tags in (tag:weight) notation, and leaves already-weighted or multi-tag triggers alone. That output feeds straight into your positive prompt, so a preset carries both the adapters and the words that activate them.

The inputs and outputs that matter

  • model / clip (optional) - in and out, same as the base loader.
  • lora_preset (optional) - the text preset to merge in. Marked forceInput, so it accepts a wire.
  • Outputs: MODEL, CLIP, preset_text (the exportable preset string for everything currently enabled), and triggers (the ready-to-paste prompt fragment).

Note the preset format uses a plain | separator, so it survives copy-paste through chat apps and markdown without mangling - that's a deliberate bit of design you'll appreciate the first time you share one.

Installing it

Same pack, same ritual:

cd ComfyUI/custom_nodes
git clone https://github.com/xbhh123456/Comfyui-xbhh-main.git
cd Comfyui-xbhh-main
pip install -r requirements.txt

Or ComfyUI Manager → search xbhh-lora → restart. Nothing extra to download.

Common issues

  • Preset seems to lose LoRAs - remember the merge behavior: entries you've already configured manually win, so a preset won't clobber your current setup. That's a feature, but it means you need the node's manual slots empty if you want a preset to fully take over.
  • Triggers look wrong - the auto-weighting only kicks in when the trigger has no explicit weight. If you want total control, set the trigger weight yourself and the node stops guessing.
  • Architecture mismatch - a preset referencing SDXL LoRAs pasted into a Flux workflow will load (or skip) silently to nothing useful. The preset saves names and strengths, not intent - check your base model before reapplying old stacks.

Which one to pick? If you never reuse stacks, the base XBHHMultiLoraLoader is simpler. If you do - and most people with a working LoRA rig do - Plus is the one that earns its star.

CategoryXBHH/loaders

Inputs (3)

NameTypeDefaultDescription
modeloptMODEL
clipoptCLIP
lora_presetoptSTRING

Outputs (4)

NameTypeDescription
MODELMODEL
CLIPCLIP
preset_textSTRING
triggersSTRING