Multi-Choice Verify (A/B Exact)
\"Bit-identical\" is a bold claim — Multi-Choice Verify (A/B Exact) checks it
- a
- b
- report
Every custom node promises you something. KSampler (Multi-Choice) from the same pack promises something unusually strong: the image you click is exactly what a normal full render of that seed would have produced - bit for bit, not "close enough." Multi-Choice Verify (A/B Exact) is the pack author's way of putting that claim where you can kick the tires. It's a comparator, not a sampler: you feed it two latents and it tells you precisely how far apart they are, with no hand-waving.
What it does
An output node in the sampling category with exactly two inputs, both required:
a- the Multi-Choiceoutputlatent (the probe-then-continue result).b- a vanilla full render of the same seed. The intended wiring, straight from the tooltip: take Multi-Choice'spicked_seedoutput, feed it into a normal KSampler's seed input, and send that sampler's latent in here.
The node compares them and prints the verdict on itself (and to the console) as a single report STRING output. Four possible verdicts, in order of strictness:
- SHAPE MISMATCH - the tensors aren't even the same size, so they're not comparable (different resolution or model upstream).
- BIT-IDENTICAL - every single value matches exactly, checked with
torch.equal. - NUMERICALLY EQUIVALENT - not bit-equal, but the max difference is ≤ 1e-4: float rounding only, visually identical. It reports the actual max and mean difference.
- DIFFERENT - the max difference is above that threshold, and the report helpfully lists the usual suspects: same seed, deterministic sampler (e.g. euler), scheduler, steps, cfg.
Why the threshold exists
Here's the honest mechanics. A continuation that's bit-identical isn't automatic - it requires a deterministic sampler, a schedule built the same way, and the raw-trajectory restart the Multi-Choice node does for fp8 models. Get any of that wrong and you're in "numerically equivalent" territory: the image looks the same but the bytes don't match. For a diffusion model that's a rounding error and nobody can see it. But with fp8-quantized checkpoints, the author measured a 1e-8 difference growing to 0.1 in six steps - that's chaos, not rounding. So the line between "numerically equivalent" and "different" isn't arbitrary pedantry; it's where fp8 turns trivia into visible micro-detail changes.
When you'd actually use it
Honestly? Mostly once. The pack ships a ready-made VERIFY-EXACT workflow (load it from Templates or drag the JSON in) that sets up the whole A/B for you: Multi-Choice → vanilla KSampler on the same seed → both latents into this node. Run it, watch it report BIT-IDENTICAL with euler, and now you trust the Multi-Choice node forever. Re-run it when you switch to a new model or sampler and want proof the mechanism still holds, especially on a quantized checkpoint. It's a confidence tool, not a daily driver - but it's the difference between trusting a clever node on faith and knowing it works.
One trap if you build the comparison by hand: both latents must be the same resolution, or you'll get a shape mismatch rather than a verdict. And don't read a DIFFERENT result as a bug if you used an ancestral sampler (euler a, DPM++ SDE) - those are nondeterministic by design, and the Multi-Choice README says so up front.
Install
Same one-liner as the parent pack, which is the whole pack:
cd ComfyUI/custom_nodes
git clone https://github.com/shootthesound/ComfyUI-KMS
Or grab it via ComfyUI Manager by searching "KSampler Multi-Choice" (the pack's display name). Restart ComfyUI and hard-refresh. No Python dependencies, no models to download.
The takeaway
This is a "prove it to yourself" node from an author confident enough to include the proof. Run the shipped workflow once, see BIT-IDENTICAL with your own eyes on your own model, and you'll never wonder whether the clickable-seed magic is faking it again. Five minutes of setup buys permanent trust in the mechanism it verifies.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| a | LATENT | Multi-Choice 'output' latent. | |
| b | LATENT | A vanilla full render of the same seed (wire Multi-Choice's picked_seed output into the KSampler's seed input). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| report | STRING | — |