# LTX-2.3 22B Distilled · Text to Video · LoRA API

> تبدیل متن به ویدیوی تقطیرشده که LoRAهای سفارشی فیلد الزامی `loras` را اعمال می‌کند

از یک `prompt` و فهرست الزامی `loras` کلیپ ایجاد می‌کند. `video_size` شکل‌های ازپیش‌تنظیم‌شده ارائه می‌دهد، `num_frames` از 9 تا 481 و `fps` از 1 تا 60 است. تولید صدای اختیاری، camera LoRA و مقیاس Distill LoRA در مرحله دوم نیز ارائه می‌شوند.

- Model id: `ltx-2.3-22b/distilled/text-to-video/lora`
- Made by: Lightricks
- Category: Text to Video
- Output: video
- Price per megapixel of your output video: $0.00141 / megapixel of output video (cheapest run $0.002 (2 API credits))
- Run: `POST https://api.doitong.ru/v1/run/ltx-2.3-22b/distilled/text-to-video/lora`
- Quote: `POST https://api.doitong.ru/v1/quote/ltx-2.3-22b/distilled/text-to-video/lora`
- Docs page: https://doitong.com/fa/developers/models/ltx-2.3-22b/distilled/text-to-video/lora

## Pricing

Price: **$0.00141 / megapixel of output video**. Price per megapixel of your output video: the input files are measured before the run (length, resolution, frame rate). The quote measures the same files and is exactly what the run charges.

The full example input below costs $0.158 = 158 API credits (112 MP output video × $0.001405).

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/ltx-2.3-22b/distilled/text-to-video/lora` 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 |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  |  | پرامپت استفاده‌شده به‌عنوان مبنای تولید ویدیو. |
| `num_frames` |  | integer | no | `121` | 9 – 481 | تعداد فریم خروجی تولیدشده. |
| `video_size` |  | object {width, height} \| enum (string) | no | `landscape_16_9` | `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | ابعاد ویدیوی تولیدشده. |
| `generate_audio` |  | boolean | no | `true` |  | مشخص می‌کند که ویدیو شامل صوت تولیدشده باشد یا نه. |
| `use_multiscale` |  | boolean | no | `true` |  | کلید فعال‌سازی تولید چندمقیاسی برای بهبود انسجام و جزئیات. با True، یک ویدیوی مقدماتی کوچک‌تر تولید می‌شود تا تولید دوم را هدایت کند؛ اندازه تولید دوم با ابعاد درخواستی برابر یا بزرگ‌تر است. |
| `fps` |  | number | no | `24` | 1 – 60 | نرخ فریم ویدیوی خروجی، برحسب فریم بر ثانیه. |
| `scheduler` |  | enum (string) | no | `ltx2` | `ltx2`, `linear_quadratic`, `beta` | انتخاب زمان‌بند. |
| `acceleration` |  | enum (string) | no | `none` | `none`, `regular`, `high`, `full` | سطح شتاب اعمال‌شده به پردازش. |
| `camera_lora` |  | enum (string) | no | `none` | `dolly_in`, `dolly_out`, `dolly_left`, `dolly_right`, `jib_up`, `jib_down`, `static`, `none` | انتخاب LoRA دوربین برای کنترل دقیق‌تر حرکت در ویدیوی تولیدشده نسبت به پرامپت‌های صرفاً حرکتی دوربین. |
| `camera_lora_scale` |  | number | no | `1` | 0 – 1 | قدرت LoRA دوربین برای کنترل دقیق‌تر حرکت در ویدیوی تولیدشده نسبت به پرامپت‌های صرفاً حرکتی دوربین. |
| `negative_prompt` |  | string | no | `news broadcast, 3d animation, computer graphics, pc game, console game, video game, cartoon, childish, watermark, logo, text, on screen text, subtitles, titles, signature, slowmo, static` |  | پرامپت منفی مورد استفاده هنگام تولید ویدیو. |
| `seed` |  | integer \| null | no |  |  | مقدار seed که تولید اعداد تصادفی را آغاز می‌کند. |
| `enable_prompt_expansion` |  | boolean | no | `true` |  | مشخص می‌کند گسترش پرامپت فعال باشد یا نه. |
| `enable_safety_checker` |  | boolean | no | `true` |  | مشخص می‌کند بررسی ایمنی فعال باشد یا نه. |
| `video_output_type` |  | enum (string) | no | `X264 (.mp4)` | `X264 (.mp4)`, `VP9 (.webm)`, `PRORES4444 (.mov)`, `GIF (.gif)` | نوع خروجی ویدیوی حاصل. |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | سطح کیفیت ویدیوی حاصل. |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | حالت نوشتن ویدیوی حاصل. |
| `loras` |  | array of object {path, weight_name, scale} | yes |  |  | انتخاب LoRA برای تولید. |
| `loras[].path` |  | string | yes |  |  | محل وزن‌های LoRA که به‌صورت نشانی اینترنتی یا شناسه مخزن HuggingFace در قالب owner/repo ارائه می‌شود. |
| `loras[].weight_name` |  | string \| null | no |  |  | نام وزن LoRA برای انتخاب میان چند وزن در مخزن HuggingFace؛ فقط مخزن‌هایی که چند وزن دارند به آن نیاز دارند. این تنظیم مگر آن‌که `path` یک مخزن HuggingFace را مشخص کند، اثری ندارد. |
| `loras[].scale` |  | number | no | `1` | 0 – 4 | ضریب مقیاس اعمال‌شده برای LoRA، از 0.0 تا 4.0. |
| `distill_lora_second_pass_scale` |  | number | no | `0.5` | 0 – 1 | مقیاس LoRA تقطیر را برای هر گذر پس از گذر اول کنترل می‌کند. |

