# Ltx 2.3 Quality · Extend Video API

> Pratęsia vaizdo įrašą pirmyn arba atgal, su pasirinktiniu paskutinio pagrindinio kadro vaizdu

Išplečia esamą klipą generuodamas naują vaizdo medžiagą pagal privalomą `prompt`. `extend_direction` reikšmė `forward` tęsia nuo pabaigos, o `backward` sukuria naują pradžią. `num_context_frames` (nuo 9 iki 121) nustato šaltinio persidengimo apimtį, o `num_frames` (nuo 9 iki 481) – segmento trukmę. Pasirinktinis `end_image_url` nustato galutinį pagrindinį kadrą, o `match_input_fps` išlaiko šaltinio kadrų dažnį.

- 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/lt/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 |  |  | Raginys, nurodantis pageidaujamą vaizdo įrašo tęsinį. |
| `video_url` | `video` | string (video URL) | yes |  |  | URL, nurodantis vaizdo įrašą, kuris bus pratęstas. |
| `extend_direction` |  | enum (string) | no | `forward` | `forward`, `backward` | Vaizdo įrašo pratęsimo režimas: 'backward' sukuria naują pradžią, o 'forward' tęsia vaizdo įrašą už jo pabaigos. |
| `num_frames` |  | integer | no | `121` | 9 – 481 | Pratęsimo kadrų skaičius, kuriam taikomas stabilaus generavimo raiškos ir kadrų skaičiaus sandaugos biudžetas: esant 24 fps, maždaug 20 sekundžių 480p klasės, 11 sekundžių 720p klasės arba 5 sekundės 1080p klasės raiškoje. Biudžetą viršijančios užklausos grąžina 422; sumažinkite `num_frames` arba pasirinkite mažesnę raišką. Skaičius apima `num_context_frames`, persidengiančius su šaltiniu, todėl pridėta trukmė yra maždaug (`num_frames` - `num_context_frames`) / `frames_per_second` sekundės. |
| `num_context_frames` |  | integer | no | `25` | 9 – 121 | Pratęsimo kontekstui ir persidengimui prašomas šaltinio kadrų skaičius, ribojamas šaltinyje esančių kadrų skaičiaus. Skaičius apvalinamas žemyn, kad atitiktų LTX 8k+1 tinklelį. |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | Pasirinktinis raktažodžio vaizdas, nustatantis naują pirmąjį pratęsimo kadrą pratęsiant atgal arba paskutinį kadrą pratęsiant pirmyn. |
| `end_image_strength` |  | number | no | `1` | 0 – 1 | Pasirinktinis baigiamojo raktažodžio sąlygojimo stiprumas: jį sumažinus modeliui suteikiama daugiau laisvės, o 1.0 užtikrina tikslų atitikimą. |
| `resolution` |  | object {width, height} \| enum (string) | no | `auto` | `auto`, `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | Generuojamo vaizdo įrašo matmenys, sulygiuoti pagal 32px žingsnius, pavyzdžiui, 1920x1080 tampa 1888x1056; šaltinis pakeičiamas į šiuos matmenis susiūtai išvesčiai. Mažesnėje raiškoje stabilūs pratęsimai gali būti ilgesni, o didesnėje – trumpesni. Pasirinkus 'auto', išlaikomi šaltinio matmenys ir kraštinių santykis tiek, kiek leidžia LTX ribos. |
| `match_input_fps` |  | boolean | no | `true` |  | Kai įjungta, išvesties kadrų dažnis sutampa su šaltinio dažniu ir perrašo `frames_per_second`. Šaltinio FPS suapvalinamas iki sveikojo skaičiaus ir apribojamas palaikomu intervalu. |
| `frames_per_second` |  | number | no | `24` | 1 – 60 | Išvesties vaizdo įrašo kadrų dažnis, matuojamas kadrais per sekundę. |
| `video_strength` |  | number | no | `1` | 0 – 1 | Šaltinio konteksto sąlygojimo stiprumas: jį sumažinus modeliui suteikiama daugiau laisvės. Esant 1.0, persidengiantys kadrai lieka užrakinti prie šaltinio, todėl perėjimas yra vientisas. |
| `num_inference_steps` |  | integer | no | `15` | 8 – 30 | Nustatykite, kiek vykdyti išvedimo žingsnių (iki 30); nepakeitus naudojama 15. |
| `guidance_scale` |  | number | no | `1` | 1 – 20 | Šia skale koreguokite classifier-free guidance; numatytasis derinimas skirtas aukštai kokybei ir sparčiam generavimui. |
| `generate_audio` |  | boolean | no | `true` |  | Pratęsimo garso perjungiklis: išjungus pridėta atkarpa lieka tyli, tačiau išlaikomas šaltinio vaizdo įrašo garso takelis. Įjungus pratęsimui generuojamas garsas ir sujungimo vietoje atliekamas kryžminis suliejimas su šaltiniu. |
| `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` |  | Neigiamas raginys, nurodantis, ko generuojant reikia vengti. |
| `seed` |  | integer \| null | no |  |  | Generavimą atkurianti pradinė reikšmė. Nustačius None, ji parenkama atsitiktinai. |
| `enable_prompt_expansion` |  | boolean | no | `true` |  | Valdo, ar įjungtas raginio išplėtimas. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Valdo, ar įjungtas saugos tikrinimas. |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | Išvesties vaizdo įrašui taikomas kokybės išankstinis nustatymas. |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | Gauto vaizdo įrašo įrašymo režimas. |

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} | Modelio sukurtas vaizdo įrašas. |
| `seed` | integer | Generuojant pritaikyta tikroji pradinė reikšmė. |
| `prompt` | string | Generavimo raginys, įskaitant prieš naudojimą pritaikytą išplėtimą. |

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