# LTX 2.3 Trainer (V2) - Keyframe Interpolation API

> İlk ve son anahtar kareler arasındaki hareketi, isteğe bağlı olarak bir orta kareyle birlikte oluşturan bir LoRA eğitir

Anahtar kare enterpolasyonu için bir LoRA eğitir: çıkarım sırasında ilk ve son kareleri sağlarsınız, model aradaki videoyu oluşturur. İlk, orta ve son karelerle eğitim yapmak için `include_middle_keyframe` seçeneğini etkinleştirin; bu durumda her doğrulama örneği `middle_image_url` sağlamalıdır. Veriler `training_data_url` üzerinden zip olarak gelir ve en fazla 2 doğrulama girdisi içerebilir.

- Model id: `ltx23-trainer-v2/interpolate`
- Made by: Lightricks
- Category: Training
- Output: file
- Price: $0.0024 / step (cheapest run $4.80 (4800 API credits))
- Run: `POST https://api.doitong.com/v1/run/ltx23-trainer-v2/interpolate`
- Quote: `POST https://api.doitong.com/v1/quote/ltx23-trainer-v2/interpolate`
- Docs page: https://doitong.com/tr/developers/models/ltx23-trainer-v2/interpolate

## Pricing

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

The full example input below costs $4.80 = 4800 API credits (2000 steps × 2.4 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-trainer-v2/interpolate` 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 |  |  | Seçilen eğitim moduna göre düzenlenmiş eğitim verilerini içeren bir `.zip` dosyasının URL'si. Her medya dosyasına, aynı temel ada sahip bir `.txt` açıklaması eşlik edebilir. |
| `rank` |  | enum (integer) | no | `32` | `8`, `16`, `32`, `64`, `128` | LoRA uyarlama derecesi; değer yükseldikçe artan bellek tüketimi karşılığında daha yüksek kapasite sağlar. |
| `number_of_steps` |  | integer | no | `2000` | 100 – 10,000 | Toplam eğitim adımı sayısı. |
| `learning_rate` |  | number | no | `0.0002` | 0.000001 – 1 | Optimizasyon öğrenme hızı. |
| `number_of_frames` |  | integer | no | `89` | 9 – 121 | Her eğitim örneğindeki kare sayısı. Sayının 8'e bölünmesinden kalan 1 olmalıdır; örnekler: 1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97. |
| `frame_rate` |  | integer | no | `24` | 8 – 60 | Eğitim videosunun saniye başına kare cinsinden hedef kare hızı. LTX-2.3 için yerel hız 24'tür. |
| `resolution` |  | enum (string) | no | `medium` | `low`, `medium`, `high` | Eğitim çözünürlüğü. Çözünürlüğün artırılması bellek gereksinimlerini yükseltir. |
| `aspect_ratio` |  | enum (string) | no | `1:1` | `16:9`, `1:1`, `9:16` | Eğitim en-boy oranı. |
| `trigger_phrase` |  | string | no | `` |  | Eğitim sırasında açıklamaların başına eklenen LoRA stil etkinleştirme ifadesi. |
| `auto_scale_input` |  | boolean | no | `false` |  | Etkinleştirildiğinde videoyu istenen FPS ve kare sayısına uyacak şekilde otomatik ayarlar; görsel veri kümeleri değişmeden kalır. |
| `split_input_into_scenes` |  | boolean | no | `true` |  | Süre eşiğini aşan videolar için sahne bölme; true olduğunda etkinleştirilir. |
| `split_input_duration_threshold` |  | number | no | `30` | 1 – 60 | Saniye cinsinden süre olarak ifade edilen sahne bölme tetikleyicisi: yalnızca eşikten uzun videolar bölünür. |
| `debug_dataset` |  | boolean | no | `false` |  | Tam eğitim çalıştırmasından önce videoları, görselleri ve açıklamaları denetlemek için ön işleme inceleme modu. Etkinleştirildiğinde eğitici, işlenmiş eğitim veri kümesini manuel inceleme için indirilebilir bir arşivde döndürür. |
| `validation` |  | array of object {prompt, start_image_url, end_image_url, middle_image_url} | no | `[]` | ≤ 2 items | Liste olarak sağlanan doğrulama verileri; her kayıt anahtar kare görsellerini bir istemle birleştirir. |
| `validation[].prompt` |  | string | yes |  |  | Doğrulama sırasında kullanılan istem. |
| `validation[].start_image_url` |  | string (image URL) | yes |  | ≥ 1 characters | Başlangıç karesi için anahtar kare görsel URL'si. |
| `validation[].end_image_url` |  | string (image URL) | yes |  | ≥ 1 characters | Son kare için anahtar kare görsel URL'si. |
| `validation[].middle_image_url` |  | string (image URL) \| null | no |  |  | İlk+orta+son enterpolasyonu için orta anahtar kare görsel URL'si. `include_middle_keyframe=true` ile yapılan çalıştırmalarda gereklidir; aksi halde isteğe bağlıdır. |
| `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.` |  | Tek aşamalı önizleme işlemi kullanan doğrulama sırasında uygulanan negatif istem. Bu işlem, iki aşamalı damıtılmış üretim çıkarımını yaklaşık olarak taklit ettiğinden yönlendirmesi ve önizleme kalitesi nihai sonuçlardan farklıdır. |
| `validation_number_of_frames` |  | integer | no | `89` | 9 – 121 | Her doğrulama videosundaki kare sayısı. |
| `validation_frame_rate` |  | integer | no | `24` | 8 – 60 | Doğrulama videoları için saniye başına kare cinsinden hedef kare hızı; LTX-2.3 yerel olarak 24 hızında çalışır. |
| `validation_resolution` |  | enum (string) | no | `high` | `low`, `medium`, `high` | Doğrulama sırasında kullanılan çözünürlük. |
| `validation_aspect_ratio` |  | enum (string) | no | `1:1` | `16:9`, `1:1`, `9:16` | Doğrulama sırasında kullanılan en-boy oranı. |
| `stg_scale` |  | number | no | `1` | 0 – 3 | 1.0 önerilen Spatio-Temporal Guidance (STG) ölçeği; 0.0 STG'yi kapatır. |
| `include_middle_keyframe` |  | boolean | no | `false` |  | Video üretimi için orta anahtar karenin dahil edilmesi: true, her doğrulama örneğinde `middle_image_url` gerektirir ve yalnızca ilk ile son kareyi kullanmak yerine orta kareyi bunlarla birlikte korur. |

## 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-trainer-v2/interpolate?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-trainer-v2/interpolate?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-trainer-v2/interpolate", 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-trainer-v2/interpolate",
      "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/interpolate",
  "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": 4800,
    "usd": "4.80",
    "charged": 4800,
    "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.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 | Video üreten uç noktalar için kullanılabildiğinde doğrulamadan birleştirilmiş video önizlemesi. |
| `audio` | object {url, content_type, file_name, file_size} \| null | Yalnızca ses rotaları için kullanılabildiğinde önizleme olarak sağlanan doğrulamadan birleştirilmiş ses: /audio-inpaint, /audio-extend-suffix, /audio-extend-prefix, /t2a, /a2a ve /v2a. |
| `lora_file` | object {url, content_type, file_name, file_size} | .safetensors biçimindeki eğitilmiş LoRA ağırlıkları için URL. |
| `config_file` | object {url, content_type, file_name, file_size} | Çıkarım uç noktası kurulumu için yapılandırma. |
| `debug_dataset` | object {url, content_type, file_name, file_size} \| null | `debug_dataset` etkinleştirildiğinde kullanılabilen hata ayıklama çıktısı: ön işlemeden geçmiş eğitim verilerini içeren indirilebilir bir arşiv. |

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