# Ltx 2.3 Quality · Extend Video API

> Huendeleza video kwenda mbele au nyuma, ikiwa na picha ya hiari ya fremu muhimu ya mwisho

Huendeleza klipu iliyopo kwa kuzalisha video mpya inayoongozwa na `prompt` ya lazima. `extend_direction` ni `forward` ili kuendelea kutoka mwisho au `backward` ili kuunda mwanzo mpya. `num_context_frames` (9 hadi 121) huweka kiasi cha chanzo kinachopishana, na `num_frames` (9 hadi 481) huweka urefu wa sehemu. `end_image_url` ya hiari huweka fremu muhimu ya mwisho, na `match_input_fps` hudumisha kasi ya fremu ya chanzo.

- 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/sw/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 |  |  | Kidokezo kinachobainisha mwendelezo unaotakiwa wa video. |
| `video_url` | `video` | string (video URL) | yes |  |  | URL inayoelekeza kwenye video itakayopanuliwa. |
| `extend_direction` |  | enum (string) | no | `forward` | `forward`, `backward` | Hali ya upanuzi wa video: 'backward' huunda mwanzo mpya, huku 'forward' ikiendeleza video zaidi ya mwisho wake. |
| `num_frames` |  | integer | no | `121` | 9 – 481 | Idadi ya fremu za upanuzi, iliyo chini ya bajeti thabiti ya uzalishaji ya mwonekano unaozidishwa kwa fremu: katika 24 fps, takriban sekunde 20 kwa daraja la 480p, sekunde 11 kwa daraja la 720p, au sekunde 5 kwa daraja la 1080p. Maombi yanayozidi bajeti hurudisha 422; punguza `num_frames` au chagua mwonekano mdogo. Idadi inajumuisha `num_context_frames` zinazoingiliana na chanzo, kwa hiyo muda ulioongezwa ni takriban (`num_frames` - `num_context_frames`) / `frames_per_second` sekunde. |
| `num_context_frames` |  | integer | no | `25` | 9 – 121 | Idadi ya fremu za chanzo iliyoombwa kwa muktadha/uingilianaji wa upanuzi, ikiwa na kikomo kulingana na idadi ya fremu za chanzo. Idadi huzungushwa chini ili kutoshea gridi ya LTX ya 8k+1. |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | Picha ya hiari ya keyframe inayoweka fremu ya kwanza mpya ya upanuzi wakati wa upanuzi wa backward au fremu yake ya mwisho wakati wa upanuzi wa forward. |
| `end_image_strength` |  | number | no | `1` | 0 – 1 | Nguvu ya hiari ya conditioning ya keyframe ya mwisho: kuipunguza huipa modeli uhuru zaidi, huku 1.0 ikilazimisha ulinganifu kamili. |
| `resolution` |  | object {width, height} \| enum (string) | no | `auto` | `auto`, `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | Vipimo vya video iliyozalishwa, vilivyopangiliwa kwa ongezeko la 32px—kwa mfano, 1920x1080 huwa 1888x1056—huku chanzo kikibadilishwa ukubwa kuwa vipimo hivi kwa ajili ya tokeo lililounganishwa. Upanuzi thabiti unaweza kuwa mrefu zaidi katika mionekano midogo na mfupi zaidi katika mionekano mikubwa. Kuchagua 'auto' huhifadhi vipimo na uwiano wa kipengele wa chanzo kadiri mipaka ya LTX inavyoruhusu. |
| `match_input_fps` |  | boolean | no | `true` |  | Ulinganishaji wa kiwango cha fremu za tokeo na chanzo unapowashwa, ukibatilisha `frames_per_second`. FPS ya chanzo huzungushwa kuwa nambari kamili na kuwekwa ndani ya masafa linaloungwa mkono. |
| `frames_per_second` |  | number | no | `24` | 1 – 60 | Kiwango cha fremu za video ya tokeo, kinachopimwa kwa fremu kwa sekunde. |
| `video_strength` |  | number | no | `1` | 0 – 1 | Nguvu ya conditioning ya muktadha wa chanzo: kuipunguza huruhusu modeli kuwa na uhuru zaidi. Katika 1.0, fremu zinazoingiliana hubaki zimefungwa kwenye chanzo, hivyo kufanya mpito kuwa laini. |
| `num_inference_steps` |  | integer | no | `15` | 8 – 30 | Weka idadi ya hatua za inference za kuendesha, hadi 30; kuiacha bila kubadilishwa hutumia 15. |
| `guidance_scale` |  | number | no | `1` | 1 – 20 | Rekebisha mwongozo usio na classifier kwa kutumia kipimo hiki; urekebishaji wake chaguomsingi hulenga ubora wa juu na uzalishaji wa haraka. |
| `generate_audio` |  | boolean | no | `true` |  | Kigeuzi cha sauti ya upanuzi: kuzimwa huacha sehemu iliyoongezwa bila sauti huku kikihifadhi wimbo wa sauti wa video chanzo. Kuwashwa huzalisha sauti ya upanuzi na kuiunganisha kwa crossfade na chanzo kwenye sehemu ya muungano. |
| `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` |  | Kidokezo hasi kinachobainisha kile ambacho uzalishaji unapaswa kuepuka. |
| `seed` |  | integer \| null | no |  |  | Seed inayofanya uzalishaji uweze kurudiwa. Kuiweka kuwa None huchagua seed bila mpangilio. |
| `enable_prompt_expansion` |  | boolean | no | `true` |  | Hudhibiti ikiwa upanuzi wa kidokezo umewashwa. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Hudhibiti ikiwa ukaguzi wa usalama umewashwa. |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | Preset ya ubora inayotumika kwenye video ya tokeo. |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | Hali ya kuandika ya video inayotokana. |

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} | Video iliyozalishwa na modeli. |
| `seed` | integer | Seed halisi iliyotumika wakati wa uzalishaji. |
| `prompt` | string | Kidokezo cha uzalishaji, pamoja na upanuzi wowote uliotumika kabla ya matumizi. |

## 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
