# LTX-2.3 22B Video to Video Trainer API

> Huấn luyện LoRA LTX-2.3 22B để biến đổi video hoặc tạo video có điều kiện từ video tham chiếu

Huấn luyện LoRA trên mô hình LTX-2.3 22B để biến đổi video, sử dụng tệp zip chứa video hoặc hình ảnh (mp4, mov, avi, mkv, png, jpg, jpeg), khuyến nghị có ít nhất khoảng 10 tệp. `number_of_steps` nằm trong khoảng từ 1 đến 20000 (mặc định 2000), còn `frame_rate` mặc định là 25. `first_frame_conditioning_p` mặc định là 0.1. Xác thực nhận tối đa 2 lời nhắc cùng video tham chiếu.

- Model id: `ltx23-v2v-trainer`
- Made by: Lightricks
- Category: Training
- Output: file
- Price: $0.0135 / step (cheapest run $27.00 (27000 API credits))
- Run: `POST https://api.doitong.com/v1/run/ltx23-v2v-trainer`
- Quote: `POST https://api.doitong.com/v1/quote/ltx23-v2v-trainer`
- Docs page: https://doitong.com/vi/developers/models/ltx23-v2v-trainer

## Pricing

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

The full example input below costs $27.00 = 27000 API credits (2000 steps × 13.5 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.com/v1/quote/ltx23-v2v-trainer` 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 |  |  | URL kho lưu trữ ZIP cho tập dữ liệu chỉ chứa hình ảnh hoặc chỉ chứa video; không hỗ trợ tập dữ liệu có phương tiện hỗn hợp. Nên có từ 10 tệp trở lên, tốt nhất là một bộ sưu tập lớn hơn. Phần mở rộng được chấp nhận là .png, .jpg, .jpeg cho hình ảnh và .mp4, .mov, .avi, .mkv cho video. Các tệp văn bản chú thích tùy chọn có thể đi kèm phương tiện, với mỗi tệp chú thích được đặt tên tương ứng với tệp phương tiện liên quan. |
| `rank` |  | enum (integer) | no | `32` | `8`, `16`, `32`, `64`, `128` | Cấp bậc thích ứng LoRA, đánh đổi mức tiêu thụ bộ nhớ tăng lên để có năng lực lớn hơn khi thiết lập tăng. |
| `number_of_steps` |  | integer | no | `2000` | 1 – 20,000 | Tổng số bước huấn luyện. |
| `learning_rate` |  | number | no | `0.0002` | 0.000001 – 1 | Tốc độ học tối ưu hóa, cân bằng giữa khả năng tăng tốc huấn luyện và nguy cơ overfitting khi tăng giá trị. |
| `number_of_frames` |  | integer | no | `89` | 9 – 121 | Số khung hình của mỗi mẫu huấn luyện. Chia số này cho 8 phải dư 1; ví dụ gồm 1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97. |
| `frame_rate` |  | integer | no | `25` | 8 – 60 | Tốc độ khung hình video mục tiêu, được đo bằng khung hình trên giây. |
| `resolution` |  | enum (string) | no | `medium` | `low`, `medium`, `high` | Độ phân giải huấn luyện. Tăng độ phân giải sẽ tăng yêu cầu bộ nhớ. |
| `aspect_ratio` |  | enum (string) | no | `1:1` | `16:9`, `1:1`, `9:16` | Tỷ lệ khung hình huấn luyện. |
| `trigger_phrase` |  | string | no | `` |  | Cụm từ kích hoạt kiểu LoRA, được chèn vào đầu chú thích trong quá trình huấn luyện. |
| `auto_scale_input` |  | boolean | no | `false` |  | Tự động điều chỉnh video để khớp FPS và số khung hình được yêu cầu khi bật; các tập dữ liệu hình ảnh không thay đổi. |
| `split_input_into_scenes` |  | boolean | no | `true` |  | Tách cảnh cho các video vượt quá ngưỡng thời lượng, được bật khi true. |
| `split_input_duration_threshold` |  | number | no | `30` | 1 – 60 | Điều kiện tách cảnh được biểu thị bằng thời lượng theo giây: chỉ video dài hơn ngưỡng mới được tách. |
| `debug_dataset` |  | boolean | no | `false` |  | Chế độ kiểm tra tiền xử lý để kiểm tra video, hình ảnh và chú thích trước một lượt huấn luyện đầy đủ. Khi bật, bộ huấn luyện trả về tập dữ liệu huấn luyện đã xử lý trong một tệp lưu trữ có thể tải xuống để xem xét thủ công. |
| `first_frame_conditioning_p` |  | number | no | `0.1` | 0 – 1 | Ưu tiên chuyển đổi video-to-video bằng cách giảm tần suất huấn luyện sử dụng điều kiện hóa khung hình đầu tiên; giá trị này đặt xác suất đó. |
| `validation` |  | array of object {prompt, reference_video_url} | no | `[]` | ≤ 2 items | Danh sách đầu vào xác thực chứa các lời nhắc ghép với video tham chiếu. |
| `validation[].prompt` |  | string | yes |  |  | Lời nhắc dùng trong quá trình xác thực. |
| `validation[].reference_video_url` |  | string (video URL) | yes |  | ≥ 1 characters | Cung cấp URL video cần chuyển đổi trong quá trình xác thực IC-LoRA. |
| `validation_negative_prompt` |  | string | no | `worst quality, inconsistent motion, blurry, jittery, distorted` |  | Lời nhắc phủ định được áp dụng trong quá trình xác thực. |
| `validation_number_of_frames` |  | integer | no | `89` | 9 – 121 | Số khung hình của mỗi video xác thực. |
| `validation_frame_rate` |  | integer | no | `25` | 8 – 60 | Tốc độ khung hình video xác thực mục tiêu, được đo bằng khung hình trên giây. |
| `validation_resolution` |  | enum (string) | no | `high` | `low`, `medium`, `high` | Độ phân giải dùng trong quá trình xác thực. |
| `validation_aspect_ratio` |  | enum (string) | no | `1:1` | `16:9`, `1:1`, `9:16` | Tỷ lệ khung hình dùng trong quá trình xác thực. |
| `stg_scale` |  | number | no | `1` | 0 – 3 | Tỷ lệ Spatio-Temporal Guidance (STG), khuyến nghị 1.0; 0.0 sẽ tắt 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.com/v1/run/ltx23-v2v-trainer?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.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/ltx23-v2v-trainer?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.com/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-v2v-trainer", 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": "ltx23-v2v-trainer",
      "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-v2v-trainer",
  "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": 27000,
    "usd": "27.00",
    "charged": 27000,
    "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
    },
    "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.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} \| null | URL của mọi video xác thực hiện có, được hiển thị cùng với video tham chiếu tương ứng. |
| `lora_file` | object {url, content_type, file_name, file_size} | URL của tệp trọng số IC-LoRA đã huấn luyện ở định dạng .safetensors. |
| `config_file` | object {url, content_type, file_name, file_size} | Cấu hình thiết lập điểm cuối suy luận. |
| `debug_dataset` | object {url, content_type, file_name, file_size} \| null | Kho lưu trữ gỡ lỗi có thể tải xuống, chỉ khả dụng cho các đầu vào bật `debug_dataset`; nội dung dữ liệu huấn luyện đã được tiền xử lý và bao gồm video ở dạng đã giải mã. |

## 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-v2v-trainer
- 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-v2v-trainer
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/ltx23-v2v-trainer
