# LTX-2.3 22B · Reference Video to Video API

> ویدیوی جدیدی با هدایت ویدیوی مرجع و امکان جایگزینی صدا و فریم‌های اول و آخر تولید می‌کند

یک `prompt` و `video_url` مرجع می‌گیرد. `audio_url` اختیاری صدا را جایگزین می‌کند؛ در صورت حذف، صدای ویدیوی ورودی استفاده می‌شود. `image_url` و `end_image_url` می‌توانند فریم اول و آخر را ثابت کنند. با فعال‌بودن `match_video_length` تعداد فریم از مرجع پیروی می‌کند؛ در غیر این صورت `num_frames` (از 9 تا 481) اعمال می‌شود.

- Model id: `ltx-2.3-22b/reference-video-to-video`
- Made by: Lightricks
- Category: Video to Video
- Output: video
- Price per megapixel of your output video: $0.00161 / megapixel of output video (cheapest run $0.002 (2 API credits))
- Run: `POST https://api.doitong.com/v1/run/ltx-2.3-22b/reference-video-to-video`
- Quote: `POST https://api.doitong.com/v1/quote/ltx-2.3-22b/reference-video-to-video`
- Docs page: https://doitong.com/fa/developers/models/ltx-2.3-22b/reference-video-to-video

## Pricing

