# LTX 2.3 Trainer (V2) - Audio-to-Audio API

> 訓練 LTX 2.3 LoRA，從配對範例將參考音訊片段映射至目標音訊片段

從 `training_data_url` 中配對範例的 `.zip` 微調音訊轉音訊的 LoRA。`rank` 為 8 到 128，`number_of_steps` 為 100 到 10000，`audio_duration_seconds` 為 0.5 到 60。此處不使用場景分割，因此請提供預先分割的片段。回傳 LoRA 權重和設定檔。

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

## Pricing

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

The full example input below costs $4.60 = 4600 API credits (2000 steps × 2.3 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/a2a` 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 | `false` |  | 場景分割控制；在 a2a 的配對目標／參考音訊準備期間會忽略，因為分割會使配對失去同步。a2a 請保持停用，並事先分割片段。 |
| `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` |  | 調整音訊時長時保留音高，而非裁切或補齊。 |
| `audio_duration_seconds` |  | number | no | `5` | 0.5 – 60 | 以秒為單位的音訊時長桶；音訊專用模式因沒有影片影格數可計算長度而需要此值。此目標決定片段處理方式：超出的音訊會裁切，不足的片段會略過。 |
| `validation` |  | array of object {prompt, reference_audio_url} | no | `[]` | ≤ 2 items | 驗證提示詞清單，每個提示詞配對一段參考音訊片段。 |
| `validation[].prompt` |  | string | yes |  |  | 驗證期間使用的提示詞。 |
| `validation[].reference_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/a2a?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/a2a?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/a2a", 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/a2a",
      "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/a2a",
  "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": 4600,
    "usd": "4.60",
    "charged": 4600,
    "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 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
- [LTX 2.3 Trainer (V2) - Forward Audio Extension](https://doitong.com/developers/models/ltx23-trainer-v2/audio-extend-prefix.md) (`ltx23-trainer-v2/audio-extend-prefix`): $0.0022 / step

## Links

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