ComfyUI Node

LC VAE Compare

Six VAEs, one set of latents, no rerolling

By lonecatone23·Created about a month ago·Updated about 17 hours ago· 8
LC VAE Compare
  • samples
  • vae_1
  • vae_2
  • vae_3
  • vae_4
  • vae_5
  • vae_6
  • sheet
  • images
  • report
◄labels►
◄crop_size256►

What it's for

Everyone compares VAEs by rendering the same prompt six times and squinting. That test is wrong, and you can prove it to yourself in one run: change the VAE and you've also changed nothing about the seed, but you have changed your memory of which was which, and you're looking at six different images.

This node decodes the same latents with up to six VAEs. Same image, one variable. The VAE is the codec between pixels and the latent space where diffusion actually happens, so the decode is literally the last thing that touches your picture - and on newer models it's a genuine quality decision rather than an SD 1.5 colour patch. Qwen-Image's decoder, which Krea 2 and Anima both use, was retuned to render legible text at the cost of fine texture. If you're swapping decoders, you want to see that on your own render, not read about it.

Inputs and outputs

samples takes the LATENT from a real render - your KSampler output - because that's what you actually see. vae_1 is the reference; vae_2 through vae_6 are optional. labels names the columns (comma separated; empty gives you vae 1, vae 2, …). crop_size (default 256) sets a 1:1 crop from the middle of each decode, shown large underneath the full picture, which is where you actually judge texture and sharpness.

Three outputs: sheet is the comparison image with one column per VAE, images is the decodes on their own, and report carries the numbers.

Two numbers, and they're the reason to use this over a contact sheet. Sharpness is average edge strength, higher being crisper. Drift is the average difference from the first VAE on a 0-255 scale: 0 is identical, under 2 is hard to see, over 6 is visible. That second one is what turns "I think this one looks softer" into a measurement.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC_ModelBuilder_nodes

Restart. This node needs nothing beyond ComfyUI core - no onnxruntime, no face models, no downloads.

Where people get burned

Use real latents, not a random one. Feeding it an empty latent decodes noise and every VAE looks identical, because a decoder can only decode what's there. The whole point is that the latent came from your model with your sampler settings.

The other one is wiring. vae_1 is the yardstick and everything else is measured against it, so put the VAE you trust in slot one - if you put the experimental decoder there, your drift numbers come out inverted and every other column looks like it's the odd one out. And keep labels short, because they're being drawn onto the image.

CategoryLC Modelbuilder

Inputs (9)

NameTypeDefaultDescription
samplesLATENTLatents from a real render (KSampler output). Every VAE decodes these same latents, which is what you actually see.
vae_1VAEThe reference: the others are measured against it.
labelsSTRINGNames for the columns, comma separated. Empty = vae 1, vae 2, ...
crop_sizeINT25664–1024A 1:1 crop from the middle of each decode, shown big under it, to judge texture.
vae_2optVAE—
vae_3optVAE—
vae_4optVAE—
vae_5optVAE—
vae_6optVAE—

Outputs (3)

NameTypeDescription
sheetIMAGE—
imagesIMAGE—
reportSTRING—