Price: **$0.00161 / 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.453 = 453 API credits (282 MP output video × $0.001605).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.com/v1/quote/ltx-2.3-22b/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 |  |  | پرامپت استفاده‌شده به‌عنوان مبنای تولید ویدیو. |
| `video_url` | `video` | string (video URL) | yes |  |  | نشانی اینترنتی شناسایی‌کننده ویدیوی مرجع. |
| `audio_url` | `audio` | string (audio URL) \| null | no |  |  | نشانی اینترنتی اختیاری صوت برای تأمین قطعه صوتی ویدیو. در صورت حذف، اگر ویدیوی منبع صوت داشته باشد از صوت آن استفاده می‌شود. |
| `image_url` | `image` | string (image URL) \| null | no |  |  | نشانی اینترنتی اختیاری تصویر که فریم آغازین ویدیو را مشخص می‌کند. |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | نشانی اینترنتی تصویر که فریم پایانی ویدیو را مشخص می‌کند. |
| `match_video_length` |  | boolean | no | `true` |  | حالت انتخاب تعداد فریم: حالت غیرفعال از `num_frames` استفاده می‌کند و حالت فعال تعداد را با استفاده از FPS و مدت ویدیو محاسبه می‌کند. |
| `num_frames` |  | integer | no | `121` | 9 – 481 | تعداد فریم خروجی تولیدشده. |
| `video_size` |  | object {width, height} \| enum (string) | no | `auto` | `auto`, `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | ابعاد ویدیوی تولیدشده. |
| `generate_audio` |  | boolean | no | `true` |  | مشخص می‌کند که ویدیو شامل صوت تولیدشده باشد یا نه. |
| `use_multiscale` |  | boolean | no | `true` |  | کلید فعال‌سازی تولید چندمقیاسی برای بهبود انسجام و جزئیات. با True، یک ویدیوی مقدماتی کوچک‌تر تولید می‌شود تا تولید دوم را هدایت کند؛ اندازه تولید دوم با ابعاد درخواستی برابر یا بزرگ‌تر است. |
| `match_input_fps` |  | boolean | no | `true` |  | بازنویسی نرخ فریم خروجی که در صورت فعال بودن، FPS هدف پیش‌فرض را با FPS ویدیوی منبع جایگزین می‌کند. |
| `fps` |  | number | no | `24` | 1 – 60 | نرخ فریم ویدیوی خروجی، برحسب فریم بر ثانیه. |
| `num_inference_steps` |  | integer | no | `40` | 8 – 50 | تعداد گام‌های استنتاج انجام‌شده. |
| `video_cfg_scale` |  | number | no | `3` | 1 – 20 | تنظیم هدایت ویدیو: برای انسجام و تمرکز بیشتر در محتوای تولیدشده، آن را افزایش دهید. از هدایت بدون طبقه‌بند (CFG) استفاده می‌کند. |
| `video_stg_scale` |  | number | no | `0` | 0 – 20 | کنترل انسجام و تمرکز ویدیو از طریق مقیاس هدایت Spatiotemporal (STG)؛ برای تقویت هر دو ویژگی، این مقدار را افزایش دهید. |
| `video_rescaling_scale` |  | number | no | `0.7` | 0 – 1 | تنظیم باز‌مقیاس‌گذاری ویدیو برای متعادل‌سازی هدایت بدون طبقه‌بند و هدایت فضازمانی به‌صورت نسبت. |
| `video_modality_scale` |  | number | no | `3` | 0 – 10 | تنظیم وجه ویدیو برای متعادل‌سازی سهم ویدیو و صوت به‌صورت نسبت. |
| `audio_cfg_scale` |  | number | no | `7` | 1 – 20 | تنظیم هدایت صوت: برای انسجام و تمرکز بیشتر در محتوای تولیدشده، آن را افزایش دهید. از هدایت بدون طبقه‌بند (CFG) استفاده می‌کند. |
| `audio_stg_scale` |  | number | no | `0` | 0 – 20 | کنترل انسجام و تمرکز صوت از طریق مقیاس هدایت Spatiotemporal (STG)؛ برای تقویت هر دو ویژگی، این مقدار را افزایش دهید. |
| `audio_rescaling_scale` |  | number | no | `0.7` | 0 – 1 | تنظیم باز‌مقیاس‌گذاری صوت برای متعادل‌سازی هدایت بدون طبقه‌بند و هدایت فضازمانی به‌صورت نسبت. |
| `audio_modality_scale` |  | number | no | `3` | 0 – 10 | تنظیم وجه صوت برای متعادل‌سازی سهم ویدیو و صوت به‌صورت نسبت. |
| `gradient_estimation_gamma` |  | number | no | `2` | 0 – 10 | تنظیم برآورد گرادیان حذف نویز: مقدار 0 برآورد را خاموش می‌کند؛ در غیر این صورت، مقدار ارائه‌شده گاما را مشخص می‌کند. |
| `use_restart_sampling` |  | boolean | no | `false` |  | کلید نمونه‌برداری مجدد برای بهبود احتمالی کیفیت ویدیو: فعال‌سازی آن در هر گام حذف نویز کمی نویز وارد می‌کند. |
| `scheduler` |  | enum (string) | no | `ltx2` | `ltx2`, `linear_quadratic`, `beta` | انتخاب زمان‌بند. |
| `acceleration` |  | enum (string) | no | `regular` | `none`, `regular`, `high`, `full` | سطح شتاب اعمال‌شده به پردازش. |
| `camera_lora` |  | enum (string) | no | `none` | `dolly_in`, `dolly_out`, `dolly_left`, `dolly_right`, `jib_up`, `jib_down`, `static`, `none` | انتخاب LoRA دوربین برای کنترل دقیق‌تر حرکت در ویدیوی تولیدشده نسبت به پرامپت‌های صرفاً حرکتی دوربین. |
| `camera_lora_scale` |  | number | no | `1` | 0 – 1 | قدرت LoRA دوربین برای کنترل دقیق‌تر حرکت در ویدیوی تولیدشده نسبت به پرامپت‌های صرفاً حرکتی دوربین. |
| `negative_prompt` |  | string | no | `news broadcast, 3d animation, computer graphics, pc game, console game, video game, cartoon, childish, watermark, logo, text, on screen text, subtitles, titles, signature, slowmo, static` |  | پرامپت منفی مورد استفاده هنگام تولید ویدیو. |
| `seed` |  | integer \| null | no |  |  | مقدار seed که تولید اعداد تصادفی را آغاز می‌کند. |
| `enable_prompt_expansion` |  | boolean | no | `true` |  | مشخص می‌کند گسترش پرامپت فعال باشد یا نه. |
| `enable_safety_checker` |  | boolean | no | `true` |  | مشخص می‌کند بررسی ایمنی فعال باشد یا نه. |
| `video_output_type` |  | enum (string) | no | `X264 (.mp4)` | `X264 (.mp4)`, `VP9 (.webm)`, `PRORES4444 (.mov)`, `GIF (.gif)` | نوع خروجی ویدیوی حاصل. |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | سطح کیفیت ویدیوی حاصل. |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | حالت نوشتن ویدیوی حاصل. |
| `distill_lora_first_pass_scale` |  | number | no | `0.2` | 0 – 1 | مقیاس LoRA تقطیر گذر اول را کنترل می‌کند؛ برای خاموش کردن آن از 0 استفاده کنید. |
| `distill_lora_second_pass_scale` |  | number | no | `0.5` | 0 – 1 | مقیاس LoRA تقطیر را برای هر گذر پس از گذر اول کنترل می‌کند. |
| `video_strength` |  | number | no | `1` | 0 – 1 | آزادی تغییر محتوای ویدیو با این شدت شرطی‌سازی کنترل می‌شود: مقادیر کمتر آزادی بیشتری به مدل می‌دهند. |
| `audio_strength` |  | number | no | `1` | 0 – 1 | آزادی تغییر محتوای صوت با این شدت شرطی‌سازی کنترل می‌شود: مقادیر کمتر آزادی بیشتری به مدل می‌دهند. |
| `preprocessor` |  | enum (string) | no | `none` | `depth`, `canny`, `pose`, `none` | پیش‌پردازشگر اعمال‌شده هنگام تولید. |
| `ic_lora_type` |  | enum (string) | no | `union` | `match_preprocessor`, `union`, `detailer`, `none` | گونه IC LoRA اعمال‌شده هنگام تولید. |

File parameters (`video`, `audio`, `image`, `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.com/v1/run/ltx-2.3-22b/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.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.com/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-22b/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.com/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-22b/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.com/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-22b/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-22b/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": 453,
    "usd": "0.453",
    "charged": 453,
    "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,
      "width": 1024,
      "height": 768,
      "fps": 1.0,
      "duration": 5,
      "num_frames": 1
    },
    "seed": 42,
    "prompt": "black-and-white video, a cowboy walks through a dusty town, film grain"
  },
  "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.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `video` | object {url, content_type, file_name, file_size, width, height, fps, duration, num_frames} | ویدیوی تولیدشده توسط مدل. |
