# 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.ru/v1/run/ltx-2.3-22b/reference-video-to-video`
- Quote: `POST https://api.doitong.ru/v1/quote/ltx-2.3-22b/reference-video-to-video`
- Docs page: https://doitong.com/zh/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.ru/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 |  |  | 用于标识参考视频的 URL。 |
| `audio_url` | `audio` | string (audio URL) \| null | no |  |  | 可选的音频 URL，用于提供视频的音轨。省略时，如果源视频包含音频，则使用源视频的音频。 |
| `image_url` | `image` | string (image URL) \| null | no |  |  | 可选的图像 URL，用于定义视频的起始帧。 |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | 定义视频结束帧的图像 URL。 |
| `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 | 视频引导设置：提高该值可增强生成内容的一致性和聚焦程度。使用 classifier-free guidance (CFG)。 |
| `video_stg_scale` |  | number | no | `0` | 0 – 20 | 通过 Spatiotemporal Guidance (STG) 比例控制视频的一致性和聚焦程度；提高该设置可增强两者。 |
| `video_rescaling_scale` |  | number | no | `0.7` | 0 – 1 | 视频重缩放调整值，以比例形式平衡 classifier-free guidance 与时空引导。 |
| `video_modality_scale` |  | number | no | `3` | 0 – 10 | 视频模态调整值，以比例形式平衡视频和音频的贡献。 |
| `audio_cfg_scale` |  | number | no | `7` | 1 – 20 | 音频引导设置：提高该值可增强生成内容的一致性和聚焦程度。使用 classifier-free guidance (CFG)。 |
| `audio_stg_scale` |  | number | no | `0` | 0 – 20 | 通过 Spatiotemporal Guidance (STG) 比例控制音频的一致性和聚焦程度；提高该设置可增强两者。 |
| `audio_rescaling_scale` |  | number | no | `0.7` | 0 – 1 | 音频重缩放调整值，以比例形式平衡 classifier-free guidance 与时空引导。 |
| `audio_modality_scale` |  | number | no | `3` | 0 – 10 | 音频模态调整值，以比例形式平衡视频和音频的贡献。 |
| `gradient_estimation_gamma` |  | number | no | `2` | 0 – 10 | 去噪梯度估计设置：0 会关闭估计；否则，该值指定 gamma。 |
| `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 |  |  | 用于初始化随机数生成的种子值。 |
| `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 | 控制第一轮 distill LoRA 缩放值，设为 0 可关闭。 |
| `distill_lora_second_pass_scale` |  | number | no | `0.5` | 0 – 1 | 控制第一轮之后每一轮的 distill 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.ru/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.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-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.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-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.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-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.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, width, height, fps, duration, num_frames} | 模型生成的视频。 |
| `seed` | integer | 用于初始化随机数生成的种子值。 |
| `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.ru/v1/models/ltx-2.3-22b/reference-video-to-video
