# Ltx 2.3 Quality · Reference Video to Video API

> Prompt által vezérelt generálás referencia-videó alapján, opcionális első, középső és utolsó kulcsképekkel

Új videót készít a kötelező `prompt` és a mozgást, illetve szerkezetet biztosító referencia-`video_url` alapján. Az opcionális `image_url`, `mid_image_url` és `end_image_url` a megjelenést a kezdő, középső és záró ponton rögzíti. A `video_strength` és a `strength` (mindkettő 0 to 1) szabályozza, mennyire kövesse vagy őrizze meg a forrást, a `control_video_url` pedig előre kiszámított vezérlőjelet biztosíthat. A `resolution` automatikus vagy rögzített előbeállításokat kínál, például négyzetes, illetve 16:9 álló vagy fekvő formátumot.

- Model id: `ltx-2.3-quality/reference-video-to-video`
- Made by: Lightricks
- Category: Video to Video
- Output: video
- Price per megapixel of your output video: $0.00241 / megapixel of output video (cheapest run $0.003 (3 API credits))
- Run: `POST https://api.doitong.ru/v1/run/ltx-2.3-quality/reference-video-to-video`
- Quote: `POST https://api.doitong.ru/v1/quote/ltx-2.3-quality/reference-video-to-video`
- Docs page: https://doitong.com/hu/developers/models/ltx-2.3-quality/reference-video-to-video

## Pricing

Price: **$0.00241 / megapixel of output video**. Price per megapixel of your output video: the input files are measured before the run (length, resolution, frame rate). The quote measures the same files and is exactly what the run charges.

The full example input below costs $0.27 = 270 API credits (112 MP output video × $0.002408).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.ru/v1/quote/ltx-2.3-quality/reference-video-to-video` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

Send either the canonical name or the native field name (not both). Canonical names are the same across models.

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  |  | A generálást irányító prompt. |
| `video_url` | `video` | string (video URL) | yes |  |  | A mozgás és a struktúra vezérléséhez használt referencia-videóra mutató URL. |
| `control_video_url` |  | string (video URL) \| null | no |  |  | Opcionális, előre kiszámított vezérlővideó, amely a beépített vezérlőbecslés helyett használatos, ha a `skip_control_preprocess` beállítással együtt van megadva. Az újramintavételezés után, a kimeneti méretekhez és a képkockaszámhoz igazítva, közvetlen vezérlőjellé válik. A videó például már renderelt mélység-, él- vagy pózkompozitot is tartalmazhat. |
| `skip_control_preprocess` |  | boolean | no | `false` |  | Közvetlen vezérlési mód, amely a `control_video_url` használatával belső mélység-, él- vagy pózbecslés helyett közvetlen vezérlést végez; URL nélkül ez a beállítás figyelmen kívül marad. Ebben a módban a kimeneti méretezés a megadott méreteket 64-es igazítással követi, hogy az RGB- és vezérlővideó illeszkedjen, míg az `auto` a forrás méretét és képarányát használja az LTX korlátain belül. |
| `preserve_original_video` |  | boolean | no | `false` |  | Az eredeti videó megőrzési módja, amely csak a `skip_control_preprocess`, a `video_url` és a `control_video_url` együttes használatával érhető el. Alapértelmezés szerint le van tiltva, így a normál vezérlőfeldolgozás változatlan marad; engedélyezésekor a generálás a `video_url` alapján indul, miközben a `control_video_url` szerkezeti vezérlését megtartja. A `strength` értékkel végzett zajtalanítás határozza meg a megőrzés mértékét; az alacsonyabb értékek több eredeti képpontot tartanak meg. |
| `image_url` | `image` | string (image URL) \| null | no |  |  | Opcionális képanker-stílus vagy karakterazonosság az első képkocka kulcsképeként. |
| `mid_image_url` |  | string (image URL) \| null | no |  |  | Opcionális képanker-megjelenés a klip közepe táján, amely kiegészíti a kezdeti `image_url` kulcsképet. Segít, hogy a megjelenés kövesse a kamera mozgását, és ne sodródjon el; `image_url` szükséges hozzá. |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | Opcionális képanker-megjelenés a klip utolsó képkockáján. Akkor hasznos, ha a kameramozgás a kezdőképtől eltérő helyen ér véget; `image_url` szükséges hozzá. |
| `video_strength` |  | number | no | `0.6` | 0 – 1 | A referencia-videó mozgásának és struktúrájának módosítási szabadságát ez a kondicionálási erősség vezérli: az alacsonyabb értékek nagyobb változtatást engednek. |
| `strength` |  | number | no | `1` | 0 – 1 | A referencia-videóból videóba mintavételezés zajtalanítási vezérlése, amelynek hatása a `preserve_original_video` beállítástól függ. Kikapcsolt módban csak lerövidíti a zajtalanítási ütemezést; bekapcsolva a forráspixelek átalakítását vezérli: az 1.0 mindent újragenerál, az alacsonyabb értékek pedig többet őriznek meg (például a 0.5 körülbelül 50%-ot). |
| `num_frames` |  | integer | no | `121` | 9 – 481 | A kimenet képkockaszáma, amelyet a felbontás és a képkockák szorzatán alapuló IC-LoRA-stabilitási keret korlátoz. A 422-es válasz azt jelenti, hogy a keret túllépésre került: csökkentsd a felbontást vagy a `num_frames` értékét. A keret körülbelül 150 képkockát engedélyez 720p-osztályú méreteknél, kisebb méreteknél pedig többet. |
| `resolution` |  | object {width, height} \| enum (string) | no | `auto` | `auto`, `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | A kimeneti videó méretei, amelyek a stabil időtartamra is hatással vannak: a kisebb méretek több képkockát engednek, a nagyobbak pedig csökkentik a maximumot. A beépített vezérlőbecslés a méretet a hivatalos vezérlési munkafolyamathoz közel tartja; a `skip_control_preprocess` és a `control_video_url` használatával végzett közvetlen vezérlés ehelyett a megadott méreteket 64px-es igazítással követi. Közvetlen vezérlési módban az `auto` a forrás méretét és képarányát örökli az LTX korlátain belül. |
| `frames_per_second` |  | number | no | `24` | 1 – 60 | A kimeneti videó képkockasebessége, képkocka/másodpercben mérve. |
| `num_inference_steps` |  | integer | no | `15` | 8 – 30 | A futtatandó következtetési lépések száma, legfeljebb 30; változatlanul hagyva 15 lépést használ. |
| `guidance_scale` |  | number | no | `1` | 1 – 20 | A classifier-free guidance beállítása ezzel a skálával; alapértelmezett hangolása a jó minőséget és a gyors generálást egyaránt célozza. |
| `generate_audio` |  | boolean | no | `true` |  | A visszaadott MP4 hangsáv-kapcsolója: kikapcsolva csak videót tartalmazó fájlt ad, bekapcsolva hangot is. |
| `negative_prompt` |  | string | no | `color distortion, overexposure, static, blurry details, subtitles, style, artwork, painting, frame, still, dim overall tone, worst quality, low quality, JPEG compression artifacts, ugly, mutilated, extra fingers, poorly drawn hands, poorly drawn face, deformed, disfigured, malformed limbs, fused fingers, motionless frame, cluttered background, three legs, crowded background, walking backwards` |  | A generálás során kerülendő tartalmat meghatározó negatív prompt. |
| `seed` |  | integer \| null | no |  |  | A generálást reprodukálhatóvá tevő seed. A None érték véletlenszerű seedet választ. |
| `enable_prompt_expansion` |  | boolean | no | `true` |  | A promptbővítés engedélyezését vezérli. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Meghatározza, hogy engedélyezve van-e a biztonsági ellenőrzés. |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | A kimeneti videóra alkalmazott minőségi előbeállítás. |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | A létrejövő videó írási módja. |

