VAE Loader
Right codec, wrong image — the 15 seconds that saves you a wasted batch
- vae
- vae_name
The VAE is the component everybody blames first and understands last. On SD 1.5 the folklore was "load the 840k VAE or your colours wash out." By 2026 the situation inverted: most checkpoints bake a decoder in, and attaching a separate one is usually the mistake. VAE Loader [SML2] is a small, honest node for the cases where you do need a specific one.
When you actually need it
Three legitimate cases. You're using a UNet or GGUF model that ships no VAE at all. You're running Qwen Image 2.1, where the VAE is not interchangeable with the original Qwen Image one and a mismatched decode throws after sampling finishes. Or you're deliberately swapping a decoder - modern VAEs are a quality decision, not a colour fix, and the Qwen lineage's decoder was retuned to render legible text at some cost in fine texture.
Everything else, the checkpoint's baked VAE is the right answer and this node is a place to introduce a bug.
How it works
Two inputs. vae_name is a dropdown of everything in ComfyUI's registered VAE folders, normally models/vae. disable_offload defaults to true, which requests a full VAE load on its execution device rather than letting ComfyUI's offload handling move it around.
Under the hood it's the stock path: comfy.sd.VAE with the file's metadata carried through, plus a normalizer that handles Qwen Image 2.1 VAEs in both native and recognized Diffusers formats. Diffusers files are detected by tensor keys and shapes, not filename, then remapped into ComfyUI's native architecture - with every converted key and shape validated and malformed files rejected. Native files pass through untouched. Nothing gets rewritten on disk.
The node description advertises "enhanced Wan 2.1 support"; in the shipped code there's no Wan-specific branch, just the stock constructor plus the Qwen normalization. Treat the Wan claim as "ComfyUI's own detection handles it," not as magic.
Outputs are vae and, usefully, vae_name as a STRING. That second one is the small win: wire it into your filename template or a metadata node and every image records the exact decoder that produced it. Cheap provenance, no extra nodes.
The offload switch, precisely
The pack is refreshingly careful here, and it's worth quoting the intent rather than inventing one: disable_offload does not select a GPU and does not guarantee the VAE stays resident between executions. ComfyUI still owns device placement. All you're doing is asking for a full load instead of an offload pass. If you turned it on hoping to fix a slow tiled decode, that's not what it does.
Installing it
ComfyUI Manager → search Smart Model Loader Nova, or:
cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI_SmartModelLoader_Nova.git
cd ComfyUI_SmartModelLoader_Nova
python -m pip install -r requirements.txt
Use ComfyUI's own Python environment and restart. This node needs none of the optional Nunchaku or PuLID dependencies; the base requirements are enough. VAEs, obviously, you download yourself - put them in ComfyUI/models/vae.
Where people get burned
The wrong VAE decodes, it just decodes badly. You get mush, colour skew or a crash - and if sampling completed you may assume the sampler was at fault. Check the VAE first. Qwen Image 2.1 is the one that bites hardest, because the original Qwen Image VAE will happily accept the latent and fail at decode time.
A missing file is caught before loading, with the filename held in the node rather than silently replaced. Same deal as the rest of the pack: shared workflows keep their paths, and red filenames are yours to fix.
No source/integrity controls on this node. It's a plain dropdown, and the pack says so: for per-file AIR/Hugging Face references, expected hashes and Download Manager return targets, use Smart Model Loader's VAE section instead. If you wanted verified downloads, you picked the wrong node - that's a design boundary, not a bug.
Deleting the "wrong" VAE won't help. If your model has a baked decoder, forcing an external one usually looks worse, not better. The right VAE is the one the checkpoint was trained against, not the one with the best reputation.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| vae_name | COMBO | VAE model to load | |
| disable_offload | BOOLEAN | true | Keep VAE on GPU (disable offloading) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| vae | VAE | — |
| vae_name | STRING | — |