# Ltx 2.3 Quality · Extend Video API

> ویدیو را به جلو یا عقب ادامه می‌دهد و امکان افزودن تصویر فریم کلیدی پایانی را فراهم می‌کند

یک کلیپ موجود را با تولید تصاویر جدید بر اساس `prompt` الزامی ادامه می‌دهد. `extend_direction` برای ادامه از انتها `forward` یا برای ایجاد شروعی جدید `backward` است. `num_context_frames` (9 تا 121) میزان هم‌پوشانی با منبع را تعیین می‌کند و `num_frames` (9 تا 481) طول بخش را مشخص می‌کند. `end_image_url` اختیاری، فریم کلیدی پایانی را ثابت می‌کند و `match_input_fps` نرخ فریم منبع را حفظ می‌کند.

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

## Pricing

Price: **$0.00241 / 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.27 = 270 API credits (112 MP output video × $0.002408).

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-quality/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 |  |  | نشانی اینترنتی ویدیویی که قرار است گسترش یابد. |
| `extend_direction` |  | enum (string) | no | `forward` | `forward`, `backward` | حالت گسترش ویدیو: 'backward' آغاز جدیدی ایجاد می‌کند، درحالی‌که 'forward' ویدیو را پس از پایان آن ادامه می‌دهد. |
| `num_frames` |  | integer | no | `121` | 9 – 481 | تعداد فریم گسترش، مشمول بودجه تولید پایدار بر اساس وضوح ضربدر فریم‌ها: در 24 fps، تقریباً 20 ثانیه برای رده 480p، 11 ثانیه برای رده 720p یا 5 ثانیه برای رده 1080p. درخواست‌های فراتر از بودجه کد 422 برمی‌گردانند؛ `num_frames` را کاهش دهید یا وضوح کوچک‌تری انتخاب کنید. این تعداد شامل `num_context_frames` هم‌پوشان با منبع است، بنابراین مدت افزوده تقریباً (`num_frames` - `num_context_frames`) / `frames_per_second` ثانیه است. |
| `num_context_frames` |  | integer | no | `25` | 9 – 121 | تعداد فریم منبع درخواستی برای زمینه/هم‌پوشانی گسترش که با تعداد فریم‌های موجود منبع محدود می‌شود. تعداد برای انطباق با شبکه LTX یعنی 8k+1 رو به پایین گرد می‌شود. |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | تصویر keyframe اختیاری که هنگام گسترش رو به عقب، فریم اول جدید و هنگام گسترش رو به جلو، فریم پایانی جدید را تعیین می‌کند. |
| `end_image_strength` |  | number | no | `1` | 0 – 1 | شدت شرطی‌سازی اختیاری keyframe پایانی: کاهش آن آزادی بیشتری به مدل می‌دهد، درحالی‌که 1.0 تطبیق دقیق را اعمال می‌کند. |
| `resolution` |  | object {width, height} \| enum (string) | no | `auto` | `auto`, `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | ابعاد ویدیوی تولیدشده که با افزایش‌های 32px هم‌تراز شده‌اند—برای مثال، 1920x1080 به 1888x1056 تبدیل می‌شود—و منبع برای خروجی دوخت‌شده به این ابعاد تغییر اندازه می‌یابد. گسترش‌های پایدار در وضوح کمتر طولانی‌تر و در وضوح بیشتر کوتاه‌تر هستند. انتخاب 'auto' ابعاد و نسبت ابعاد منبع را تا حد مجاز LTX حفظ می‌کند. |
| `match_input_fps` |  | boolean | no | `true` |  | تطبیق نرخ فریم خروجی با منبع در صورت فعال بودن، که `frames_per_second` را بازنویسی می‌کند. FPS منبع به عدد صحیح گرد و به بازه پشتیبانی‌شده محدود می‌شود. |
| `frames_per_second` |  | number | no | `24` | 1 – 60 | نرخ فریم ویدیوی خروجی، اندازه‌گیری‌شده برحسب فریم بر ثانیه. |
| `video_strength` |  | number | no | `1` | 0 – 1 | شدت شرطی‌سازی زمینه منبع: کاهش آن آزادی بیشتری به مدل می‌دهد. در 1.0، فریم‌های هم‌پوشان به منبع قفل می‌مانند و گذار یکپارچه می‌شود. |
| `num_inference_steps` |  | integer | no | `15` | 8 – 30 | تعداد گام‌های استنتاج را تعیین کنید؛ حداکثر 30 است و باقی گذاشتن مقدار بدون تغییر از 15 استفاده می‌کند. |
| `guidance_scale` |  | number | no | `1` | 1 – 20 | هدایت بدون طبقه‌بند را با این مقیاس تنظیم کنید؛ تنظیم پیش‌فرض آن هم کیفیت بالا و هم تولید سریع را هدف می‌گیرد. |
| `generate_audio` |  | boolean | no | `true` |  | کلید صوت گسترش: حالت خاموش بخش افزوده را بی‌صدا می‌گذارد و قطعه صوتی ویدیوی منبع را حفظ می‌کند. حالت روشن برای گسترش صوت تولید و آن را در محل اتصال با منبع crossfade می‌کند. |
| `negative_prompt` |  | string | no | `color distortion, overexposure, static, blurry details, subtitles, style, artwork, painting, frame, still, dim overall tone, worst quality, low quality, JPEG compression artifacts, ugly, mutilated, extra fingers, poorly drawn hands, poorly drawn face, deformed, disfigured, malformed limbs, fused fingers, motionless frame, cluttered background, three legs, crowded background, walking backwards` |  | پرامپت منفی که مشخص می‌کند تولید باید از چه چیزهایی پرهیز کند. |
| `seed` |  | integer \| null | no |  |  | Seed برای تکرارپذیر کردن تولید. تنظیم آن روی None، Seed را به‌صورت تصادفی انتخاب می‌کند. |
| `enable_prompt_expansion` |  | boolean | no | `true` |  | مشخص می‌کند گسترش پرامپت فعال باشد یا نه. |
| `enable_safety_checker` |  | boolean | no | `true` |  | مشخص می‌کند بررسی ایمنی فعال باشد یا نه. |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | پیش‌تنظیم کیفیت اعمال‌شده به ویدیوی خروجی. |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | حالت نوشتن ویدیوی حاصل. |

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-quality/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-quality/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-quality/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-quality/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-quality/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": 270,
    "usd": "0.27",
    "charged": 270,
    "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
    },
    "seed": 42,
    "prompt": "string"
  },
  "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} | ویدیوی تولیدشده توسط مدل. |
| `seed` | integer | seed واقعی اعمال‌شده هنگام تولید. |
| `prompt` | string | پرامپت تولید، شامل هر گسترشی که پیش از استفاده اعمال شده است. |

## Related models

- [Ltx 2.3 Quality · Text to Video](https://doitong.com/developers/models/ltx-2.3-quality/text-to-video.md) (`ltx-2.3-quality/text-to-video`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Text to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-quality/text-to-video/lora.md) (`ltx-2.3-quality/text-to-video/lora`): $0.00271 / megapixel of output video
- [Ltx 2.3 Quality · Image to Video](https://doitong.com/developers/models/ltx-2.3-quality/image-to-video.md) (`ltx-2.3-quality/image-to-video`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Image to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-quality/image-to-video/lora.md) (`ltx-2.3-quality/image-to-video/lora`): $0.00271 / megapixel of output video
- [Ltx 2.3 Quality · Ingredient](https://doitong.com/developers/models/ltx-2.3-quality/ingredient.md) (`ltx-2.3-quality/ingredient`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Clean Plate](https://doitong.com/developers/models/ltx-2.3-quality/clean-plate.md) (`ltx-2.3-quality/clean-plate`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Colorization](https://doitong.com/developers/models/ltx-2.3-quality/colorization.md) (`ltx-2.3-quality/colorization`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Cross Eyed](https://doitong.com/developers/models/ltx-2.3-quality/cross-eyed.md) (`ltx-2.3-quality/cross-eyed`): $0.00241 / megapixel of output video

## Links

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