LTX-2.3 Img/Audio to Video ⚡
T2V, I2V, A2V or all four — one prep node for LTX-2.3
- clip
- vae
- audio_vae
- image
- reference_audio
- positive
- negative
- latent
LTX-2.3's big trick is that one model does text-to-video, image-to-video, audio-to-video, and the combination - all from the same joint audio-video machinery. LTX-2.3 Img/Audio to Video is the prep node that picks which of those you're doing: it encodes your prompt, builds the latent, attaches a first frame and/or a reference audio clip, and stamps the noise masks that tell the sampler what to keep. Outputs positive, negative and latent, ready for the pack's LTXV23KSampler.
Which mode you're in
The mode is decided entirely by which inputs you connect - there's no mode dropdown:
- Text-to-video: leave both
imageandreference_audiounconnected. - Image-to-video: connect
image- the first frame, resized and center-cropped towidth×heightright here, so don't pre-scale it upstream.image_strength(default 0.7, the official value) controls how much of the init image to keep; 1.0 locks the first frames hard. - Audio-to-video (lip-sync): connect
reference_audio- the voice clip. The audio is encoded and the video length derives from the clip whenlength_from_audio(default on) is set. - Image + audio: connect both. This is the official IA2V recipe - a face photo plus a reference voice becomes a lip-synced clip, which is the whole talking-head pipeline.
The inputs that matter
clip- from the loader'sclipoutput.vaeis the loader's video VAE,audio_vaeits audio VAE - the tooltips on both say so, and the loader names them so you can't mix them up.prompt- "describe the scene and its motion. A caption, not an instruction" - LTX wants a description, not a command.width(768) /height(512) /length(121, in frames) - the default 121 is an8k+1tile (9, 97, 121...), andlengthis ignored whenlength_from_audiois on.frame_rate- 24, the LTX-2 convention. Match it in the decode/save step or playback drifts.
Outputs: positive, negative, latent - into LTXV23KSampler.
Why this shape
In the stock core LTX path you assemble these pieces from several nodes; this pack's LTX-2.3 fork collapses prep into one node so the default graph stays short - loader → this → sampler → decode. The audio-encoding and noise-mask-locking that make IA2V work (audio encoded, video length from the clip) is the kind of thing that's easy to get subtly wrong by hand and reliable when the node owns it. It's a caption-to-video workflow in its most compressed form: type a line, drop a photo and a voice, sample, watch.
Installing it
Same pack:
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
cd ComfyUI-GGUF-Loader
pip install --upgrade gguf
Restart; under 🤖 CCTech/LTX-2.3. No extra dependencies - it builds on ComfyUI's native LTX-AV machinery.
Gotchas
The two that actually bite: pre-scaling the image to a different aspect ratio than width/height (the node center-crops anyway, so scale upstream and you lose framing you thought you'd set), and forgetting to match frame_rate at the decode end - LTX clips drift audibly when the playback convention disagrees with the stamped rate. And if you connect reference_audio, length stops mattering; size the clip by editing the audio, not the frame count.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| vae | VAE | The loader's video_vae output. | |
| audio_vae | VAE | The loader's audio_vae output. | |
| prompt | STRING | Describe the scene and its motion. A caption, not an instruction. | |
| negative_prompt | STRING | — | |
| width | INT | 76864–16384 | — |
| height | INT | 51264–16384 | — |
| length | INT | 1219–16384 | Frames; 8k+1 tiles exactly (9, 97, 121...). Ignored when length_from_audio is on. |
| frame_rate | FLOAT | 24.001–120 | 24 is the LTX-2 convention. Match this in CreateVideo or playback drifts. |
| batch_size | INT | 11–4096 | — |
| imageopt | IMAGE | First frame. Resized and CENTER-CROPPED to width x height here - do not scale it upstream. | |
| reference_audioopt | AUDIO | — | |
| image_strengthopt | FLOAT | 0.700–1 | i2v only. How much of the init image to keep. 0.7 is the official value; 1.0 locks the first frames hard. |
| length_from_audioopt | BOOLEAN | true | With reference_audio: size the video to the clip. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |