Nodes/ComfyUI-GGUF-Loader/LTX-2.3 AV Decode ⚡
ComfyUI Node

LTX-2.3 AV Decode ⚡

Joint AV latent to muxed video

By ChrisColeTech·Created about a month ago·Updated 3 days ago· 10
LTX-2.3 AV Decode ⚡
  • latent
  • vae
  • audio_vae
  • VIDEO
fps24.00
tile_size768
overlap64
temporal_size96
temporal_overlap16

LTX-2.3 samples a joint audio-video latent: one latent tensor that carries both the pixels and the soundtrack, entangled in a way that no single stock decoder understands. LTX-2.3 AV Decode is the node that unwinds it - splits the joint latent into its video and audio branches, decodes each with its own VAE, and muxes them into one VIDEO output at a single fps. It's the final step of every LTX-2.3 graph, the thing between "the sampler finished" and "a video file you can watch."

The inputs that matter

  • latent - the joint AV latent straight from LTXV23KSampler or LTXV23RefineSampler.
  • vae - the video VAE (the loader's vae output).
  • audio_vae - the audio VAE (the loader's audio_vae output). Wire these from the right ports of LTXV23ModelsLoader; swapping them produces nonsense, and the whole point of the loader's named outputs is to keep that from happening.
  • fps - default 24, the LTX-2 convention. Match it to what the prep node stamped (frame_rate) or playback drifts.

The optional tiling knobs - tile_size (768), overlap (64), temporal_size (96), temporal_overlap (16) - let the decode run in tiles instead of one giant pass. You reach for those when a long clip OOMs the VAE decode on a mid-range card; the defaults are sane for ordinary clips.

One output, VIDEO - ready for a video saver/preview node.

How it works

Under the hood it does what the by-hand graph does - core LTXVSeparateAVLatent to split the joint latent, VAE Decode on the video branch, LTXVAudioVAEDecode on the audio branch, then CreateVideo to mux - but as a single node with one fps and the tiling handled for you. The LTX-2.3 line is the point where video models stopped being silent: the audio VAE is a real decoder plus vocoder, and this node is where both halves come back together into the thing you actually want to watch.

Where it sits

LTXV23ModelsLoaderLTXV23ImgToVideo (prompt/init) → LTXV23KSampler (or the two-stage LTXV23RefineSampler) → this node → save/preview. You can build the decode by hand with core nodes instead - split, decode video, decode audio, create video - and the pack documents that path for people who want finer control. This node exists so the default graph stays five nodes long and the fps is set exactly once.

Installing it

Part of the CCTech pack:

cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
cd ComfyUI-GGUF-Loader
pip install --upgrade gguf

Restart; it's under 🤖 CCTech/LTX-2.3. No extra dependencies - it composes the same core LTX nodes ComfyUI already ships.

Gotchas

The fps you set here must match the frame_rate the prep node stamped into conditioning - mismatch shows up as audio drifting out of sync over a long clip, which looks like a generation problem when it's actually a playback convention problem. And if your decode OOMs on a long generation, the answer is the tile knobs, not a smaller latent. Start with default tiling only if you hit the wall.

Category🤖 CCTech/LTX-2.3

Inputs (8)

NameTypeDefaultDescription
latentLATENT
vaeVAEVideo VAE.
audio_vaeVAEAudio VAE.
fpsFLOAT24.001–120
tile_sizeoptINT76864–4096
overlapoptINT640–4096
temporal_sizeoptINT968–4096
temporal_overlapoptINT164–4096

Outputs (1)

NameTypeDescription
VIDEOVIDEO