ComfyUI Node

LTX-2 MLX LoRA

LoRAs for LTX-2 on MLX — Stack Them, But Know They Reload the Model

By tanis2000·Created 3 months ago·Updated 22 days ago· 3
LTX-2 MLX LoRA
    • lora
    ◄lora_name▾►
    ◄strength1.00►

    A LoRA node that doesn't load anything. This one picks a file and a strength and hands the pair to a loader, which is the only place a LoRA can actually be applied in this pack - because the MLX pipeline fuses LoRAs into the transformer weights when the pipeline is built.

    That one architectural fact explains most of the behaviour you'll notice. It also means the workflow is always the same shape: LTX2MLXLora → the loras input of LTX2MLXModelLoader (or the audio loader) → pipeline → generate.

    How it works

    The node resolves your chosen file to a full path and outputs a lora socket carrying (path, strength). The loader collects every connected LoRA - its loras input is an autogrow slot list, so you can stack as many as you have, showing up as lora_0, lora_1, and so on - and hands the paths to the upstream pipeline before the transformer is loaded. Fusing happens at transformer load time, or block-by-block at bind time when low_ram is streaming.

    The consequence: the LoRA list is part of the pipeline cache key. Change a strength, swap a file, add a second LoRA, and the pack builds a new pipeline rather than mutating the cached one. You pay the full model load again - 24-41 seconds on the q4 tier for the transformer and Gemma text encoder, plus re-fusing. So set up your LoRA stack once and render a batch, rather than nudging strength between every seed.

    The two inputs

    • lora_name - a dropdown of everything in ComfyUI's models/loras folder. That's all of it: your SDXL LoRAs, your Flux LoRAs, everything. This pack expects ComfyUI-format LTX-2 LoRAs, i.e. safetensors whose keys are namespaced diffusion_model.*. A Pony LoRA will happily appear in the list and simply not do anything useful.
    • strength - default 1.0, range -100 to 100 with a 0.01 step. That range is far wider than most LoRA loaders and you should ignore most of it. Same advice as any LoRA anywhere: start at 1.0, and if you get artifacts or the model stops listening to your prompt, come down to 0.5-0.8 before you start blaming the LoRA itself.

    Output is a single lora socket. It has exactly one valid destination: a loader's loras slot.

    A worked example

    The pack ships one, and it's a good sanity check. The crtanim LoRA - Apache-2.0, a CRT/retro-terminal look - goes into ComfyUI/models/loras, you point this node at crtanim_10000.safetensors, and you start the prompt with its trigger word:

    crtanim, a green phosphor computer terminal slowly typing out HELLO WORLD, blinking cursor, glowing scanlines
    

    examples/ltx2mlx_text_to_video_lora.json is that whole graph at 256x256 and 25 frames on the distilled pipeline. Open it, generate once, then change the prompt. Trigger words matter more than usual here - the pack's own note makes the point that the trigger is part of the deal, not optional decoration.

    Installing it

    Nothing extra for this node beyond the pack itself - ComfyUI Manager, search LTX-2 MLX (Apple Silicon), or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/tanis2000/comfyui-ltx2-mlx.git
    cd comfyui-ltx2-mlx
    pip install -r requirements.txt
    

    Then drop your LTX-2 LoRA .safetensors into ComfyUI/models/loras and hit refresh in the UI so the dropdown picks it up. macOS on Apple Silicon, Python 3.11+, and a current ComfyUI, same as the rest of the pack.

    Where people get burned

    Wrong-base LoRAs. Anything in your LoRAs folder is selectable, so the failure mode is silent: it loads, nothing errors, and the output looks exactly like the LoRA wasn't there. Check the model page - LTX-2.3 LoRAs are trained against 2.3's rebuilt VAE and latent space, and the labelling across the family is genuinely messy, since plenty of "LTX-2" resources are 2.x and behave differently. If a LoRA does nothing, that's the first thing to check, not the last.

    A/B-ing strength values. Each change rebuilds and reloads the pipeline. Fix your seed and your prompt, batch the strengths you care about, walk away.

    Budget disk. LTX LoRA files are not small - Lightricks' own distilled LoRA for 2.3 is 7GB, and community LoRAs run large too. Loading one on top of a q8 tier is real memory pressure; on a 32GB machine, drop to q4 or enable low_ram in the loader before stacking more than one.

    Missing file errors. The node resolves the path when it runs, so if you deleted or moved the safetensors after building the workflow, the error surfaces at execution time rather than at load. Re-pick it from the dropdown and move on.

    CategoryLTX2MLX

    Inputs (2)

    NameTypeDefaultDescription
    lora_nameCOMBO0 options:
    strengthFLOAT1.00-100–100—

    Outputs (1)

    NameTypeDescription
    loraLTX2MLX_LORA—