# LTX-2.3 22B · Extend Video API

> Continua um vídeo existente a partir de um prompt, com áudio gerado e uma imagem final opcional

Recebe `video_url` e um `prompt` e gera uma continuação de `num_frames` quadros (9 a 481). Um `end_image_url` opcional define onde a extensão termina. `match_input_fps` mantém a taxa de quadros da fonte, `generate_audio` adiciona som e `video_size` tem padrão auto. A saída pode ser mp4, webm, mov ou 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.ru/v1/run/ltx-2.3-22b/extend-video`
- Quote: `POST https://api.doitong.ru/v1/quote/ltx-2.3-22b/extend-video`
- Docs page: https://doitong.com/pt-BR/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.ru/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 |  |  | Prompt usado como base para a geração do vídeo. |
| `video_url` | `video` | string (video URL) | yes |  |  | URL que aponta para o vídeo que será estendido. |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | Forneça uma imagem do quadro final por URL para definir como termina o vídeo estendido. |
| `num_frames` |  | integer | no | `121` | 9 – 481 | Contagem de quadros da saída gerada. |
| `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` | Dimensões do vídeo gerado. |
| `generate_audio` |  | boolean | no | `true` |  | Controla se o vídeo inclui áudio gerado. |
| `use_multiscale` |  | boolean | no | `true` |  | Alternância de geração em múltiplas escalas para melhorar a coerência e os detalhes. Com True, um vídeo preliminar menor orienta uma segunda geração cujo tamanho atende ou excede as dimensões solicitadas. |
| `match_input_fps` |  | boolean | no | `true` |  | Substituição da taxa de quadros da saída que troca o FPS alvo padrão pelo FPS do vídeo de origem quando habilitada. |
| `fps` |  | number | no | `24` | 1 – 60 | Taxa de quadros do vídeo de saída, medida em quadros por segundo. |
| `num_inference_steps` |  | integer | no | `40` | 8 – 50 | Quantidade de etapas de inferência realizadas. |
| `video_cfg_scale` |  | number | no | `3` | 1 – 20 | Configuração de orientação do vídeo: aumente-a para obter mais consistência e foco no conteúdo gerado. Usa classifier-free guidance (CFG). |
| `video_stg_scale` |  | number | no | `0` | 0 – 20 | Controle de consistência e foco do vídeo pela escala Spatiotemporal Guidance (STG); aumente a configuração para intensificar ambas as qualidades. |
| `video_rescaling_scale` |  | number | no | `0.7` | 0 – 1 | Ajuste de redimensionamento do vídeo para equilibrar classifier-free guidance e orientação espaço-temporal como uma proporção. |
| `video_modality_scale` |  | number | no | `3` | 0 – 10 | Ajuste de modalidade do vídeo para equilibrar as contribuições do vídeo e do áudio como uma proporção. |
| `audio_cfg_scale` |  | number | no | `7` | 1 – 20 | Configuração de orientação do áudio: aumente-a para obter mais consistência e foco no conteúdo gerado. Usa classifier-free guidance (CFG). |
| `audio_stg_scale` |  | number | no | `0` | 0 – 20 | Controle de consistência e foco do áudio pela escala Spatiotemporal Guidance (STG); aumente a configuração para intensificar ambas as qualidades. |
| `audio_rescaling_scale` |  | number | no | `0.7` | 0 – 1 | Ajuste de redimensionamento do áudio para equilibrar classifier-free guidance e orientação espaço-temporal como uma proporção. |
| `audio_modality_scale` |  | number | no | `3` | 0 – 10 | Ajuste de modalidade do áudio para equilibrar as contribuições do vídeo e do áudio como uma proporção. |
| `gradient_estimation_gamma` |  | number | no | `2` | 0 – 10 | Configuração de estimativa do gradiente de remoção de ruído: 0 desativa a estimativa; caso contrário, o valor especifica gamma. |
| `use_restart_sampling` |  | boolean | no | `false` |  | Alternância de amostragem com reinício para potencialmente melhorar a qualidade do vídeo: habilitá-la introduz um pouco de ruído a cada etapa de remoção de ruído. |
| `scheduler` |  | enum (string) | no | `ltx2` | `ltx2`, `linear_quadratic`, `beta` | Seleção do scheduler. |
| `acceleration` |  | enum (string) | no | `regular` | `none`, `regular`, `high`, `full` | Nível de aceleração aplicado ao processamento. |
| `camera_lora` |  | enum (string) | no | `none` | `dolly_in`, `dolly_out`, `dolly_left`, `dolly_right`, `jib_up`, `jib_down`, `static`, `none` | Seleção do Camera LoRA para controlar o movimento no vídeo gerado com mais precisão do que apenas prompts de movimento da câmera. |
| `camera_lora_scale` |  | number | no | `1` | 0 – 1 | Intensidade do Camera LoRA para controlar o movimento no vídeo gerado com mais precisão do que apenas prompts de movimento da câmera. |
| `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` |  | Prompt negativo usado durante a geração de vídeo. |
| `seed` |  | integer \| null | no |  |  | Valor de seed que inicializa a geração de números aleatórios. |
| `enable_prompt_expansion` |  | boolean | no | `true` |  | Controla se a expansão do prompt está ativada. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Controla se a verificação de segurança está ativada. |
| `video_output_type` |  | enum (string) | no | `X264 (.mp4)` | `X264 (.mp4)`, `VP9 (.webm)`, `PRORES4444 (.mov)`, `GIF (.gif)` | Tipo de saída do vídeo resultante. |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | Nível de qualidade do vídeo resultante. |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | Modo de gravação do vídeo resultante. |
| `distill_lora_first_pass_scale` |  | number | no | `0.2` | 0 – 1 | Controle a escala do distill LoRA da primeira passagem, usando 0 para desativá-la. |
| `distill_lora_second_pass_scale` |  | number | no | `0.5` | 0 – 1 | Controle a escala do distill LoRA em cada passagem após a primeira. |
| `extend_direction` |  | enum (string) | no | `forward` | `forward`, `backward` | Lado do vídeo a estender: escolha 'backward' para adicionar conteúdo antes do início ou 'forward' para adicionar conteúdo após o final. |
| `num_context_frames` |  | integer | no | `25` | 0 – 121 | Quantidade de quadros usada para fornecer contexto ao estender o vídeo. |
| `video_strength` |  | number | no | `1` | 0 – 1 | A liberdade para alterar o conteúdo do vídeo é controlada por esta intensidade de condicionamento: valores menores dão mais liberdade ao modelo. |
| `audio_strength` |  | number | no | `1` | 0 – 1 | A liberdade para alterar o conteúdo do áudio é controlada por esta intensidade de condicionamento: valores menores dão mais liberdade ao modelo. |
| `end_image_strength` |  | number | no | `1` | 0 – 1 | Controle quanto a imagem final influencia o vídeo gerado. |

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.ru/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.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?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.ru/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.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",
      "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.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} | Vídeo produzido pelo modelo. |
| `seed` | integer | Valor da seed usado para inicializar a geração de números aleatórios. |
| `prompt` | string | Prompt usado para orientar a geração. |

## 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.ru/v1/models/ltx-2.3-22b/extend-video
