ComfyUI Node

ANDRO Compare

Did that setting actually change anything? Stop eyeballing it

By AndreiOrehov·Created 28 days ago·Updated about 18 hours ago· 4
ANDRO Compare
  • image_a
  • image_b
  • difference
  • report
  • worst_zones
amplify20

Somewhere around your second float32-vs-bf16 experiment you'll run into the question this node exists for: the two outputs look identical, so is the difference real, how big is it, and is it anywhere that matters? ANDRO Compare is a numeric A/B of two image batches - max and mean absolute difference, PSNR, SSIM, the five worst frames, and an amplified difference image. It answers "did that setting change anything" without exporting both frames and diffing them in another program.

The intended use is right there in the image_b tooltip: the usual pairing is one decode with keep_out_of_range ON and one with it OFF, or float32 against vae default - same seed, one setting changed, so whatever the report shows can only have come from that setting. That's the discipline that makes the numbers mean something. Frame counts may differ between the two batches (the shorter one decides how many get compared) but the frame size must match.

What comes out

  • report - max/mean deviation, PSNR and SSIM, where in the frame the difference actually sits, the five worst frames, and a verdict on whether float32 is worth it for this shot. The verdict matters: it can tell you outright that a difference is below a 12-bit step and not worth the 3× decode time, or that it's structural and localised and worth it.
  • difference - |A−B| multiplied by amplify. Black means identical - and it stays black for differences too small to see even at high gain.
  • worst_zones - a MASK of the tiles where difference concentrates. This is the honest part most metrics skip.

Why the global number lies

Here's the insight that makes this node worth more than a spreadsheet: a single PSNR figure can't tell "spread thinly over the frame" from "all of it in one patch of sky." Only the second is worth acting on. The README's worked example: damage confined to one corner measures PSNR 46.4 dB, which reads as fine - while the node splits the worst frame into an 8×8 grid, reports the hottest zone at 17.3× the frame average, and says outright that the global figure is diluted. The amplify widget has the same lesson built into its tooltip: the clamp/precision differences this pack is about stayed black at 25× and only became visible around 100–200×, sitting on sky, haze and smooth gradients - exactly where banding starts. Trust the numbers in the report over the picture.

Setup and inputs

image_a and image_b are the only required inputs; amplify (default 20, 1–200) is the gain on the difference image. If you're A/B-ing a decode setting, the clean wiring is two decode chains off the same latent - stock VAEDecode and ANDRO VAE Decode - feeding the two inputs. The node is an output node, so its report lands in the UI.

Install

Part of the comfyui-vae-float32 pack. ComfyUI-Manager → search comfyui-vae-float32 → install → restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/AndreiOrehov/comfyui-vae-float32

Find ANDRO Compare under the ANDRO category. This is also the pack's own debugging tool: the author's stated advice is that if a float32 decode ever looks wrong, compare against stock with this node before filing an issue - a reach into vae.process_output is meant to degrade into "no change with a note," not a corrupted image, and this node is how you'd verify that on your own setup.

CategoryANDRO

Inputs (3)

NameTypeDefaultDescription
image_aIMAGEFirst batch. Frame counts may differ - the shorter one decides how many frames are compared - but the frame SIZE must match.
image_bIMAGESecond batch, compared against A. The usual pairing is one decode with keep_out_of_range ON and one with it OFF, or float32 against 'vae default' - same seed, one setting changed, so whatever the report shows can only have come from that setting.
amplifyFLOAT201–200Gain on the difference image, because the raw difference is almost always too dark to see. Be warned what this is worth: the clamp/precision differences this pack is about stayed BLACK at 25x, and only became visible around 100-200x - and there they sit on sky, haze and smooth gradients, i.e. exactly where banding shows up first. Trust the numbers in the report over this picture.

Outputs (3)

NameTypeDescription
differenceIMAGE|A-B| multiplied by amplify - black means identical, and it stays black for differences too small to see even at high gain.
reportSTRINGmax/mean deviation, PSNR and SSIM, where in the frame the difference actually sits, the five worst frames, and a verdict on whether float32 is worth it for THIS shot.
worst_zonesMASKThe tiles where the difference is concentrated. A high global PSNR with a small bright patch here means the damage is real but local - usually sky or haze, which is exactly where banding starts.