File parameters (`video`, `control_video_url`, `image`, `mid_image_url`, `end_image`) take a public `https://` URL, a `data:` URI up to 10 MB, or the `file_url` of an upload from `POST /files`.

## Example input

Required parameters only:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
  "video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
```

A fuller example:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
  "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.ru/v1/run/ltx-2.3-quality/reference-video-to-video?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.ru/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.ru/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/ltx-2.3-quality/reference-video-to-video?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.ru/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/ltx-2.3-quality/reference-video-to-video", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.ru/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "ltx-2.3-quality/reference-video-to-video",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
        "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "ltx-2.3-quality/reference-video-to-video",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 270,
    "usd": "0.27",
    "charged": 270,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
  },
  "output": {
    "video": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_name": "0-output.mp4",
      "file_size": 1843200
    },
    "seed": 42,
    "prompt": "string"
  },
  "outputs": [
    {
      "type": "video",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_size": 1843200,
      "width": 1280,
      "height": 720,
      "duration": 5,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `video` | object {url, content_type, file_name, file_size} | A modell által létrehozott videó. |
| `seed` | integer | A generálás során ténylegesen alkalmazott seed. |
| `prompt` | string | Generálási prompt, a használat előtt alkalmazott esetleges bővítéssel együtt. |

## Related models

- [Ltx 2.3 Quality · Text to Video](https://doitong.com/developers/models/ltx-2.3-quality/text-to-video.md) (`ltx-2.3-quality/text-to-video`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Text to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-quality/text-to-video/lora.md) (`ltx-2.3-quality/text-to-video/lora`): $0.00271 / megapixel of output video
- [Ltx 2.3 Quality · Image to Video](https://doitong.com/developers/models/ltx-2.3-quality/image-to-video.md) (`ltx-2.3-quality/image-to-video`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Image to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-quality/image-to-video/lora.md) (`ltx-2.3-quality/image-to-video/lora`): $0.00271 / megapixel of output video
- [Ltx 2.3 Quality · Ingredient](https://doitong.com/developers/models/ltx-2.3-quality/ingredient.md) (`ltx-2.3-quality/ingredient`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Clean Plate](https://doitong.com/developers/models/ltx-2.3-quality/clean-plate.md) (`ltx-2.3-quality/clean-plate`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Colorization](https://doitong.com/developers/models/ltx-2.3-quality/colorization.md) (`ltx-2.3-quality/colorization`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Cross Eyed](https://doitong.com/developers/models/ltx-2.3-quality/cross-eyed.md) (`ltx-2.3-quality/cross-eyed`): $0.00241 / megapixel of output video

## Links

- HTML page: https://doitong.com/developers/models/ltx-2.3-quality/reference-video-to-video
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=ltx-2.3-quality/reference-video-to-video
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/ltx-2.3-quality/reference-video-to-video
