TT VAE Decode (Tiled)
Decode huge latents on a small card
- vae
- latent
- IMAGE
VAE decoding is the sneaky VRAM killer. Your sampler handled a 2048px latent fine, and then the decode step tries to materialize the full pixel image at once and your 8GB card throws in the towel. TT VAE Decode (Tiled) is the fix: it decodes the latent in tiles so the VAE only ever processes a piece at a time, letting you decode big renders - or batch a lot of small ones - on hardware that can't hold the whole thing. Swap it in where a native VAEDecode would be and nothing else changes.
The mechanism is ComfyUI's tiled decode wrapped with the details handled. It reads the latent, splits it into tile_width × tile_height chunks (defaults 512×512), decodes each with overlap (default 64) so the tile edges blend instead of showing seams, then reassembles the full image. The node divides the tile sizes by the VAE's spatial compression factor internally - SDXL's VAE is 8x, so a 512 "tile" is a 64×64 latent patch - which means the numbers you type are pixel dimensions, not latent dimensions. No mental math.
The circular toggle is the genuinely interesting option and it's worth a paragraph. It's off by default; turn it on and the decoder switches every Conv2d layer in the VAE to circular padding before decoding. Circular padding makes the left edge of the image match the right edge - which is exactly what you want for seamless 360° panoramas and anything that must wrap horizontally. It's a niche trick, but it's the difference between a panorama with a visible seam at the join and one that loops cleanly. For normal images, leave it off (it slightly changes how edges are handled and isn't free).
Inputs that matter:
tile_width/tile_height- the pixel size of each decode tile. 512 is the safe default; drop toward 256 for very tight VRAM.overlap- how much neighboring tiles share. 64 is fine for most images; raise it if you see faint grid seams at tile boundaries.circular- on for wrapping panoramas, off otherwise.
Inputs: vae and latent. Output: a single IMAGE - a standard type, so it feeds any preview, save, or upscale node.
Install is the pack standard:
cd ComfyUI/custom_nodes
git clone https://github.com/tenser-tensor/ComfyUI-TenserTensor
or search "TenserTensor" in ComfyUI Manager and restart.
The realistic tradeoffs: tiled decode is slower than a single-shot decode (more passes, plus the overlap is decoded twice), so on a card that can hold the image whole, the native VAEDecode is still faster - use tiling when you have to, not reflexively. And while tiling prevents OOM, it can occasionally soften tile-boundary areas on very low overlap settings; that's what overlap is for. If your decode comes out looking patched, bump overlap before you shrink tiles.
Same pack-wide note as everywhere: this V1 class is marked deprecated as the author migrates to API V3. It works today, and for a VRAM-tight decode it's a legitimately useful node - but new graphs can also get the same result from ComfyUI's own VAEDecodeTiled without installing anything. The TenserTensor value-add here is really the circular panorama mode and tidy defaults.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| vae | VAE | — | |
| latent | LATENT | — | |
| tile_width | INT | 51264–4096 | — |
| tile_height | INT | 51264–4096 | — |
| overlap | INT | 640–4096 | — |
| circular | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |