# MiniMax H3 Reference to Video LoRA Trainer API

> Εκπαιδευτής LoRA για βίντεο με συνθήκη αναφοράς, με θερμή εκκίνηση από προηγούμενο LoRA

Εκπαιδεύει LoRA σε zip με κλιπ βίντεο θεμάτων, ώστε οι είσοδοι αναφοράς να καθοδηγούν την παραγωγή βίντεο. Το `reference_conditioning_p` ορίζει πόσο συχνά χρησιμοποιούνται οι αναφορές κατά την εκπαίδευση και το `resume_from_lora_url` συνεχίζει από προηγουμένως εκπαιδευμένο LoRA. Ρυθμίζονται επίσης τα `rank`, `number_of_steps`, `number_of_frames`, `frame_rate` και `aspect_ratio`. Επιστρέφει βάρη και αρχείο config.

- Model id: `minimax/h3/ref2va/trainer`
- Made by: MiniMax
- Category: Training
- Output: file
- Price: $0.015 / step (cheapest run $30.00 (30000 API credits))
- Run: `POST https://api.doitong.com/v1/run/minimax/h3/ref2va/trainer`
- Quote: `POST https://api.doitong.com/v1/quote/minimax/h3/ref2va/trainer`
- Docs page: https://doitong.com/el/developers/models/minimax/h3/ref2va/trainer

## Pricing

Price: **$0.015 / step**. Billed per training step (`number_of_steps`).

The full example input below costs $30.00 = 30000 API credits (2000 steps × 15 API credits).

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/minimax/h3/ref2va/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 |
|---|---|---|---|---|---|---|
| `training_data_url` |  | string | yes |  |  | URL για ZIP βίντεο εκπαίδευσης θέματος· σύνολα δεδομένων μόνο με εικόνες και αρχεία εκπαίδευσης που συνδυάζουν εικόνες και βίντεο απορρίπτονται, επομένως οι εικόνες πρέπει να παρέχονται ως sidecars αναφοράς. Προαιρετικά πρόσθετα μοιράζονται το βασικό όνομα κάθε αποσπάσματος: λεζάντα όπως `clip01.txt` και διατεταγμένες αναφορές από `ref_1` έως `ref_4`, με ονόματα `clip01.ref_1.<ext>` έως `clip01.ref_4.<ext>`· χωρίς sidecars αναφοράς, ένα καρέ του αποσπάσματος παρέχει τη δική του αναφορά. Το `<ext>` καθορίζει το modality αναφοράς: εικόνες (.png/.jpg/.jpeg), ήχος (.wav/.mp3/.flac/.m4a/.ogg/.aac) ή βίντεο (.mp4/.mov/.avi/.mkv/.webm), των οποίων τα soundtracks γίνονται επίσης αναφορές ήχου. Τα αποσπάσματα εκπαίδευσης υποστηρίζουν .mp4, .mov, .avi και .mkv· στοχεύστε σε τουλάχιστον 10 αποσπάσματα, με περισσότερα να προτιμώνται. |
| `rank` |  | enum (integer) | no | `32` | `8`, `16`, `32`, `64`, `128` | Τάξη προσαρμογής LoRA, που ανταλλάσσει αυξημένη κατανάλωση μνήμης με μεγαλύτερη χωρητικότητα καθώς αυξάνεται η ρύθμιση. |
| `number_of_steps` |  | integer | no | `2000` | 1 – 15,000 | Συνολικός αριθμός βημάτων εκπαίδευσης. |
| `learning_rate` |  | number | no | `0.0002` | 0.000001 – 1 | Ρυθμός εκμάθησης βελτιστοποίησης, που εξισορροπεί πιθανή επιτάχυνση της εκπαίδευσης με τον κίνδυνο υπερπροσαρμογής όταν αυξάνεται. |
| `number_of_frames` |  | integer | no | `73` | 22 – 124 | Αριθμός καρέ για κάθε δείγμα εκπαίδευσης· η διαίρεσή του με 17 πρέπει να αφήνει υπόλοιπο 5. Παραδείγματα είναι 22, 39, 56, 73, 90, 107 και 124. |
| `frame_rate` |  | integer | no | `24` | 8 – 60 | Ρυθμός καρέ βίντεο-στόχου, μετρημένος σε καρέ ανά δευτερόλεπτο. |
| `resolution` |  | enum (string) | no | `medium` | `low`, `medium`, `high` | Ανάλυση εκπαίδευσης. Η αύξηση της ανάλυσης αυξάνει τις απαιτήσεις μνήμης. |
| `aspect_ratio` |  | enum (string) | no | `16:9` | `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16` | Επιλέξτε την αναλογία διαστάσεων εκπαίδευσης από το ίδιο σύνολο που διατίθεται μέσω του MiniMax H3 API. |
| `trigger_phrase` |  | string | no | `` |  | Φράση ενεργοποίησης στυλ LoRA, που εισάγεται στην αρχή των λεζαντών κατά την εκπαίδευση. |
| `reference_conditioning_p` |  | number | no | `0.9` | 0 – 1 | Καθορίστε πόσο συχνά η εκπαίδευση χρησιμοποιεί conditioning με εικόνα αναφοράς έναντι unconditioned text-to-video-audio training. Η υπόλοιπη πιθανότητα αφορά τον unconditioned στόχο, ώστε να διατηρείται σταθερή παραγωγή μόνο από prompt. |
| `resume_from_lora_url` |  | string \| null | no |  |  | URL για warm-start training με ένα .safetensors LoRA που δημιουργήθηκε προηγουμένως από αυτόν τον trainer, ακολουθούμενο από number_of_steps επιπλέον βήματα εκπαίδευσης. Δεν αποκαθίσταται τίποτα εκτός από τα βάρη του adapter: τόσο η βελτιστοποίηση όσο και ο προγραμματισμός learning rate ξεκινούν ξανά. |
| `auto_scale_input` |  | boolean | no | `false` |  | Καθορίζει αν ο στόχος fps και ο αριθμός καρέ ταιριάζουν μέσω αυτόματης κλιμάκωσης βίντεο· true ενεργοποιεί αυτήν την προσαρμογή. |
| `split_input_into_scenes` |  | boolean | no | `true` |  | Ενεργοποίηση διαχωρισμού σκηνών για βίντεο μεγαλύτερα από ένα όριο διάρκειας, με απόρριψη των sidecars αναφοράς από τυχόν αποσπάσματα που διαχωρίζονται. |
| `split_input_duration_threshold` |  | number | no | `30` | 1 – 60 | Έναυσμα διαχωρισμού σκηνών, εκφρασμένο ως διάρκεια σε δευτερόλεπτα: διαχωρίζονται μόνο βίντεο που υπερβαίνουν το όριο. |
| `debug_dataset` |  | boolean | no | `false` |  | Επιλογή λήψης αρχείου για έλεγχο της προεπεξεργασίας πριν από την πλήρη εκπαίδευση. Όταν είναι ενεργοποιημένη, ο trainer συσκευάζει το επεξεργασμένο σύνολο δεδομένων ώστε να μπορείτε να ελέγξετε χειροκίνητα λεζάντες, εικόνες αναφοράς, βίντεο και εικόνες. |
| `strict_dataset` |  | boolean | no | `false` |  | Αυστηρός χειρισμός προβλημάτων προεπεξεργασίας που διαφορετικά θα καταγράφονταν και θα επιλύονταν με το τεκμηριωμένο fallback. Η ενεργοποίησή του απορρίπτει λεζάντες που χρειάζονται κενά prompt, sidecars αναφοράς που λείπουν και βίντεο με μη αναγνώσιμο ήχο, αντί να επιτρέπει αυτά τα fallback. |

