🗂️Dict → VAE🔴
Decode straight from the bus
- dict
- value
The last hop before pixels
Dict → VAE🔴 pulls a VAE back out of a dict, so your VAE decode step can read its model from the bus instead of a hardwired wire. If you've organized your workflow around a dict - loading the pieces once up top, passing one connection down the graph - this is the node that gets the latent-to-image step its decoder.
Honestly, on its own it does almost nothing. A VAE is just an object; this node looks it up by key and hands it out. The value only shows up when you're bussing a whole generation pipeline: checkpoint, CLIP, model, and VAE all get bundled at the top, and the VAE needs to arrive at VAEDecode when the latents come out. A single typed connection carries the whole kit, and this is the extraction point for the decoder.
What it does
Same pattern as the other extract nodes:
- dict - the DICT to pull from.
- key - the exact name the VAE was stored under.
- cleanup_key - on by default; strips spaces and extra newlines from the key you type.
The value output is a VAE wire, ready to plug into VAEDecode (or VAEEncode for the inverse pass). The type check is strict - if what's under that key isn't actually a VAE, execution fails rather than coercing. That's the same strictness that makes dicts a safer bus than magic routing nodes that accept any type anywhere: you can't accidentally hand a model where a decoder belongs.
Installing it
Part of 🗂️ Dict Tools - install the pack, not a standalone node. ComfyUI Manager, search Dict Tools (Lex-DRL/ComfyUI-DictTools), or:
cd ComfyUI/custom_nodes
git clone https://github.com/Lex-DRL/ComfyUI-DictTools
Restart after cloning. Dependency-wise it's a feather: just frozendict, no models, no heavy installs. The pack does require ComfyUI >= 0.18.0 because it's written against the newer node API - if the nodes never show up in the menu, update ComfyUI before you blame the pack.
Where people get burned
The usual suspects, plus one VAE-specific one. Keys are case-sensitive and a missing key raises No such key in Dict, so make the extract key match the Add node's key exactly. The strict type check means you can't stash a VAE under a generic Any add and expect the typed extract to accept it - use a DictAddVae up front.
The VAE-specific gotcha: bussing makes it easy to forget which VAE you loaded. If your dict holds a checkpoint's matching VAE but you swap to a different model family and don't update the bundle, you'll get that familiar decoder-mismatch mess (green/purple garbage or outright errors). Nothing in the pack can detect that for you - it faithfully returns whatever you stored. Store the right VAE for the model you're actually generating with, and this node becomes invisible plumbing, which is exactly what you want.
Small, typed, forgettable in the best way. If you don't bus your workflows you don't need it; if you do, it's the clean seam where latents become images.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| dict | DICT | A Dictionary to work with. | |
| key | STRING | Key (name) of the item extracted from the dict. | |
| cleanup_key | BOOLEAN | true | Automatically remove leading/trailing spaces and extra newlines from the key. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| value | VAE | The actual VAE-type item extracted from the Dict. |