Random LoRA Selector to Model Selector
Skips the stack, applies directly
- model
- clip
- MODEL
- CLIP
- applied_loras
- trigger_words
- help_text
If you've read the RandomLoRACustom article, this is the twin - same ten-slot pool, same exclusive mode, same random strengths, one big difference in the plumbing. The "to Model Selector" variant takes MODEL and CLIP inputs and applies the winning LoRAs directly with ComfyUI's built-in LoraLoader, so you don't need the Comfyroll CR Apply LoRA Stack detour. It's the version you want if you'd rather not think about lora_stack at all.
Honestly? If your workflow already has a LoraLoader or Power Lora Loader in it, this node just replaces that loading step with a randomized one. Feed it model + clip, get model + clip back.
How it works
Identical gamble to the list selector: with refresh_loras off, the RNG is seeded from the names you've picked plus exclusive_mode and lora_count, so the same selections reproduce the same winners. With it on, it reseeds randomly and every run re-rolls. exclusive_mode On picks exactly one LoRA; Off picks lora_count (or a random number when lora_count is 0).
Then, for each winner, the strength is drawn uniformly between that slot's min_strength and max_strength, and the LoRA is applied to your model and clip through ComfyUI's stock LoraLoader.load_lora. Because it applies as it goes, chaining actually matters: strengths are per-LoRA, and stacking five at 1.0 can oversaturate fast. The trigger words for each applied file are collected from the CivitAI sha256 lookup and cached.
Inputs
model,clip- required; the model pipeline you're loading LoRAs into.lora_name_1…lora_name_10- the pool you're gambling on.exclusive_mode- On = exactly one winner.lora_count- how many to apply (0 = random count).refresh_loras- re-roll every run when True.min/max_strength_1..10- per-slot strength range.extra_trigger_words- optional string appended to the trigger-word output.
Outputs: MODEL, CLIP, applied_loras (a readable name (strength) list - handy for pasting into your metadata or prompt), trigger_words, and help_text.
Where people get burned
- No undo. The randomizer applies straight into your model tensor. If the roll is bad, you rerun - there's no stack to inspect before commit. Keep
refresh_lorasoff while tuning, on when exploring. applied_lorascan over-report. The author flagged in his announcement thread that the list-style node's output "is adding all the node's entries instead of only the one that was selected." The folder twins were reported working; this custom-list variant shares the older code path, so verifyapplied_lorasagainst what you actually rolled rather than trusting it blindly.- Base-model compatibility still applies. This node will happily let you load an Illustrious LoRA onto an SDXL checkpoint - they're selectable even when wrong. The randomizer can't save you from picking a LoRA trained on a different base; that's the "LoRA not working" checklist territory (trigger words missing, weight too high, wrong base).
Install
ComfyUI Manager (search "Santodan" / "Randomize LoRAs"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/Santodan/santodan-custom-nodes-comfyui
Restart. No dependencies, no downloads - it loads whatever's in your models/loras folder, with a brief CivitAI lookup the first time it sees each file.
Inputs (36)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| exclusive_mode | COMBO | 2 options: Off, On | |
| refresh_loras | BOOLEAN | false | — |
| lora_count | INT | 00–10 | — |
| lora_name_1 | COMBO | 1 options: None | |
| min_strength_1 | FLOAT | 0.60-10–10 | — |
| max_strength_1 | FLOAT | 1.00-10–10 | — |
| lora_name_2 | COMBO | 1 options: None | |
| min_strength_2 | FLOAT | 0.60-10–10 | — |
| max_strength_2 | FLOAT | 1.00-10–10 | — |
| lora_name_3 | COMBO | 1 options: None | |
| min_strength_3 | FLOAT | 0.60-10–10 | — |
| max_strength_3 | FLOAT | 1.00-10–10 | — |
| lora_name_4 | COMBO | 1 options: None | |
| min_strength_4 | FLOAT | 0.60-10–10 | — |
| max_strength_4 | FLOAT | 1.00-10–10 | — |
| lora_name_5 | COMBO | 1 options: None | |
| min_strength_5 | FLOAT | 0.60-10–10 | — |
| max_strength_5 | FLOAT | 1.00-10–10 | — |
| lora_name_6 | COMBO | 1 options: None | |
| min_strength_6 | FLOAT | 0.60-10–10 | — |
| max_strength_6 | FLOAT | 1.00-10–10 | — |
| lora_name_7 | COMBO | 1 options: None | |
| min_strength_7 | FLOAT | 0.60-10–10 | — |
| max_strength_7 | FLOAT | 1.00-10–10 | — |
| lora_name_8 | COMBO | 1 options: None | |
| min_strength_8 | FLOAT | 0.60-10–10 | — |
| max_strength_8 | FLOAT | 1.00-10–10 | — |
| lora_name_9 | COMBO | 1 options: None | |
| min_strength_9 | FLOAT | 0.60-10–10 | — |
| max_strength_9 | FLOAT | 1.00-10–10 | — |
| lora_name_10 | COMBO | 1 options: None | |
| min_strength_10 | FLOAT | 0.60-10–10 | — |
| max_strength_10 | FLOAT | 1.00-10–10 | — |
| extra_trigger_wordsopt | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| applied_loras | STRING | — |
| trigger_words | STRING | — |
| help_text | STRING | — |