# LTX 2.3 Trainer (V2) - Forward Audio Extension API

> 從短且乾淨的音訊前綴訓練自訂 LoRA，以向前延伸音訊

從訓練資料的 zip（`training_data_url`）微調轉接器，使其學習延伸初始片段之後的音訊。`conditioning_seconds`（0.1 到 30）設定保留的前綴，且必須短於 `audio_duration_seconds`（0.5 到 60）。訓練可設定 `rank`（8 到 128）、`number_of_steps`（100 到 10000）和 `learning_rate`。最多 2 個 `validation` 項目可用於預覽結果，並回傳 LoRA 權重。

- Model id: `ltx23-trainer-v2/audio-extend-prefix`
- Made by: Lightricks
- Category: Training
- Output: file
- Price: $0.0022 / step (cheapest run $4.40 (4400 API credits))
- Run: `POST https://api.doitong.ru/v1/run/ltx23-trainer-v2/audio-extend-prefix`
- Quote: `POST https://api.doitong.ru/v1/quote/ltx23-trainer-v2/audio-extend-prefix`
- Docs page: https://doitong.com/zh-TW/developers/models/ltx23-trainer-v2/audio-extend-prefix

## Pricing

Price: **$0.0022 / step**. Billed per training step (`number_of_steps`).

The full example input below costs $4.40 = 4400 API credits (2000 steps × 2.2 API credits).

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/ltx23-trainer-v2/audio-extend-prefix` 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

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `training_data_url` |  | string | yes |  |  | 包含訓練資料的 `.zip` URL，資料依選取的訓練模式組織。每個媒體檔案可搭配具有相同基本名稱的 `.txt` 說明檔。 |
| `rank` |  | enum (integer) | no | `32` | `8`, `16`, `32`, `64`, `128` | LoRA 適配階數；設定越高，記憶體消耗越大，但容量也越高。 |
| `number_of_steps` |  | integer | no | `2000` | 100 – 10,000 | 訓練步驟總數。 |
| `learning_rate` |  | number | no | `0.0002` | 0.000001 – 1 | 最佳化學習率。 |
| `number_of_frames` |  | integer | no | `89` | 9 – 121 | 每個訓練樣本的影格數。將數量除以 8 後餘數必須為 1；例如 1、9、17、25、33、41、49、57、65、73、81、89、97。 |
| `frame_rate` |  | integer | no | `24` | 8 – 60 | 訓練影片的目標影格率（每秒影格數）。LTX-2.3 的原生速率為 24。 |
| `resolution` |  | enum (string) | no | `medium` | `low`, `medium`, `high` | 訓練解析度。提高解析度會增加記憶體需求。 |
| `aspect_ratio` |  | enum (string) | no | `1:1` | `16:9`, `1:1`, `9:16` | 訓練長寬比。 |
| `trigger_phrase` |  | string | no | `` |  | LoRA 風格啟用片語，訓練時插入說明的開頭。 |
| `auto_scale_input` |  | boolean | no | `false` |  | 啟用後自動調整影片，以符合要求的 FPS 與影格數；圖像資料集不會變更。 |
| `split_input_into_scenes` |  | boolean | no | `true` |  | 超過時長門檻之影片的場景分割，為 true 時啟用。 |
| `split_input_duration_threshold` |  | number | no | `30` | 1 – 60 | 以秒數表示的場景分割觸發門檻：只有長於該門檻的影片才會分割。 |
| `debug_dataset` |  | boolean | no | `false` |  | 預處理檢查模式，用於完整訓練前檢查影片、圖像與說明。啟用後，訓練器會將處理過的訓練資料集放入可下載的封存檔，供手動檢查。 |
| `audio_normalize` |  | boolean | no | `true` |  | 音訊峰值正規化，以維持資料集內的一致音量。 |
| `audio_preserve_pitch` |  | boolean | no | `true` |  | 調整音訊時長時保留音高，而非裁切或補齊。 |
| `conditioning_seconds` |  | number | no | `1` | 0.1 – 30 | 從音訊開頭保留這麼多秒作為乾淨的條件前綴，其餘部分用於續接生成。因此此值必須小於 `audio_duration_seconds`。 |
| `audio_duration_seconds` |  | number | no | `5` | 0.5 – 60 | 音訊時長桶，以秒為單位指定目標長度：超出的片段會裁切以符合長度，無法填滿的片段會略過。 |
| `validation` |  | array of object {prompt, audio_url} | no | `[]` | ≤ 2 items | 向前延長音訊的驗證資料，以包含提示詞與待續接片段的項目清單提供。 |
| `validation[].prompt` |  | string | yes |  |  | 驗證期間使用的提示詞。 |
| `validation[].audio_url` |  | string (audio URL) | yes |  | ≥ 1 characters | 要延長其時長的音訊 URL。 |
| `validation_negative_prompt` |  | string | no | `blurry, out of focus, overexposed, underexposed, low contrast, washed out colors, excessive noise, grainy texture, poor lighting, flickering, motion blur, distorted proportions, unnatural skin tones, deformed facial features, asymmetrical face, missing facial features, extra limbs, disfigured hands, wrong hand count, artifacts around text, inconsistent perspective, camera shake, incorrect depth of field, background too sharp, background clutter, distracting reflections, harsh shadows, inconsistent lighting direction, color banding, cartoonish rendering, 3D CGI look, unrealistic materials, uncanny valley effect, incorrect ethnicity, wrong gender, exaggerated expressions, wrong gaze direction, mismatched lip sync, silent or muted audio, distorted voice, robotic voice, echo, background noise, off-sync audio, incorrect dialogue, added dialogue, repetitive speech, jittery movement, awkward pauses, incorrect timing, unnatural transitions, inconsistent framing, tilted camera, flat lighting, inconsistent tone, cinematic oversaturation, stylized filters, or AI artifacts.` |  | 驗證期間套用的負面提示詞；驗證使用單階段預覽流程。由於該流程近似兩階段的蒸餾生產推論，其引導方式與預覽品質會不同於最終結果。 |
| `validation_number_of_frames` |  | integer | no | `89` | 9 – 121 | 每部驗證影片的影格數。 |
| `validation_frame_rate` |  | integer | no | `24` | 8 – 60 | 驗證影片的目標影格率（每秒影格數）；LTX-2.3 的原生速率為 24。 |
| `validation_resolution` |  | enum (string) | no | `high` | `low`, `medium`, `high` | 驗證期間使用的解析度。 |
| `validation_aspect_ratio` |  | enum (string) | no | `1:1` | `16:9`, `1:1`, `9:16` | 驗證期間使用的長寬比。 |
| `stg_scale` |  | number | no | `1` | 0 – 3 | 時空引導（STG）比例；建議使用 1.0，0.0 會關閉 STG。 |

## Example input

Required parameters only:

```json
{
  "training_data_url": "https://example.com/your-file.zip"
}
```

A fuller example:

```json
{
  "training_data_url": "https://example.com/your-file.zip"
}
```

## 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/ltx23-trainer-v2/audio-extend-prefix?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "training_data_url": "https://example.com/your-file.zip"
  }'

# 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/ltx23-trainer-v2/audio-extend-prefix?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "training_data_url": "https://example.com/your-file.zip"
  }),
});
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 = {
    "training_data_url": "https://example.com/your-file.zip",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/ltx23-trainer-v2/audio-extend-prefix", 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": "ltx23-trainer-v2/audio-extend-prefix",
      "input": {
        "training_data_url": "https://example.com/your-file.zip"
      },
      "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": "ltx23-trainer-v2/audio-extend-prefix",
  "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": 4400,
    "usd": "4.40",
    "charged": 4400,
    "refunded": 0
  },
  "input": {
    "training_data_url": "https://example.com/your-file.zip"
  },
  "output": {
    "video": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    },
    "audio": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    },
    "lora_file": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    },
    "config_file": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    },
    "debug_dataset": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    }
  },
  "outputs": [
    {
      "type": "file",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "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} \| null | 驗證產生的合併影片預覽；對可產生影片的端點，若有提供則包含此欄位。 |
| `audio` | object {url, content_type, file_name, file_size} \| null | 驗證產生的合併音訊；對以下音訊專用路由，若有提供則作為預覽：/audio-inpaint、/audio-extend-suffix、/audio-extend-prefix、/t2a、/a2a 與 /v2a。 |
| `lora_file` | object {url, content_type, file_name, file_size} | `.safetensors` 格式訓練 LoRA 權重的 URL。 |
| `config_file` | object {url, content_type, file_name, file_size} | 推論端點設定的組態。 |
| `debug_dataset` | object {url, content_type, file_name, file_size} \| null | 啟用 `debug_dataset` 時可用的除錯輸出：可下載且包含預處理後訓練資料的封存檔。 |

## Related models

- [LTX 2.3 Trainer (V2) - Audio Inpainting](https://doitong.com/developers/models/ltx23-trainer-v2/audio-inpaint.md) (`ltx23-trainer-v2/audio-inpaint`): $0.0023 / step
- [LTX 2.3 Trainer (V2) - Audio+Video Reference IC-LoRA](https://doitong.com/developers/models/ltx23-trainer-v2/ic-lora/av2av.md) (`ltx23-trainer-v2/ic-lora/av2av`): $0.0068 / step
- [LTX 2.3 Trainer (V2) - Audio+Video Reference Transformation](https://doitong.com/developers/models/ltx23-trainer-v2/av2av.md) (`ltx23-trainer-v2/av2av`): $0.0068 / step
- [LTX 2.3 Trainer (V2) - Audio-to-Audio](https://doitong.com/developers/models/ltx23-trainer-v2/a2a.md) (`ltx23-trainer-v2/a2a`): $0.0023 / step
- [LTX 2.3 Trainer (V2) - Audio-to-Audio IC-LoRA](https://doitong.com/developers/models/ltx23-trainer-v2/ic-lora/a2a.md) (`ltx23-trainer-v2/ic-lora/a2a`): $0.0023 / step
- [LTX 2.3 Trainer (V2) - Audio-to-Video](https://doitong.com/developers/models/ltx23-trainer-v2/a2v.md) (`ltx23-trainer-v2/a2v`): $0.006 / step
- [LTX 2.3 Trainer (V2) - Backward Audio Extension](https://doitong.com/developers/models/ltx23-trainer-v2/audio-extend-suffix.md) (`ltx23-trainer-v2/audio-extend-suffix`): $0.0023 / step
- [LTX 2.3 Trainer (V2) - Backward Video Extension](https://doitong.com/developers/models/ltx23-trainer-v2/extend-suffix.md) (`ltx23-trainer-v2/extend-suffix`): $0.0061 / step

## Links

- HTML page: https://doitong.com/developers/models/ltx23-trainer-v2/audio-extend-prefix
- 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=ltx23-trainer-v2/audio-extend-prefix
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/ltx23-trainer-v2/audio-extend-prefix
