---
title: Camera movement with LTX-2.5 Pro — LTX-2.5 Pro | Runware Docs
url: https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/camera-movement
description: "How to control the camera in LTX-2.5 Pro: the eight settings.cameraMovement presets, the prompt camera vocabulary, and when to reach for a reliable preset versus a described move."
---
### [Introduction](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/camera-movement#introduction)

LTX-2.5 Pro gives you the camera two ways. You can **describe the move in the prompt**, which reads a full cinematographer's vocabulary, or you can set **`settings.cameraMovement`**, a short list of fixed presets that apply the same clean move every time. One is expressive, the other is repeatable, and knowing which to reach for is the whole job.

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

*A crane-and-pull-back reveal, written straight into the prompt*

> **Prompt**: A cinematic urban lifestyle shot. A young woman in a long coat stands at the edge of a rooftop terrace at golden hour, looking out over the city, the low sun flaring behind the skyline. The camera cranes slowly up and pulls back, rising above her and opening the frame to reveal the vast sprawl of the city stretching to the horizon behind her. Warm golden light, a cinematic teal-and-amber grade, crisp detail. Sound: a soft high-altitude wind, a faint distant city hum, no music.

That reveal is a compound move the presets do not cover, so it came from prose. This guide covers the request, the eight presets and when they win, the camera vocabulary the prompt understands, and how to choose between them. Directing the subject's motion inside the frame is in the [prompting guide](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/prompting).

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

The preset path is one field, `settings.cameraMovement`, set to one of eight values.

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 minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field.',
  width: 1920,
  height: 1080,
  duration: 6,
  settings: {
    cameraMovement: 'dolly_in'
  }
})
```

```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 minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field.",
            "width": 1920,
            "height": 1080,
            "duration": 6,
            "settings": {
                "cameraMovement": "dolly_in"
            }
        })

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": "a8e4f7b6-0c1d-4c45-a6f7-182930415d6e",
      "model": "lightricks:ltx@2.5-pro",
      "positivePrompt": "A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field.",
      "width": 1920,
      "height": 1080,
      "duration": 6,
      "settings": {
        "cameraMovement": "dolly_in"
      }
    }
  ]'
```

```bash
runware run lightricks:ltx@2.5-pro \
  positivePrompt="A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field." \
  width=1920 \
  height=1080 \
  duration=6 \
  settings.cameraMovement=dolly_in
