π List Selector Max
A prompt roulette that remembers its own seed β the node this pack is known for
- concatenated
- lines_json
- total_count
Randomizing your prompts without losing your mind is the classic prompt-engineering chore. The A1111 world solved it with {wildcards} syntax: drop a placeholder, and a random line gets pulled from a text file. The List Selector Max is the structured ComfyUI version of that idea, and it's the pack's marquee utility - the README calls it a "must-have" for prompt generation, and it ships with a starter pack of 82 list files so you can feel clever immediately.
The difference from a bare wildcard is control. Instead of one global random draw, you build groups - each group points to its own .txt or .csv file, has its own seed, and has its own selection mode. One group can randomize, another can step through with increment, a third can be pinned to a specific index. Then the node concatenates the chosen lines into a single prompt.
How it works
The node's state lives in JavaScript; the Python side receives the group configuration and does the concatenation. Per group you get:
- File - a path using
{COMFY}(your ComfyUI root) or{CUSTOM}(a folder you authorize). - Selection mode -
select(manual index),randomize,increment, ordecrement, each driven by an independent seed. - Inline editing - modify the selected line right in the node before it's used.
- Manual override - type free text into the preview field to bypass the file entirely.
That last one is the sleeper feature. You're mid-flow, the randomized line is close but wrong, and instead of editing the file you just fix it in the node.
The security model matters and is the most likely thing to bite you. Access is restricted to the ComfyUI root folder plus one custom_root you explicitly set - anything outside is refused. That's deliberate: the node exposes HTTP routes on your ComfyUI server, so an open root would let any client on your network read arbitrary files. The README is blunt that {CUSTOM} paths make a workflow machine-specific, and that you shouldn't share workflows with a custom_root filled in on a shared instance.
Outputs
concatenated(STRING) - the joined result; wire this into your positive prompt encoder.lines_json(STRING) - the per-group selections as JSON, handy for logging or scripts.total_count(INT) - how many selections were made.
Where it shines
Batch generation, hands down. Set a group to randomize with a per-group seed, use increment on another group so it steps through its file line by line, and you get reproducible-but-varied prompts - same seeds, same lines, every time. Combined with this pack's PyCodeMax LLM integration, the README's suggested trick is to enrich the selected line with a local Ollama model automatically. That's more advanced than most people need on day one, but it shows where the node fits: the selection layer is deterministic and debuggable, and everything downstream can be whatever you want.
Troubleshooting
- "Path refused" errors? You're pointing at a file outside the allowed roots. Use
{COMFY}for anything inside ComfyUI, or setcustom_rootto the folder you need. - Workflow breaks on another machine? It almost always contains a
{CUSTOM}path. Swap to{COMFY}equivalents or clearcustom_rootbefore exporting. - Nothing selected? Check the file actually has lines - an empty or missing file returns an empty selection rather than an error.
Installing it
It's part of Orion4D_MetaNode:
cd ComfyUI/custom_nodes
git clone https://github.com/orion4d/Orion4D_MetaNode
Or install via ComfyUI Manager (search "Orion4D_MetaNode") and restart. It lives under Orion4D_MetaNode β UI Widgets, and the bundled lists_starter_pack/ (82 files across categories like Animal, Architecture, Color, Framing, Photography) is ready to point groups at. No extra dependencies. Fair context: the pack is young and single-developer, so you won't find a big community trail - but for structured multi-list prompt selection, this is genuinely the most complete tool in the set.
Inputs (0)
No inputs
Outputs (3)
| Name | Type | Description |
|---|---|---|
| concatenated | STRING | β |
| lines_json | STRING | β |
| total_count | INT | β |