π π £π § LTXV Spatio Temporal Tiled VAE Decode
Get a long clip out of VRAM jail
- vae
- latents
- image
You spent five minutes generating a ten-second LTX clip and then it dies on the very last step - the VAE decode - with an out-of-memory error. Infuriating, and extremely common. This node is the fix. It's the memory-safe decoder that turns your finished LTX latent into actual frames without trying to hold the whole video in VRAM at once.
Here's why video decode is the part that OOMs. LTX's VAE isn't a normal image autoencoder; it's a 3D one that compresses time as well as space - Lightricks trained "our own VAE for combined spatial and temporal compression" as the trick that made the model fast in the first place. The upside is tiny latents. The downside is that decoding them back to pixels means inflating a big block of frames simultaneously, and on a 20-second clip at real resolution that block is enormous. The plain decode node does it in one shot and falls over. This one doesn't.
How it actually works
It tiles the decode along the same two axes the VAE compressed. Spatially, it chops each frame into a grid and decodes the pieces. Temporally, it walks the clip in short chunks of frames instead of all at once. Each tile gets a small overlap with its neighbors so the seams blend instead of showing a hard grid line or a visible jump between time chunks. You trade a little speed and a little stitching overhead for a decode that fits in whatever VRAM you've got. It's the same bargain tiled VAE has always been in ComfyUI - people have decoded 2048px images on 6GB cards this way for years - just extended to the time dimension because video needs it.
The inputs that matter
Wire your vae and latents in, send image out, and mostly leave the rest alone. When you do touch it, these are the four dials:
spatial_tiles(default 4) - how many pieces to cut each frame into. Higher = less VRAM per tile, more seams to blend, a bit slower. Bump it when a big frame is what's blowing up.temporal_tile_length(default 16) - how many frames per time-chunk. Lower this when a long clip is the problem - it's the setting the plain spatial tiler doesn't have, and the whole reason this node exists.spatial_overlap/temporal_overlap(both default 1) - the blend width. Raise them if you can see tile seams or a stutter at the chunk boundaries.
Two more worth knowing: working_dtype defaults to auto, but if your frames come out black or full of NaNs, force it to float32 - video VAEs, like SDXL's before them, can overflow in fp16, and full precision is the reliable escape hatch. working_device can push the decode to cpu if you are truly out of GPU room and would rather wait than crash. And last_frame_fix is an off-by-default toggle for a known artifact on the final frame of the clip; leave it off unless your last frame specifically comes out wrong.
The single output is image - a standard IMAGE frame batch. It doesn't save anything; feed it into a Video Combine node (from the VideoHelperSuite pack) to get a playable mp4, exactly like you would after any image decode.
Installing it
It ships in Lightricks' own ComfyUI-LTXVideo pack. Easiest path is ComfyUI Manager: open Manager, Install Custom Nodes, search "LTXVideo", install, restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/Lightricks/ComfyUI-LTXVideo
then restart. The nodes land under the "LTXVideo" menu. Heads up on the pack as a whole: LTX-2/2.3 is a heavy model - the README asks for 32GB+ VRAM and 100GB+ free disk, and the required checkpoints, the latent upscalers, and the big Gemma 3 text encoder all download on first use. This decode node is precisely the tool that lets a smaller card survive the part of that workflow that would otherwise OOM.
When it goes wrong
OOM at decode is the whole reason you're here - raise spatial_tiles and drop temporal_tile_length until it fits. Visible grid lines or a hiccup between time chunks mean your overlaps are too small; nudge spatial_overlap / temporal_overlap up a notch. Black or garbled frames point at precision, so set working_dtype to float32. And don't over-tile out of caution - every extra tile is more stitching and more time, so use the loosest settings that don't crash.
One decision to make up front: if your clip is short but the resolution is what's killing you, you don't need temporal chunking at all. Reach for the lighter LTXV Tiled VAE Decode, which tiles space only and has fewer knobs. Use this spatio-temporal one when the sheer number of frames is the problem - that's the case only it solves.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| vae | VAE | The VAE to use. | |
| latents | LATENT | The latent samples to decode. | |
| spatial_tiles | INT | 41β8 | The number of spatial tiles to use, horizontal and vertical. |
| spatial_overlap | INT | 10β8 | The overlap between the spatial tiles. (in latent frames) |
| temporal_tile_length | INT | 162β1000 | The length of the temporal tile to use for the sampling, in latent frames, including the overlapping region. |
| temporal_overlap | INT | 10β8 | The overlap between the temporal tiles, in latent frames. |
| last_frame_fix | BOOLEAN | false | If true, the last frame will be repeated and discarded after the decoding. |
| working_device | COMBO | auto | The device to use for the decoding. auto->same as the latents. |
| working_dtype | COMBO | auto | The data type to use for the decoding. auto->same as the latents. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | β |