Random LoRA Folder Selector
Roll from a folder, not a curated list
- lora_stack
- exclude_loras_from_node
- lora_stack
- trigger_words
- help_text
The Random LoRA Selector node forces you to curate a pool: ten dropdowns, hand-picked, before the randomizer can do its thing. The Random LoRA Folder Selector removes that chore. Point it at a folder in your models/loras directory and it picks random LoRAs from inside it - the whole "I just want to explore my library" workflow without maintaining a shortlist.
It's the node from the author's own +24 announcement thread, and the one he says behaves correctly (unlike its custom-list sibling, which he admitted had a slot-listing bug). It also understands subfolders, which is where it earns its keep if your loras folder is organized by theme or base model.
How it works
You get ten folder_path_N slots, each with its own lora_count and min/max strength range. For each folder slot you set, the node samples lora_count files at random (clamped to however many exist), assigns each a strength drawn uniformly within that slot's range, and collects them all into a lora_stack output.
Two flags sit on top:
refresh_loras- re-roll. With it off, the same folder choices reproduce the same picks; flip it on and every run is fresh.force_refresh_cache- clears the in-memory LoRA-info cache and rebuilds it. Use it after you add new LoRAs and want their trigger words picked up.
Trigger words matter here more than on the list node, because you didn't hand-pick these files - you may have zero idea what most of them train on. Each selected LoRA's trained words are pulled via the sha256-to-CivitAI lookup and cached, then emitted on the trigger_words output so you can concatenate them into your prompt. That's the whole point of the node: random picks you'd never remember tell you what they need.
The inputs you'll set
folder_path_1…folder_path_10- dropdowns of your lora subfolders (built by walkingmodels/loras). Pick the pools.lora_count_1… - how many to draw from each folder.min_strength_N/max_strength_N- per-slot strength range.exclusive_mode-Onpulls one LoRA total from everything you collected;Offuses all drawn.exclude_loras_from_node- feed this the output of the pack'sExcludedLorasnode (or anyLORA_LIST) and those files are skipped by basename. This is the killer feature if your folder is 90% LoRAs you never want to win.lora_stack/extra_trigger_words- optional inputs for chaining more selectors or appending words.
Outputs: lora_stack, trigger_words, help_text.
The gotchas
Same stack caveat as its cousin: this outputs a LORA_STACK, so you apply it with CR Apply LoRA Stack from the Comfyroll pack, not a stock LoraLoader. The optional lora_stack input is for chaining, not for applying.
A Stability Matrix gotcha that bit a real user in the author's thread: the dropdown only shows subfolders ComfyUI actually knows about. If your LoRAs live in a shared SM models folder, the picker can show nothing but "None" - the fix is checking that your extra_model_paths.yaml maps a loras folder (plural - SM used lora and it silently broke the scan). The code does honor extra_model_paths.yaml, so the config, not the node, is usually the culprit.
Also expect a first-run stall: uncached LoRAs trigger CivitAI API lookups one by one. That's what the LoRACachePreloader node in this same pack exists to solve.
Install
ComfyUI Manager (search "Santodan"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/Santodan/santodan-custom-nodes-comfyui
Restart. No dependencies, no downloads - it reads whatever is already in your loras folder.
Inputs (46)
| Name | Type | Default | Description |
|---|---|---|---|
| exclusive_mode | COMBO | 2 options: Off, On | |
| refresh_loras | BOOLEAN | false | — |
| force_refresh_cache | BOOLEAN | false | — |
| lora_stackopt | LORA_STACK | — | |
| extra_trigger_wordsopt | STRING | — | |
| exclude_loras_from_nodeopt | LORA_LIST | — | |
| folder_path_1opt | COMBO | 1 options: None | |
| lora_count_1opt | INT | 11–99 | — |
| min_strength_1opt | FLOAT | 0.60-10–10 | — |
| max_strength_1opt | FLOAT | 1.00-10–10 | — |
| folder_path_2opt | COMBO | 1 options: None | |
| lora_count_2opt | INT | 11–99 | — |
| min_strength_2opt | FLOAT | 0.60-10–10 | — |
| max_strength_2opt | FLOAT | 1.00-10–10 | — |
| folder_path_3opt | COMBO | 1 options: None | |
| lora_count_3opt | INT | 11–99 | — |
| min_strength_3opt | FLOAT | 0.60-10–10 | — |
| max_strength_3opt | FLOAT | 1.00-10–10 | — |
| folder_path_4opt | COMBO | 1 options: None | |
| lora_count_4opt | INT | 11–99 | — |
| min_strength_4opt | FLOAT | 0.60-10–10 | — |
| max_strength_4opt | FLOAT | 1.00-10–10 | — |
| folder_path_5opt | COMBO | 1 options: None | |
| lora_count_5opt | INT | 11–99 | — |
| min_strength_5opt | FLOAT | 0.60-10–10 | — |
| max_strength_5opt | FLOAT | 1.00-10–10 | — |
| folder_path_6opt | COMBO | 1 options: None | |
| lora_count_6opt | INT | 11–99 | — |
| min_strength_6opt | FLOAT | 0.60-10–10 | — |
| max_strength_6opt | FLOAT | 1.00-10–10 | — |
| folder_path_7opt | COMBO | 1 options: None | |
| lora_count_7opt | INT | 11–99 | — |
| min_strength_7opt | FLOAT | 0.60-10–10 | — |
| max_strength_7opt | FLOAT | 1.00-10–10 | — |
| folder_path_8opt | COMBO | 1 options: None | |
| lora_count_8opt | INT | 11–99 | — |
| min_strength_8opt | FLOAT | 0.60-10–10 | — |
| max_strength_8opt | FLOAT | 1.00-10–10 | — |
| folder_path_9opt | COMBO | 1 options: None | |
| lora_count_9opt | INT | 11–99 | — |
| min_strength_9opt | FLOAT | 0.60-10–10 | — |
| max_strength_9opt | FLOAT | 1.00-10–10 | — |
| folder_path_10opt | COMBO | 1 options: None | |
| lora_count_10opt | INT | 11–99 | — |
| min_strength_10opt | FLOAT | 0.60-10–10 | — |
| max_strength_10opt | FLOAT | 1.00-10–10 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| lora_stack | LORA_STACK | — |
| trigger_words | STRING | — |
| help_text | STRING | — |