# LTX-2.3 22B Video Trainer API

> Kouluttaa LTX-2.3 22B LoRA-mallin mukautettuja videotyylejä ja tehosteita varten, valinnaisella äänellä

Kouluttaa LoRA-mallin LTX-2.3 22B -mallilla mukautettuja tyylejä ja tehosteita varten videoita tai kuvia sisältävästä zip-tiedostosta; mieluiten tiedostoja on vähintään 10. `number_of_steps` vaihtelee välillä 100–6000 (oletus 2000), `frame_rate`-oletus on 25 ja `first_frame_conditioning_p`-oletus 0.5. `with_audio` pakottaa äänikoulutuksen käyttöön tai pois käytöstä, ja `generate_audio_in_validation` hallitsee esikatselujen ääntä.

- Model id: `ltx23-video-trainer`
- Made by: Lightricks
- Category: Training
- Output: file
- Price: $0.0048 / step (cheapest run $9.60 (9600 API credits))
- Run: `POST https://api.doitong.com/v1/run/ltx23-video-trainer`
- Quote: `POST https://api.doitong.com/v1/quote/ltx23-video-trainer`
- Docs page: https://doitong.com/fi/developers/models/ltx23-video-trainer

## Pricing

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

The full example input below costs $9.60 = 9600 API credits (2000 steps × 4.8 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-video-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 |  |  | ZIP-arkiston URL tietojoukolle, joka sisältää yksinomaan kuvia tai yksinomaan videoita; sekamedian tietojoukkoja ei tueta. Tavoittele vähintään 10 tiedostoa, mieluiten suurempaa kokoelmaa. Hyväksytyt tiedostotunnisteet ovat kuvilla .png, .jpg, .jpeg ja videoilla .mp4, .mov, .avi, .mkv. Mediaan voi liittyä valinnaisia kuvatekstitiedostoja, joiden nimi vastaa niihin liittyvän mediatiedoston nimeä. |
| `rank` |  | enum (integer) | no | `32` | `8`, `16`, `32`, `64`, `128` | LoRA-sovittimen aste, jossa suurempi arvo lisää kapasiteettia mutta myös muistinkulutusta. |
| `number_of_steps` |  | integer | no | `2000` | 100 – 6,000 | Koulutusvaiheiden kokonaismäärä. |
| `learning_rate` |  | number | no | `0.0002` | 0.000001 – 1 | Optimoinnin oppimisnopeus, joka tasapainottaa mahdollisen koulutusnopeuden kasvun ja suurempaan arvoon liittyvän ylisovittamisen riskin. |
| `number_of_frames` |  | integer | no | `89` | 9 – 121 | Kunkin koulutusnäytteen ruutumäärä. Määrän jakamisen 8:lla on jätettävä jakojäännökseksi 1; esimerkkejä ovat 1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97. |
| `frame_rate` |  | integer | no | `25` | 8 – 60 | Videon tavoitekuvanopeus ruutuina sekunnissa. |
| `resolution` |  | enum (string) | no | `medium` | `low`, `medium`, `high` | Koulutusresoluutio. Resoluut ion suurentaminen lisää muistivaatimuksia. |
| `aspect_ratio` |  | enum (string) | no | `1:1` | `16:9`, `1:1`, `9:16` | Koulutuksen kuvasuhde. |
| `trigger_phrase` |  | string | no | `` |  | LoRA-tyylin aktivointilause, joka lisätään kuvatekstien alkuun koulutuksen aikana. |
| `auto_scale_input` |  | boolean | no | `false` |  | Videon automaattinen säätö pyydetyn FPS:n ja ruutumäärän mukaiseksi käyttöönotettuna; kuvatietojoukot säilyvät muuttumattomina. |
| `split_input_into_scenes` |  | boolean | no | `true` |  | Keston kynnysarvon ylittävien videoiden kohtausten jakaminen, käytössä kun arvo on true. |
| `split_input_duration_threshold` |  | number | no | `30` | 1 – 60 | Kohtausten jakamisen laukaisin keston avulla ilmaistuna: vain kynnysarvoa pidemmät videot jaetaan. |
| `debug_dataset` |  | boolean | no | `false` |  | Esikäsittelyn tarkastustila videoiden, kuvien ja kuvatekstien tarkistamiseen ennen täyttä koulutusajoa. Käyttöönotettuna kouluttaja palauttaa käsitellyn koulutustietojoukon ladattavana arkistona manuaalista tarkistusta varten. |
| `with_audio` |  | boolean \| null | no |  |  | Valitse True pakottaaksesi äänikoulutuksen videokoulutuksen rinnalle tai False jättääksesi äänen pois. Kun asetus jätetään oletusarvoon None, valinta tehdään automaattisesti sen perusteella, sisältävätkö toimitetut videot ääntä. |
| `audio_normalize` |  | boolean | no | `true` |  | Huippuamplitudin normalisointi, jota suositellaan äänitasojen yhdenmukaistamiseen koko tietojoukossa tuomalla huiput yhteiselle tasolle. |
| `audio_preserve_pitch` |  | boolean | no | `true` |  | Sävelkorkeuden säilyttäminen, kun äänen ja videon pituudet poikkeavat: käytössä oleva asetus käyttää ajan venytystä tai pakkausta; käytöstä poistettu asetus käyttää sen sijaan leikkausta tai hiljaisuuden lisäämistä. |
| `first_frame_conditioning_p` |  | number | no | `0.5` | 0 – 1 | Paranna image-to-video-suorituskykyä lisäämällä sitä, kuinka usein koulutuksessa käytetään ensimmäisen ruudun ehdollistamista; tämä arvo määrittää todennäköisyyden. |
| `validation` |  | array of object {prompt, image_url} | no | `[]` | ≤ 2 items | Koulutuksen validointikehotteiden luettelo, jonka kaikkien syötteiden on joko sisällettävä kuvia tai oltava kuvattomia. |
| `validation[].prompt` |  | string | yes |  |  | Validoinnin aikana käytettävä kehote. |
| `validation[].image_url` |  | string (image URL) \| null | no |  |  | Kuva image-to-video-validointia varten; sallittu vain, jos jokainen muu validoinnin syöte sisältää myös kuvan. |
| `validation_negative_prompt` |  | string | no | `worst quality, inconsistent motion, blurry, jittery, distorted` |  | Validoinnin aikana käytettävä negatiivinen kehote. |
| `validation_number_of_frames` |  | integer | no | `89` | 9 – 121 | Kunkin validointivideon ruutumäärä. |
| `validation_frame_rate` |  | integer | no | `25` | 8 – 60 | Validoinnin tavoitevideon kuvanotantotaajuus ruutuina sekunnissa. |
| `validation_resolution` |  | enum (string) | no | `high` | `low`, `medium`, `high` | Validoinnissa käytettävä resoluutio. |
| `validation_aspect_ratio` |  | enum (string) | no | `1:1` | `16:9`, `1:1`, `9:16` | Validoinnissa käytettävä kuvasuhde. |
| `stg_scale` |  | number | no | `1` | 0 – 3 | Spatiaalisen ja ajallisen ohjauksen (STG) asteikko; suositeltu arvo on 1.0 ja arvo 0.0 poistaa STG:n käytöstä. |
| `generate_audio_in_validation` |  | boolean | no | `true` |  | Ohjaa, sisältävätkö validointinäytteet generoitua ääntä. |

## 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-video-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-video-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-video-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-video-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-video-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": 9600,
    "usd": "9.60",
    "charged": 9600,
    "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 | Mahdollisten validointivideoiden URL. |
| `lora_file` | object {url, content_type, file_name, file_size} | Koulutettujen LoRA-painojen URL `.safetensors`-muodossa. |
| `config_file` | object {url, content_type, file_name, file_size} | Päättelypäätepisteen määrityksen asetukset. |
| `debug_dataset` | object {url, content_type, file_name, file_size} \| null | Ladattava virheenkorjausarkisto, joka palautetaan vain syötteille, joissa `debug_dataset` on käytössä; se sisältää esikäsitellyn koulutustietojoukon, mukaan lukien dekoodatun äänen ja videon. |

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