# Lightx · Relight API

> 프롬프트, 참조 프레임, HDR 이미지 또는 배경 이미지로 동영상의 조명을 다시 설정합니다

입력 동영상의 조명을 변경합니다. `relit_cond_type`으로 조건을 선택합니다: ic(`relight_parameters` 사용), ref, hdr 또는 bg. 후자의 세 유형은 `relit_cond_img_url`에 조건 이미지를 제공해야 합니다. `ref_id`(0~48)는 ref 모드의 참조 프레임을 선택합니다. 텍스트 `prompt`는 선택 사항이며 생략하면 동영상에 자동 캡션이 추가됩니다.

- Model id: `lightx/relight`
- Made by: Open model
- Category: Video to Video
- Output: video
- Price per second of your output video: $0.10 / second of output video (cheapest run $0.10 (100 API credits))
- Run: `POST https://api.doitong.com/v1/run/lightx/relight`
- Quote: `POST https://api.doitong.com/v1/quote/lightx/relight`
- Docs page: https://doitong.com/ko/developers/models/lightx/relight

## Pricing

Price: **$0.10 / second of output video**. Price per second 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.49 = 490 API credits (4.9 s output video × $0.10).

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/lightx/relight` 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입니다. |
| `prompt` |  | string \| null | no |  |  | 선택적 텍스트 프롬프트입니다. 프롬프트가 제공되지 않으면 Light-X가 동영상에 자동으로 캡션을 지정합니다. |
| `seed` |  | integer \| null | no |  |  | 생성을 재현 가능하게 하는 시드입니다. None으로 설정하면 무작위로 선택됩니다. |
| `relit_cond_type` |  | enum (string) | no | `ic` | `ic`, `ref`, `hdr`, `bg` | 조명 재설정에 사용할 조건 유형입니다. |
| `relight_parameters` |  | object {relight_prompt, bg_source, cfg, use_sky_mask} \| null | no |  |  | 사용 여부가 relight_condition_type에 따라 달라지는 조명 재설정 설정입니다. 'ic'에서는 필요하지만 'bg'에서는 무시되고 대신 배경 이미지 URL이 필요합니다. |
| `relight_parameters.relight_prompt` |  | string | yes |  |  | 생성할 조명 조건을 지정하는 텍스트 프롬프트입니다. |
| `relight_parameters.bg_source` |  | enum (string) | no | `Left` | `Left`, `Right`, `Top`, `Bottom` | IC-light의 광원 방향입니다. |
| `relight_parameters.cfg` |  | number | no | `2` | 1 – 10 | 조명 재설정에 적용되는 classifier-free guidance의 스케일입니다. |
| `relight_parameters.use_sky_mask` |  | boolean | no | `false` |  | 야외 장면의 하늘 마스킹 토글입니다. |
| `relit_cond_img_url` |  | string \| null | no |  |  | relight_condition_type의 'ref', 'hdr', 'bg' 설정에 필요한 조건 이미지 URL입니다. 'bg' 모드에서는 배경을 제공합니다. |
| `ref_id` |  | integer | no | `0` | 0 – 48 | 프레임 인덱스로 선택하는 조명 재설정 참조입니다. 생성된 프레임 수가 배타적 상한으로 사용되며 기본값은 49입니다. |
| `enable_safety_checker` |  | boolean | no | `true` |  | 호출자에게 권한이 있으면 false로 설정해 검사를 완화할 수 있습니다. |

File parameters (`video`) 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/lightx/relight?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/lightx/relight?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/lightx/relight", 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": "lightx/relight",
      "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": "lightx/relight",
  "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": 490,
    "usd": "0.49",
    "charged": 490,
    "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,
    "input_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
    },
    "viz_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
    }
  },
  "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} | 생성으로 만들어진 동영상 파일입니다. |
| `seed` | integer | 생성 중 적용되는 시드 값입니다. |
| `input_video` | object {url, content_type, file_name, file_size} \| null | 파이프라인이 생성하는 경우 선택적으로 반환되는 정규화 또는 처리된 입력 동영상입니다. |
| `viz_video` | object {url, content_type, file_name, file_size} \| null | 파이프라인이 생성하는 경우 선택적으로 반환되는 시각화 또는 디버깅 동영상입니다. |

## Related models

- [Lightx · Recamera](https://doitong.com/developers/models/lightx/recamera.md) (`lightx/recamera`): $0.10 / second of output video
- [AMT Interpolation](https://doitong.com/developers/models/amt-interpolation.md) (`amt-interpolation`): $0.000575 / second of processing time
- [AnimateDiff Turbo · Video to Video](https://doitong.com/developers/models/fast-animatediff/turbo/video-to-video.md) (`fast-animatediff/turbo/video-to-video`): $0.00125 / second of processing time
- [AnimateDiff · Video to Video](https://doitong.com/developers/models/fast-animatediff/video-to-video.md) (`fast-animatediff/video-to-video`): $0.00125 / second of processing time
- [Bernini-R Edit Video](https://doitong.com/developers/models/bernini-r/edit-video.md) (`bernini-r/edit-video`): from $0.04 / second of output video
- [Bernini-R Reference Edit Video](https://doitong.com/developers/models/bernini-r/reference-edit-video.md) (`bernini-r/reference-edit-video`): from $0.04 / second of output video
- [DWPose Pose Prediction · Video](https://doitong.com/developers/models/dwpose/video.md) (`dwpose/video`): $0.0006 / second of processing time
- [Editto](https://doitong.com/developers/models/editto.md) (`editto`): from $0.04 / second of output video

## Links

- HTML page: https://doitong.com/developers/models/lightx/relight
- 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=lightx/relight
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/lightx/relight
