---
title: Audio-driven characters with LTX-2.5 Pro — LTX-2.5 Pro | Runware Docs
url: https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/audio-driven
description: "How to drive a lip-synced performance with LTX-2.5 Pro: pairing inputs.audio with a reference image, matching voice to subject, and the length, resolution, and framing rules."
---
### [Introduction](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/audio-driven#introduction)

The [native audio guide](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/native-audio) has LTX-2.5 Pro write a voice for you. This path runs the other direction: **you bring the audio**, a voiceover you recorded or a song, and LTX drives a subject to **perform it in lip-sync**. Hand it one still of a person or character plus an audio track, and it animates the face to speak or sing the words exactly.

[Watch video](https://runware.ai/docs/assets/output-hero.Ds37Ev7f.mp4)

*One reference photo and one voice track, driven to a lip-synced take*

> **Prompt**: A confident young founder in a bright modern office speaks warmly to the camera, gesturing lightly with one hand, her expression natural and engaged. Her lips and expression stay in sync with the voice. Soft office daylight, a clean commercial grade, shallow depth of field.

The founder above never said those words on camera. She came from exactly **two inputs**, a reference image that fixes who she is and a voice track that supplies what she says:

![A studio-lit photo of a young woman founder in a blazer in a modern open-plan office, looking at the camera](https://runware.ai/docs/assets/source-founder.BE1-j-H8_Z5p1s6.jpg)

*The reference image: who she is*

> **Prompt**: A confident young woman founder in a tailored blazer standing in a bright modern open-plan office with soft daylight and defocused desks behind her, looking at the camera with a warm composed expression. Photoreal editorial portrait, shallow depth of field, no text.

[Listen to audio](https://runware.ai/docs/assets/voice-founder.CgAOOF7f.mp3)

*The voice track: what she says*

> **Prompt**: Every launch, every product update, one script and one take. This is how our team ships now.

The **image carries identity**, the face, the wardrobe, and the setting, so a clean front-facing photo drives a cleaner performance than a busy or turned one. The **audio carries the words and the timing**, and the clip inherits its exact length, while the prompt directs the delivery and small motions without touching the words. This guide covers the request, framing for the platform, and driving non-human characters. To have the model generate the voice instead of supplying one, see the [native audio guide](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/native-audio).

### [The request](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/audio-driven#the-request)

The call pairs `inputs.audio` with a single `inputs.referenceImages` entry. Both are required together.

TypeScriptPythoncURLCLIJSON

```typescript
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'lightricks:ltx@2.5-pro',
  positivePrompt: 'A confident young founder in a bright modern office speaks warmly to the camera, gesturing lightly, her expression natural and engaged, lips in sync with the voice. Soft office daylight, a clean commercial grade.',
  inputs: {
    referenceImages: [
      'https://example.com/founder.jpg'
    ],
    audio: 'https://example.com/voiceover.mp3'
  },
  width: 1920,
  height: 1080
})
```

```python
import asyncio
import os

from runware import Runware

async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "lightricks:ltx@2.5-pro",
            "positivePrompt": "A confident young founder in a bright modern office speaks warmly to the camera, gesturing lightly, her expression natural and engaged, lips in sync with the voice. Soft office daylight, a clean commercial grade.",
            "inputs": {
                "referenceImages": [
                    "https://example.com/founder.jpg"
                ],
                "audio": "https://example.com/voiceover.mp3"
            },
            "width": 1920,
            "height": 1080
        })

asyncio.run(main())
```

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "videoInference",
      "taskUUID": "f7d3e6a5-9b0c-4b34-f5e6-071829304c5d",
      "model": "lightricks:ltx@2.5-pro",
      "positivePrompt": "A confident young founder in a bright modern office speaks warmly to the camera, gesturing lightly, her expression natural and engaged, lips in sync with the voice. Soft office daylight, a clean commercial grade.",
      "inputs": {
        "referenceImages": [
          "https://example.com/founder.jpg"
        ],
        "audio": "https://example.com/voiceover.mp3"
      },
      "width": 1920,
      "height": 1080
    }
  ]'
```

```bash
runware run lightricks:ltx@2.5-pro \
  positivePrompt="A confident young founder in a bright modern office speaks warmly to the camera, gesturing lightly, her expression natural and engaged, lips in sync with the voice. Soft office daylight, a clean commercial grade." \
  inputs.referenceImages.0=https://example.com/founder.jpg \
  inputs.audio=https://example.com/voiceover.mp3 \
  width=1920 \
  height=1080
```

```json
{
  "taskType": "videoInference",
  "taskUUID": "f7d3e6a5-9b0c-4b34-f5e6-071829304c5d",
  "model": "lightricks:ltx@2.5-pro",
  "positivePrompt": "A confident young founder in a bright modern office speaks warmly to the camera, gesturing lightly, her expression natural and engaged, lips in sync with the voice. Soft office daylight, a clean commercial grade.",
  "inputs": {
    "referenceImages": [
      "https://example.com/founder.jpg"
    ],
    "audio": "https://example.com/voiceover.mp3"
  },
  "width": 1920,
  "height": 1080
}
```

Response

```json
[
  {
    "taskType": "videoInference",
    "taskUUID": "f7d3e6a5-9b0c-4b34-f5e6-071829304c5d",
    "videoUUID": "3d4e5f6a-7b8c-9012-defa-234567890123",
    "videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/3d4e5f6a-7b8c-9012-defa-234567890123.mp4"
  }
]
```

- `inputs.audio` is the driving track, a URL or UUID, and `inputs.referenceImages` is the **single subject image**. Neither works without the other.
- The clip **runs as long as the audio**, from 2 to 20 seconds, so there is no `duration` to set.
- Output is **1080p only**, 1920 × 1080 or 1080 × 1920. Match the pair to the reference image's orientation.
- The camera holds. `settings.cameraMovement` and `inputs.frameImages` do not apply on this path.
- The audio can be **speech or a song**. The prompt describes the look and the performance, not the words, since the words come from the track.

### [Framing for the platform](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/audio-driven#framing-for-the-platform)

Match the resolution pair to where the clip runs. A **1080 × 1920 portrait** reads as native talking-head content on stories and reels, so give the model a vertical reference photo and it frames the performance for the tall crop.

![A cozy vertical photo of a young man in a hoodie in a warm lamp-lit room, looking at the camera with an easy smile](https://runware.ai/docs/assets/source-creator.QE7lCeaW_e53ky.jpg)

*The reference image: who he is*

> **Prompt**: A friendly young man in a casual hoodie sitting in a cozy softly lit room with warm lamps and plants behind him, looking at the camera with an easy smile, framed for vertical social video. Photoreal, natural, shallow depth of field, no text.

[Listen to audio](https://runware.ai/docs/assets/voice-creator.Cp7Z_-VL.mp3)

*The voice track: what he says*

> **Prompt**: Okay, I have tried a lot of these, and honestly, this is the only one I kept using. Let me show you why.

[Watch video](https://runware.ai/docs/assets/output-ugc.CLg_2B5k.mp4)

*Driven to a vertical take, framed for social*

> **Prompt**: A young man sits in a cozy softly lit room talking directly to the camera like a friend, relaxed and expressive, with small natural hand movements and easy smiles. His lips and expression match the voice exactly. Warm casual lighting, a natural social-video look.

This is the shape of a creator testimonial or a UGC ad: one photo of the presenter, a script in the voice you want, and a vertical take that drops straight into a feed. Keep the reference photo framed the way the final clip should sit, since the model performs within the crop it is given rather than reframing a wide shot.

### [Driving any character](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/audio-driven#driving-any-character)

The reference does not have to be a real person. A stylized character, a mascot, or an illustrated avatar drives the same way, which turns a brand character into a **spokesperson that can say anything**.

![A rounded white-and-mint robot mascot with large glowing blue eyes standing in a bright studio, looking cheerfully at the camera](https://runware.ai/docs/assets/source-mascot.v3DUagUZ_ZCNo65.jpg)

*The reference image: the character*

> **Prompt**: A friendly rounded robot mascot with a smooth white-and-mint body and large glowing blue eyes, standing in a clean bright studio and looking at the camera with a cheerful expression. Polished 3D character render, soft even lighting, no text, no branding.

[Listen to audio](https://runware.ai/docs/assets/voice-mascot.R-4imUjU.mp3)

*The voice track: what it says*

> **Prompt**: Hi there! I am Byte, your friendly helper. Tap the button below and I will get you set up in a few seconds.

[Watch video](https://runware.ai/docs/assets/output-mascot.Cv9Mk2Nw.mp4)

*A rendered mascot, lip-synced from that voice*

> **Prompt**: A friendly rounded robot mascot stands in a clean bright studio and speaks cheerfully to the camera, its head tilting and its little arms gesturing. Its mouth and expression stay in sync with the voice. Soft even lighting, a polished 3D-animation look.

Give the character a **clear, front-facing mouth** in the reference and the lip-sync has something to move. A mascot with a defined face reads well. One with no mouth or a fully abstract shape has nothing to animate. Beyond that the pattern is identical, so an onboarding helper or a branded character can deliver a fresh script whenever you swap the audio.

### [Tips](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/audio-driven#tips)

1. **Pair audio with one reference image.** `inputs.audio` and a single `inputs.referenceImages` entry are both required, and neither runs alone.
    
2. **Let the audio set the length.** The clip matches the track from 2 to 20 seconds, so there is no `duration` field on this path.
    
3. **Feed a clean, front-facing photo.** Identity and framing come from the image, so a sharp, well-lit, forward-facing subject drives a cleaner lip-sync than a turned or busy one.
    
4. **Match the resolution to the reference.** Output is 1080p only, so pass 1920 × 1080 or 1080 × 1920 to match the photo's orientation and the target platform.
    
5. **Keep the prompt off the words.** Describe delivery and small motions, and let the track carry the dialogue, since the spoken words come from the audio, not the prompt.
    
6. **Drive characters, not just people.** A mascot or avatar with a clear front-facing mouth performs the same way, turning a brand character into a spokesperson.