KSampler (Multi-Choice)
KSampler (Multi-Choice)
- model
- positive
- negative
- latent_image
- vae
- sigmas
- output
- denoised_output
- previews
- info
- picked_seed
Seed roulette is the most expensive habit in ComfyUI. You queue eight seeds, wait through eight full renders, keep one, and call it a day. On an 8-step distilled model that's 64 model steps spent just to browse; on SDXL at 25 steps it's 200. KSampler (Multi-Choice) - from shootthesound, a.k.a. Pete - is that habit with the waste cut out. It probes a batch of seeds cheaply, draws the candidates as clickable thumbnails right on the node, and then renders only the one you click, continuing from the exact point the probe stopped. Browsing 8 seeds and finishing your pick on an 8-step model costs roughly 22 model steps instead of 64.
What it is
A drop-in replacement for the normal KSampler (category: sampling). Wire model, positive, negative, latent_image and vae as usual and queue. The node runs the first probe_steps of the schedule for each of num_seeds consecutive seeds, decodes each probe endpoint into a thumbnail, and pauses the queue with a contact sheet drawn on the node. Click a candidate - or press its number key, 0–9 - and only that seed finishes. The thumbnails stay clickable after the run, so you can queue a second candidate straight from its cached probe.
The detail that makes it a tool and not a gimmick: the probe isn't a throwaway preview. The picked seed continues from where its probe stopped, via ComfyUI's split-sigma zero-noise continuation - exact for classic EPS models and flow/CONST models alike. With a deterministic sampler like euler the finished image is bit-identical to a normal full render of that seed. Even fp8 checkpoints land bit-identical, since the continuation restarts from the raw trajectory bits the probe left off at. That matters: fp8 amplifies a single float rounding error into visible micro-detail changes, and the only error it can't amplify is zero.
The inputs that matter
seed+num_seeds- seedsseed,seed+1, … are probed; one thumbnail each. The cache deliberately ignorescontrol_after_generate, so clicking a thumbnail always renders the candidate you're looking at, even if the widget ticked over.probe_steps- 1–2 on distilled models (turbo, TDM, Lightning, Krea 2 Turbo); composition commits in the first steps. On classic multi-step models (SDXL and friends) use ~20–30% ofstepsor the previews are mush.cfg- 1.0 for distilled/CFG-free models (the negative pass is skipped - and the negative prompt does nothing there anyway). Otherwise your usual value: ~7 SDXL, 3–5 flow models.sampler_name/scheduler/steps- the schedule is derived from the model exactly like BasicScheduler, so use your normal pair. Deterministic samplers (euler) make the continuation exact.vae- used to decode the previews. A fast preview VAE like taesd/taew is the smart choice.timeout_sec- auto-picks candidate 0 after N seconds; set it for unattended or headless runs, because the queue pauses while the node waits.denoise- lower it for an img2img / refine pass, exactly like a standard KSampler; optionalsigmasoverrides the whole schedule.
Outputs
output and denoised_output (the same LATENT pair as SamplerCustomAdvanced), a previews IMAGE sheet, an info string, and picked_seed - the seed of the candidate you clicked, handy for wiring into a vanilla KSampler, which is exactly what the verify workflow does.
Install
ComfyUI Manager: search "KSampler Multi-Choice". Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/shootthesound/ComfyUI-KMS
Restart ComfyUI and hard-refresh your browser. That's it - no Python dependencies, no bundled models (you supply model + VAE). A ready-made Krea 2 example shows up in the Templates browser under the pack's name.
Where people get burned
- Ancestral samplers break exactness. Euler a, DPM++ SDE and friends add fresh noise per step, so the continuation matches composition but not bytes. Stick to euler and kin if bit-exactness matters.
- The queue sits paused while the node waits for your click. Cancel aborts cleanly;
timeout_secis the headless answer. - Blurry previews on classic models at very low
probe_stepsare the model, not a bug - raise the probe. - The post-run re-pick cache lives in server memory; a ComfyUI restart clears it and the next run re-probes. That's a cache miss, not a bug.
- SDXL/Illustrious issues surfaced on the launch thread; the author couldn't reproduce them and they look like a pre-release bug. Krea 2 Turbo is the community's happy path.
How it earns its keep
The old seed-farming advice - cheap sampler at low steps to evaluate, then rerun the winner - is still sound; Multi-Choice just automates the "evaluate" half and never wastes the work it did. On distilled models it's borderline essential; on everything else it's the fastest way to stop feeling like the RNG is deciding your image for you. Trust the mechanism - and if you don't, run the verify workflow below.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| vae | VAE | VAE matching the model — used to decode the clickable candidate previews (a fast preview VAE like taesd/taew also works). | |
| seed | INT | 00–18446744073709550000 | Base seed: seeds seed, seed+1, ... seed+num_seeds-1 are probed. |
| cfg | FLOAT | 1.00–100 | 1.0 for distilled / CFG-free models (the negative pass is skipped); otherwise your model's usual CFG (e.g. SDXL ~7, flow models ~3-5). |
| sampler_name | COMBO | euler | Deterministic samplers (euler, etc.) make the finished image exactly match a normal run of the picked seed. |
| scheduler | COMBO | simple | Scheduler for the schedule (derived from the model, same as BasicScheduler) — use what you'd normally pick for this model. Ignored when a SIGMAS override is connected. |
| steps | INT | 81–100 | Full schedule length — the model's normal step count (e.g. 8 for turbo/distilled models, 20-30 for classic ones). |
| num_seeds | INT | 82–64 | How many consecutive seeds to browse — one thumbnail each. Cost is num_seeds x probe_steps model steps. |
| probe_steps | INT | 21–16 | Steps run per seed before capturing its preview. 1-2 is enough on distilled models; on classic multi-step models use ~20-30% of steps so the composition is readable. The picked seed continues from this point, so probe work is never wasted. |
| timeout_sec | INT | 00–3600 | Auto-pick candidate 0 after this many seconds without a click. 0 = wait forever (Cancel/interrupt still works). Set a value if this workflow may run unattended/headless. |
| denoise | FLOAT | 1.000.01–1 | 1.0 = txt2img (full schedule). Lower it to browse seeds for an img2img/refine pass — only the last denoise fraction of a longer schedule runs on your input latent, exactly like a standard KSampler. Ignored when a SIGMAS override is connected. |
| sigmasopt | SIGMAS | Optional custom schedule, used instead of the standard one from scheduler/steps. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| output | LATENT | — |
| denoised_output | LATENT | — |
| previews | IMAGE | — |
| info | STRING | — |
| picked_seed | INT | — |