# LTX-2.3 22B · Extend Video API

> ویدیوی موجود را بر اساس پرامپت ادامه می‌دهد، با صوت تولیدشده و تصویر پایانی اختیاری

`video_url` و یک `prompt` می‌گیرد و ادامه‌ای شامل `num_frames` فریم (از 9 تا 481) تولید می‌کند. `end_image_url` اختیاری محل پایان گسترش را تعیین می‌کند. `match_input_fps` نرخ فریم منبع را حفظ می‌کند، `generate_audio` صدا می‌افزاید و مقدار پیش‌فرض `video_size`، auto است. خروجی می‌تواند mp4، webm، mov یا GIF باشد.

- Model id: `ltx-2.3-22b/extend-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/extend-video`
- Quote: `POST https://api.doitong.com/v1/quote/ltx-2.3-22b/extend-video`
- Docs page: https://doitong.com/fa/developers/models/ltx-2.3-22b/extend-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.18 = 180 API credits (112 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/extend-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 |  |  | نشانی اینترنتی ویدیویی که قرار است گسترش یابد. |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | برای تعیین نحوه پایان ویدیوی گسترش‌یافته، تصویر فریم پایانی را با نشانی اینترنتی ارائه کنید. |
| `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 تقطیر را برای هر گذر پس از گذر اول کنترل می‌کند. |
| `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
{
  "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/extend-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/extend-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/extend-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/extend-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/extend-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": 180,
    "usd": "0.18",
    "charged": 180,
    "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": "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.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 · 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 · 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
- 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
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/ltx-2.3-22b/extend-video
