Nodes/LTX-2 MLX (Apple Silicon)/LTX-2 MLX Audio Model Loader (A2V)
ComfyUI Node

LTX-2 MLX Audio Model Loader (A2V)

Loading the Audio-to-Video Pipeline

By tanis2000·Created 3 months ago·Updated 22 days ago· 3
LTX-2 MLX Audio Model Loader (A2V)
  • loras
  • pipeline
◄model_dir▾►
◄low_ramfalse►
◄custom_model_dir►

If you came here expecting the T2V/I2V loader, you want LTX2MLXModelLoader. This one is its sibling: it builds the audio-to-video pipeline, which is the mode where you hand LTX-2.3 a piece of music or a voice track and it generates video timed to it.

That sounds like a gimmick until you notice it's the thing LTX-2 actually won on. Wan, Hunyuan, Mochi - they generate silent video and you add sound in post. LTX-2 was built to put video and audio through the same diffusion process, which is why the community's strongest LTX use case became lipsync and music video rather than general-purpose clips. "Audio to video" here means the model conditions on your audio; timing lands at the frame level, so mouth shapes and beats line up the way a separate audio model never quite manages.

What it does

There is only one A2V pipeline class upstream (A2VidPipelineTwoStage), so unlike the T2V loader there's no pipeline_type to choose. This node just resolves the model directory and constructs it. Everything downstream is the same as the rest of the pack: MLX runs the model, no CUDA fp8 kernels involved, which is the whole reason this pack exists for Apple Silicon.

Two structural details are worth knowing, both of which will save you confusion later.

The output socket type is LTX2MLX_A2V_PIPELINE - a different type from the T2V loader's LTX2MLX_PIPELINE. You can't cross the wires. Drop an A2V pipeline into an LTX2MLXGenerate node and ComfyUI simply won't let you, which is the graceful version of a failure you'd otherwise have to debug inside a stack trace.

Both loaders share one pipeline cache, and it holds at most one entry. Loading this node evicts whatever the T2V loader had resident, because a 22B model doesn't fit twice in unified memory even at q4. Swapping between A2V and T2V work in the same session means paying the load cost again each time - the author measures 24-41 seconds for the transformer plus Gemma text encoder on the q4 tier, before any generation.

The inputs

  • model_dir - the same three tiers as the T2V loader: dgrauet/ltx-2.3-mlx-q4 (~12GB, 16GB+ RAM with low_ram), -q8 (~21GB, 32GB+), or the bf16 default (~42GB, 64GB+).
  • low_ram - enables block streaming so a bigger tier fits on a smaller Mac, at some speed cost. On a 16GB machine this is the switch that decides whether you run at all.
  • custom_model_dir - optional; overrides model_dir when set, as a local path or a different Hugging Face repo id.
  • loras - autogrow slots, one LTX2MLXLora per slot, same as the T2V loader. Note LoRAs are fused when the pipeline is constructed, so adding one here triggers a full reload rather than a cheap swap.

Output is a single pipeline socket, destined for LTX2MLXAudioToVideo.

Installing it

Manager, search LTX-2 MLX (Apple Silicon) - or by hand:

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

macOS on Apple Silicon is mandatory, Python 3.11+, and a ComfyUI recent enough to ship the V3 node API. The pip step pulls ltx-core-mlx and ltx-pipelines-mlx from git, so it needs git on the box and it isn't pinned to a tag. First execution downloads your chosen LTX-2.3 tier plus a Gemma 3 12B 4-bit text encoder - run hf auth login first if you'd rather not wait on a throttled anonymous download.

Troubleshooting, briefly

Non-Apple machines and Rosetta Python both fail here, with an explicit requires Apple Silicon (macOS + arm64) error at execution time rather than at startup - the pack imports the MLX pipelines lazily so that the rest of your ComfyUI still loads.

Out-of-memory on a loaded model is almost always the wrong tier plus low_ram off. q4 with low_ram enabled is the honest starting point for anything under 64GB, and it's the configuration the pack's own example uses.

And if the video doesn't line up with the audio the way you expected, that's the next node, not this one - LTX2MLXAudioToVideo has a match_audio_length toggle that decides whether the clip's length comes from your audio or from a frame count you type in. Getting that setting wrong is the most common way an A2V run goes sideways.

CategoryLTX2MLX

Inputs (4)

NameTypeDefaultDescription
model_dirCOMBO3 options: dgrauet/ltx-2.3-mlx-q8, dgrauet/ltx-2.3-mlx-q4, dgrauet/ltx-2.3-mlx
low_ramBOOLEANfalse—
custom_model_diroptSTRINGOverrides model_dir if set (local path or HF repo id).
lorasoptCOMFY_AUTOGROW_V3—

Outputs (1)

NameTypeDescription
pipelineLTX2MLX_A2V_PIPELINE—