Multi-LoRA Loader (Model Only)
The one Multi-LoRA loader that works with any model
- model
- model
- prompt
- prompt_with_triggers
- loaded_loras_info
- all_trigger_words
- filter_info
- filtered_loras_list
Somewhere between "one LoRA per loader node" and "a whole platform-specific loader family" there's this node: the generalist. Multi-LoRA Loader (Model Only) takes a MODEL and no CLIP, applies up to eight LoRAs to it, and returns a model plus a trigger-word-aware prompt. No CLIP in, no CLIP out - that's the whole point.
Why would you want that? Because plenty of modern models don't route their text conditioning through a CLIP object in a way you'd patch with the standard LoraLoader. Video models like Wan, and most diffusion models where you're only nudging the UNet/DiT weights, are exactly this case. This loader is the "if you don't know which one you need, or you have an odd model, this one" option of the pack - and it's also the most filter-heavy of them all.
How it works
Unlike the platform-specific siblings, which hardcode a directory filter, this one gives you the full search toolbox:
search_directoryandsearch_filename- comma-separated substring matches on paths and filenames (prefix a term with a dash to exclude, the classic pattern).search_category- filter by a category list (style, character, pose, clothing, effect…).search_trigger_word- match against trigger words from the pack's local LoRA database.filter_architecture- SD1.5, SDXL, Flux, Pony, Illustrious, Noobai, SD3.5, HiDream, Stable Cascade, and more. It sniffs architecture hints from filenames and paths and lets you cut the list down hard.min_rating- 0–5, from the DB's quality ratings.
Then the eight slots (lora_1_enable / lora_1_name / lora_1_strength, up to slot 8). Just model strength per slot - there's no CLIP strength here because there's no CLIP.
The trigger-word machinery is the same as the rest of the family: query_civitai fetches trigger words from the Civitai API when the local DB has none, force_civitai_fetch bypasses the cache, and trigger_position/trigger_separator control how injected words land in your prompt.
Outputs
model- your patched model, straight into the sampler.prompt_with_triggers- prompt plus injected trigger words; feed to your encoder.prompt- your prompt back unchanged (useful if you only want the loader for the model patch).filter_infoandfiltered_loras_list- the reports that tell you what your filters actually matched.all_trigger_wordsandloaded_loras_info- every trigger found and a per-LoRA load summary.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/EricRollei/AAA_Metadata_System.git
cd AAA_Metadata_System
pip install -r requirements.txt
Restart ComfyUI (or install "AAA Metadata System" from ComfyUI Manager). No model downloads. CC BY-NC licensed for non-commercial use; commercial use needs a license from the author.
Common issues
- The dropdown lists everything, filters change nothing visible - expected. Filters apply at execution time, and the
refresh_liststooltip says it plainly: "Filters are applied during execution - check filter_info output to see results." Togglerefresh_liststo rescan the filesystem. filter_architecturehides nothing - architecture is guessed from names/paths; badly-named LoRAs fall through to "Unknown" and matchAnyonly. Don't rely on it as a hard wall.- No triggers injected - DB entry missing and
query_civitaioff. Enable it, or type the trigger yourself.
It's the least glamorous node in the family - no cute platform branding, no special handling - which is exactly why it's the one to reach for when your model doesn't fit the pre-made buckets. If your LoRAs live in a flat pile and you'd rather filter than reorganize folders, start here.
Inputs (37)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| prompt | STRING | — | |
| search_directory | STRING | Search in directory/path names. Use commas to separate multiple terms. | |
| search_filename | STRING | Search in LoRA filenames. Use commas to separate multiple terms. | |
| search_category | COMBO | Any | 26 options: Any, unknown, style, character, concept, pose, +20 |
| search_trigger_word | STRING | Search in trigger words from database. Use commas to separate multiple terms. | |
| filter_architecture | COMBO | Any | 14 options: Any, Unknown, SD1.5, SDXL, Flux, Pony, +8 |
| min_rating | INT | 00–5 | Minimum quality rating from database (0 = show all) |
| refresh_lists | BOOLEAN | false | Toggle to refresh. Filters are applied during execution - check filter_info output to see results. |
| query_civitai | BOOLEAN | false | Automatically query Civitai for trigger words when LoRA has none |
| force_civitai_fetch | BOOLEAN | false | Force fetch from Civitai even if tags already exist |
| trigger_position | COMBO | front | 2 options: front, back |
| trigger_separator | STRING | , | — |
| lora_1_enable | BOOLEAN | false | — |
| lora_1_name | COMBO | None | 1 options: None |
| lora_1_strength | FLOAT | 1.00-10–10 | — |
| lora_2_enable | BOOLEAN | false | — |
| lora_2_name | COMBO | None | 1 options: None |
| lora_2_strength | FLOAT | 1.00-10–10 | — |
| lora_3_enable | BOOLEAN | false | — |
| lora_3_name | COMBO | None | 1 options: None |
| lora_3_strength | FLOAT | 1.00-10–10 | — |
| lora_4_enable | BOOLEAN | false | — |
| lora_4_name | COMBO | None | 1 options: None |
| lora_4_strength | FLOAT | 1.00-10–10 | — |
| lora_5_enable | BOOLEAN | false | — |
| lora_5_name | COMBO | None | 1 options: None |
| lora_5_strength | FLOAT | 1.00-10–10 | — |
| lora_6_enable | BOOLEAN | false | — |
| lora_6_name | COMBO | None | 1 options: None |
| lora_6_strength | FLOAT | 1.00-10–10 | — |
| lora_7_enable | BOOLEAN | false | — |
| lora_7_name | COMBO | None | 1 options: None |
| lora_7_strength | FLOAT | 1.00-10–10 | — |
| lora_8_enable | BOOLEAN | false | — |
| lora_8_name | COMBO | None | 1 options: None |
| lora_8_strength | FLOAT | 1.00-10–10 | — |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| prompt | STRING | — |
| prompt_with_triggers | STRING | — |
| loaded_loras_info | STRING | — |
| all_trigger_words | STRING | — |
| filter_info | STRING | — |
| filtered_loras_list | STRING | — |