🎬 LTXV 2.3 Video-to-Audio — ComfyUI Workflow
Add synced audio to your silent videos using LTXV 2.3's native joint audio-video generation
Take any silent video and let LTXV 2.3 generate natural-sounding audio that actually matches what's happening on screen — footsteps, ambience, impacts, and more. Unlike tools that bolt on a separate audio model, LTXV 2.3 generates audio and video from within a single Diffusion Transformer model, so sync happens at the model level rather than in post.
✨ What This Does
This workflow uses LTXV 2.3's native joint audio-video generation — audio and video are produced together inside a single Diffusion Transformer (DiT) model, with sync happening at the model level. Feed it a silent MP4, describe the sound you want, and get back a video with synced audio baked in. No separate audio model, no manual alignment.
🚀 How to Use
Load the workflow — drag the
.jsonfile into ComfyUI or use Load from the menu.Input your video — connect your silent video file to the Load Video node. MP4 works best; keep it under 10 seconds to start.
Write your audio prompt — describe the sounds you want (e.g.
"footsteps on gravel, distant wind, birds chirping"). Be specific — it responds well to descriptive prompts.Set your seed — different seeds give noticeably different results, so worth exploring a few.
Run — hit Queue Prompt and grab a coffee. The output video with merged audio will appear in your
output/folder.
🔄 Where This Fits in Your Workflow
For best results, run this after frame interpolation but before upscaling:
Generate Video → Frame Interpolation → 🎧 Add Audio (here) → UpscaleWhy this order matters (Mostly speed of use):
After interpolation — interpolation can subtly alter frame timing and motion cadence. Running audio generation on the interpolated video means the model is analyzing the final motion, giving you tighter sync.
Before upscaling — upscalers don't touch the audio track, so it doesn't matter where upscaling falls from an audio perspective. But keeping it last means you're not running a heavy upscale pass on a clip you might still tweak.
💡 If you're using a temporal upscaler (like LTXV's own latent upscaler), treat it the same as interpolation — add audio after it.
🍆💦 Sex Sounds Loras used in examples
🎧 Example Inputs & Outputs
Input VideoPromptResultPerson walking through forest"footsteps on dry leaves, wind through trees, distant birdsong"Footsteps land on every step, ambient nature bed underneathObject falling and hitting floor"heavy thud, small objects scattering, room reverb"Impact synced to hit frame, natural room echoWaves on a beach"ocean waves crashing, gentle sea foam, seagulls"Continuous wave sync matched to motion rhythm
💡 Tip: The model pays attention to motion intensity. Fast movement + an energetic prompt = much better results than a mismatch between the two.
⚠️ Known Limitations & Tips
Limitations
I
Works best on videos under 10 seconds — longer clips may drift out of sync toward the end.
Speech and singing are not reliably reproduced — this shines on environmental and ambient sound, not voice.
Tips that actually help
🎯 Be descriptive in your prompt —
"sharp metallic clang with reverb"beats"metal sound"every time.🔁 Run multiple seeds — audio generation has real variance; what sounds off on seed 42 might be perfect on seed 7.
🎚️ Check your input video FPS — the workflow assumes 24fps by default. If your video is a different frame rate, adjust the FPS node accordingly or sync will be off.
Description
This is a first release
FAQ
Comments (28)
excited to use this, just trying to figure out how to use, or if you have a sample workflow with it already implemented in the workflow.
I hear Donald Duck during the first example BJ.
This worflow is amazing.
V2V with gen audio is good for generating different versions of the clip but this one keeps the original video intact while only adding generated audio which works quite well.
Ah this is exactly what I'm experimenting with at the moment. Well, a few WAN steps to fill in the LTX dynamics shortcomings, then a full LTX takeover. Perhaps this is different. I'm commenting prematurely. Bad habit. I will take a look and see what you have wrought.
I hope it works well for you
A small workflow-level question, I did tests with videos that were more or less long. From 7 seconds through 27 seconds, I certainly have sound and that corresponds to the action. But my question is, can we have Lip-sync? Because at no time was there lip synchronization. So I wanted to know if that was possible?
I'm not totally sure if v2v can add talking or singing lip sync. It might be possible.
I’m not sure if you’ve encountered the following issue: we all know that WAn2.2 generates 81 frames for a 5-second video, and this workflow runs normally. However, when I use ComfyUI or other video-splitting tools to split 5-second or 10-second videos, they respectively contain 80 and 160 frames — always missing one frame. Running this workflow then throws an error due to the missing frame. I’ve also tried 6-second and 8-second clips — they all exhibit the same problem. My current workaround is to retrieve the last frame using KJ's "batch image extraction" node, then combine the original video with this final frame through image-batch merging to make the workflow run successfully. Although this method is somewhat cumbersome, it does solve the problem. This issue has been resolved, but I still face other unresolved problems — for example, at the end of a 10-second video, the frame count may be 158 or even fewer. This makes the above method ineffective.
Currently, my approach is to forward-truncate the video to obtain a complete 160-frame clip, then run the above method to generate audio. I then separately save the 10-second audio, manually trim and merge the missing 10-second video fragment afterward. Overall, I find this process very tedious. I hope you can come up with a better solution. Thank you for your outstanding work!
Additionally, I suggest adding a frame-checking condition in the formula calculation node: if frames are missing, you could automatically pad the missing frames to complete the required frame count. I don’t actually care about the final output video from this workflow — I’ve noticed that it degrades the original video quality. What I need is to generate the audio using the original video frames, interpolate and upscale the video resolution, and then merge it with the generated audio.
Therefore, even if the missing frames are simply repeated copies of the last frame — for example, if a 10-second video only contains 158 frames, I could extract the final frame and duplicate it three times to make up 161 frames — it’s acceptable for me because I won’t use the output video. The original video’s quality remains intact.
Yesterday, I spent a lot of time researching ways to fix this, but I haven’t found a solid solution. I hope you can help resolve this.
When I add audio to a video using this Workflow, the output video quality becomes extremely degraded — the visuals get noticeably worse compared to the original input.
Is this expected behavior, or am I doing something wrong?
If there are any settings or steps to prevent this quality loss, I’d really appreciate your guidance.
that shouldn't be happening the video is completely masked out on output. I need a ton of information before i can help. Which version of LTX, safetensors, gguf, audio video vae, frame count on video. Even then that doesnt make sense the only reason that the video is processed is to create that sounds not modify it at all.
Hello,
Here is the information you requested:
- LTX version: LTX 2.3 (22B dev)
- Model format: safetensors (FP8 scaled)
- Main model: ltx-2.3-22b-dev_transformer_only_fp8_scaled.safetensors
- Video VAE: LTX23_video_vae_bf16.safetensors
- Audio VAE: LTX23_audio_vae_bf16.safetensors
- Text encoder: gemma_3_12B_it_fp4_mixed.safetensors
- Input video frame rate: 24 fps(5sec)
By default, when I run the workflow without any changes, the output suffers from severe quality degradation:
an original 10MB video is reduced to only 118KB with heavy compression artifacts, making it almost unusable.
After the following adjustments, the result improved considerably:
- Changed the image scale node from scale_by 0.5 to 1.0
- Switched the output format from h264-mp4 to nvenc_hevc-mp4 with a bitrate of approximately 15 Mbps
The output file size is now around 3MB, and the visual quality is noticeably better.
However, compared to the original 10MB video, there is still some quality loss.
@gomiPath huh weird. Maybe its dependent on the original size of the video. I would think people would be complaining more. I'll fix this in the next release.
Also make sure your total frames is a multiple of 8+1 so 81, 121 some thing like that could be an issue as well. Another thing to fix in the next release.
just connect the original video loader image output to the image input on the video combine node.
@colliscamire872 That's what I was gonna say XD
No matter what I do I keep getting this error (or similar) I tried different resolutions too :
RuntimeError: The size of tensor a (1584) must match the size of tensor b (213632) at non-singleton dimension 2
- Main model: ltx-2.3-22b-dev_transformer_only_fp8_scaled.safetensors
- Video VAE: LTX23_video_vae_bf16.safetensors
- Audio VAE: LTX23_audio_vae_bf16.safetensors
- Text encoder: gemma_3_12B_it_fp4_mixed.safetensors
- Input video frame rate: 24 fps at 81 total frames.
- Resolution 576x1024 (same as sample video)
Chatgdp thinks its "video latent has one frame/shape count, audio latent has another, then LTXVConcatAVLatent produces a bad combined latent for the sampler."
I usually see some thing like that when my text encoder is not setup correctly. You may need to check all the hashes of the files you have with the huggingface source.
Do you have Smz custom nodes installed on your comfyui ?
if yes, here you go
If someone have the mismatch size tensor error and it drive you crazy cuz you'r 100% sure everything is in the right place and you have the good files, for my case it was caused by SmZ nodes, you can get rid of it or use this fix https://github.com/shiimizu/ComfyUI_smZNodes/issues/135#issuecomment-3765624703
If not that maybe it's the same error as the SmZ nodes
Comfyui load model differently compared to some custom nodes and with ltx 2.3 you get this error for no reason even if you don't use those particular nodes in your Ltx 2.3 workflow.
Try to find which custom nodes use the old way of models loading and try to delete them for testing.
@HmNike Yeah that was likely the problem. I renamed the folder though and it still didn't work but I didn't "remove it" maybe if I followed this it would have fixed it. But I ended up reinstalling my Comfyui and it started working. But I do believe this may have been what was causing it.
@acdowis yeah you need to atleast move the folder outisde of custom nodes or delete it, rename dosen't work, the fix on the github work for me, I need those nodes for another workflow and I hate having two instal of comfyui
@HmNike after I installed smznodes it broke again with the same error. Thanks this worked! You saved me a lot of time and troubleshooting as I really wanted LTX audio to work. Thank you!!
Hey. this is such a nice little piece, thank you. But I wanted to use it with a Lora instead of your "deepthroat" lora, and it crashed :
RuntimeError: shape '[64, 8192]' is invalid for input of size 61288
For example, I was trying to use the 'hentai voice' lora we can find here.
Oh and also... When I try to connect this to my workflow so that I can generate Wan and Ltx sound in one go... Well, it only generates 1 frame of sound and I really can't find out why. I connected the final output videos to be injected in your piece of workflow...But it seems like it only takes the first 1 frame
<3 OP. This workflow is great. Just make sure to bypass/delete the resize node near the start. Idk if this mattered but I dropped cfg from 3 to 1. I used this generic prompt:
"a young vulnerable blonde woman, the woman is masturbating, she says "oh no, please not yet" she moans and orgasms, a very faint sound of a wet splash is heard as her cum lands on her body. she moans repeatedly"
hey possible to get upgraded version of this with more detailing