> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ltx.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ltx.io/_mcp/server.

# Audio-to-Video

> Generate video timed to an input audio track with the LTX-2.5 Audio-to-Video ComfyUI workflow, with optional first-frame conditioning.

This guide walks you through the **Audio-to-Video** workflow: a sample ComfyUI workflow from LTX that generates video timed to an input audio track. You supply an audio clip — music, speech, or ambience — and the workflow holds it fixed while generating video whose motion and pacing follow the sound. An optional first-frame image sets the opening shot.

It uses the same two-stage distilled architecture as the [Two-Stage Generation](/open-source-model/usage-guides/two-stage-generation) guide — Stage 1 generates at a base resolution, then a 2× spatial upscale and a short refine pass — but here the **audio is the primary conditioning signal** rather than a prompt alone.

This guide assumes you're comfortable prompting, generating, and iterating in ComfyUI. If you're new to LTX in ComfyUI, start with the [Text-to-Video](/open-source-model/usage-guides/text-to-video) guide.

## What You'll Need

Download the [Audio-to-Video workflow](https://github.com/Lightricks/ComfyUI-LTXVideo/blob/master/example_workflows/2.5/LTX-2.5_A2V_Two_Stage_Distilled.json) and drag it into ComfyUI. Open the **Workflow Overview** panel; if any custom nodes or model files are missing, it will let you install or download them.

**Model files:**

| File                                                      | Description                                                                   | Placement                               |
| --------------------------------------------------------- | ----------------------------------------------------------------------------- | --------------------------------------- |
| `ltx-2.5-22b-distilled-transformer-bf16.safetensors`      | Distilled LTX-2.5 transformer (loaded via **UNETLoader**)                     | `ComfyUI/models/diffusion_models/`      |
| `gemma4-12b-with-proj-ltx-2.5-bf16.safetensors`           | Text encoder (Gemma 4 12B)                                                    | `ComfyUI/models/text_encoders/`         |
| `gemma4_e2b_it_bf16.safetensors`                          | Prompt enhancer (Gemma 4 E2B); from `Comfy-Org/gemma-4`, not the LTX-2.5 repo | `ComfyUI/models/text_encoders/`         |
| `ltx-2.5-video-vae-bf16.safetensors`                      | Video VAE                                                                     | `ComfyUI/models/vae/`                   |
| `ltx-2.5-audio-vae-bf16.safetensors`                      | Audio VAE (encodes the input clip)                                            | `ComfyUI/models/vae/`                   |
| `ltx-2.5-latent-spatial-upscaler-x2-bf16-1.0.safetensors` | Spatial upscaler (2×)                                                         | `ComfyUI/models/latent_upscale_models/` |

Download the LTX-2.5 weights from the [LTX-2.5 HuggingFace repository](https://huggingface.co/Lightricks/LTX-2.5) (click **Agree and Access** on first download).

## Step-by-Step

### 1. Load your audio

Load your source clip in the **LoadAudio** node. In the **TrimAudioDuration** node, set the **start time** and **duration** to select the segment to condition on — the generated video's length follows this trimmed audio, so trim to exactly the section you want.

### 2. Set a first frame (optional)

To open on a specific image, load it in the **LoadImage** node and enable the image input. With no image, the workflow generates the opening shot from your prompt alone.

### 3. Write your prompt

Describe the scene you want — subject, setting, style, camera. The audio drives timing and motion; the prompt supplies the visual content. Enable **enhance positive prompt** to expand a short prompt with the Gemma 4 enhancer (the negative prompt is never enhanced). See the [Prompting Guide](/open-source-model/usage-guides/prompting-guide).

### 4. Generate

Click **Run**. The clip is encoded and held fixed while the model generates video against it (see [How It Works](#how-it-works)). Stage 1 samples at the base resolution; Stage 2 upscales 2× and refines. Your original audio track is saved with the generated video, unchanged.

### 5. Review and iterate

The output is an MP4 carrying your original audio track. To iterate: adjust the prompt, change the trimmed audio segment, swap the first-frame image, or try a different resolution.

## How It Works

1. **Encode** — the trimmed clip (start + duration) is encoded to latent tokens by the audio VAE (`LTXVAudioVAEEncode`).
2. **Freeze** — those audio tokens are concatenated with the video latent (`LTXVConcatAVLatent`) and held **frozen** through both stages, so the model generates video to match fixed audio rather than generating new audio.
3. **Generate** — Stage 1 samples the video at the base resolution; Stage 2 upscales 2× and refines. `LTXVSeparateAVLatent` then splits the audio and video branches.
4. **Output** — only the video branch is decoded (`VAEDecodeTiled`); the **SaveVideo** node then writes that video out with your original (trimmed) audio track attached. There's no audio decode step, so the soundtrack is preserved exactly as supplied.

## Customization

### Trim

The video length is derived from the trimmed audio, so use **TrimAudioDuration**'s start and duration to set both the segment and the clip length. The frame count still resolves to `1 + a multiple of 8`, so the final duration may land slightly off the trimmed length.

### Tiled VAE decode

Decoding is tiled to reduce peak VRAM. Adjust tile count and overlap only if you hit memory issues during decode — fewer, larger tiles run faster but need more memory.

### CFG

Both stages use CFG 1. The distilled model bakes guidance into distillation, so raising CFG doesn't improve output the way it would with a standard diffusion model. If you experiment, stay near 1.

> **Warning**
>
> Higher resolution and longer audio need more VRAM. If you hit memory issues, reduce the resolution or the trimmed duration, or increase the VAE decode tile count.

## Python

Audio-to-video is also available through the PyTorch API as `A2VidPipelineTwoStage`, for programmatic use and custom pipelines. See the [PyTorch API documentation](/open-source-model/integration-tools/pytorch-api).