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

> 使用必要 `loras` 欄位中提供的自訂 LoRA 延伸現有影片

根據 `prompt` 延續 `video_url` 中的片段，並需要 `loras` 清單以套用自訂 LoRA。`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-TW/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
