# Krea 2 Trainer API

> Huấn luyện LoRA Krea 2 tùy chỉnh từ tệp zip ảnh, với tự động tạo chú thích tùy chọn

Tinh chỉnh LoRA trên tệp .zip ảnh tại `images_data_url`, kèm chú thích .txt cùng tên và `trigger_phrase` tùy chọn. Các chế độ `auto_captioning` là Off, Object/Character, Style và Custom. `steps` từ 50 đến 10000 (mặc định 100), `resolution` là 768 hoặc 1024. Đầu ra gồm trọng số LoRA và tệp cấu hình.

- Model id: `krea-2-trainer`
- Made by: Krea
- Category: Training
- Output: file
- Price per run: from $0.30 / run (cheapest run $0.30 (300 API credits))
- Run: `POST https://api.doitong.ru/v1/run/krea-2-trainer`
- Quote: `POST https://api.doitong.ru/v1/quote/krea-2-trainer`
- Docs page: https://doitong.com/vi/developers/models/krea-2-trainer

## Pricing

Price: **from $0.30 / run** (the lowest tier; the quote prices your exact input). Price per run: 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.30 = 300 API credits (1 run × $0.30).

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/krea-2-trainer` 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

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `images_data_url` |  | string | yes |  |  | URL đến tệp hình ảnh huấn luyện .zip chứa các tệp PNG/JPG/JPEG/WebP; yêu cầu thất bại với 422 nếu bất kỳ hình ảnh nào không có tệp chú thích và cũng không có `trigger_phrase` không rỗng. Chú thích là tùy chọn khi `trigger_phrase` cung cấp giá trị dự phòng; nếu không, dùng phần tên tệp tương ứng: ROOT.EXT đi với ROOT.txt, ví dụ 001.jpg đi với 001.txt. |
| `trigger_phrase` |  | string | no | `` |  | Cụm từ thể hiện phiên bản DreamBooth bắt buộc khi `auto_captioning` là Off và bất kỳ hình ảnh nào thiếu tệp chú thích. Cụm từ này cung cấp chú thích khi thiếu tệp .txt và làm văn bản bắt đầu cho các lời nhắc xác thực mặc định. |
| `auto_captioning` |  | enum (string) | no | `Off` | `Off`, `Object/Character`, `Style`, `Custom` | Chế độ chú thích tùy chọn: Object/Character, Style và Custom gọi dataset-captioner với google/gemma-4-31B-it, trong khi Off vẫn giữ yêu cầu hiện có rằng mỗi hình ảnh phải có chú thích .txt có cùng tên gốc hoặc sử dụng trigger_phrase làm phương án dự phòng. Với chú thích được tạo, trigger_phrase được đưa vào lời nhắc chú thích và được chuẩn hóa trong các tệp sidecar kết quả theo quy ước chú thích LoRA đã chọn. |
| `steps` |  | integer | no | `100` | 50 – 10,000 | Số bước huấn luyện LoRA. |
| `learning_rate` |  | number | no | `0.0005` | 0.000001 – 0.01 | Tốc độ học B-factor của LoRA, cũng được áp dụng cho A nếu `lora_a_lr_multiplier=1`; với muon, giá trị này biểu thị tốc độ tương đương AdamW được điều chỉnh theo match_rms_adamw. Với lịch cố định, Krea khuyến nghị phạm vi 3e-4–7e-4. |
| `resolution` |  | enum (integer) | no | `768` | `768`, `1024` | Độ phân giải huấn luyện, trong đó 1024 ưu tiên chi tiết tinh tối đa còn 768 giúp huấn luyện nhanh hơn khoảng 1.7x, giảm mức sử dụng VRAM và vẫn cho chất lượng phong cách gần như giống hệt. Hình ảnh được thu phóng để phủ kín hình vuông mục tiêu, sau đó cắt ở giữa. |
| `debug_dataset` |  | boolean | no | `false` |  | Tùy chọn tải xuống tập dữ liệu, hiển thị chính xác dữ liệu đã dùng để huấn luyện, được đóng gói thành tệp lưu trữ sau khi bổ sung chú thích hoặc tự động tạo chú thích. |

## Example input

Required parameters only:

```json
{
  "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
```

A fuller example:

```json
{
  "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
```

## 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/krea-2-trainer?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  }'

# 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/krea-2-trainer?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  }),
});
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 = {
    "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/krea-2-trainer", 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": "krea-2-trainer",
      "input": {
        "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
      },
      "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": "krea-2-trainer",
  "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": 300,
    "usd": "0.30",
    "charged": 300,
    "refunded": 0
  },
  "input": {
    "images_data_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  },
  "output": {
    "lora_file": {
      "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
    },
    "config_file": {
      "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
    },
    "prompt_enhancement_system_prompt": "string",
    "debug_dataset": {
      "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
    }
  },
  "outputs": [
    {
      "type": "file",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "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 |
|---|---|---|
| `lora_file` | object {url, content_type, file_name, file_size} | URL tải xuống trọng số LoRA Krea-2 đã huấn luyện ở định dạng safetensors. |
| `config_file` | object {url, content_type, file_name, file_size} | Liên kết đến tệp JSON chứa cấu hình huấn luyện/LoRA. |
| `prompt_enhancement_system_prompt` | string \| null | Lời nhắc hệ thống được trả về khi bật `auto_captioning`, giúp viết hoặc tinh chỉnh lời nhắc suy luận bằng cùng quy ước chú thích với dữ liệu huấn luyện được chú thích tự động. |
| `debug_dataset` | object {url, content_type, file_name, file_size} \| null | Tải xuống dữ liệu huấn luyện được cung cấp khi bật `debug_dataset`: một tệp lưu trữ chứa tập dữ liệu đã chuẩn bị và các chú thích được tự động tạo. |

## Related models

- [Krea 2 Text to Image Turbo LoRA](https://doitong.com/developers/models/krea-2/turbo/lora.md) (`krea-2/turbo/lora`): $0.01 / megapixel
- [Krea 2 Turbo](https://doitong.com/developers/models/krea-2/turbo.md) (`krea-2/turbo`): $0.008 / megapixel
- [ERNIE-Image Trainer](https://doitong.com/developers/models/ernie-image-trainer.md) (`ernie-image-trainer`): $0.0012 / step
- [FLUX 2 \[klein\] 9b Base Trainer](https://doitong.com/developers/models/flux-2-klein-9b-base-trainer.md) (`flux-2-klein-9b-base-trainer`): $0.0043 / step
- [Flux 2 Klein 9B Base Trainer](https://doitong.com/developers/models/flux-2-klein-9b-base-trainer/edit.md) (`flux-2-klein-9b-base-trainer/edit`): $0.0139 / step
- [FLUX 2 Trainer](https://doitong.com/developers/models/flux-2-trainer.md) (`flux-2-trainer`): $0.0064 / step
- [FLUX 2 Trainer Edit](https://doitong.com/developers/models/flux-2-trainer/edit.md) (`flux-2-trainer/edit`): $0.0389 / step
- [FLUX 2 Trainer V2](https://doitong.com/developers/models/flux-2-trainer-v2.md) (`flux-2-trainer-v2`): $0.0064 / step

## Links

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