VELVET VICE — Legacy LoRA Studio
A LoRA stack that knows LTX splits video and audio weights — the legacy name, the real mechanism
- model
- clip
- model
- clip
"Legacy" in the name isn't a warning that it's broken. It's the opposite: this is a kept-alive alias so older Velvet Vice LTX workflow files still load. The actual implementation lives in the pack's VelvetVicePowerLoraAV class, and VelvetViceLoraStudio is just the old name it responds to. If you're loading a fresh v1.2 workflow you'll see Power LoRA AV; if you're loading an older one, you get this. Same guts.
Why LTX needs a special LoRA loader at all
LTX-2 and 2.3 are audio-video models. Their LoRAs aren't one blob of weights - a tensor key can live in the video stream, the audio stream, or the text encoder (CLIP/Gemma). Feed an audio-heavy LoRA through a plain LoraLoader and you apply everything at one strength with no say in which stream gets it. This node fixes that with per-bucket strengths and an explicit routing mode per stack slot.
How it works
The stack is a JSON string (lora_stack_json), not a pile of widgets. Each entry has:
enabledandlora- the filename, picked fromlora_catalog, which is a live read of your ComfyUIlorasfolder (the pack also queries the server for a fresh catalog so new LoRAs show up without a restart).mode-FULL,VIDEO, orAUDIO.video_strength,audio_strength,clip_strength- the per-stream weights.
Internally the loader classifies every tensor key by its target path: keys with audio_to_video_attn belong to the video stream, video_to_audio_attn to the audio stream, audio_* attention/FFN blocks to audio, and text-encoder keys to CLIP. Then it applies each bucket at its own strength.
The interesting mode is AUDIO. It applies the audio blocks plus video-to-audio attention - the path that changes what the audio hears - while deliberately excluding audio-to-video attention, so the visual stream isn't dragged along. That's a real choice for audio LoRAs you don't want influencing the picture. FULL just applies everything, and when all three strengths are equal it takes the classic load_lora_for_models fast path, so behavior is byte-for-byte the standard loader.
The inputs that matter
- model and clip - what you're patching. Model is the LTX diffusion model; clip is the text encoder.
- lora_stack_json - the ordered stack. The default references the pack's own IC-LoRAs (
ltx-2-19b-ic-lora-union-control-ref0.5.safetensors,ltx-2-19b-ic-lora-detailer.safetensors) but withenabled: false. You're expected to flip slots on or add your own. - lora_catalog - a browse widget; purely a picker convenience, doesn't change behavior.
Outputs
Two: model and clip, patched, ready to wire into the sampler. That's the whole interface - in, out, no telemetry.
Installing it
Part of velvet-vice-ltx - install VELVET VICE - LTX via ComfyUI Manager (Comfy Registry), restart, hard-refresh with Ctrl+F5:
cd ComfyUI/custom_nodes
git clone https://github.com/Velvet-Vice/velvet-vice-ltx
No pip dependencies of its own. What you do need: the LoRA .safetensors files in ComfyUI/models/loras/. The pack's default stack assumes the LoRAs from the Civitai release are present. If you're not running that release, set the stack to None or your own files or it'll error on load.
Troubleshooting
- "LoRA not found" - the file isn't in
models/loras/. Download it from the release and put it there. - Loading a workflow complains about the node - you probably merged an old Velvet Vice custom-node folder into a new one. The README's rule: never merge versions; reinstall clean.
- The visual output changed when you expected audio-only - you were in
FULLmode, which touches everything. Switch that slot toAUDIOif you want the audio stream only.
It's workflow plumbing, not a headline feature - but for LTX audio-video LoRAs, this per-stream routing is genuinely the difference between "the LoRA worked" and "the LoRA worked and wrecked the video."
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| lora_stack_json | STRING | [{"id": "union", "enabled": false, "lora": "ltx-2-19b-ic-lora-union-control-ref0.5.safetensors", "mode": "FULL", "video_strength": 0.45454711914062484, "audio_strength": 0.45454711914062484, "clip_strength": 0.45454711914062484}, {"id": "detailer", "enabled": false, "lora": "ltx-2-19b-ic-lora-detailer.safetensors", "mode": "FULL", "video_strength": 0.28, "audio_strength": 0.28, "clip_strength": 0.28}] | — |
| lora_catalog | COMBO | None | 4 options: None, ltx-2.3-22b-distilled-lora-1.1_rank72_energy.safetensors, ltx-2-19b-ic-lora-union-control-ref0.5.safetensors, ltx-2-19b-ic-lora-detailer.safetensors |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |