# LTX-2.3 22B · Audio to Video API

> 建立配合輸入音訊軌的影片，可選擇提供首幀與末幀影像及攝影機 LoRA

需要 `prompt` 與 `audio_url`。預設會從音訊長度推導影格數（`match_audio_length`）；否則套用 `num_frames`（9 到 481）。`image_url` 與 `end_image_url` 可固定第一個與最後一個影格。提供多種取樣控制項，例如引導尺度、`scheduler`、`camera_lora`，以及包括 mp4、webm、mov 與 GIF 在內的輸出格式。

- Model id: `ltx-2.3-22b/audio-to-video`
- Made by: Lightricks
- Category: Lipsync & Avatars
- 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/audio-to-video`
- Quote: `POST https://api.doitong.ru/v1/quote/ltx-2.3-22b/audio-to-video`
- Docs page: https://doitong.com/zh-TW/developers/models/ltx-2.3-22b/audio-to-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.358 = 358 API credits (223 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/audio-to-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 |  |  | 作為影片生成基礎的提示詞。 |
| `audio_url` | `audio` | string (audio URL) | yes |  |  | 用於生成影片的來源音訊 URL。 |
| `image_url` | `image` | string (image URL) \| null | no |  |  | 定義影片起始影格的選用圖像 URL。 |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | 定義影片結束影格的圖像 URL。 |
| `match_audio_length` |  | boolean | no | `true` |  | 影格數選擇切換：停用時使用 num_frames，啟用時根據 FPS 和音訊時長計算數量。 |
| `num_frames` |  | integer | no | `121` | 9 – 481 | 生成輸出的影格數。 |
| `video_size` |  | object {width, height} \| enum (string) | no | `landscape_16_9` | `auto`, `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | 影片尺寸；提供圖像時可透過 'auto' 使用輸入圖像尺寸。 |
| `use_multiscale` |  | boolean | no | `true` |  | 用於改善一致性與細節的多尺度生成切換。設為 True 時，較小的初步影片會引導第二次生成，其尺寸會達到或超過要求的尺寸。 |
| `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 | 透過時空引導（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 | 透過時空引導（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 會關閉估算；其他值指定 gamma。 |
| `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 |  |  | 初始化亂數生成的種子值。 |
| `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 縮放。 |
| `image_strength` |  | number | no | `1` | 0 – 1 | 圖像對影片生成的影響強度。 |
| `end_image_strength` |  | number | no | `1` | 0 – 1 | 控制結束圖像對生成影片的影響程度。 |
| `audio_strength` |  | number | no | `1` | 0 – 1 | 音訊條件強度；恰好為 1.0 時保持輸入不變。低於 1.0 時，模型可能修改音訊。 |
| `preprocess_audio` |  | boolean | no | `true` |  | 控制音訊在用於條件設定前是否要先經過預處理。 |

File parameters (`audio`, `image`, `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",
  "audio": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
}
```

A fuller example:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
  "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
}
```

## 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/audio-to-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",
    "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
  }'

# 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/audio-to-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",
    "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
  }),
});
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",
    "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3",
}

# 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/audio-to-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/audio-to-video",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
        "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
      },
      "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/audio-to-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": 358,
    "usd": "0.358",
    "charged": 358,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "audio_url": "https://content.doitong.com/audio/showcase/v3/tools/dub_es.mp3"
  },
  "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 speaks to the camera"
  },
  "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} | 模型產生的影片。 |
| `seed` | integer | 用於初始化亂數生成的種子值。 |
| `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](https://doitong.com/developers/models/ltx-2.3-22b/extend-video.md) (`ltx-2.3-22b/extend-video`): $0.00161 / 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

## Links

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