Apply LTX LoRA+
LTX LoRAs need per-branch strength, and this node gets it
- model
- lora_stack
- model
LTX is a different animal from SDXL or Flux. From LTX-2 onward it's a single model that generates synchronized video and audio, which means its weights have separate branches - video attention, audio attention, and everything else - and a LoRA trained on one branch doesn't need to hit the others at the same strength. Apply LTX LoRA+ is the Apply LoRA+ sibling built around exactly that split.
It takes the same flexible lora_stack input as the plain Apply LoRA+ (a LORA_STACK, a MULTI_LORA_STACK, or a newline-separated string of paths) but replaces the single global strength with three multipliers: video_strength, audio_strength, and other_strength. As it walks the LoRA's weight keys, it classifies each one - attention and feed-forward keys are video, the video_to_audio_attn / audio_attn / audio_ff.net family is audio, and anything else lands in "other" - then scales each branch independently. In practice that means you can crank the video branch of a motion LoRA to 1.2 while leaving the audio branch at 0.4, something the vanilla loader can't express at all.
When you'd actually use it
If you're running an LTX-2/2.3 two-stage workflow - the pattern the community standardized on, where a first sampler lays down structure and a second refines it - you're already juggling a distilled LoRA plus style LoRAs per stage. The KB's LTX notes recommend running the distilled LoRA at 0.4 on the first sampler and 0.5 on the second, and once you add a style LoRA on top, per-branch control stops being a nicety. Some LTX LoRAs are audio-focused (they make the model's mumbling dialogue actually usable), and you want those applied hard to the audio branch without distorting the picture. This is the node that lets you do that without a custom script.
Inputs worth knowing
model(MODEL) - the LTX model, pre-tokenization.lora_stack(*) - same loose stack format as Apply LoRA+. Feed it from a stack builder or paste paths.video_strength,audio_strength,other_strength- each 0–10, default 1.0. Set the one you care about, leave the rest at 1.
Output is a single model that plugs straight into your LTX KSampler stage. Nothing here decodes or encodes; it's pure weight math before sampling.
Installing it
Same pack, same routine - ComfyUI Manager (search "ComfyUI-FBnodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/FranckyB/ComfyUI-FBnodes.git
pip install -r ComfyUI-FBnodes/requirements.txt
Restart, done. Dependencies are av and color-matcher; no model files needed.
Where it's fiddly
The branch classification is heuristic - it keys off weight names like video_to_audio_attn - so a LoRA that was trained with an unusual naming scheme may not split cleanly, and everything it can't classify lands in other_strength. That's the knob to reach for when a stack looks wrong. And if you're on plain LTXV 0.9.x (the 2B image-only era, no audio), you don't need the audio branch at all - the plain Apply LoRA+ is simpler and fine.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| lora_stack | * | — | |
| video_strength | FLOAT | 1.000–10 | — |
| audio_strength | FLOAT | 1.000–10 | — |
| other_strength | FLOAT | 1.000–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |