LTX Audio to Video π€β‘οΈπ¬
Lip-sync a still photo with audio
- image
- audio
- frames
- video
- fps
This is the node most people install this pack for. You feed it a still image and an audio clip, and it hands back a video of that person (or character, or puppet) talking - mouth shapes synced to the words. No local model, no VRAM, no 22GB text encoder to babysit. Everything renders on Lightricks' hosted LTX-2.3 API, and the only thing you need to buy is the API key.
If that "everything renders remotely" part reads like a red flag to you, you've been paying attention. This is a pure API-wrapper node: your image, your audio, and your prompt all leave your machine and go to api.ltx.video. That's the trade - a 30-60 second server render instead of setting up LTX-2.3 locally, which needs a real GPU and a big download. For a quick talking-head test or a draft for a client, it wins. For a production pipeline, you'll probably end up running the open weights locally and keeping your data home.
What it actually does
The node does the boring plumbing so you don't have to think about it:
- Takes your
image(a ComfyUI IMAGE tensor) and JPEG-encodes it, auto-resizing anything over 1920px. - Takes your
audio- an AUDIO tensor, so connect aLoad Audionode here - and converts it to MP3. It tries ffmpeg first, then torchaudio, then a pure-Python fallback. - Uploads both to LTX's own cloud storage and POSTs to
/v1/audio-to-video. - Downloads the MP4 into ComfyUI's
output/folder, decodes it back into a frame tensor, and hands you the lot.
The inputs that matter
- api_key - from ltx.video/api-keys. Without it, the node just raises "LTX API key is required."
- image - the face to animate.
- audio - the speech track. Note the type is AUDIO, not a file path; the README's "audio_path" talk is stale, the code wants an audio node's output.
- prompt - describes the motion/scene. The default ("A person speaking naturally, slight head movement, realistic lip sync") is a fine starting point.
Worth setting: model (ltx-2-3-pro by default - note there's no fast option here, only the legacy ltx-2-pro as an alternative, so budget for pro render times), resolution (only 1080x1920 or 1920x1080 - the API refuses everything else), and guidance_scale (CFG, default 7.5).
Outputs: frames (IMAGE), video (VIDEO - previews natively in ComfyUI), and fps (FLOAT, always 25). The video file is saved under output/ as ltx_audio_to_video_<timestamp>.mp4.
Install
Via ComfyUI Manager (search "comfyui-ltx-node"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/PauldeLavallaz/comfyui-ltx-node
pip install requests pillow
Restart ComfyUI. The only real dependency is requests; pillow for image handling. If you want the best audio-conversion path, make sure ffmpeg is on your PATH - without it, the node falls back to slower libraries, and some OGG/WAV sources only convert cleanly through ffmpeg.
Where people get burned
- Only two resolutions. Don't try to push audio-to-video to 4K; the API rejects it. If you need bigger, upscale the result.
- AUDIO input, not a path. The most common "why won't it run" is wiring in a filename instead of a Load Audio node's output.
- It's metered. You pay per call. Test with short audio and accept that each failed run costs you a few cents.
- Sync is good, not magic. LTX-2.3's audio sync is genuinely the model's selling point, but early hosted-API reports noted audio fumbles and artifacts. Keep the audio clean and short-ish, and be ready to retake.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | LTX API key from ltx.video/api-keys | |
| image | IMAGE | β | |
| audio | AUDIO | Connect a Load Audio node here. | |
| prompt | STRING | A person speaking naturally, slight head movement, realistic lip sync. | β |
| modelopt | COMBO | ltx-2-3-pro | 2 options: ltx-2-3-pro, ltx-2-pro |
| resolutionopt | COMBO | 1080x1920 | Portrait or landscape. Auto-detected from image if omitted. |
| guidance_scaleopt | FLOAT | 7.51β20 | CFG scale. Higher = follows prompt more strictly. Default 9 when image provided. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | β |
| video | VIDEO | β |
| fps | FLOAT | β |