# Ltx 2.3 Quality · Render to Real API

> Zet 3D-, CG- of game-renderbeelden om in een fotorealistische video met instelbare intensiteit

Converteert een 3D-render via `video_url` naar een realistischer uiterlijk. `intensity` kan light, strong of strong-v2 zijn, van subtiel tot sterk. Een optionele `image_url` stelt het fotorealistische eerste frame in en `enable_detail_refine` voegt een tweede verscherpingsronde toe met `detail_refine_strength` van 0.3 to 0.95. De prompt behoudt de `3DREAL`-trigger en de uitvoer is 480p of 720p.

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

## Pricing

Price: **from $0.00241 / megapixel of output video** (the lowest tier; the quote prices your exact input). 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.

Price by tier:

- base rate: $0.00241 / megapixel of output video
- detail refine: $0.00963 / megapixel of output video

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.com/v1/quote/ltx-2.3-quality/render-to-real` 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 |
|---|---|---|---|---|---|---|
| `video_url` | `video` | string (video URL) | yes |  |  | URL die verwijst naar een 3D-, CG- of game-gerenderde video voor fotorealistische conversie. |
| `image_url` | `image` | string (image URL) \| null | no |  |  | Optionele beeldanker voor frame 0, dat het fotorealistische uiterlijk ervan vastlegt. Zonder dit anker stuurt alleen de render het resultaat; wanneer het wordt opgegeven, wordt de afbeelding het eerste frame, in overeenstemming met de image-to-video-training van de adapter. |
| `intensity` |  | enum (string) | no | `light` | `light`, `strong`, `strong-v2` | Niveau van fotorealistische transformatie, waarbij `strong-v2` de nieuwste verbeterde adapter selecteert voor betere samenhang tussen scènes, audio, pratende personages en algemene kwaliteit. Kies bij de andere opties `light` om meer van het uiterlijk en de beweging van de bronrender te behouden, of `strong` voor agressievere wijzigingen richting fotorealisme. |
| `enable_detail_refine` |  | boolean | no | `false` |  | Schakelt een extra verfijningsfase in om scherpte en resolutie te verhogen; standaard uitgeschakeld. Na de basisgeneratie vergroot een ruimtelijke upscaler de video-latent met 2x, waarna een korte detailerpass deze verfijnt met het gedistilleerde model. |
| `detail_refine_strength` |  | number | no | `0.75` | 0.3 – 0.95 | Denoisingsterkte van de detailer, standaard 0.75 en alleen van toepassing wanneer `enable_detail_refine` is ingeschakeld. Gebruik een lagere instelling voor zachtere bewerkingen die het basisresultaat behouden; verhogen genereert details uitgebreider opnieuw, maar verhoogt het risico op afwijkingen. |
| `prompt` |  | string | no | `3DREAL.` |  | Tekstprompt voor het gewenste fotorealistische resultaat, geschreven na de vooraf ingevulde activerings­trigger van de `3DREAL`-adapter. Noch het wissen van de prompt, noch het inschakelen van promptuitbreiding verwijdert die trigger; deze blijft altijd behouden. |
| `resolution` |  | enum (string) | no | `720p` | `480p`, `720p` | Kies de resolutie van de korte zijde van de uitvoer met behoud van de bronbeeldverhouding: 480p geeft zachtere resultaten voor clips tot ongeveer 15 seconden, terwijl 720p scherpere resultaten geeft voor maximaal ongeveer 6 seconden. Kies 480p voor langere clips, omdat het IC-LoRA-controlepad resolutie vermenigvuldigd met frameaantal beperkt; requests die dit budget overschrijden worden met een duidelijke fout afgewezen. Bereken de uitvoerduur als `num_frames` / `frames_per_second`. |
| `num_frames` |  | integer | no | `121` | 9 – 481 | Aantal uitvoerframes, onderhevig aan een IC-LoRA-budget voor resolutie vermenigvuldigd met frames: ongeveer 6 seconden bij 720p of 15 seconden bij 480p. Overschrijding van dit budget geeft 422; verlaag `num_frames` of selecteer 480p. De clipduur in seconden is gelijk aan `num_frames` / `frames_per_second`. |
| `frames_per_second` |  | number | no | `24` | 1 – 60 | Framesnelheid van de uitvoervideo, gemeten in frames per seconde. |
| `num_inference_steps` |  | integer | no | `15` | 8 – 30 | Stel het aantal inference-stappen in, maximaal 30; ongewijzigd gebruikt dit 15. |
| `guidance_scale` |  | number | no | `1` | 1 – 20 | Pas classifier-free guidance aan met deze schaal; de standaardafstelling is gericht op zowel hoge kwaliteit als snelle generatie. |
| `generate_audio` |  | boolean | no | `true` |  | Schakelaar voor de audiotrack van de geretourneerde MP4: uit levert een bestand zonder audio op, aan voegt audio toe. |
| `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` |  | Negatieve prompt die specificeert wat de generatie moet vermijden. |
| `enable_prompt_expansion` |  | boolean | no | `false` |  | AI-gebaseerde verrijking van de generatieprompt, standaard uitgeschakeld zodat je formulering ongewijzigd wordt doorgestuurd. De uitvoer rapporteert de daadwerkelijk gebruikte prompt en behoudt altijd `3DREAL`; inschakelen laat een AI-model de beschrijving vóór generatie uitbreiden. |
| `seed` |  | integer \| null | no |  |  | Seed die generatie reproduceerbaar maakt. Als je deze instelt op None, wordt willekeurig een seed gekozen. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Bepaalt of veiligheidscontrole is ingeschakeld. |
| `video_quality` |  | enum (string) | no | `high` | `low`, `medium`, `high`, `maximum` | Kwaliteitsvoorinstelling die op de uitvoervideo wordt toegepast. |
| `video_write_mode` |  | enum (string) | no | `balanced` | `fast`, `balanced`, `small` | Schrijfmodus van de resulterende video. |

File parameters (`video`, `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
{
  "video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
```

A fuller example:

```json
{
  "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.com/v1/run/ltx-2.3-quality/render-to-real?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "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.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/ltx-2.3-quality/render-to-real?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "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.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "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/render-to-real", 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": "ltx-2.3-quality/render-to-real",
      "input": {
        "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/render-to-real",
  "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": {
    "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.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} | Video die door het model is geproduceerd. |
| `seed` | integer | Werkelijke seed die tijdens de generatie wordt toegepast. |
| `prompt` | string | Generatieprompt, inclusief eventuele uitbreiding die vóór gebruik is toegepast. |

## 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/render-to-real
- 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/render-to-real
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/ltx-2.3-quality/render-to-real
