# Z-Image Turbo Seamless Tiling API

> โมเดล text-to-image ที่รวดเร็วซึ่งสร้างเอาต์พุตแบบต่อไทล์ได้ พร้อมการต่อไทล์แนวนอน แนวตั้ง หรือทั้งสองทิศทาง และการอินเพนต์

สร้างรูปภาพที่ต่อซ้ำตามขอบ โดยควบคุมด้วย `tiling_mode` (both, horizontal หรือ vertical), `tile_size` และ `tile_stride` ทำงานสูงสุด 8 ขั้นตอนการอนุมาน และส่งคืนรูปภาพ 1 ถึง 4 รูปในรูปแบบ png, jpeg หรือ webp การระบุ `image_url` จะเปิดใช้ image-to-image และการเพิ่ม `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/th/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 | จำนวนขั้นตอน inference ที่ต้องดำเนินการ |
| `seed` |  | integer \| null | no |  |  | Seed สำหรับสร้างรูปภาพซ้ำได้: พรอมต์และ seed เดียวกันจะให้รูปภาพเดียวกันเมื่อเวอร์ชันโมเดลไม่เปลี่ยนแปลง |
| `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 ของรูปภาพที่ใช้สำหรับการสร้างแบบ image-to-image หรือการเติมภาพ หากระบุ mask_image_url จะเลือกการเติมภาพ หากไม่ระบุจะเลือกการสร้างแบบ image-to-image |
| `mask_image_url` |  | string (image URL) \| null | no |  |  | URL ของมาสก์สำหรับการเติมภาพที่ส่งมาพร้อม image_url ซึ่งจำเป็น มาสก์จะคงพื้นที่สีดำไว้เหมือนเดิมและสร้างพื้นที่สีขาวใหม่ |
| `strength` |  | number | no | `0.6` | ≤ 1, > 0 | ความแรงของการแปลงที่ใช้เฉพาะกับรูปภาพที่ส่งผ่าน image_url หากไม่ใช่จะไม่มีการใช้งาน |
| `tile_size` |  | integer | no | `128` | 32 – 256 | ขนาดไทล์ใน latent space โดย 64 เท่ากับ 512px, 128 เท่ากับ 1024px และ 256 เท่ากับ 2048px ขนาดของรูปภาพที่สร้างขึ้นจะจำกัดขนาดตามแนวแกนที่แบ่งไทล์โดยอัตโนมัติ การแบ่งเป็นแพตช์ต้องใช้ค่าที่เป็นเลขคู่และหารด้วย 2 ลงตัว |
| `tile_stride` |  | integer | no | `64` | 16 – 128 | ระยะก้าวของไทล์ใน latent space โดยค่าที่เทียบเท่าเป็นพิกเซลคือ 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 | seed สำหรับการสร้างรูปภาพ รวมถึงค่าที่สุ่มเลือกหากอินพุตไม่ได้ระบุ seed มิฉะนั้นจะใช้ค่าที่ระบุซ้ำ |
| `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
