> 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.

# Motion Control IC-LoRA

> Direct object motion in LTX-2.5 video generation with sparse motion tracks you draw, using the Motion Control IC-LoRA.

This guide walks you through the **Motion Control** workflow: a ComfyUI workflow from LTX that directs object motion along **sparse motion tracks you draw**, rather than extracting a control signal from a reference video. You sketch how things should move by dragging a few points; the workflow interpolates smooth per-frame trajectories, renders them into a guide, and the IC-LoRA follows them during generation.

It uses the [Motion Control IC-LoRA](/open-source-model/integration-tools/ic-lo-ra-adapters#motion-control), which enables the user to guide the motion of objects or regions in a generated video using sparse point trajectories.

This guide assumes you're comfortable prompting, generating, and iterating in ComfyUI. If you haven't used the default templates yet, start with the [Text-to-Video](/open-source-model/usage-guides/text-to-video) or [Image-to-Video](/open-source-model/usage-guides/image-to-video) guides first.

## What You'll Need

Download the [Motion Control workflow](https://github.com/Lightricks/ComfyUI-LTXVideo/blob/master/example_workflows/2.5/LTX-2.5_ICLoRA_Motion_Track_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                                                                     | `ComfyUI/models/vae/`              |
| `ltx-2.3-22b-ic-lora-motion-track-control-ref0.5.safetensors` | Motion Control IC-LoRA (reused from LTX-2.3)                                  | `ComfyUI/models/loras/`            |

Get 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); the Motion Control IC-LoRA is on its [own model page](https://huggingface.co/Lightricks/LTX-2.3-22b-IC-LoRA-Motion-Track-Control).

**Custom nodes:** beyond **ComfyUI-LTXVideo**, this workflow needs no third-party nodes — the motion-track nodes (Draw Tracks, Sparse Track Editor) ship with it. It is a **single-stage** distilled workflow, so there's no spatial upscaler.

## Step-by-Step

### 1. Load an input image

Load your opening image in the **LoadImage** node and enable **use image input** in the **Input Parameters** subgraph. This image conditions the first frame and is also the canvas you draw motion tracks on, so the generation's resolution follows it.

### 2. Draw your motion tracks

Open the **LTX Sparse Track Editor** and drag points to sketch how things should move. It draws over the resized input image, and the number of points it samples follows your frame count, so every frame gets a position. You can define a single track or several simultaneous ones.

The tracks are rendered into a guide video (**LTX Draw Tracks**) during preprocessing and fed to the motion-track IC-LoRA. A preview of that guide (`tracks_preview`) is saved alongside the result, so you can check the motion before committing to a long run.

See [Preparing Motion Tracks](#preparing-motion-tracks) below for how to place points effectively.

### 3. Write your prompt

Describe the content and style of the video. The motion is supplied by your tracks, so prompt the subject and the look, not the movement.

Optionally enable **enhance positive prompt** in Input Parameters to expand a short prompt with the Gemma 4 enhancer (the negative prompt is never enhanced). To save VRAM, you can offload encoding/enhancement to the LTX API (see the note in the workflow). See the [Prompting Guide](/open-source-model/usage-guides/prompting-guide) for additional prompting tips.

### 4. Set frame rate and duration

Set the **fps** and **duration in seconds** in Input Parameters. The final frame count must be `1 + a multiple of 8`, so the actual duration is computed from fps × requested seconds and may come out slightly different.

### 5. Generate

Click **Run**. The pipeline draws your tracks into a guide, injects it via the IC-LoRA, and generates in a **single distilled stage (8 steps)** with the motion-track IC-LoRA applied; the guide frames are then cropped so only the generated video is decoded. Audio and video are decoded and saved as an MP4.

> **Note**
>
> Check the `tracks_preview` output first. It shows the drawn guide, so you can confirm the motion looks right before a full run.

### 6. Review and iterate

* **Adjust the tracks** to change how objects move.
* **Adjust the prompt** to change the subject or style while keeping the motion.
* **Change the input image** to restage the shot.
* **Adjust IC-LoRA strength** (below) to balance how strictly the output follows the tracks.

## Preparing Motion Tracks

Instead of a per-frame visual signal (like depth or pose), you define motion by placing keypoints at specific frames; the workflow interpolates smooth spline trajectories between them, rendered as trails the IC-LoRA follows.

* **Start with 3–4 keypoints per track** and add more only if the interpolated path doesn't match your intent.
* **Keep trajectories physically plausible** — sudden direction changes produce less natural results.
* **Match the track canvas to your generation resolution** so the motion maps cleanly.

For more, see [Sparse Track Conditioning](/open-source-model/usage-guides/ic-lo-ra#sparse-track-conditioning) in the IC-LoRA guide.

## How It Works

The workflow runs in three parts:

1. **Preprocess** — `LTXVDrawTracks` renders your sparse tracks into a guide video at the size of the resized input image, and `LTXAddVideoICLoRAGuide` injects it as the IC-LoRA conditioning signal. The empty audio-video latent is built at the same size and frame count, and the input image conditions the opening frame.
2. **Generate** — the distilled LTX-2.5 model runs 8 steps with the motion-track IC-LoRA applied; `LTXVCropGuides` strips the guide tokens so only the generated video is decoded.
3. **Decode** — the latent is decoded with tiled VAE decoding (adjust tile count and overlap to fit your VRAM).

## Customization

### IC-LoRA strength

The **LTX IC-LoRA Loader Model Only** node loads the Motion Control IC-LoRA at strength 1.0. Lowering it gives the model more freedom at the cost of how strictly it follows your tracks; raising it tightens adherence. For finer control, including spatial and temporal masking, see [IC-LoRA parameters](/open-source-model/usage-guides/ic-lo-ra#ic-lora-parameters).

### CFG

The workflow uses a single guider CFG for both video and audio. The distilled model bakes guidance into distillation, so keep CFG **close to 1** — raising it doesn't help the way it would with a standard diffusion model. You can explore other samplers and CFG values, but stay near 1.

### Tiled VAE decode

Decoding is tiled to reduce peak VRAM. Fewer tiles run faster but need more memory. Recommended starting points:

| Node settings (pixels)     | Resolved latent geometry        |
| -------------------------- | ------------------------------- |
| `512 / 64 / 128 / 32`      | 16×16, ov 2 — 16f ov 4          |
| `768 / 192 / 128 / 32`     | 24×24, ov 6 — 16f ov 4          |
| `1024 / 256 / 128 / 48`    | 32×32, ov 8 — 16f, ov 6         |
| `1536 / 384 / 192 / 48`    | 48×48, ov 12 — 24f, ov 6        |
| `768 / 192 / spatial-only` | 24×24, ov 6 — no temporal split |

### Adding LoRAs

Standard LoRAs can be combined with the Motion Control IC-LoRA to add style on top of the motion control. Start at lower strengths (0.5–0.8) to avoid conflicts between style and the control signal. See the [LoRA guide](/open-source-model/usage-guides/lo-ra).