VRGDG LTX Audio Only LoRA Train Chunk
Train an LTX-2.3 voice LoRA from inside ComfyUI — no command line
- model
- audio
- model
- latest_state_path
- log_path
- dataset_audio_dir
- output_name
- completed_steps
- total_target_steps
If you've ever wanted a character's voice in LTX-2.3 - not just their face - this is the node for it. LTX-2.3 is the audio-plus-video generation model that can read text as speech, but by default it speaks with the generic model voice. Training an audio-only LoRA on dialogue clips lets you push it toward a specific timbre. That's a genuinely niche capability, and people ask for it on r/StableDiffusion ("is it possible to train a LoRA on LTX using only audio?") - the answer here is yes, and this node does it without you ever touching a terminal.
It's part of VRGameDevGirl's pack of music-video automation nodes, and it leans on a separate musubi-tuner-ltx2 install as the actual training engine. The node is the glue: it builds the dataset config, runs one chunk of training, caches text embeddings, converts the result to ComfyUI's LoRA format, and hands you back a MODEL with the LoRA optionally already applied.
How it works - the "chunk" model
You don't train a whole LoRA in one go. Each run of this node does steps_per_run steps (default 100) then saves state and stops. Re-run the graph and it picks up where it left off, until completed_steps reaches total_target_steps (default 800). That's the pattern the whole pack uses for long training runs: short, resumable chunks you can babysit. workspace_dir is where cache, logs, config and checkpoints live, so point it somewhere with free disk.
The audio side is the unusual part. You can connect an audio AUDIO input (the node copies it into a managed dataset folder), or set audio_directory to a folder of clips with matching .txt captions. audio_profile picks a recipe bundle: voice_test is a short spoken-dialogue sanity check, voice is the real spoken preset, and music gives a larger temporal budget with more capacity. Keep use_profile_defaults on until you know why you'd turn it off. audio_bucket_strategy (pad vs truncate) with audio_bucket_interval (seconds) controls how clips of different lengths are bucketed.
The inputs that actually matter
Most of the rest is standard musubi training knobs you'll recognize:
lora_target_preset- leave onaudio. That's the whole point of this node.network_dim/network_alpha- LoRA rank and alpha. 16/16 is the default and fine to start.blocks_to_swap- offloads transformer blocks to CPU to fit VRAM. The 22B LTX-2.3 DiT is heavy; start at 2 and raise if you OOM.fp8_baseandfp8_scaled- on by default and a big part of making this fit on consumer cards.musubi_root,ltx2_checkpoint,gemma_root- these default toA:/MUSUBI/...Windows paths. You must repoint them at your own musubi-tuner-ltx2 install, LTX-2.3 checkpoint, and Gemma 3 model files. This is the first thing that bites everyone.
The outputs are honest about where things stand: model (with the latest LoRA applied at strength_model if you want), latest_state_path, log_path, dataset_audio_dir, output_name, completed_steps and total_target_steps. Wire completed_steps/total_target_steps into a check node so your graph knows when training is actually done.
Install and gotchas
Install the pack via ComfyUI Manager (search "vrgamedev") or cd ComfyUI/custom_nodes && git clone https://github.com/vrgamegirl19/comfyui-vrgamedevgirl, then restart. The README's requirements.txt needs kornia, librosa, imageio. That's the easy part - the hard part is that musubi-tuner-ltx2, the LTX-2.3 checkpoint, and the Gemma encoder are all separate downloads you point this node at.
Expect it to be slow and memory-hungry; a full LTX-2.3 video LoRA runs about 7 hours on a 5090 per the community, and audio-only is still a 22B model being trained. Run voice_test first - it exists to catch a broken setup in seconds instead of hours. And if Gemma caching fails, the experimental gemma_recovery_mode toggle tries alternate cache settings before you give up.
Inputs (39)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | Base model to return downstream with the latest trained LoRA optionally applied. | |
| workspace_dir | STRING | Working folder for cache, logs, config files, checkpoints, and training state. | |
| run_name | STRING | LTXAudioChunkRun | Name prefix used for the log file. |
| output_name | STRING | LTXAudioChunkRun | Name prefix used for saved LoRA files and state folders. |
| audio_profile | COMBO | voice_test | voice_test is a short spoken-dialogue sanity check. voice is the spoken-dialogue preset. music uses a larger temporal budget and more capacity. voice_fast and voice_balanced are legacy aliases. |
| use_profile_defaults | BOOLEAN | true | When enabled, the selected profile controls the audio recipe bundle instead of the manual fields below. |
| audio_only_target_resolution | INT | 6432–4096 | Square target resolution used for audio-only latent geometry. |
| audio_only_target_fps | FLOAT | 25.01–240 | Target FPS used to derive frame count from audio duration during caching. |
| audio_only_sequence_resolution | INT | 640–8192 | Virtual sequence resolution used for shifted_logit_normal in audio mode. Set 0 to use cached virtual geometry. |
| steps_per_run | INT | 1001–100000 | How many steps to train before saving and stopping this chunk. |
| total_target_steps | INT | 8001–1000000 | Total training budget across all chunks. |
| network_dim | INT | 161–2048 | LoRA rank. |
| network_alpha | INT | 161–2048 | LoRA alpha. |
| blocks_to_swap | INT | 20–64 | How many transformer blocks to offload to CPU. |
| lora_target_preset | COMBO | audio | audio is the intended preset for audio-only training. |
| fp8_base | BOOLEAN | true | Use the FP8 base-model loading path. |
| fp8_scaled | BOOLEAN | true | Quantize non-FP8 checkpoints into FP8 at load time. |
| ltx2_audio_only_model | BOOLEAN | true | Force loading the physically audio-only transformer variant. Keep this on for audio-only training. |
| clear_memory_before_gemma | BOOLEAN | true | Unloads ComfyUI models and clears memory before Gemma caching. |
| gemma_recovery_mode | BOOLEAN | false | Experimental. If enabled, the node will try alternate Gemma cache settings after the normal path fails. |
| learning_rate_preset | COMBO | 1e-4 | Quick preset for the training learning rate. |
| learning_rate | FLOAT | 0.00011e-8–1 | Custom learning rate used only when the preset is set to Custom. |
| num_repeats | INT | 21–1000 | How many times each audio-caption pair is repeated in the dataset. |
| audio_bucket_strategy | COMBO | pad | Audio duration bucketing strategy. |
| audio_bucket_interval | FLOAT | 2.00.1–120 | Audio bucket step size in seconds. |
| cache_strategy | COMBO | auto | Auto rebuilds cache only when the node detects it is missing or stale. |
| copy_latest_to_comfy_loras | BOOLEAN | true | Copies the latest Comfy-compatible LoRA into the ComfyUI loras folder after training. |
| keep_only_comfy_lora | BOOLEAN | false | Deletes the standard .safetensors LoRA files after a matching .comfy.safetensors file exists. |
| strength_model | FLOAT | 1.00-100–100 | Strength used if the node applies the latest LoRA back onto the output model. |
| create_captions | BOOLEAN | false | Creates missing .txt caption files automatically from the caption_text field. |
| caption_text | STRING | Fallback caption text used when a source audio clip has no caption file. | |
| add_trigger_word | BOOLEAN | false | Prepends trigger_text to every caption. |
| trigger_text | STRING | Trigger word or phrase to prepend to captions when add_trigger_word is enabled. | |
| musubi_root | STRING | A:/MUSUBI/musubi-tuner-ltx2 | Root folder of your musubi-tuner-ltx2 install. |
| ltx2_checkpoint | STRING | A:/MUSUBI/models/ltx/ltx-2.3-22b-dev.safetensors | Path to the base LTX checkpoint used for caching and training. |
| gemma_root | STRING | A:/MUSUBI/models/gemma3 | Folder containing the Gemma model files used for text encoder caching. |
| gemma_load_in_4bit | BOOLEAN | false | Loads Gemma in 4-bit mode instead of 8-bit. |
| audioopt | AUDIO | Optional connected AUDIO input. If provided, it is copied into a managed audio dataset folder and used instead of audio_directory. | |
| audio_directoryopt | STRING | Optional folder containing audio files with matching .txt captions. Leave empty if you connect an AUDIO input. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| latest_state_path | STRING | — |
| log_path | STRING | — |
| dataset_audio_dir | STRING | — |
| output_name | STRING | — |
| completed_steps | INT | — |
| total_target_steps | INT | — |