| `seed` | integer | مقدار seed برای مقداردهی اولیه تولید اعداد تصادفی. |
| `prompt` | string | پرامپت مورد استفاده برای هدایت تولید. |

## Related models

- [LTX-2.3 22B · Text to Video](https://doitong.com/developers/models/ltx-2.3-22b/text-to-video.md) (`ltx-2.3-22b/text-to-video`): $0.00161 / megapixel of output video
- [LTX-2.3 22B · Text to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-22b/text-to-video/lora.md) (`ltx-2.3-22b/text-to-video/lora`): $0.00181 / megapixel of output video
- [LTX-2.3 22B · Image to Video](https://doitong.com/developers/models/ltx-2.3-22b/image-to-video.md) (`ltx-2.3-22b/image-to-video`): $0.00161 / megapixel of output video
- [LTX-2.3 22B · Image to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-22b/image-to-video/lora.md) (`ltx-2.3-22b/image-to-video/lora`): $0.00181 / megapixel of output video
- [LTX 2.3 22B](https://doitong.com/developers/models/ltx-2.3-22b/reference-video-to-video/lora.md) (`ltx-2.3-22b/reference-video-to-video/lora`): $0.00181 / megapixel of output video
- [LTX-2.3 22B · Extend Video](https://doitong.com/developers/models/ltx-2.3-22b/extend-video.md) (`ltx-2.3-22b/extend-video`): $0.00161 / megapixel of output video
- [LTX-2.3 22B · Extend Video · LoRA](https://doitong.com/developers/models/ltx-2.3-22b/extend-video/lora.md) (`ltx-2.3-22b/extend-video/lora`): $0.00181 / megapixel of output video
- [LTX-2.3 22B · Video to Video](https://doitong.com/developers/models/ltx-2.3-22b/video-to-video.md) (`ltx-2.3-22b/video-to-video`): $0.00161 / megapixel of output video

## Links

- HTML page: https://doitong.com/developers/models/ltx-2.3-22b/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-22b/reference-video-to-video
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/ltx-2.3-22b/reference-video-to-video
