Clark Air DC-AE VAE Decode
Latents in, pixels out
- samples
- vae
- IMAGE
Every diffusion workflow ends the same way: the sampler hands you a latent, and something has to turn it into pixels you can actually look at. In the Clark Air pack, that something is this node. You wire the KSampler's LATENT into samples, connect a CLARKAIR_VAE from ClarkAirVAELoader, and get a standard IMAGE out the far end, ready for SaveImage or any other image consumer.
It looks like the most boring node in the pack. It's also the one with a hidden footgun, because the way Sana's latent is handled is not what your SDXL muscle memory expects.
The quiet trap
Sana's latent uses a scale factor (0.41407) that the KSampler applies on the way out - ComfyUI's SanaLatent format handles it as part of sampling. This node is written to decode the latent directly, without dividing by the scale factor a second time. If you've been trained by other model packs to "fix washed-out output by dividing the latent," resist. The source is explicit that dividing again over-softens the image. This is one of those cases where the node already did the thing you were about to do, and doing it twice is worse than not doing it at all.
It's also why this node exists rather than using ComfyUI's stock VAEDecode: that node knows 4- and 16-channel autoencoders, not Sana's 32-channel DC-AE. This one goes through the diffusers AutoencoderDC directly, so it's paired with the loader and nothing else will satisfy it - the vae input accepts only the CLARKAIR_VAE type.
What it does to the numbers
Under the hood it's three steps: move the latent to the VAE's device in bf16, run the decoder, then map the result from the model's [-1, 1] range into [0, 1], clamp, and reorder to ComfyUI's channels-last IMAGE format. You never see any of that, which is the point - the only inputs are samples and vae, both required, both self-explanatory.
Where it sits
KSampler ── LATENT ──┐
├─ ClarkAirVAEDecode ── IMAGE ── SaveImage
VAELoader ── VAE ────┘
In the example workflow it's the fixed tail: nothing downstream of it matters to your results except your choice of output. If you're iterating on prompts, this node is the part of the graph you ignore completely.
Install and troubleshooting
Same pack, same story: ComfyUI Manager ("Clark Air Sana") or git clone https://github.com/clark-labs-inc/ComfyUI-ClarkAirSana into custom_nodes, restart. First run downloads the ~1.2 GB DC-AE VAE if you haven't got it cached.
The failure modes worth knowing:
- Washed-out / milky images - check nothing is rescaling the latent in between. A second divide is the classic cause, and it's on you, not this node.
- Black output - usually a VRAM problem surfacing at decode time. Ease off the resolution (512×512 is native) or close other apps.
- CUDA errors at decode - the VAE loads at bf16 on the GPU; an 8 GB card is fine at native res, but 1024×1024 + a long queue is when small cards start complaining.
Honestly, this is the node you should be able to forget. If you're looking at it closely, something upstream went wrong.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| samples | LATENT | — | |
| vae | CLARKAIR_VAE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |