# MiniMax H3 Image to Video Audio LoRA Trainer API

> Entraîneur LoRA qui apprend le text-to-video à partir de la première image avec audio provenant de clips vidéo

Entraîne un LoRA à partir d'une archive zip de clips vidéo dans `training_data_url`, en utilisant le conditionnement par première image afin d'animer une image fixe en vidéo. Le jeu de données doit contenir uniquement des vidéos. Les paramètres comprennent `rank` de 8 à 128, `number_of_steps` jusqu'à 15000, `number_of_frames` de 22 à 124, `frame_rate` de 8 à 60 et une `trigger_phrase`. Renvoie les poids LoRA et un fichier de configuration.

- Model id: `minimax/h3/i2v/trainer`
- Made by: MiniMax
- Category: Training
- Output: file
- Price: $0.01 / step (cheapest run $20.00 (20000 API credits))
- Run: `POST https://api.doitong.com/v1/run/minimax/h3/i2v/trainer`
- Quote: `POST https://api.doitong.com/v1/quote/minimax/h3/i2v/trainer`
- Docs page: https://doitong.com/fr/developers/models/minimax/h3/i2v/trainer

## Pricing

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

The full example input below costs $20.00 = 20000 API credits (2000 steps × 10 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/i2v/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'un ZIP contenant des vidéos d'entraînement au format .mp4, .mov, .avi ou .mkv ; au moins 10 clips sont recommandés et les collections plus importantes sont préférables. Les images ne peuvent pas servir de médias d'entraînement : les jeux de données composés uniquement d'images et les archives mélangeant images et vidéos d'entraînement sont rejetés, bien que certains points de terminaison autorisent les images comme ressources de conditionnement annexes. Des fichiers de légendes facultatifs peuvent accompagner les clips, chaque fichier texte partageant le nom de base de sa vidéo. |
| `rank` |  | enum (integer) | no | `32` | `8`, `16`, `32`, `64`, `128` | Rang d’adaptation LoRA, échangeant une consommation mémoire accrue contre une capacité supérieure à mesure que la valeur augmente. |
| `number_of_steps` |  | integer | no | `2000` | 1 – 15,000 | Nombre total d’étapes d’entraînement. |
| `learning_rate` |  | number | no | `0.0002` | 0.000001 – 1 | Taux d’apprentissage d’optimisation, qui équilibre un éventuel gain de vitesse d’entraînement et le risque de surapprentissage lorsqu’il est augmenté. |
| `number_of_frames` |  | integer | no | `73` | 22 – 124 | Nombre d'images pour chaque échantillon d'entraînement ; sa division par 17 doit laisser un reste de 5. Exemples : 22, 39, 56, 73, 90, 107 et 124. |
| `frame_rate` |  | integer | no | `24` | 8 – 60 | Fréquence d’images cible de la vidéo, mesurée en images par seconde. |
| `resolution` |  | enum (string) | no | `medium` | `low`, `medium`, `high` | Résolution d’entraînement. Augmenter la résolution accroît les besoins en mémoire. |
| `aspect_ratio` |  | enum (string) | no | `16:9` | `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16` | Choisissez le rapport hauteur/largeur d'entraînement dans le même ensemble que celui disponible via l'API MiniMax H3. |
| `trigger_phrase` |  | string | no | `` |  | Phrase d’activation du style LoRA, insérée au début des légendes pendant l’entraînement. |
| `first_frame_conditioning_p` |  | number | no | `0.5` | 0 – 1 | Améliore les performances image-to-video en augmentant la fréquence d’utilisation du conditionnement sur la première image pendant l’entraînement ; cette valeur définit cette probabilité. |
| `auto_scale_input` |  | boolean | no | `false` |  | Indique si le fps cible et le nombre d'images sont ajustés par une mise à l'échelle vidéo automatique ; true active cet ajustement. |
| `split_input_into_scenes` |  | boolean | no | `true` |  | Découpage des scènes pour les vidéos dépassant un seuil de durée, activé lorsque la valeur est true. |
| `split_input_duration_threshold` |  | number | no | `30` | 1 – 60 | Déclencheur de découpage des scènes exprimé comme une durée en secondes : seules les vidéos plus longues que le seuil sont découpées. |
| `debug_dataset` |  | boolean | no | `false` |  | Mode d’inspection du prétraitement pour vérifier les vidéos, les images et les légendes avant un entraînement complet. Son activation fait renvoyer par l’entraîneur le jeu de données d’entraînement traité dans une archive téléchargeable pour examen manuel. |
| `strict_dataset` |  | boolean | no | `false` |  | Gestion stricte des problèmes de prétraitement qui seraient sinon consignés et résolus à l'aide des solutions de repli documentées. L'activation rejette les légendes nécessitant des prompts vides, les images clés annexes manquantes et les vidéos dont l'audio est illisible, au lieu de remplacer ces éléments respectivement par un prompt vide, une image du clip ou du silence. |

## 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/i2v/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/i2v/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/i2v/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/i2v/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/i2v/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": 20000,
    "usd": "20.00",
    "charged": 20000,
    "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 des poids LoRA entraînés au format .safetensors. |
| `config_file` | object {url, content_type, file_name, file_size} | Configuration de la mise en place du point de terminaison d’inférence. |
| `debug_dataset` | object {url, content_type, file_name, file_size} \| null | Disponible uniquement pour les requêtes avec `debug_dataset` activé, cette archive téléchargeable contient les données d'entraînement après le prétraitement. |

## 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 Reference to Video LoRA Trainer](https://doitong.com/developers/models/minimax/h3/ref2va/trainer.md) (`minimax/h3/ref2va/trainer`): $0.015 / 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/i2v/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/i2v/trainer
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/minimax/h3/i2v/trainer
