# LTX-2.3 22B · Extend Video · LoRA API

> 使用必需的 `loras` 字段中提供的自定义 LoRA 延展现有视频

根据 `prompt` 延续 `video_url` 中的片段，并要求提供用于应用自定义 LoRA 的 `loras` 列表。`num_frames` 范围为 9 到 481，`end_image_url` 可定义末帧，`match_input_fps` 保持源视频帧率。支持音频生成、摄像机 LoRA 和多种采样设置。

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

## Pricing

Price: **$0.00181 / 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.203 = 203 API credits (112 MP output video × $0.001805).

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/extend-video/lora` 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。 |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | 通过 URL 提供结束帧图像，以定义延长视频的结尾。 |
| `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 | 通过时空引导（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 | 通过时空引导（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 会关闭估计；否则该值指定 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` | 结果视频的写入模式。 |
| `loras` |  | array of object {path, weight_name, scale} | yes |  |  | 用于生成的 LoRA 选择。 |
| `loras[].path` |  | string | yes |  |  | LoRA 权重位置，以 URL 或 owner/repo 格式的 HuggingFace 仓库 ID 提供。 |
| `loras[].weight_name` |  | string \| null | no |  |  | 用于在 HuggingFace 仓库的多个权重中进行选择的 LoRA 权重名称；仅包含多个权重的仓库需要此项。除非 `path` 指向 HuggingFace 仓库，否则此设置无效。 |
| `loras[].scale` |  | number | no | `1` | 0 – 4 | 应用于 LoRA 的缩放因子，范围为 0.0 到 4.0。 |
| `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 缩放值。 |
| `extend_direction` |  | enum (string) | no | `forward` | `forward`, `backward` | 视频延长方向：选择 'backward' 在开头之前添加内容，或选择 'forward' 在结尾之后添加内容。 |
| `num_context_frames` |  | integer | no | `25` | 0 – 121 | 延长视频时用于提供上下文的帧数。 |
| `video_strength` |  | number | no | `1` | 0 – 1 | 该条件强度控制修改视频内容的自由度：设置越小，模型的发挥空间越大。 |
| `audio_strength` |  | number | no | `1` | 0 – 1 | 该条件强度控制修改音频内容的自由度：设置越小，模型的发挥空间越大。 |
| `end_image_strength` |  | number | no | `1` | 0 – 1 | 控制结束图像对生成视频的影响程度。 |

File parameters (`video`, `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
{
  "loras": [
    {
      "path": "https://example.com/your-file.safetensors"
    }
  ],
  "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
{
  "loras": [
    {
      "path": "https://example.com/your-file.safetensors"
    }
  ],
  "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/extend-video/lora?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "loras": [
      {
        "path": "https://example.com/your-file.safetensors"
      }
    ],
    "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/extend-video/lora?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "loras": [
      {
        "path": "https://example.com/your-file.safetensors"
      }
    ],
    "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 = {
    "loras": [
        {
            "path": "https://example.com/your-file.safetensors",
        },
    ],
    "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/extend-video/lora", 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/extend-video/lora",
      "input": {
        "loras": [
          {
            "path": "https://example.com/your-file.safetensors"
          }
        ],
        "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/extend-video/lora",
  "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": 203,
    "usd": "0.203",
    "charged": 203,
    "refunded": 0
  },
  "input": {
    "loras": [
      {
        "path": "https://example.com/your-file.safetensors"
      }
    ],
    "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": "A woman stands still amid a busy neon-lit street at night. The camera slowly dollies in toward her face as people blur past, their motion emphasizing her calm presence. City lights flicker and reflections shift across her denim jacket."
  },
  "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 · Reference Video to Video](https://doitong.com/developers/models/ltx-2.3-22b/reference-video-to-video.md) (`ltx-2.3-22b/reference-video-to-video`): $0.00161 / 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/extend-video/lora
- 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/extend-video/lora
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/ltx-2.3-22b/extend-video/lora
