# Krea 2 Trainer API

> Εκπαιδεύει προσαρμοσμένο Krea 2 LoRA από zip εικόνων, με προαιρετική αυτόματη δημιουργία λεζαντών

Εκτελεί μικρορύθμιση ενός LoRA σε αρχείο .zip εικόνων στο `images_data_url`, με προαιρετικές λεζάντες .txt με το ίδιο όνομα και ένα `trigger_phrase`. Οι λειτουργίες `auto_captioning` είναι Off, Object/Character, Style και Custom. Το `steps` είναι 50 έως 10000 (προεπιλογή 100) και η `resolution` είναι 768 ή 1024. Παράγει βάρη LoRA και ένα αρχείο διαμόρφωσης.

- 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.com/v1/run/krea-2-trainer`
- Quote: `POST https://api.doitong.com/v1/quote/krea-2-trainer`
- Docs page: https://doitong.com/el/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.com/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 για αρχείο .zip εικόνων εκπαίδευσης που περιέχει αρχεία PNG/JPG/JPEG/WebP· ένα αίτημα αποτυγχάνει με 422 αν οποιαδήποτε εικόνα δεν έχει ούτε αρχείο λεζάντας ούτε μη κενό `trigger_phrase`. Οι λεζάντες είναι προαιρετικές όταν το `trigger_phrase` παρέχει εναλλακτική τιμή· διαφορετικά χρησιμοποιούνται αντίστοιχα στελέχη ονομάτων αρχείων: το ROOT.EXT αντιστοιχεί στο ROOT.txt, για παράδειγμα το 001.jpg στο 001.txt. |
| `trigger_phrase` |  | string | no | `` |  | Φράση instance τύπου DreamBooth, απαιτούμενη όταν το `auto_captioning` είναι Off και κάποια εικόνα δεν διαθέτει αρχείο λεζάντας. Παρέχει λεζάντες όπου λείπουν αρχεία .txt και το αρχικό κείμενο για τα prompt προεπιλεγμένης επικύρωσης. |
| `auto_captioning` |  | enum (string) | no | `Off` | `Off`, `Object/Character`, `Style`, `Custom` | Προαιρετική λειτουργία δημιουργίας λεζαντών: οι Object/Character, Style και Custom καλούν το dataset-captioner με google/gemma-4-31B-it, ενώ η Off διατηρεί την υπάρχουσα απαίτηση κάθε εικόνα να έχει αντίστοιχη λεζάντα .txt με ίδιο βασικό όνομα ή να χρησιμοποιείται το trigger_phrase ως εναλλακτική. Για τις λεζάντες που δημιουργούνται, το trigger_phrase εισάγεται στο prompt δημιουργίας λεζάντας και κανονικοποιείται στα συνοδευτικά αρχεία σύμφωνα με την επιλεγμένη σύμβαση λεζαντών LoRA. |
| `steps` |  | integer | no | `100` | 50 – 10,000 | Αριθμός βημάτων για εκπαίδευση LoRA. |
| `learning_rate` |  | number | no | `0.0005` | 0.000001 – 0.01 | Ρυθμός μάθησης του παράγοντα B του LoRA, που εφαρμόζεται επίσης στο A όταν `lora_a_lr_multiplier=1`· υπό το muon, αντιστοιχεί στον ισοδύναμο ρυθμό AdamW κλιμακωμένο με match_rms_adamw. Για σταθερό πρόγραμμα, η Krea προτείνει το εύρος 3e-4–7e-4. |
| `resolution` |  | enum (integer) | no | `768` | `768`, `1024` | Ανάλυση εκπαίδευσης, όπου το 1024 ευνοεί τη μέγιστη λεπτομέρεια και το 768 προσφέρει περίπου 1.7x ταχύτερη εκπαίδευση, μειωμένη χρήση VRAM και σχεδόν ίδια ποιότητα στυλ. Οι εικόνες κλιμακώνονται ώστε να καλύπτουν το τετράγωνο-στόχο και στη συνέχεια περικόπτονται στο κέντρο. |
| `debug_dataset` |  | boolean | no | `false` |  | Επιλογή λήψης του dataset που εκθέτει ακριβώς όσα χρησιμοποιήθηκαν στην εκπαίδευση, συσκευασμένα ως αρχείο αρχειοθήκης μετά τη συμπλήρωση ή την αυτόματη δημιουργία λεζαντών. |

## 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.com/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.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/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.com/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.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": "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.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `lora_file` | object {url, content_type, file_name, file_size} | URL λήψης των εκπαιδευμένων βαρών LoRA της Krea-2 σε μορφή safetensors. |
| `config_file` | object {url, content_type, file_name, file_size} | Σύνδεσμος προς αρχείο JSON που περιέχει τη διαμόρφωση εκπαίδευσης/LoRA. |
| `prompt_enhancement_system_prompt` | string \| null | System prompt που επιστρέφεται με ενεργοποιημένο το `auto_captioning`, για τη σύνταξη ή βελτίωση prompt inference με την ίδια σύμβαση λεζαντών όπως στα δεδομένα εκπαίδευσης με αυτόματες λεζάντες. |
| `debug_dataset` | object {url, content_type, file_name, file_size} \| null | Λήψη δεδομένων εκπαίδευσης που παρέχεται όταν είναι ενεργοποιημένο το `debug_dataset`: αρχείο αρχειοθήκης που περιέχει το προετοιμασμένο dataset και τις λεζάντες που δημιουργήθηκαν αυτόματα. |

## 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.com/v1/models/krea-2-trainer