```

```json
{
  "taskType": "videoInference",
  "taskUUID": "a8e4f7b6-0c1d-4c45-a6f7-182930415d6e",
  "model": "lightricks:ltx@2.5-pro",
  "positivePrompt": "A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field.",
  "width": 1920,
  "height": 1080,
  "duration": 6,
  "settings": {
    "cameraMovement": "dolly_in"
  }
}
```

Response

```json
[
  {
    "taskType": "videoInference",
    "taskUUID": "a8e4f7b6-0c1d-4c45-a6f7-182930415d6e",
    "videoUUID": "4e5f6a7b-8c9d-0123-efab-345678901234",
    "videoURL": "https://vm.runware.ai/video/os/a14d18/ws/2/vi/4e5f6a7b-8c9d-0123-efab-345678901234.mp4"
  }
]
```

- `settings.cameraMovement` takes one preset. It applies a fixed camera move to the shot without any description in the prompt.
- It runs on **text-to-video and image-to-video**. It does not apply on the [audio-driven](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/audio-driven) path, where the camera holds on the performance.
- The prompt still owns the subject and the scene. The preset only sets **how the camera moves**, so describe what is in frame as usual and leave the move to the field.

### [The eight presets](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/camera-movement#the-eight-presets)

The presets fall into four groups: **dolly** (in, out, left, right) moves the camera through space, **jib** (up, down) changes its height, **static** locks it off, and **focus\_shift** racks focus between subjects. Every clip below runs the exact same chair prompt. Only `settings.cameraMovement` changes.

[Watch video](https://runware.ai/docs/assets/output-dolly-in.QPyCBTM3.mp4)

*dolly_in*

> **Prompt**: A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field, crisp detail.

[Watch video](https://runware.ai/docs/assets/output-dolly-out.0Zt64eka.mp4)

*dolly_out*

> **Prompt**: A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field, crisp detail.

[Watch video](https://runware.ai/docs/assets/output-dolly-left.UAvsk5Ol.mp4)

*dolly_left*

> **Prompt**: A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field, crisp detail.

[Watch video](https://runware.ai/docs/assets/output-dolly-right.DUpjahgk.mp4)

*dolly_right*

> **Prompt**: A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field, crisp detail.

[Watch video](https://runware.ai/docs/assets/output-jib-up.C7ctYkII.mp4)

*jib_up*

> **Prompt**: A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field, crisp detail.

[Watch video](https://runware.ai/docs/assets/output-jib-down.j5_99EzY.mp4)

*jib_down*

> **Prompt**: A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field, crisp detail.

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

*static*

> **Prompt**: A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field, crisp detail.

[Watch video](https://runware.ai/docs/assets/output-focus-shift.8E68O-J5.mp4)

*focus_shift*

> **Prompt**: A minimalist product film. A sculptural matte-black designer lounge chair sits on a smooth pale concrete floor in a bright studio, a slim floor lamp glowing softly behind it, clean soft daylight from the left. Clean commercial product cinematography, neutral color grade, shallow depth of field, crisp detail.

The presets win when **reliability matters more than range**. Each one gives the same clean move on every render, so a catalog of fifty products can all get an identical `dolly_in` with no prompt drift between them, and `static` guarantees a locked frame where a prompt sometimes lets the camera wander. When you need a specific, repeatable move and nothing fancier, the field is faster and steadier than describing it.

### [Camera language in the prompt](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/camera-movement#camera-language-in-the-prompt)

The prompt reads a **wider vocabulary** than the eight presets, and it handles moves they cannot. It knows push in and pull back, track, tilt, pan, handheld, over-the-shoulder, and the crane in the hero, and it takes compound moves that combine several at once. The clearest gap is the **orbit**: a full circle around a subject, which no preset offers.

[Watch video](https://runware.ai/docs/assets/output-orbit.IegCA3-0.mp4)

*A full 360 orbit, a move the presets do not cover*

> **Prompt**: A premium product film. A sleek matte-charcoal cafe-racer motorcycle sits centered on a dark reflective studio floor under a single bank of soft overhead light. The camera performs a smooth continuous three-hundred-and-sixty degree orbit around the motorcycle, the light sliding across the tank, the spokes, and the leather seat as the machine turns through the frame, staying perfectly centered. Clean commercial product cinematography, moody grade, crisp detail. Sound: a low studio room tone, no music.

Describe the move in the terms a crew uses, and say **where it ends**: "the camera pushes in until the tank fills the frame" lands more reliably than "push in" alone, because the model has a target to complete the motion against. The prompt path trades the preset's guaranteed repeatability for reach, so reach for it when the shot needs a move the eight presets do not have, or a combination of them.

### [Choosing and combining](https://runware.ai/docs/models/lightricks-ltx-2-5-pro/guides/camera-movement#choosing-and-combining)

The decision is short. Use a **preset** when you want a specific move to come out identical across renders, a product line, a template, a batch. Use the **prompt** when you want a move the presets do not cover, an orbit, a handheld follow, a crane, or two moves at once. And you can run both: set a `cameraMovement` preset for the base camera move and let the prompt direct the subject's action inside it, so the camera stays predictable while the performance carries the shot.

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

1. **Reach for a preset when you need repeatability.** `settings.cameraMovement` gives the same clean move on every render, which is what a batch or a template wants.
    
2. **Use `static` to lock the frame.** When the shot lives on subject motion, the `static` preset guarantees a fixed camera where a prompt sometimes drifts.
    
3. **Describe the move in the prompt for range.** Orbit, handheld, over-the-shoulder, crane, and compound moves live in the prompt vocabulary, not the eight presets.
    
4. **Say where a described move ends.** "Push in until the face fills the frame" completes more cleanly than "push in", because the model has a target.
    
5. **Combine the two.** A preset for the base camera move plus a prompt for the subject's action keeps the camera predictable while the performance does the work.
    
6. **Remember the audio-driven exception.** `cameraMovement` does not apply when driving a shot from an audio track, where the camera holds on the performance.