Nodes/ComfyUI-KMS/Multi-Choice Verify (A/B Exact)
ComfyUI Node

Multi-Choice Verify (A/B Exact)

\"Bit-identical\" is a bold claim — Multi-Choice Verify (A/B Exact) checks it

By shootthesound·Created about a month ago·Updated about a month ago· 29
Multi-Choice Verify (A/B Exact)
  • 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-Choice output latent (the probe-then-continue result).
  • b - a vanilla full render of the same seed. The intended wiring, straight from the tooltip: take Multi-Choice's picked_seed output, 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.

Categorysampling

Inputs (2)

NameTypeDefaultDescription
aLATENTMulti-Choice 'output' latent.
bLATENTA vanilla full render of the same seed (wire Multi-Choice's picked_seed output into the KSampler's seed input).

Outputs (1)

NameTypeDescription
reportSTRING