Model and Text Selector
Swap models and their labels together, like a package deal
- base_model
- model_1
- model_2
- model_3
- model_4
- model_5
- model_6
- model_7
- model_8
- model_9
- model_10
- MODEL
- selected_text
- index
- label
Switching the active model in a ComfyUI workflow is easy. Keeping the metadata that goes with it in sync - the label that shows in your filename, the text note about which checkpoint you meant - is the fiddly part. Model and Text Selector picks one of up to 10 model slots and hands you the model and its paired text and label in one go. It's the model equivalent of a bundle deal: change the slot, and model, text, label, and index all change together, consistently.
How it works
Each of the 10 slots has three optional inputs: model_N (MODEL), text_N (STRING - metadata, e.g. "SDXL portrait base"), and label_N (STRING - a short human name). Selection is driven by the same mode family as the pack's index nodes: None (pass through base_model untouched), Select (fixed select), Increment, Random, or Range (list like 1,3,5-6), with slot_count controlling how many slots are active from the top.
Outputs: MODEL (the chosen model), selected_text (STRING - the slot's text), index (INT - the winning slot), and label (STRING - the slot's label). Wire MODEL into your sampler, label into a filename builder or display node, and index into any controller that needs to stay in sync.
Why the text/label pair is the point
A bare model switch gives you a MODEL and nothing else; you still can't tell what's in the sampler without squinting at the loader. This node makes the choice observable: label goes to your filename (AUN Path Filename V2's Labels input is a natural home), selected_text documents the slot, and index feeds controllers. So a random model rotation also produces files named after the model you actually used, automatically.
What you'll set
mode,select,minimum,maximum,range,slot_count- the selection mechanics.model_N- wire each slot from a loader (e.g. a checkpoint loader orAUN Ckpt Load With Clip Skip).text_N/label_N- the metadata. Optional, but they're why this node exists.base_model- passthrough used when mode is None.
Honest notes: this node switches models, not CLIPs - if your slots differ in CLIP or VAE, pair it with the matching loader wiring, because the node only carries the MODEL. And with Random mode, remember maximum should match your configured slot_count, or you'll land on empty slots. No trigger handling here - that's what the LoRA loaders are for.
Install
Part of AUN ComfyUI Nodes (loz2754):
cd ComfyUI/custom_nodes
git clone https://github.com/loz2754/AUN-ComfyUI-Nodes
or ComfyUI Manager → "AUN ComfyUI Nodes" → install → restart. Pack deps (piexif, opencv-python-headless, imageio-ffmpeg, requests) install via Manager; no model downloads - it switches whatever you feed it.
If you're looking for random LoRA selection with trigger words, that's the pack's Random LoRA Model Loader. This node is specifically for swapping whole checkpoints while keeping the paperwork - text, label, index - traveling with them.
Inputs (37)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | Select | Selection mode for active slot. |
| slot_count | INT | 31–10 | How many slots are active from top to bottom. |
| select | INT | 11–10 | Slot index used in Select mode. |
| minimum | INT | 11–10 | Minimum slot index for Increment/Random. |
| maximum | INT | 31–10 | Maximum slot index for Increment/Random. |
| range | STRING | 1,2,3 | Comma-separated explicit index range for Range mode (for example 1,3,5-6). |
| base_modelopt | MODEL | Unpatched model passthrough used when mode is None. | |
| model_1opt | MODEL | Model input for slot 1. | |
| text_1opt | STRING | Optional text metadata for slot 1. | |
| label_1opt | STRING | Optional custom label for slot 1. | |
| model_2opt | MODEL | Model input for slot 2. | |
| text_2opt | STRING | Optional text metadata for slot 2. | |
| label_2opt | STRING | Optional custom label for slot 2. | |
| model_3opt | MODEL | Model input for slot 3. | |
| text_3opt | STRING | Optional text metadata for slot 3. | |
| label_3opt | STRING | Optional custom label for slot 3. | |
| model_4opt | MODEL | Model input for slot 4. | |
| text_4opt | STRING | Optional text metadata for slot 4. | |
| label_4opt | STRING | Optional custom label for slot 4. | |
| model_5opt | MODEL | Model input for slot 5. | |
| text_5opt | STRING | Optional text metadata for slot 5. | |
| label_5opt | STRING | Optional custom label for slot 5. | |
| model_6opt | MODEL | Model input for slot 6. | |
| text_6opt | STRING | Optional text metadata for slot 6. | |
| label_6opt | STRING | Optional custom label for slot 6. | |
| model_7opt | MODEL | Model input for slot 7. | |
| text_7opt | STRING | Optional text metadata for slot 7. | |
| label_7opt | STRING | Optional custom label for slot 7. | |
| model_8opt | MODEL | Model input for slot 8. | |
| text_8opt | STRING | Optional text metadata for slot 8. | |
| label_8opt | STRING | Optional custom label for slot 8. | |
| model_9opt | MODEL | Model input for slot 9. | |
| text_9opt | STRING | Optional text metadata for slot 9. | |
| label_9opt | STRING | Optional custom label for slot 9. | |
| model_10opt | MODEL | Model input for slot 10. | |
| text_10opt | STRING | Optional text metadata for slot 10. | |
| label_10opt | STRING | Optional custom label for slot 10. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| selected_text | STRING | — |
| index | INT | — |
| label | STRING | — |