Dynamic Sampler Selector
Build a sampler list for comparison runs
- STRING
- LIST
If you've ever wanted to run the same workflow across ten samplers to see which one actually looks best on your prompt, you've probably hit the same wall everyone does: ComfyUI has no built-in XYZ plot. Automatic1111 and Forge have had grid-comparison scripts forever; ComfyUI makes you build that yourself out of loops and list nodes. That gap is the entire reason this node exists - the pack's own README says it was "originally crafted to support XYZ-plot pipelines," and that checks out against the wider community, where "is it possible to create XYZ plots on ComfyUI" is a recurring question with the same answer every time: technically yes, but it's annoying and you'll be reaching for loop nodes or a pack like Efficiency Nodes to actually drive it.
What it does
You get ten dropdowns - sampler_1 through sampler_10 - each defaulting to none and each offering the full ~45-entry ComfyUI sampler list (euler, euler_ancestral, dpmpp_2m, dpmpp_sde, and so on). Pick as many as you want to include in your comparison and leave the rest on none. The node filters out the untouched slots and gives you back two outputs: a STRING that's a comma-separated list of just your picks, and a LIST of the same values in list form.
Neither output plugs straight into a KSampler's sampler_name slot - that input wants a proper enum/combo connection, not a string. What you actually do with this is feed the LIST into some kind of loop node, and inside that loop use the pack's own Sampler Selector From String node to turn each individual string back into a real sampler type the KSampler will accept. The STRING output is mostly for labeling - dropping the comma-separated list into a text node so you can see at a glance what you're comparing in a given run.
Installing it
Through ComfyUI Manager: search for DemonAlone-nodes-ComfyUI (the pack's display title - the repo itself is named SimpeStringGenerator_ComfyUI) and install. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/DemonAlone/SimpeStringGenerator_ComfyUI
Restart ComfyUI. There's nothing else to it - the README is just a short credits list, no requirements.txt beyond core ComfyUI, no model downloads. Worth knowing going in: this is a small, low-traffic personal utility pack (a search across the community corpus turns up essentially nothing about it), and a few of its nodes are the author's own rewrites of pieces from better-known packs - the README credits mikey_nodes, ComfyUI_essentials, was-node-suite-comfyui, and qq-nodes-comfyui as the inspiration for various nodes here. Treat it as a personal toolkit, not a battle-tested standard.
Where people get burned
The obvious trap: leave all ten sliders on none and both outputs come back empty - nothing to iterate on. Less obvious: this node only builds the list, it doesn't loop your graph over it. ComfyUI has no native "for each" mechanism, so you still need something downstream (a loop node from another pack, or a manual chain) to actually consume the list and re-run the sampling stage once per entry. If you're new to this pattern, it's worth reading up on how XYZ-style comparisons are typically wired in ComfyUI before you build around this node - the mechanism is the fiddly part, not the dropdown.
One more thing worth internalizing before you lean on a 45-option sampler sweep: which sampler is "best" depends heavily on what kind of model you're running. On SD 1.5/SDXL checkpoints, DPM++ 2M with a Karras schedule is still the safe default. On newer flow-matching models (Flux, Z-Image, and friends), Karras is actively a bad pick - the community consensus there points at Euler-family samplers on beta or simple schedules instead. Don't build a ten-sampler comparison list blind; know which family you're testing before you burn the compute.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| sampler_1 | COMBO | none | 45 options: none, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| sampler_2 | COMBO | none | 45 options: none, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| sampler_3 | COMBO | none | 45 options: none, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| sampler_4 | COMBO | none | 45 options: none, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| sampler_5 | COMBO | none | 45 options: none, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| sampler_6 | COMBO | none | 45 options: none, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| sampler_7 | COMBO | none | 45 options: none, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| sampler_8 | COMBO | none | 45 options: none, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| sampler_9 | COMBO | none | 45 options: none, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
| sampler_10 | COMBO | none | 45 options: none, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |
| LIST | LIST | — |