## Example input

Required parameters only:

```json
{
  "loras": [
    {
      "path": "https://example.com/your-file.safetensors"
    }
  ],
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

A fuller example:

```json
{
  "loras": [
    {
      "path": "https://example.com/your-file.safetensors"
    }
  ],
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

## 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/ltx-2.3-22b/distilled/text-to-video/lora?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "loras": [
      {
        "path": "https://example.com/your-file.safetensors"
      }
    ],
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }'

# 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/ltx-2.3-22b/distilled/text-to-video/lora?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "loras": [
      {
        "path": "https://example.com/your-file.safetensors"
      }
    ],
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }),
});
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 = {
    "loras": [
        {
            "path": "https://example.com/your-file.safetensors",
        },
    ],
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/ltx-2.3-22b/distilled/text-to-video/lora", 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": "ltx-2.3-22b/distilled/text-to-video/lora",
      "input": {
        "loras": [
          {
            "path": "https://example.com/your-file.safetensors"
          }
        ],
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
      },
      "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": "ltx-2.3-22b/distilled/text-to-video/lora",
  "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": 158,
    "usd": "0.158",
    "charged": 158,
    "refunded": 0
  },
  "input": {
    "loras": [
      {
        "path": "https://example.com/your-file.safetensors"
      }
    ],
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  },
  "output": {
    "video": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_name": "0-output.mp4",
      "file_size": 1843200,
      "width": 1024,
      "height": 768,
      "fps": 1.0,
      "duration": 5,
      "num_frames": 1
    },
    "seed": 42,
    "prompt": "A cowboy walking through a dusty town at high noon, camera following from behind, cinematic depth, realistic lighting, western mood, 4K film grain."
  },
  "outputs": [
    {
      "type": "video",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
      "content_type": "video/mp4",
      "file_size": 1843200,
      "width": 1280,
      "height": 720,
      "duration": 5,
      "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, width, height, fps, duration, num_frames} | ویدیوی تولیدشده توسط مدل. |
| `seed` | integer | مقدار seed برای مقداردهی اولیه تولید اعداد تصادفی. |
| `prompt` | string | پرامپت مورد استفاده برای هدایت تولید. |

## Related models

- [LTX-2.3 22B Distilled · Text to Video](https://doitong.com/developers/models/ltx-2.3-22b/distilled/text-to-video.md) (`ltx-2.3-22b/distilled/text-to-video`): $0.00121 / megapixel of output video
- [LTX-2.3 22B Distilled · Image to Video](https://doitong.com/developers/models/ltx-2.3-22b/distilled/image-to-video.md) (`ltx-2.3-22b/distilled/image-to-video`): $0.00121 / megapixel of output video
- [LTX-2.3 22B Distilled · Image to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-22b/distilled/image-to-video/lora.md) (`ltx-2.3-22b/distilled/image-to-video/lora`): $0.00141 / megapixel of output video
- [LTX-2.3 22B Distilled · Reference Video to Video](https://doitong.com/developers/models/ltx-2.3-22b/distilled/reference-video-to-video.md) (`ltx-2.3-22b/distilled/reference-video-to-video`): $0.00121 / megapixel of output video
- [LTX-2.3 22B Distilled · Reference Video to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-22b/distilled/reference-video-to-video/lora.md) (`ltx-2.3-22b/distilled/reference-video-to-video/lora`): $0.00141 / megapixel of output video
- [LTX-2.3 22B Distilled · Video to Video](https://doitong.com/developers/models/ltx-2.3-22b/distilled/video-to-video.md) (`ltx-2.3-22b/distilled/video-to-video`): $0.00121 / megapixel of output video
- [LTX-2.3 22B Distilled · Video to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-22b/distilled/video-to-video/lora.md) (`ltx-2.3-22b/distilled/video-to-video/lora`): $0.00141 / megapixel of output video
- [LTX-2.3 22B Distilled · Audio to Video](https://doitong.com/developers/models/ltx-2.3-22b/distilled/audio-to-video.md) (`ltx-2.3-22b/distilled/audio-to-video`): $0.00121 / megapixel of output video

## Links

- HTML page: https://doitong.com/developers/models/ltx-2.3-22b/distilled/text-to-video/lora
- 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=ltx-2.3-22b/distilled/text-to-video/lora
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/ltx-2.3-22b/distilled/text-to-video/lora
