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

DiffSynth: LTX-2 Audio Video Loader

LTX-2 Audio Video Loader — the two-stage knob lives here

By modelscope·Created about a month ago·Updated a day ago· 8
DiffSynth: LTX-2 Audio Video Loader
  • model_configs
  • tokenizer_config
  • stage2_lora_config
  • vram_limit
  • pipe
◄torch_dtypebfloat16►
◄devicecuda►
◄stage2_lora_strength0.8►

LTX-2 is the one open video model that generates sound and picture together, in one model, rather than bolting an audio pass onto a silent generator. That's why it found its audience in lip-sync and music video instead of general-purpose clips, and it's why the loader for it has more than three inputs.

It's also a 19B–22B model with a big Gemma text encoder riding along, so "loading" is a real event. Plan accordingly.

Required inputs

  • model_configs - the merged list. The pack's two-stage template wires the LTX repackage files (transformer, text-encoder post-modules, video VAE decoder, audio VAE decoder, audio vocoder) plus google/gemma-3-12b-it-qat-q4_0-unquantized for the encoder.
  • torch_dtype - bfloat16 by default; float16 and float32 are also there.
  • device - cuda or cpu.

The optional inputs that matter

tokenizer_config - the tokenizer that goes with Gemma-3. In the template it's the Gemma repo with a blank origin_file_pattern, which pulls the whole folder.

stage2_lora_config - this is the interesting one. LTX-2's quality workflow is two-stage: a first pass at low resolution, then a spatial upsampler stage. The distilled LoRA used for that second stage is loaded here, as a DIFFSYNTH_MODEL_CONFIG, pointing at a file like ltx-2-19b-distilled-lora-384.safetensors.

stage2_lora_strength - default 0.8, range 0 to 10. This is the strength of that stage-2 adapter. As with any distilled LoRA, taste varies more than you'd expect: community testing on LTX-2's distilled adapters has used strengths down around 0.4–0.5 across the two sampler stages, so if 0.8 comes out looking over-cooked or the motion gets brittle, drop it and compare rather than assuming you broke something. There's also a matching clear_lora_before_state_two boolean on the inference node, which is where you'd drop stacked adapters before the second stage runs.

vram_limit - from the VRAM Limit node. With a 19B transformer plus a 12B-class text encoder, this is not a loader where you want to leave the budget to chance.

What you're loading, roughly

LTX-2 shipped as open weights in January 2026 at 19B, with a distilled variant and a set of LoRAs including IC-LoRA control adapters. LTX-2.3 followed in 2026 at 22B with a new VAE, better detail and cleaner audio, and it ships as ltx-2.3-22b-dev plus a distilled version. This same loader handles both - you change the ModelConfig repo, not the node. Whichever you use, the divisibility rules are model-side: width and height need to be multiples of 32, and frame counts want to be a multiple of 8 plus 1.

One licensing note before you build a business on it: LTX-2 is not Apache 2.0, despite being widely called that. It's the LTX-2 Community License - free under $10M annual revenue, hosting permitted, derivatives share-alike, and an acceptable-use policy that bans sexually explicit output.

Install

ComfyUI Manager, search 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

Then open general_ltx2_t2av_two_stage from the Template tab. That workflow's second half - the upscaler and distilled LoRA ModelConfigs feeding back into the stage-2 inputs - is much easier to copy than to derive.

Where people get burned

Treating the first queue as a normal run. Several multi-GB downloads plus a large model load; the loading screen isn't frozen, it's working.

Ignoring the divisibility rules. Odd resolutions and arbitrary frame counts are a reliable way to get garbage output or a shape error deep inside the pipeline.

Leaving the stage-2 LoRA wired while running a single-stage graph. If you're not running two passes, that adapter has no job, and the inference node's use_two_stage_pipeline flag is what decides whether it's used at all.

CategoryDiffSynth/loader

Inputs (7)

NameTypeDefaultDescription
torch_dtypeCOMBObfloat163 options: bfloat16, float16, float32
deviceCOMBOcuda2 options: cuda, cpu
model_configsDIFFSYNTH_MODEL_CONFIG_LIST—
tokenizer_configoptDIFFSYNTH_MODEL_CONFIG—
stage2_lora_configoptDIFFSYNTH_MODEL_CONFIG—
stage2_lora_strengthoptFLOAT0.80–10—
vram_limitoptDIFFSYNTH_VRAM_LIMIT—

Outputs (1)

NameTypeDescription
pipeDIFFSYNTH_PIPE—