VAE Decode π
Turning latents back into pixels β the node that finishes every workflow
- samples
- vae
- image
- summary
Every diffusion workflow ends the same way: the sampler hands you a latent - a compressed, 4-to-16-channel tensor that nobody can look at - and something has to turn it into pixels. That something is the VAE decoder, and this node is OmniNodes' version of it. The VAE Decode from TensorVizion/OmniNodes is a thin wrapper around ComfyUI's own core VAEDecode, delegating straight to the same decode() method so the behavior is identical to the stock node. The only addition is a summary output that tells you what you just decoded.
It's the least glamorous node in the pack and one of the most load-bearing: without it, a generated latent is a dead end. It sits at the end of the sampling loop - Empty Latent Image β KSampler β VAE Decode β Save/Preview - and it's what lets you actually see the thing you made.
Inputs and outputs
Two inputs, both mandatory:
samples- the latent to decode. The author's tooltip is exactly right: "The latent to be decoded."vae- the decoder. Wire it from a checkpoint loader, a VAE Loader, or the Simple SDXL Loader'svaeoutput.
Outputs: image (an IMAGE batch you can preview, save, or feed into a Video Save node) and summary (a string reporting how many images were decoded and at what resolution - e.g. "Decoded 4 image(s) at 1024x1024").
The VAE knowledge you actually need
The decoder matters more than beginners assume. The right VAE is the one your checkpoint was trained against - slapping a famous VAE onto a model that didn't use it is a classic source of weird colors and artifacts. Modern checkpoints usually bundle their own, which is why the stock behavior is fine most of the time; you reach for a standalone VAE (see the VAE Loader) when you explicitly want a different one.
One honest footnote: decoding a batch of variations from the Seed Variator at once is fast, but remember the round trip - every encode/decode cycle is slightly lossy. Decode once at the end of a workflow, not in the middle of an img2img chain you're about to re-encode.
Install
Part of OmniNodes:
cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/OmniNodes
Or ComfyUI Manager β OmniNodes β restart. No extra dependencies. Like the pack's other sampling wrappers, it's categorized under TensorVizion/Model Utilities (not a separate Sampling submenu) - the pack splits its sampling nodes across categories like that.
Troubleshooting
- Garbage/static output - usually a VAE mismatch: the decoder doesn't match the checkpoint's latent space. Try the checkpoint's bundled VAE, or the correct standalone file.
- Node missing from menu - restart ComfyUI fully and check the terminal
[OmniNodes]lines for an import error. - Outputs identical to stock - correct. It's a wrapper; that's the feature, not a bug.
Reach for it when you want the pack's self-contained loop - it's the boring node that makes everything before it visible.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| samples | LATENT | The latent to be decoded. | |
| vae | VAE | The VAE model used for decoding the latent. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | β |
| summary | STRING | β |