Sana Resolution Conditioning
Telling Sana what canvas it's painting for
- cond
- cond
Sana is Nvidia's small, fast diffusion transformer - 0.6B and 1.6B parameter variants, Gemma2 as the text encoder instead of CLIP or T5, and a heavily compressed 32-channel, /32 latent space that needs its own dedicated VAE. Worth knowing before you invest time here: this pack's own README carries a caution banner recommending you try the official fork maintained by the Sana developers instead, because "many people have had issues" with this implementation. That lines up with what's actually out there - one recent report describes the Sana checkpoint loader in this pack showing an unusable "null" field and only recognizing the original 0.6B/1.6B checkpoints, not the newer Sana1.5 releases. Treat this as workable for the original models if you're patient, not a maintained path to whatever Sana ships next.
This node is Sana's resolution micro-conditioning step.
What it does
If you've used SDXL, you've already seen this trick: SDXL bakes the target width and height into the conditioning itself, not just into the latent's shape, so the model has explicit information about the canvas it's generating for. Sana does the same thing - it was trained across multiple resolution "buckets," and this node injects the target resolution into the conditioning signal so generation behaves correctly at whichever bucket you're aiming for.
- cond - your CONDITIONING, from Sana Text Encode.
- width / height - INT, default
1024, range0–8192. These should match the actual latent size you're generating at - ideally one of Sana's trained resolution buckets rather than an arbitrary number (pair this with Sana Resolution Select to get a valid pair automatically).
Output: cond - feed straight into your KSampler in place of plain text conditioning.
Installing it
Part of the whole ComfyUI_ExtraModels pack (ComfyUI Manager: search "Extra Models for ComfyUI," or git clone https://github.com/city96/ComfyUI_ExtraModels into custom_nodes plus pip install -r requirements.txt, then restart). Sana itself needs: the checkpoint from the Sana Hugging Face repo, Gemma2 loaded through this pack's Gemma Loader node (auto-downloads from Hugging Face - the 4-bit quantized model on CPU is recommended if you're low on memory), and Sana's own dedicated VAE (not a standard SD/SDXL VAE - its 32-channel latent needs a matching one, downloaded and renamed per the README).
Common issues
Feeding this node an arbitrary width/height pair rather than one of Sana's actual trained buckets is the most likely source of bad output - soft, warped, or just off-model results. Use Sana Resolution Select to pick a valid pair instead of typing numbers by hand.
Beyond that, given the pack's own stated caution about Sana support quality, if something breaks in a way that doesn't look like a setup mistake on your end, it's worth checking whether the official Sana devs' fork already has it fixed before sinking hours into debugging this implementation specifically.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| cond | CONDITIONING | — | |
| width | INT | 10240–8192 | — |
| height | INT | 10240–8192 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| cond | CONDITIONING | — |