Nodes/DiffSynth-ComfyUI/DiffSynth: LTX-2 Audio Video Inference
ComfyUI Node

DiffSynth: LTX-2 Audio Video Inference

LTX-2 Audio Video Inference — the whole node, including retake

By modelscope·Created about a month ago·Updated a day ago· 8
DiffSynth: LTX-2 Audio Video Inference
  • pipe
  • input_images
  • in_context_videos
  • retake_video
  • retake_audio
  • video
  • audio
◄prompt►
◄seed0►
◄num_inference_steps30►
◄height512►
◄width768►
◄negative_prompt►
◄denoising_strength1.0►
◄input_images_indexes0►
◄input_images_strength1.0►
◄in_context_downsample_factor2►
◄retake_video_regions►
◄audio_sample_rate48000►
◄retake_audio_regions►
◄num_frames121►
◄frame_rate24►
◄auto_durationfalse►
◄auto_duration_min_seconds1.0►
◄auto_duration_max_seconds20.0►
◄audio_onlyfalse►
◄cfg_scale3.0►
◄tiledtrue►
◄tile_size_in_pixels512►
◄tile_overlap_in_pixels128►
◄tile_size_in_frames128►
◄tile_overlap_in_frames24►
◄use_two_stage_pipelinefalse►
◄stage2_spatial_upsample_factor2►
◄clear_lora_before_state_twofalse►
◄use_distilled_pipelinefalse►

LTX-2 generates picture and sound in one pass, which makes it the only open model that can hand you a talking head or a sung chorus already in sync. It's also the reason this node takes about thirty inputs when Wan's takes six. Most of them you'll never touch. The ones you will touch are worth understanding, because two of them - retake and the two-stage pipeline - are the features you can't get anywhere else.

The required six

pipe, prompt, seed, num_inference_steps (default 30), height, width. The template runs 1024×1536. Keep height and width on multiples of 32 - the VAE's spatial compression will not forgive you - and keep the frame count on a multiple of 8 plus 1.

Getting an image or video in

  • input_images (IMAGE) with input_images_indexes and input_images_strength - this is image-to-video. input_images_indexes is a comma-separated string of frame indices ("0" for the first frame, which is the usual case), and input_images_strength (default 1.0) is how hard the conditioning holds. Wire the same frames in as a batch and you can pin more than one anchor.
  • denoising_strength (default 1.0) - applies when you're conditioning on existing material.
  • in_context_videos (a wildcard socket) with in_context_downsample_factor (default 2) - in-context video conditioning, the path LTX-2's IC-LoRA control adapters use. Feed reference video in context and the model conditions on it rather than on a per-frame hint.

Retake - the good part

This is effectively a built-in re-roll for a window of a finished clip, and it's why people making music videos like this pack:

  • retake_video plus retake_video_regions - hand back the clip you already generated and a region (a comma-separated set of frame ranges) and only that stretch gets redone, conditioned on everything around it.
  • retake_audio plus retake_audio_regions and audio_sample_rate (default 48000) - the same trick for the soundtrack.

Audio artefacts and fumbled words were among the loudest complaints about LTX-2's early audio, and retake is the tool aimed at exactly that. If one line of dialogue comes out mumbled, you don't regenerate the take; you retake two seconds.

Timing

num_frames defaults to 121, frame_rate to 24 - five seconds, which is the shape this model likes. auto_duration (default false) hands the clip length to the model, bounded by auto_duration_min_seconds (1) and auto_duration_max_seconds (20) - that ceiling being the family's headline, since LTX-2 does up to twenty seconds with audio in one model.

audio_only skips the video side and returns just sound - text-to-audio from the same weights.

Two-stage, distillation and tiling

use_two_stage_pipeline (the template has it on) runs a first sampler pass at reduced resolution and then hands off to the spatial upscaler, with stage2_spatial_upsample_factor (default 2) controlling the scale-up. The distilled LoRA for that second stage was configured on the loader (stage2_lora_config, stage2_lora_strength), and clear_lora_before_state_two drops stacked adapters before stage two so your first-stage LoRAs don't contaminate the refine pass.

use_distilled_pipeline switches to the distilled path, which is the fast one - 8 steps, CFG 1 is the community's working recipe rather than a compression of your usual 30 steps at CFG 3.

tiled (on by default here), tile_size_in_pixels (512), tile_overlap_in_pixels (128), tile_size_in_frames (128), tile_overlap_in_frames (24) - tiled decoding, which is how a 19B video model decodes a long clip without needing the whole latent resident. If you're chasing a VRAM ceiling, shrink the tiles; if you're chasing a seam, grow the overlap.

cfg_scale defaults to 3.0, which is the dev model's value. Pair it with step count honestly: CFG 3 at 30 steps is the dev recipe, CFG 1 at 8 steps is the distilled one, and mixing them gets you burnt output or mush.

Outputs

Two: video (an IMAGE batch, ready for any ComfyUI video combine node) and audio (an AUDIO). The audio's sample rate is read from the loaded pipeline's own vocoder rather than hard-coded, so what comes out is what LTX-2 actually generated.

Install

ComfyUI Manager → DiffSynth-ComfyUI → install → restart, or:

pip install git+https://github.com/modelscope/DiffSynth-Studio.git
cd ComfyUI/custom_nodes && git clone https://github.com/modelscope/DiffSynth-ComfyUI.git

Where people get burned

CFG 3 with the distilled pipeline. Double guidance on a guidance-distilled model - slow, over-contrasted and worse. One or the other, not both.

Odd resolutions and arbitrary frame counts. Multiples of 32 and 8n+1, every time.

Expecting Apache 2.0. LTX-2 is under Lightricks' community license: free below $10M annual revenue, hosting allowed, derivatives share-alike, and explicit content banned by an acceptable-use policy attached to the license. The weights aren't filtered; the paper terms are the terms.

Regenerating a whole clip to fix three seconds. That's what retake is for.

CategoryDiffSynth/inference

Inputs (34)

NameTypeDefaultDescription
pipeDIFFSYNTH_PIPE—
promptSTRING—
seedINT00–4294967295—
num_inference_stepsINT301–200—
heightINT51264–4096—
widthINT76864–4096—
negative_promptoptSTRING—
denoising_strengthoptFLOAT1.00–10000—
input_imagesoptIMAGE—
input_images_indexesoptSTRING0—
input_images_strengthoptFLOAT1.00–10000—
in_context_videosopt*—
in_context_downsample_factoroptINT20–4294967295—
retake_videooptIMAGE—
retake_video_regionsoptSTRING—
retake_audioopt*—
audio_sample_rateoptINT480000–4294967295—
retake_audio_regionsoptSTRING—
num_framesoptINT1211–1000—
frame_rateoptINT240–4294967295—
auto_durationoptBOOLEANfalse—
auto_duration_min_secondsoptFLOAT1.00–10000—
auto_duration_max_secondsoptFLOAT20.00–10000—
audio_onlyoptBOOLEANfalse—
cfg_scaleoptFLOAT3.00–10000—
tiledoptBOOLEANtrue—
tile_size_in_pixelsoptINT5120–4294967295—
tile_overlap_in_pixelsoptINT1280–4294967295—
tile_size_in_framesoptINT1280–4294967295—
tile_overlap_in_framesoptINT240–4294967295—
use_two_stage_pipelineoptBOOLEANfalse—
stage2_spatial_upsample_factoroptINT20–4294967295—
clear_lora_before_state_twooptBOOLEANfalse—
use_distilled_pipelineoptBOOLEANfalse—

Outputs (2)

NameTypeDescription
videoIMAGE—
audioAUDIO—