Clark Air Sana Empty Latent
A blank 32-channel canvas Sana can actually paint on
- LATENT
Every latent diffusion model needs a blank latent to start from, and Sana's is not the one ComfyUI gives you for free. This node exists for one reason: the standard EmptyLatentImage node makes a 4-channel SD-style latent, and Sana would choke on it. Sana diffuses in a 32-channel latent at 32× spatial compression - a very different canvas - so it needs this node to build the right-sized blank.
That's the whole job. It creates a tensor of zeros in Sana's latent format and hands it to the KSampler as a LATENT. In the pack's example workflow it sits between nothing and the KSampler's latent input, doing its quiet work while the loader and the Gemma nodes do the loud stuff.
The inputs
- width / height - 128 to 4096, in steps of 32, defaulting to 512×512.
- batch_size - 1 to 64; default 1. Bump this if you want several images in one queue.
The 32-aligned step is the thing to respect. Sana 1.6B is a 512px model; 512×512 is the sweet spot and what the pack's workflow uses. You can push to 1024×1024 for extra detail, but step it in multiples of 32 or the VAE and transformer start fighting over the patch boundaries. If you're on a small card, don't treat the 4096 max as an invitation.
Why 32 channels matters
The channel count is the interesting part. SD 1.5 and SDXL pack pixels into 4 latent channels; Flux uses 16; Sana's DC-AE autoencoder goes to 32 (VAE panel). More channels means less information thrown away when pixels get compressed, which is a big part of why a 1.6B model can hold its own against much larger ones. It's also why you can't substitute: feed Sana a 4-channel latent and you'll get noise, not a subtly wrong image.
Where it fits
The only input you'll actually touch most days is the canvas size. You wire the LATENT output into the KSampler's latent input alongside the MODEL from ClarkAirSanaLoader and the CONDITIONING from your ClarkAirGemmaEncode nodes. It's the least glamorous node in the pack and the one that's easiest to take for granted - but swap in ComfyUI's stock empty latent and your whole graph silently produces garbage, which is the classic "nothing changed and suddenly it's broken" trap.
Install and gotchas
Part of the Clark Air Sana pack: install via ComfyUI Manager ("Clark Air Sana") or git clone https://github.com/clark-labs-inc/ComfyUI-ClarkAirSana into custom_nodes, restart, and the 495 MB transformer file goes in ComfyUI/models/clark_air_sana/ (the Gemma encoder and DC-AE VAE download themselves). This node itself downloads nothing - it's pure PyTorch tensor creation, which is why it's the one node in the pack with zero install friction once the pack is in.
One honest limitation: this node is txt2img-only. It makes a blank canvas, so it's not your path for img2img - this pack is built around the KSampler text-to-image flow, and there's no image-encode node in it. If you want to edit an existing photo with Sana, you're outside this pack's scope.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 512128–4096 | — |
| height | INT | 512128–4096 | — |
| batch_size | INT | 11–64 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |