Preset Selector 10
Switching full LoRA+prompt setups without the spaghetti
- model
- clip
- model_low
- high_model
- low_model
- positive
- negative
- selected_index
- selected_name
The pitch is one sentence: Preset Selector 10 holds ten complete setups - two LoRAs each, their strengths, and a positive/negative prompt pair - and hands you back applied models plus encoded conditioning, all chosen by a single integer. Set the slots once, then flip between characters with one dial instead of muting and unmuting a stack of LoRA loaders and text encoders.
If you've ever built a character-rotation workflow, you know the alternative: a dozen LoraLoaders and CLIP Text Encode nodes that you have to keep in sync by hand, then bypass in blocks. This collapses that into one node whose slots you switch with an index. It's not a LoRA manager in the rgthree Power Lora Loader sense - that node is about stacking many LoRAs and reading trigger words off files. This one is about bundling whole setups and swapping between them, prompts included.
How it works
The mechanism is short, and it explains the slightly odd "HIGH/LOW" naming. The node does preset_index % 10, reads that slot, applies the preset's HIGH LoRA to your model input, and applies the LOW LoRA either to the same model or to the optional model_low input when you connect one. Then it encodes the slot's positive and negative prompts through your clip and outputs conditioning that's ready to wire into a sampler.
Why two LoRAs per slot? The names are borrowed from Wan 2.2, which denoises in two stages that use two separate UNet models - a high-noise pass for motion and composition, a low-noise pass for detail - and each stage wants its own LoRA. Connect your high-noise base to model, your low-noise base to model_low, and one slot drives both samplers with one prompt. That's a genuinely useful workflow trick: it's exactly how people run character LoRAs on Wan 2.2, one _HIGH and one _LOW file per character.
Leave model_low unconnected and both LoRAs simply stack onto model - which is how you'll use it for plain SDXL or Flux image work. "High" and "low" are really just "LoRA A" and "LoRA B" unless you're on the dual-model setup.
The LoRA dropdowns are built from your models/loras folder at startup, with None prepended so any slot can be left empty.
The inputs that matter
Ten slots means a wall of widgets, but per slot you only really set five things:
- preset_index - the dial. Any integer works; the node wraps it modulo 10, so 10 → 0, 11 → 1. It ships with a
control_after_generatedropdown, so set it to increment and every queue run hops to the next preset. - preset_N_high_lora / low_lora - the two LoRA dropdowns. Pick
Noneto skip one. - preset_N_high_strength / low_strength - LoRA weight, default 1.0, range −10 to 10.
- preset_N_positive / negative - the prompt pair, encoded for you.
preset_N_name is just a label for your own sanity. On the way out you get high_model and low_model (into your samplers), positive and negative (into the sampler's conditioning), plus selected_index and selected_name if you want to know which slot is live downstream.
Installing it
No dependencies, no model downloads - the pack is plain Python on ComfyUI's own SDK. In ComfyUI Manager, search preset_selector_custom_node (or Install via Git URL), then restart. Manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/chikiu-san/preset_selector_custom_node
Restart ComfyUI and it shows up under Add Node → presets → Preset Selector 10.
Common issues
- LoRA missing from the dropdown - the list is read once at startup. Add files to
models/lorasand restart. - Node shows as missing after an update - the pack renamed its internal IDs from the old "Igoon*" names, so workflows saved on the previous version won't auto-map. Re-add the node and re-save.
- Prompts won't auto-fill - each slot can persist its prompt/strengths/name to a per-user library (
user/preset_selector_library.json) keyed by the exact(high_lora, low_lora)pair, but only for pairs you've explicitly saved with the "💾 Save all slots to library" button. An unsaved pair leaving the widgets untouched is expected, not a bug. - The preset seems one off -
control_after_generatefires after a run, so the index you're looking at is the one the next run uses. That's stock ComfyUI behavior rather than a bug here, but it bites everyone once; the global "widget control mode: before" setting fixes the whole class of confusion if it drives you mad.
Inputs (74)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| preset_index | INT | 00–999999 | — |
| preset_0_name | STRING | Preset 0 | — |
| preset_0_high_lora | COMBO | 1 options: None | |
| preset_0_high_strength | FLOAT | 1.00-10–10 | — |
| preset_0_low_lora | COMBO | 1 options: None | |
| preset_0_low_strength | FLOAT | 1.00-10–10 | — |
| preset_0_positive | STRING | — | |
| preset_0_negative | STRING | — | |
| preset_1_name | STRING | Preset 1 | — |
| preset_1_high_lora | COMBO | 1 options: None | |
| preset_1_high_strength | FLOAT | 1.00-10–10 | — |
| preset_1_low_lora | COMBO | 1 options: None | |
| preset_1_low_strength | FLOAT | 1.00-10–10 | — |
| preset_1_positive | STRING | — | |
| preset_1_negative | STRING | — | |
| preset_2_name | STRING | Preset 2 | — |
| preset_2_high_lora | COMBO | 1 options: None | |
| preset_2_high_strength | FLOAT | 1.00-10–10 | — |
| preset_2_low_lora | COMBO | 1 options: None | |
| preset_2_low_strength | FLOAT | 1.00-10–10 | — |
| preset_2_positive | STRING | — | |
| preset_2_negative | STRING | — | |
| preset_3_name | STRING | Preset 3 | — |
| preset_3_high_lora | COMBO | 1 options: None | |
| preset_3_high_strength | FLOAT | 1.00-10–10 | — |
| preset_3_low_lora | COMBO | 1 options: None | |
| preset_3_low_strength | FLOAT | 1.00-10–10 | — |
| preset_3_positive | STRING | — | |
| preset_3_negative | STRING | — | |
| preset_4_name | STRING | Preset 4 | — |
| preset_4_high_lora | COMBO | 1 options: None | |
| preset_4_high_strength | FLOAT | 1.00-10–10 | — |
| preset_4_low_lora | COMBO | 1 options: None | |
| preset_4_low_strength | FLOAT | 1.00-10–10 | — |
| preset_4_positive | STRING | — | |
| preset_4_negative | STRING | — | |
| preset_5_name | STRING | Preset 5 | — |
| preset_5_high_lora | COMBO | 1 options: None | |
| preset_5_high_strength | FLOAT | 1.00-10–10 | — |
| preset_5_low_lora | COMBO | 1 options: None | |
| preset_5_low_strength | FLOAT | 1.00-10–10 | — |
| preset_5_positive | STRING | — | |
| preset_5_negative | STRING | — | |
| preset_6_name | STRING | Preset 6 | — |
| preset_6_high_lora | COMBO | 1 options: None | |
| preset_6_high_strength | FLOAT | 1.00-10–10 | — |
| preset_6_low_lora | COMBO | 1 options: None | |
| preset_6_low_strength | FLOAT | 1.00-10–10 | — |
| preset_6_positive | STRING | — | |
| preset_6_negative | STRING | — | |
| preset_7_name | STRING | Preset 7 | — |
| preset_7_high_lora | COMBO | 1 options: None | |
| preset_7_high_strength | FLOAT | 1.00-10–10 | — |
| preset_7_low_lora | COMBO | 1 options: None | |
| preset_7_low_strength | FLOAT | 1.00-10–10 | — |
| preset_7_positive | STRING | — | |
| preset_7_negative | STRING | — | |
| preset_8_name | STRING | Preset 8 | — |
| preset_8_high_lora | COMBO | 1 options: None | |
| preset_8_high_strength | FLOAT | 1.00-10–10 | — |
| preset_8_low_lora | COMBO | 1 options: None | |
| preset_8_low_strength | FLOAT | 1.00-10–10 | — |
| preset_8_positive | STRING | — | |
| preset_8_negative | STRING | — | |
| preset_9_name | STRING | Preset 9 | — |
| preset_9_high_lora | COMBO | 1 options: None | |
| preset_9_high_strength | FLOAT | 1.00-10–10 | — |
| preset_9_low_lora | COMBO | 1 options: None | |
| preset_9_low_strength | FLOAT | 1.00-10–10 | — |
| preset_9_positive | STRING | — | |
| preset_9_negative | STRING | — | |
| model_lowopt | MODEL | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| high_model | MODEL | — |
| low_model | MODEL | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| selected_index | INT | — |
| selected_name | STRING | — |