Prompt Lora Loader
LoRAs you toggle like tags, not wire like nodes
- model
- clip
- MODEL
- CLIP
- STRING
What it is, and who it's for
Everyone who stacks LoRAs has one of two problems. Either you're chaining LoraLoader nodes and losing track of which one is off, or you grabbed a workflow where the loras were written into the prompt as <lora:name:0.8> - and nothing in vanilla ComfyUI does anything with that text. The Prompt Lora Loader is both halves of the answer in one node: it takes MODEL and CLIP, applies the LoRAs on its own clickable list and any <lora:...> tags it finds in the incoming prompt, then hands you the prompt back as a plain STRING.
It's the newest node in ComfyUI-EreNodes, Erehr's prompt-management pack, added in 3.7. The pack is small and single-author, and unlike rgthree's Power Lora Loader or LoRA Manager it isn't trying to win a browsing war - but the lora list here is the same pill UI as every other node in the pack, so your LoRAs live wherever your tags live. No LoRA Stack node, no stack-compatible loader, no extra pack.
How it works
The syntax is the A1111 one, and it's forgiving:
<lora:name>- strength 1.0<lora:name:0.8>- model and clip strength 0.8<lora:name:0.8:0.5>- model 0.8, clip 0.5- negative values work too, so
<lora:foo:-0.5>subtracts a concept
A name without an extension gets .safetensors appended, and resolution is deliberately loose: with or without extension, forward or backslash, or just the bare filename if you left out its folder. It matches against ComfyUI's registered lora list, which is also what keeps a name inside the lora roots.
Two lists get applied, in order: anything named in prefix first, then the node's own text. The ordering is intentional - a lora named upstream behaves as if it loaded upstream. Under the hood it calls ComfyUI's core LoraLoader, so there's no dependency to install. On a miss it prints [EreNodes] LoRA not found, skipping: name and keeps going instead of failing the run.
The pills serialize into the text as <lora:name:strength>, and a pill with trigger words selected writes those words in right after the tag - which is why the STRING output is a complete, ready-to-encode prompt.
Inputs and outputs
You'll touch about three of these:
- text (required) - the node's own lora list. You rarely type here. Hit
+ Lorafor a picker that goes straight to yourloras/folder, or drag a lora in. Only LoRAs are accepted; a mixed drag is refused whole so you can't accidentally empty the source node. - model / clip - wire from the checkpoint loader. With no model connected, nothing loads and the tags stay in the prompt untouched.
- prefix - a real input socket, not a text box. Feed it another prompt node's STRING.
- remove_lora_tags - off by default. Turn it on when a second prompt-tag loader further down the chain would apply the same loras again.
- separator - default
",\n\n", joins prefix and text.
Outputs are MODEL, CLIP and STRING. MODEL to the sampler, CLIP to the text encoder (or the next loader), STRING into your positive CLIP Text Encode. Drop it in where a LoraLoader used to sit.
Layout switches under ≡ → Layout (Toggle, Cloud, MultiSelect, Gallery - no multiline, there's no prose in a lora list). Right-click gives you Toggle All, Remove All, Remove Inactive, and strength by clicking and dragging.
Install
ComfyUI Manager → search EreNodes → Install → restart. Or:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/Erehr/ComfyUI-EreNodes.git
There's no requirements.txt; the pyproject declares only safetensors, which ComfyUI already ships. Nothing heavy, no model downloads - the Danbooru/e621 autocomplete CSVs come with the repo. Nodes show up under the EreNodes category.
Where people get burned
A lora silently doesn't apply. That's by design - a name that doesn't resolve, or a missing model connection, prints a line and moves on. If your output looks lora-less, check the console first.
Removing tags removes too much. remove_lora_tags only strips when at least one lora actually loaded, so it can't delete tags meant for a loader further down. Lora tags that were consumed this way get their trigger words re-inserted into the STRING - you keep the words, lose the tag.
Trigger words. The node embeds the triggers you picked for your own pills. For loras it finds in prefix, it reads trained words out of the file's ss_tag_frequency metadata or a companion .metadata.json (CivitAI's trainedWords) - that's where the [+3] badge comes from. No metadata, no badge, and you're back to the model page. Missing trigger words is the most common "my LoRA isn't working" cause there is.
Strength and compatibility. Default 1.0 is often too much; 0.5–0.8 is the usual sweet spot. Pills carry one strength number, so clip strength follows model strength there - only the text syntax lets you split them.
Finally, a quiet win: this pack's tag UI is DOM widgets in both the classic renderer and Nodes 2.0, so it doesn't carry the compatibility scar rgthree's Power Lora Loader got when the frontend rewrite landed.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| modelopt | MODEL | — | |
| clipopt | CLIP | — | |
| prefixopt | STRING | — | |
| separatoropt | STRING | ,\n\n | — |
| remove_lora_tagsopt | BOOLEAN | false | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| STRING | STRING | — |