Nodes/comfyui-otacoo/LoRA Loader 🔰
ComfyUI Node

LoRA Loader 🔰

Stack every LoRA in one node, trigger words included

By otacoo·Created 7 months ago·Updated about a month ago· 1
LoRA Loader 🔰
  • model
  • clip
  • MODEL
  • CLIP
  • Trigger Words
lora_list[]

The stock LoraLoader applies one LoRA per node, so a character that needs three LoRAs becomes a chain of three nodes, each with its own model/clip strength widgets. OtacooLoraLoader ("LoRA Loader 🔰") from comfyui-otacoo collapses that into one node: add as many LoRAs as you like, each with its own strength and an on/off toggle, pick them from a preview-image grid, and get their trigger words out the other end as text. That's the most useful node in this pack.

How it works

Behind the curtain it's a hidden lora_list string widget holding JSON - [{"on": true, "lora": "style.safetensors", "strength": 0.8}, ...] - and the frontend builds the "+ Add LoRA" UI you actually see, then syncs each entry back into that string before the graph runs. The backend parses it, skips anything toggled off (or None, or zero strength), and applies each one via comfy.sd.load_lora_for_models, caching the loaded weights per file so re-runs don't re-read the tensors. One honest limitation: each entry has a single strength, applied to both model and clip - there's no separate clip strength like the stock loader's two widgets. For most LoRAs that's fine, but if you deliberately under-apply to CLIP, you'll need a different node.

The trigger words output

That third output, Trigger Words, is the differentiator. It reads two kinds of sidecar files next to the LoRA and joins whatever it finds: a <basename>.json with an activation text or activation_text field, or a <basename>.metadata.json in CivitAI format (modelVersions[0].trainedWords). The words come out comma-joined, so you can read them off the node and paste them into your prompt - the pack's README frames this as "extracts and outputs each LoRA's trigger words," and that's exactly what it does. The catch, compared to rgthree's Power Lora Loader (the community heavyweight for this job, which fetches trigger words from CivitAI over the network): this node only reads what's already on disk. If your LoRA came down without its sidecar .json, you get an empty string, not an error. CivitAI's own download folders usually ship the metadata file, so it often just works - just don't be surprised when it doesn't.

Inputs and outputs, plain

  • model (MODEL) and clip (CLIP) - optional inputs from your checkpoint loader.
  • lora_list - the hidden JSON string; you normally never touch it, the UI does.
  • Outputs: MODEL, CLIP (feed these onward to your KSampler), and Trigger Words (STRING).

Install

Same one-pack story as the other 🔰 nodes:

cd ComfyUI/custom_nodes
git clone https://github.com/otacoo/comfyui-otacoo.git

then restart ComfyUI, or install via ComfyUI Manager by searching otacoo. No pip deps, no model downloads. If you use Pythongossss' "View Info", add OtacooLoraLoader.lora_name.* under Settings → pysssss → ModelInfo so it works here too.

Where people get burned

Preview grid is LiteGraph-only for now (the Vue/2.0 UI gets a plainer fallback, per the README). And because the node caches LoRA tensors for the session, if you swap a LoRA file on disk mid-session, the cached weights win until you restart. Honestly though - for a pack this new (first release early 2026, no community chatter to speak of), the feature that will actually annoy you is the missing clip strength, not any exotic bug.

Categoryloaders

Inputs (3)

NameTypeDefaultDescription
modeloptMODEL
clipoptCLIP
lora_listoptSTRING[]

Outputs (3)

NameTypeDescription
MODELMODEL
CLIPCLIP
Trigger WordsSTRING