# Ltx 2.3 Quality · Reference Video to Video API

> Pagbuo na ginagabayan ng prompt at reference video, na may opsyonal na una, gitna at huling keyframe na larawan

Gumagawa ng bagong video mula sa kinakailangang `prompt` at reference `video_url` na nagbibigay ng galaw at istruktura. Maaaring gamitin ang `image_url`, `mid_image_url` at `end_image_url` upang itakda ang itsura sa simula, gitna at dulo. Kinokontrol ng `video_strength` at `strength` (parehong 0 hanggang 1) kung gaano kalapit itong susunod o mananatili sa source, at maaaring magbigay ang `control_video_url` ng precomputed control signal. Nag-aalok ang `resolution` ng auto o fixed preset gaya ng square at 16:9 portrait o landscape.

- Model id: `ltx-2.3-quality/reference-video-to-video`
- Made by: Lightricks
- Category: Video to Video
- Output: video
- Price per megapixel of your output video: $0.00241 / megapixel of output video (cheapest run $0.003 (3 API credits))
- Run: `POST https://api.doitong.ru/v1/run/ltx-2.3-quality/reference-video-to-video`
- Quote: `POST https://api.doitong.ru/v1/quote/ltx-2.3-quality/reference-video-to-video`
- Docs page: https://doitong.com/fil/developers/models/ltx-2.3-quality/reference-video-to-video

## Pricing

Price: **$0.00241 / 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.27 = 270 API credits (112 MP output video × $0.002408).

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-quality/reference-video-to-video` 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

Send either the canonical name or the native field name (not both). Canonical names are the same across models.

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `prompt` |  | string | yes |  |  | Prompt na ginagamit upang gabayan ang pagbuo. |
| `video_url` | `video` | string (video URL) | yes |  |  | URL na tumutukoy sa reference video na ginagamit upang gabayan ang motion at structure. |
| `control_video_url` |  | string (video URL) \| null | no |  |  | Opsyonal na precomputed control video, na ginagamit sa halip ng built-in control estimation kapag ibinigay kasama ng `skip_control_preprocess`. Nagiging direktang control signal ito matapos i-resample upang tumugma sa output dimensions at frame count. Halimbawa, maaaring naglalaman ang video ng na-render nang depth, edge, o pose composite. |
| `skip_control_preprocess` |  | boolean | no | `false` |  | Direct control mode gamit ang `control_video_url` sa halip ng panloob na pagtatantiya ng depth, edges, o pose; kung wala ang URL na iyon, hindi pinapansin ang setting na ito. Sa mode na ito, sinusunod ng output sizing ang mga tahasang dimension na may 64 alignment upang magkatugma ang RGB at control video, habang kinukuha ng `auto` ang source dimensions at aspect ratio ayon sa mga limitasyon ng LTX. |
| `preserve_original_video` |  | boolean | no | `false` |  | Mode ng pagpapanatili ng orihinal na video, na available lamang kasama ng `skip_control_preprocess`, `video_url`, at `control_video_url`. Naka-disable bilang default at pinananatili ang karaniwang control processing; kapag pinagana, nagsisimula ang pagbuo mula sa `video_url` habang pinananatili ang structural guidance mula sa `control_video_url`. Itinatakda ng denoising sa pamamagitan ng `strength` ang dami ng mapapanatili, kung saan mas maraming orihinal na pixel ang napapanatili sa mas mababang setting. |
| `image_url` | `image` | string (image URL) \| null | no |  |  | Opsyonal na larawan anchoring style o character identity bilang keyframe ng unang frame. |
| `mid_image_url` |  | string (image URL) \| null | no |  |  | Opsyonal na larawan anchoring appearance malapit sa gitna ng clip, na sumusuporta sa unang `image_url` keyframe. Tinutulungan nitong sumunod ang appearance sa galaw ng camera sa halip na lumihis; kailangan ang `image_url`. |
| `end_image_url` | `end_image` | string (image URL) \| null | no |  |  | Opsyonal na larawan anchoring appearance sa huling frame ng clip. Kapaki-pakinabang kapag nagtatapos ang galaw ng camera sa lokasyong iba sa panimulang larawan; kailangan ang `image_url`. |
| `video_strength` |  | number | no | `0.6` | 0 – 1 | Kinokontrol ng conditioning strength na ito ang kalayaan sa pagbabago ng motion at structure mula sa reference video: nagbibigay-daan ang mas maliliit na setting sa mas malalaking pagbabago. |
| `strength` |  | number | no | `1` | 0 – 1 | Denoising control para sa reference-video-to-video sampling, na nakadepende ang epekto sa `preserve_original_video`. Kapag naka-off ang mode na iyon, pinaiikli lamang nito ang denoising schedule; kapag naka-on, kinokontrol nito ang pagbabago ng source pixels, kung saan nire-regenerate ng 1.0 ang lahat at mas maraming napapanatili sa mas mababang setting (halimbawa, humigit-kumulang 50% ang napapanatili sa 0.5). |
| `num_frames` |  | integer | no | `121` | 9 – 481 | Bilang ng output frame, ayon sa IC-LoRA stability badyet na nakabatay sa resolution na minultiply sa frames. Ibig sabihin ng 422 response na lumampas sa badyet: babaan ang resolution o `num_frames`. Pinapayagan ng badyet ang humigit-kumulang 150 frame sa 720p-class dimensions at mas marami sa mas maliliit na sukat. |
| `resolution` |  | object {width, height} \| enum (string) | no | `auto` | `auto`, `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | Output video dimensions, na nakaaapekto rin sa stable duration: mas maraming frame ang pinapayagan ng mas maliliit na sukat, habang binababa ng mas malalaki ang maximum. Pinananatili ng built-in control estimation ang sukat na malapit sa opisyal na control workflow; sa halip, sinusunod ng direct control sa pamamagitan ng `skip_control_preprocess` at `control_video_url` ang tahasang dimensions na may 64px alignment. Sa direct-control mode, minamana ng `auto` ang source dimensions at aspect ratio ayon sa mga limitasyon ng LTX. |
| `frames_per_second` |  | number | no | `24` | 1 – 60 | Frame rate ng output video, na sinusukat sa frames per segundo. |
| `num_inference_steps` |  | integer | no | `15` | 8 – 30 | Itakda kung ilang inference step ang tatakbuhin, hanggang 30; kapag hindi binago, 15 ang ginagamit. |
| `guidance_scale` |  | number | no | `1` | 1 – 20 | Ayusin ang classifier-free guidance gamit ang scale na ito; nakatuon ang default tuning nito sa mataas na kalidad at mabilis na pagbuo. |
| `generate_audio` |  | boolean | no | `true` |  | Toggle ng audio track para sa ibinalik na MP4: ang off ay gumagawa ng video-only na file, habang ang on ay nagsasama ng audio. |
| `negative_prompt` |  | string | no | `color distortion, overexposure, static, blurry details, subtitles, style, artwork, painting, frame, still, dim overall tone, worst quality, low quality, JPEG compression artifacts, ugly, mutilated, extra fingers, poorly drawn hands, poorly drawn face, deformed, disfigured, malformed limbs, fused fingers, motionless frame, cluttered background, three legs, crowded background, walking backwards` |  | Negative prompt na tumutukoy sa dapat iwasan ng pagbuo. |
| `seed` |  | integer \| null | no |  |  | Seed na ginagawang reproducible ang pagbuo. Ang pagtatakda nito sa None ay random na pumipili ng seed. |
| `enable_prompt_expansion` |  | boolean | no | `true` |  | Kinokontrol kung naka-enable ang prompt expansion. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Kinokontrol kung pinapagana ang safety checking. |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | Quality preset na inilalapat sa output video. |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | Write mode para sa resultang video. |

