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

# Image-to-Video Workflow for Beginners

> Animate a source image with the LTX-2.5 Image-to-Video ComfyUI template, including first-and-last-frame generation.

This tutorial shows you how to generate a video with synchronized audio from a source image and a supporting text prompt, using the built-in **LTX-2.5 Image-to-Video** template in ComfyUI. Starting from an image gives you more control over the result than a text prompt alone.

If you have both a **start and end frame** and want the model to generate the motion between them, skip to [First and Last Frame](#first-and-last-frame) below.

## When to Use

Image-to-Video is the right choice when you have a specific starting image to guide the scene. It's the right choice when you want to maintain a character's appearance, control the composition, or animate an existing image with motion and audio. To generate a scene entirely from a text description, see the [Text-to-Video guide](/open-source-model/usage-guides/text-to-video) instead.

## Step-by-Step Guide

> **Note**
>
> This guide assumes ComfyUI is already installed. If not, see the [ComfyUI download page](https://comfy.org/download) and our [ComfyUI setup guide](/open-source-model/integration-tools/comfy-ui), and check the [system requirements](/open-source-model/getting-started/system-requirements).

### 1. Load the Template and Download Models

1. Open ComfyUI.
2. Click the **Templates** button and search **LTX-2.5**.
3. Select the **Image-to-Video** template (`video_ltx2_5_i2v`).
4. Open the **Workflow Overview** panel and click **Download all** to fetch any missing model files.

The template uses these files (also on the [LTX-2.5 HuggingFace repository](https://huggingface.co/Lightricks/LTX-2.5)):

| File                                                      | Purpose                                                                  | Placement                               |
| --------------------------------------------------------- | ------------------------------------------------------------------------ | --------------------------------------- |
| `ltx-2.5-22b-distilled-transformer-bf16.safetensors`      | Distilled model                                                          | `ComfyUI/models/diffusion_models/`      |
| `gemma4-12b-with-proj-ltx-2.5-bf16.safetensors`           | Gemma 4 text encoder                                                     | `ComfyUI/models/text_encoders/`         |
| `gemma4_e2b_it_bf16.safetensors`                          | Gemma 4 prompt enhancer (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                                                                | `ComfyUI/models/vae/`                   |
| `ltx-2.5-latent-spatial-upscaler-x2-bf16-1.0.safetensors` | Spatial upscaler (2×)                                                    | `ComfyUI/models/latent_upscale_models/` |

### 2. Load Your Source Image

In the **LoadImage** node, select your image. The model generates motion and audio from this starting point. The image is resized to the configured resolution, so for best results use a source image that matches your target aspect ratio. PNG, JPG, and WebP are supported.

### 3. Write Your Prompt

In Image-to-Video, the prompt describes what should *happen*, as the model already knows what the scene looks like from your image. Focus on:

* **Motion and action** — how subjects move or change over time
* **Camera movement** — tracking, panning, zooming, or a static shot
* **Audio** — dialogue (in quotation marks), music, ambient sound

For example: *"The woman turns to face the camera and smiles, a warm breeze moving through her hair. Soft piano music plays in the background."*

The template turns on **Prompt Enhance** by default, which expands a short prompt before it's encoded. Turn it off to use your prompt exactly as written. See the [Prompting Guide](/open-source-model/usage-guides/prompting-guide) for additional prompting tips.

### 4. Set Resolution, Length, and Frame Rate

| Parameter      | Default   | Notes                                      |
| -------------- | --------- | ------------------------------------------ |
| **Width**      | 768       | Base resolution. Must be divisible by 32.  |
| **Height**     | 512       | Base resolution.                           |
| **Length**     | 97 frames | Frame count must be `1 + a multiple of 8`. |
| **Frame rate** | 24 fps    | 97 frames at 24 fps ≈ 4 seconds.           |

The pipeline generates at the base resolution, then upscales **2×** — the final output is double the width and height you set.

> **Warning**
>
> Higher resolution and longer length need more VRAM. Start near the defaults and increase once you know your hardware handles it.

### 5. Generate

Click **Run**. The template runs a two-stage pipeline automatically:

1. **Stage 1** — generates video and audio at the base resolution; the source image is injected as conditioning at strength **0.7**.
2. **Upscale** — the video latent is upscaled 2× by the spatial upscaler.
3. **Stage 2** — refines at full resolution; the source image is re-injected at strength **1.0** to preserve detail.

Audio is generated jointly with the video in Stage 1 and carried through to the output.

### 6. Review and Iterate

The output saves as an MP4 with synchronized audio. To iterate:

* **Adjust the prompt** to change the motion, action, or audio.
* **Try a different source image** to see how the model interprets different starting frames.
* **Adjust length** to fit your content.

> **Note**
>
> The Stage 1 seed randomizes by default. To reproduce a result, note its seed and switch the seed control from randomize to fixed.

## How the Pipeline Works

**Model loading:** The template loads the distilled transformer directly (no separate base model or distilled LoRA), the Gemma 4 text encoder and prompt enhancer, and the video and audio VAEs. A negative prompt (`"pc game, console game, video game, cartoon, childish, ugly"`) is applied automatically.

**Image preprocessing:** The source image is resized to the target resolution and prepared for conditioning in both stages.

**Stage 1 (base resolution):** The source image is injected into the video latent at strength 0.7 — establishing the starting point while leaving room for natural motion. An empty audio latent is concatenated with the video latent, and the two are sampled together with `euler_ancestral` and a dual-CFG guider (CFG 1 for video and audio) on a fixed distilled sigma schedule, keeping audio and video in sync.

**Upscale:** The video latent passes through the spatial upscaler, doubling its resolution.

**Stage 2 (full resolution):** The source image is re-injected at strength 1.0 to preserve detail, then the video is refined and recombined with the Stage 1 audio.

**Decode:** Video decodes through tiled VAE decoding, audio through the audio VAE, and the two are merged into the final file.

## First and Last Frame

The **First-Frame / Last-Frame** template (`video_ltx2_5_flf2v`) generates the motion *between* a starting image and an ending image. This is useful for controlled transitions, morphs, or camera moves with a defined destination. It's a **single-stage** template, unlike the vanilla image to video workflow.

### Steps

1. In the **Templates** browser, choose the **First-Frame / Last-Frame** template.
2. Download models when prompted — the same files as Image-to-Video **minus the spatial upscaler** (FLF is single-stage).
3. Load your **first frame** and **last frame** in the two **LoadImage** nodes.
4. Write a prompt describing what happens between the two frames (motion, camera, audio). The prompt enhancer is on by default here too.
5. Set length and frame rate as above, then click **Run**.

### How It Works

The first image is added as a guide at the **first frame** and the last image as a guide at the **final frame**. The model generates a single distilled stage of joint audio-video that begins on your first frame and lands on your last, then decodes through the video and audio VAEs. Because it's single-stage, there's no 2× upscale, so the output resolution is the base resolution you set.

## Advanced Techniques

### Recommended Next Step

Once you're comfortable with the template, the [Two-Stage Generation](/open-source-model/usage-guides/two-stage-generation) workflow uses the same two-stage structure with the full-precision base model plus a higher-quality **Full** sampler path and more exposed controls. Everything you've learned here still applies.

### Distilled vs. Full

The template uses the **distilled** model — optimized to produce good results in a few steps, which makes it fast and ideal for iteration. The **full** model (in the Two-Stage Generation workflow) takes more steps but can yield finer detail and more nuanced motion. Match the model and workflow to best meet your needs and available hardware.

### Using LoRAs

The official template does not include a standard-LoRA node. For a compatible standard LoRA, manually insert ComfyUI's `LoraLoaderModelOnly` after the shared **Model** output and route its modified `MODEL` output to both sampler stages. See the [LoRA guide](/open-source-model/usage-guides/lo-ra).

### Python

Image-to-Video is also available through the PyTorch API for programmatic use. See the [PyTorch API documentation](/open-source-model/integration-tools/pytorch-api).