Skip to content

Commit 6de2648

Browse files
tsvikasclaude
andcommitted
feat(ltx2): map LTX-2.3 gate_logits and prompt_adaln LoRA keys
Extend the LTX-2 NNX->Diffusers LoRA translate map so adapters that touch the per-head attention gate (`*.to_gate_logits`, all six attention types) and the prompt-conditioned AdaLN (`prompt_adaln` / `audio_prompt_adaln`) resolve to their model layers. Audited all 13 official Lightricks LTX-2.3-22b IC-LoRAs and the distilled-384 LoRA against the map: the 13 IC-LoRAs (attn + ff only) were already fully covered, and `ltx-2.3-22b-distilled-lora-384` was the ONLY one with unmatched keys - 294/1660, exactly the gate_logits + prompt_adaln families added here. With these entries it fuses 1660/1660; the IC-LoRAs are unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VtSdP6a6GNHMn9CBWhieQH
1 parent 9616d1c commit 6de2648

1 file changed

Lines changed: 13 additions & 0 deletions

File tree

src/maxdiffusion/loaders/lora_conversion_utils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,31 +716,37 @@ def translate_ltx2_nnx_path_to_diffusers_lora(nnx_path_str, scan_layers=False):
716716
"attn1.to_k": "attn1.to_k",
717717
"attn1.to_v": "attn1.to_v",
718718
"attn1.to_out": "attn1.to_out.0",
719+
"attn1.to_gate_logits": "attn1.to_gate_logits", # per-head gating Linear
719720
# Audio Self Attention (audio_attn1)
720721
"audio_attn1.to_q": "audio_attn1.to_q",
721722
"audio_attn1.to_k": "audio_attn1.to_k",
722723
"audio_attn1.to_v": "audio_attn1.to_v",
723724
"audio_attn1.to_out": "audio_attn1.to_out.0",
725+
"audio_attn1.to_gate_logits": "audio_attn1.to_gate_logits",
724726
# Audio Cross Attention (audio_attn2)
725727
"audio_attn2.to_q": "audio_attn2.to_q",
726728
"audio_attn2.to_k": "audio_attn2.to_k",
727729
"audio_attn2.to_v": "audio_attn2.to_v",
728730
"audio_attn2.to_out": "audio_attn2.to_out.0",
731+
"audio_attn2.to_gate_logits": "audio_attn2.to_gate_logits",
729732
# Cross Attention (attn2)
730733
"attn2.to_q": "attn2.to_q",
731734
"attn2.to_k": "attn2.to_k",
732735
"attn2.to_v": "attn2.to_v",
733736
"attn2.to_out": "attn2.to_out.0",
737+
"attn2.to_gate_logits": "attn2.to_gate_logits",
734738
# Audio to Video Cross Attention
735739
"audio_to_video_attn.to_q": "audio_to_video_attn.to_q",
736740
"audio_to_video_attn.to_k": "audio_to_video_attn.to_k",
737741
"audio_to_video_attn.to_v": "audio_to_video_attn.to_v",
738742
"audio_to_video_attn.to_out": "audio_to_video_attn.to_out.0",
743+
"audio_to_video_attn.to_gate_logits": "audio_to_video_attn.to_gate_logits",
739744
# Video to Audio Cross Attention
740745
"video_to_audio_attn.to_q": "video_to_audio_attn.to_q",
741746
"video_to_audio_attn.to_k": "video_to_audio_attn.to_k",
742747
"video_to_audio_attn.to_v": "video_to_audio_attn.to_v",
743748
"video_to_audio_attn.to_out": "video_to_audio_attn.to_out.0",
749+
"video_to_audio_attn.to_gate_logits": "video_to_audio_attn.to_gate_logits",
744750
# Feed Forward
745751
"ff.net_0": "ff.net.0.proj",
746752
"ff.net_2": "ff.net.2",
@@ -778,6 +784,13 @@ def translate_ltx2_nnx_path_to_diffusers_lora(nnx_path_str, scan_layers=False):
778784
"caption_projection.linear_2": "diffusion_model.caption_projection.linear_2",
779785
"audio_caption_projection.linear_1": "diffusion_model.audio_caption_projection.linear_1",
780786
"audio_caption_projection.linear_2": "diffusion_model.audio_caption_projection.linear_2",
787+
# Prompt-conditioned AdaLN
788+
"prompt_adaln.linear": "diffusion_model.prompt_adaln_single.linear",
789+
"prompt_adaln.emb.timestep_embedder.linear_1": "diffusion_model.prompt_adaln_single.emb.timestep_embedder.linear_1",
790+
"prompt_adaln.emb.timestep_embedder.linear_2": "diffusion_model.prompt_adaln_single.emb.timestep_embedder.linear_2",
791+
"audio_prompt_adaln.linear": "diffusion_model.audio_prompt_adaln_single.linear",
792+
"audio_prompt_adaln.emb.timestep_embedder.linear_1": "diffusion_model.audio_prompt_adaln_single.emb.timestep_embedder.linear_1",
793+
"audio_prompt_adaln.emb.timestep_embedder.linear_2": "diffusion_model.audio_prompt_adaln_single.emb.timestep_embedder.linear_2",
781794
# Connectors
782795
"feature_extractor.linear": "text_embedding_projection.aggregate_embed",
783796
}

0 commit comments

Comments
 (0)