File parameters (`video`, `control_video_url`, `image`, `mid_image_url`, `end_image`) take a public `https://` URL, a `data:` URI up to 10 MB, or the `file_url` of an upload from `POST /files`.

## Example input

Required parameters only:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
  "video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
```

A fuller example:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
  "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
```

## 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-quality/reference-video-to-video?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
  }'

# 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-quality/reference-video-to-video?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
  }),
});
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 = {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/ltx-2.3-quality/reference-video-to-video", 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-quality/reference-video-to-video",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
        "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
      },
      "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-quality/reference-video-to-video",
  "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": 270,
    "usd": "0.27",
    "charged": 270,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
    "video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
  },
  "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
    },
    "seed": 42,
    "prompt": "string"
  },
  "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} | Videong ginawa ng modelo. |
| `seed` | integer | Aktuwal na seed na ginagamit habang bumubuo. |
| `prompt` | string | Prompt sa pagbuo, kabilang ang anumang expansion na inilapat bago gamitin. |

## Related models

- [Ltx 2.3 Quality · Text to Video](https://doitong.com/developers/models/ltx-2.3-quality/text-to-video.md) (`ltx-2.3-quality/text-to-video`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Text to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-quality/text-to-video/lora.md) (`ltx-2.3-quality/text-to-video/lora`): $0.00271 / megapixel of output video
- [Ltx 2.3 Quality · Image to Video](https://doitong.com/developers/models/ltx-2.3-quality/image-to-video.md) (`ltx-2.3-quality/image-to-video`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Image to Video · LoRA](https://doitong.com/developers/models/ltx-2.3-quality/image-to-video/lora.md) (`ltx-2.3-quality/image-to-video/lora`): $0.00271 / megapixel of output video
- [Ltx 2.3 Quality · Ingredient](https://doitong.com/developers/models/ltx-2.3-quality/ingredient.md) (`ltx-2.3-quality/ingredient`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Clean Plate](https://doitong.com/developers/models/ltx-2.3-quality/clean-plate.md) (`ltx-2.3-quality/clean-plate`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Colorization](https://doitong.com/developers/models/ltx-2.3-quality/colorization.md) (`ltx-2.3-quality/colorization`): $0.00241 / megapixel of output video
- [Ltx 2.3 Quality · Cross Eyed](https://doitong.com/developers/models/ltx-2.3-quality/cross-eyed.md) (`ltx-2.3-quality/cross-eyed`): $0.00241 / megapixel of output video

## Links

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