## Example input

Required parameters only:

```json
{
  "training_data_url": "https://example.com/your-file.zip"
}
```

A fuller example:

```json
{
  "training_data_url": "https://example.com/your-file.zip"
}
```

## 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/minimax/h3/ref2va/trainer?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "training_data_url": "https://example.com/your-file.zip"
  }'

# 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/minimax/h3/ref2va/trainer?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "training_data_url": "https://example.com/your-file.zip"
  }),
});
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 = {
    "training_data_url": "https://example.com/your-file.zip",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/minimax/h3/ref2va/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": "minimax/h3/ref2va/trainer",
      "input": {
        "training_data_url": "https://example.com/your-file.zip"
      },
      "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": "minimax/h3/ref2va/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": 30000,
    "usd": "30.00",
    "charged": 30000,
    "refunded": 0
  },
  "input": {
    "training_data_url": "https://example.com/your-file.zip"
  },
  "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
    },
    "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 σε μορφή .safetensors. |
| `config_file` | object {url, content_type, file_name, file_size} | Διαμόρφωση για τη ρύθμιση του τελικού σημείου συμπερασματολογίας. |
| `debug_dataset` | object {url, content_type, file_name, file_size} \| null | Διαθέσιμο μόνο για αιτήματα με ενεργοποιημένο το `debug_dataset`, αυτό το αρχείο που μπορείτε να κατεβάσετε περιέχει τα δεδομένα εκπαίδευσης μετά την προεπεξεργασία. |

## Related models

- [MiniMax H3 First Last Frame LoRA Trainer](https://doitong.com/developers/models/minimax/h3/flf2v/trainer.md) (`minimax/h3/flf2v/trainer`): $0.01 / step
- [MiniMax H3 Image to Video Audio LoRA Trainer](https://doitong.com/developers/models/minimax/h3/i2v/trainer.md) (`minimax/h3/i2v/trainer`): $0.01 / step
- [MiniMax H3 Text to Video LoRA Trainer](https://doitong.com/developers/models/minimax/h3/t2v/trainer.md) (`minimax/h3/t2v/trainer`): $0.005 / step
- [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

## Links

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