# Z-Image Turbo Seamless Tiling API

> 수평·수직·양방향 타일링 및 인페인팅을 지원하는 빠른 타일형 출력 텍스트-이미지 모델

가장자리를 가로질러 반복되는 이미지를 생성하며 `tiling_mode`(both, horizontal 또는 vertical), `tile_size` 및 `tile_stride`로 제어합니다. 최대 8회의 추론 스텝을 수행하고 png, jpeg 또는 webp 이미지 1~4개를 반환합니다. `image_url`을 제공하면 이미지-이미지가 활성화되고, `mask_image_url`을 추가하면 인페인팅이 활성화됩니다. `strength`는 입력이 얼마나 변경될지 설정합니다.

- Model id: `z-image/turbo/tiling`
- Made by: Alibaba
- Category: Text to Image
- Output: image
- Price per megapixel of your output image: $0.02 / megapixel of output image (cheapest run $0.02 (20 API credits))
- Run: `POST https://api.doitong.com/v1/run/z-image/turbo/tiling`
- Quote: `POST https://api.doitong.com/v1/quote/z-image/turbo/tiling`
- Docs page: https://doitong.com/ko/developers/models/z-image/turbo/tiling

## Pricing

Price: **$0.02 / megapixel of output image**. Price per megapixel of your output image: 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.02 = 20 API credits (1 MP output image × $0.02).

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/z-image/turbo/tiling` 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 |  |  | 이미지 생성을 안내하는 프롬프트입니다. |
| `image_size` |  | object {width, height} \| enum (string) | no | `square_hd` | `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9`, `auto` | 생성할 이미지의 크기입니다. 'auto'를 선택하면 입력 이미지가 없는 경우 1024x1024가 사용되고, 입력 이미지가 있으면 해당 이미지의 크기가 사용됩니다. |
| `num_inference_steps` |  | integer | no | `8` | 1 – 8 | 실행할 추론 단계 수입니다. |
| `seed` |  | integer \| null | no |  |  | 재현 가능한 이미지 생성을 위한 시드입니다. 모델 버전이 동일하면 동일한 프롬프트와 시드로 동일한 이미지가 생성됩니다. |
| `num_images` | `num_outputs` | integer | no | `1` | 1 – 4 | 생성할 이미지 수입니다. |
| `enable_safety_checker` |  | boolean | no | `true` |  | 안전 검사입니다. 안전하지 않은 것으로 표시된 이미지 대신 검은 이미지를 반환합니다. true는 검사를 활성화하고, false는 권한 있는 계정에서만 비활성화합니다. 권한이 없는 요청은 항상 검사됩니다. |
| `output_format` |  | enum (string) | no | `png` | `jpeg`, `png`, `webp` | 결과 이미지의 파일 형식입니다. |
| `acceleration` |  | enum (string) | no | `regular` | `none`, `regular`, `high` | 처리에 적용되는 가속 수준입니다. |
| `enable_prompt_expansion` |  | boolean | no | `false` |  | 프롬프트 확장 활성화 여부를 제어합니다. |
| `image_url` | `image` | string (image URL) \| null | no |  |  | 이미지-이미지 생성 또는 인페인팅에 사용할 이미지 URL입니다. mask_image_url을 지정하면 인페인팅이 선택되고, 생략하면 이미지-이미지 생성이 선택됩니다. |
| `mask_image_url` |  | string (image URL) \| null | no |  |  | 필수 image_url과 함께 제공되는 인페인팅 마스크 URL입니다. 마스크는 검은색 영역을 그대로 유지하고 흰색 영역을 다시 생성합니다. |
| `strength` |  | number | no | `0.6` | ≤ 1, > 0 | image_url을 통해 제공된 이미지에만 적용되는 변환 강도이며, 그 외에는 사용되지 않습니다. |
| `tile_size` |  | integer | no | `128` | 32 – 256 | 잠재 공간의 타일 크기입니다. 64는 512px, 128은 1024px, 256은 2048px에 해당합니다. 생성된 이미지의 크기에 따라 타일 축의 크기는 자동으로 제한되며, 패치화에는 2로 나누어지는 짝수 값이 필요합니다. |
| `tile_stride` |  | integer | no | `64` | 16 – 128 | 잠재 공간의 타일 보폭입니다. 픽셀 기준으로 32 = 256px, 64 = 512px, 128 = 1024px입니다. 2의 배수만 유효하며, 유효 타일 크기의 절반을 초과하는 값은 해당 한도로 자동 축소됩니다. |
| `tiling_mode` |  | enum (string) | no | `both` | `both`, `horizontal`, `vertical` | 타일링 방향입니다. 'both'는 모든 방향을, 'horizontal'은 왼쪽에서 오른쪽 방향만, 'vertical'은 위에서 아래 방향만 포함합니다. |

File parameters (`image`, `mask_image_url`) 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"
}
```

A fuller example:

```json
{
  "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.com/v1/run/z-image/turbo/tiling?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"
  }'

# 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/z-image/turbo/tiling?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"
  }),
});
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 = {
    "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/z-image/turbo/tiling", 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": "z-image/turbo/tiling",
      "input": {
        "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": "z-image/turbo/tiling",
  "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": 20,
    "usd": "0.02",
    "charged": 20,
    "refunded": 0
  },
  "input": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  },
  "output": {
    "images": [
      {
        "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,
        "width": 1024,
        "height": 768
      }
    ],
    "timings": {},
    "seed": 42,
    "has_nsfw_concepts": [
      false
    ],
    "prompt": "string"
  },
  "outputs": [
    {
      "type": "image",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "width": 1024,
      "height": 768,
      "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 |
|---|---|---|
| `images` | array of object {url, content_type, file_name, file_size, width, height} | 생성된 이미지의 파일 정보입니다. |
| `timings` | object | 생성 프로세스의 시간 정보입니다. |
| `seed` | integer | 이미지 생성 시드입니다. 입력에서 시드를 생략하면 무작위로 선택된 값이 포함되고, 그렇지 않으면 제공한 값이 반복됩니다. |
| `has_nsfw_concepts` | array of boolean | 생성된 이미지에 NSFW 개념이 나타나는지 나타냅니다. |
| `prompt` | string | 이미지 생성에 사용되는 프롬프트입니다. |

## Related models

- [Z Image Base](https://doitong.com/developers/models/z-image/base.md) (`z-image/base`): $0.01 / megapixel
- [Z Image Base Lora](https://doitong.com/developers/models/z-image/base/lora.md) (`z-image/base/lora`): $0.012 / megapixel
- [Z Image Turbo](https://doitong.com/developers/models/z-image/turbo.md) (`z-image/turbo`): $0.005 / megapixel
- [Z Image Turbo Lora](https://doitong.com/developers/models/z-image/turbo/lora.md) (`z-image/turbo/lora`): $0.0085 / megapixel
- [Z-Image Turbo Seamless Tiling Lora](https://doitong.com/developers/models/z-image/turbo/tiling/lora.md) (`z-image/turbo/tiling/lora`): $0.025 / megapixel of output image
- [Z Image Turbo Controlnet](https://doitong.com/developers/models/z-image/turbo/controlnet.md) (`z-image/turbo/controlnet`): $0.013 / image
- [Z Image Turbo Controlnet Lora](https://doitong.com/developers/models/z-image/turbo/controlnet/lora.md) (`z-image/turbo/controlnet/lora`): $0.04 / image
- [Z Image Turbo Image To Image](https://doitong.com/developers/models/z-image/turbo/image-to-image.md) (`z-image/turbo/image-to-image`): $0.015 / image

## Links

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