# MiniMax H3 Reference to Video LoRA Trainer API

> Trainer LoRA per video cundiziunà da referenzas, cun cumenzament chaud d’in LoRA anteriur

Trainescha in LoRA sin ina zip da clips video da subjects, per che inputs da referenza possian guidar la generaziun video. `reference_conditioning_p` fixescha quant savens che las referenzas vegnan utilisadas durant il training, e `resume_from_lora_url` cuntinuescha d’in LoRA trenà precedentamain. Configurabels èn er `rank`, `number_of_steps`, `number_of_frames`, `frame_rate` ed `aspect_ratio`. Retorna pes ed ina datoteca da configuraziun.

- 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/rm/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 d'in ZIP cun videos d'entrenament dal subject; collecziuns da datas cun mo maletgs ed archivs d'entrenament cun maletgs e videos maschadads vegnan refusads, perquai ston ils maletgs vegnir agiuntads sco datotecas accumpagnantas da referenza. Supplements opziunals han il medem num da basa sco il clip: ina descripziun sco `clip01.txt` e referenzas ordinadas da `ref_1` fin `ref_4`, cun nums da `clip01.ref_1.<ext>` fin `clip01.ref_4.<ext>`; senza datotecas accumpagnantas da referenza vegn duvrà in frame dal clip sco atgna referenza. L'extensiun `<ext>` determinescha la modalitad da referenza: maletgs (.png/.jpg/.jpeg), audio (.wav/.mp3/.flac/.m4a/.ogg/.aac) u videos (.mp4/.mov/.avi/.mkv/.webm), dals quals las pistas sonoras daventan era referenzas audio. Ils clips d'entrenament sustegnan .mp4, .mov, .avi e .mkv; previsai almain 10 clips, dapli èn preferibels. |
| `rank` |  | enum (integer) | no | `32` | `8`, `16`, `32`, `64`, `128` | Rank da l'adattaziun LoRA, che baratta dapli consum da memoria cunter dapli capacitad sch'il parameter crescha. |
| `number_of_steps` |  | integer | no | `2000` | 1 – 15,000 | Dumber total da pass da scolaziun. |
| `learning_rate` |  | number | no | `0.0002` | 0.000001 – 1 | Ritmus d'emprender per l'optimizaziun, che cumpensescha in pussaivel augment da spertadad dal trenament cun il ristg d'overfitting en cas d'augment. |
| `number_of_frames` |  | integer | no | `73` | 22 – 124 | Quantitad da frames per mintga exempel da trenament; sia divisun tras 17 sto dar ina restanza da 5. Exemplas èn 22, 39, 56, 73, 90, 107 e 124. |
| `frame_rate` |  | integer | no | `24` | 8 – 60 | Frequenza da frames dal video target, mesirada en frames per secunda. |
| `resolution` |  | enum (string) | no | `medium` | `low`, `medium`, `high` | Resoluziun da scolaziun. Augmentar la resoluziun augmenta il basegn da memoria. |
| `aspect_ratio` |  | enum (string) | no | `16:9` | `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16` | Tscherna la relaziun d'aspect dal trenament dal medem set disponibel tras l'API MiniMax H3. |
| `trigger_phrase` |  | string | no | `` |  | Frasa d'activaziun dal stil LoRA, inserida a l'entschatta da las legendas durant la scolaziun. |
| `reference_conditioning_p` |  | number | no | `0.9` | 0 – 1 | Definescha quant savens che il trenament utilisescha condicionament cun maletgs da referenza en cumparegliaziun cun trenament text-to-video-audio senza condicionament. La probabilitad restanta va a l'objectiv senza condicionament per mantegnair ina generaziun stabila mo cun prompt. |
| `resume_from_lora_url` |  | string \| null | no |  |  | URL per in trenament warm-start cun ina LoRA .safetensors creada precedientamain da quest trainer, suandà dal dumber number_of_steps da pass da trenament supplementars. Nagut auter che ils pes da l'adapter vegn restaurà: tant l'optimisaziun sco la planisaziun da la learning-rate entschaivan da nov. |
| `auto_scale_input` |  | boolean | no | `false` |  | Sche fps e quantitad da frames da destinaziun vegnan accordads tras scalaziun automatica dal video; true activa questa adattaziun. |
| `split_input_into_scenes` |  | boolean | no | `true` |  | Activa la separaziun da scenas per videos pli lungs che la limita da durada, descartond ils sidecars da referenza dals clips separads. |
| `split_input_duration_threshold` |  | number | no | `30` | 1 – 60 | Trigger da partiziun da scenas exprimì sco durada en secundas: mo videos pli lungs che la limita vegnan partidas. |
| `debug_dataset` |  | boolean | no | `false` |  | Opcziun per telechargiar in archiv per controllar la preelavuraziun avant d'engaschar il trenament cumplain. Cun questa opziun activa, il trainer impachetescha il dataset elavurà per ch'ins possia controllar manualmain legendas, maletgs da referenza, videos e maletgs. |
| `strict_dataset` |  | boolean | no | `false` |  | Tractament strict dals problems da preelavuraziun che autramain vegnan protocollads e schliads cun il fallback documentà. L'activaziun refusa legendas che basegnan prompts vids, sidecars da referenza mancants e videos cun audio illegibel, empè da permetter quests fallbacks. |

## 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 per las ponderaziuns LoRA scoladas en format .safetensors. |
| `config_file` | object {url, content_type, file_name, file_size} | Configuraziun per l'installaziun da l'endpoint d'inferenza. |
| `debug_dataset` | object {url, content_type, file_name, file_size} \| null | Disponibel mo per dumondas cun `debug_dataset` activà, quest archiv scaricabel cuntegna las datas da trenament suenter la preelavuraziun. |

## 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
