VAE Decoder PoP
The decode half of comfy_PoP's built-in-loader VAE pair
- samples
- IMAGE
This is the other half of the pair with VAEEncoderPoP: where that node turns pixels into latents, this one turns latents back into pixels, with the same trick of having its own VAE loader built in instead of needing a separate VAELoader node wired in from outside. It's the last node in almost every image-generation graph - your KSampler produces a latent, this turns it into something you can actually save or look at.
How it works
Decoding is the inverse of encoding: your diffusion model does all its work in a compressed latent space, and at the end of the pipeline something has to expand that back into actual pixel values. This node loads the VAE you specify and runs that decode against your sampled latent. Like its encoder sibling, the loaded VAE is cached behind the scenes by file path - so if this node and VAEEncoderPoP elsewhere in your graph both use the same vae_name, the VAE only occupies memory once, not twice, even though two separate nodes are referencing it.
The inputs and outputs that matter
samples- aLATENT, coming straight from your KSampler (or anywhere else producing latents).vae_name- pick from your installed VAE files, same as VAEEncoderPoP. It needs to live inmodels/vaeto show up.- Output is a single
IMAGE- wire it into Save Image, Preview Image, or any further pixel-space processing (upscalers, color correction, whatever comes next).
How to install it
ComfyUI Manager: search "comfy_PoP", install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/picturesonpictures/comfy_PoP
Nothing extra to install - it's a thin wrapper around ComfyUI's own VAE loading and decoding. You need a VAE file present on disk already; this node doesn't fetch one for you.
Common issues & troubleshooting
vae_name list is empty. No VAE file in models/vae yet - same fix as the encoder side. Grab the VAE that matches your checkpoint's architecture (SD 1.5 commonly wants vae-ft-mse-840000-ema-pruned; many SDXL and Flux checkpoints already bake a VAE in, so you might not need a separate file at all).
Grey, flat, or washed-out final image. This is the single most common VAE symptom, and it almost always means a missing or wrong-architecture VAE rather than a sampler problem - check vae_name matches your model family before you start second-guessing your prompt or sampler settings.
Odd errors or garbage output after swapping checkpoints. If you changed model families (say, SD 1.5 to SDXL) but left vae_name pointed at the old VAE, that mismatch is a common source of broken decodes. Update vae_name whenever you switch architectures, not just checkpoints within the same family.
Trying to save VRAM across an encode-then-decode workflow? Make sure vae_name is spelled identically here and in VAEEncoderPoP - the caching that keeps one VAE loaded instead of two only triggers on an exact filename match between the two nodes.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| samples | LATENT | — | |
| vae_name | COMBO | 0 options: |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |