> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aihubmix.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Interface de génération vidéo

>  AiHubMix propose une API unifiée de génération vidéo, compatible avec le format de l'interface OpenAI Sora, le backend prenant en charge les modèles de plusieurs fournisseurs

## Démarrage rapide

La génération vidéo est une opération asynchrone, l'ensemble du processus se déroule en trois étapes :

```text theme={null}
1. Soumettre la tâche → obtenir video_id
2. Interroger le statut → attendre que status passe à completed
3. Télécharger la vidéo → récupérer le fichier MP4
```

**Exemple minimal**

```shellscript theme={null}
# Étape 1 : soumettre la tâche de génération vidéo
curl -X POST https://aihubmix.com/v1/videos \
  -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan2.6-t2v",
    "prompt": "A cat playing jazz on a piano, warm lighting, cinematic shot",
    "seconds": "5",
    "size": "1280x720"
  }'

# Exemple de réponse :
# {
#   "id": "eyJtb2RlbCI6IndhbjI...",
#   "object": "video",
#   "status": "in_progress",
#   "model": "wan2.6-t2v",
#   "duration": 5,
#   "width": 1280,
#   "height": 720,
#   ...
# }

# Étape 2 : interroger le statut (toutes les 15 secondes, jusqu'à ce que status soit completed)
curl https://aihubmix.com/v1/videos/{video_id} \
  -H "Authorization: Bearer $AIHUBMIX_API_KEY"

# Étape 3 : télécharger la vidéo
curl https://aihubmix.com/v1/videos/{video_id}/content \
  -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
  --output video.mp4
```

## Aperçu des interfaces

| Interface            | Méthode | Chemin                          | Description                                        |
| :------------------- | :------ | :------------------------------ | :------------------------------------------------- |
| Créer une vidéo      | POST    | `/v1/videos`                    | Soumettre une tâche de génération vidéo            |
| Interroger le statut | GET     | `/v1/videos/{video_id}`         | Interroger le statut et la progression de la tâche |
| Télécharger la vidéo | GET     | `/v1/videos/{video_id}/content` | Télécharger la vidéo MP4 générée                   |
| Supprimer la tâche   | DELETE  | `/v1/videos/{video_id}`         | Supprimer une tâche vidéo                          |

Base URL : `https://aihubmix.com`

Méthode d'authentification : Bearer Token

```shellscript theme={null}
Authorization: Bearer $AIHUBMIX_API_KEY
```

## Modèles pris en charge

### Texte vers vidéo (Text-to-Video)

| Fournisseur | Nom du modèle                                           | Caractéristiques                                                                                       |
| ----------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| OpenAI      | `sora-2`                                                | Génération vidéo standard, prise en charge de la synchronisation audio-vidéo                           |
| OpenAI      | `sora-2-pro`                                            | Version haute qualité, image plus raffinée et stable                                                   |
| Google      | `veo-3.1-generate-preview`                              | Veo 3.1 le plus récent, audio natif, prise en charge du 4K                                             |
| Google      | `veo-3.1-fast-generate-preview`                         | Version rapide de Veo 3.1, génération plus rapide                                                      |
| Google      | `veo-3.0-generate-preview`                              | Veo 3.0, vidéo haute fidélité                                                                          |
| Google      | `veo-2.0-generate-001`                                  | Veo 2.0, version stable                                                                                |
| Alibaba     | `wan2.6-t2v`                                            | Dernière version de Tongyi Wanxiang, synchronisation audio-vidéo                                       |
| Alibaba     | `wan2.5-t2v-preview`                                    | Tongyi Wanxiang 2.5, optimisé pour le chinois                                                          |
| Alibaba     | `wan2.2-t2v-plus`                                       | Tongyi Wanxiang 2.2                                                                                    |
| ByteDance   | `jimeng-3.0-pro`                                        | Jimeng 3.0 Pro, haute définition 1080P                                                                 |
| ByteDance   | `jimeng-3.0-1080p`                                      | Jimeng 3.0 1080P                                                                                       |
| ByteDance   | `doubao-seedance-2-0-260128`                            | Modèle vidéo de création multimodale de niveau professionnel Seedance 2.0                              |
| ByteDance   | `doubao-seedance-2-0-fast-260128`                       | Version rapide de Seedance 2.0                                                                         |
| Kuaishou    | `kling-v3`、`kling-v2-6`、`kling-v2-5-turbo`、`kling-v2-1` | Kling texte/image vers vidéo, les nouvelles versions prennent en charge 3\~15 secondes                 |
| Kuaishou    | `kling-v3-omni`、`kling-video-o1`                        | Kling OmniVideo multimodal, prise en charge des vidéos de référence, de l'audio natif, des multi-plans |

### Image vers vidéo (Image-to-Video)

| Fournisseur | Nom du modèle                     | Caractéristiques                                                                                           |
| ----------- | --------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| Alibaba     | `wan2.6-i2v`                      | Dernière version de Tongyi Wanxiang image vers vidéo                                                       |
| Alibaba     | `wan2.5-i2v-preview`              | Tongyi Wanxiang 2.5 image vers vidéo                                                                       |
| Alibaba     | `wan2.2-i2v-plus`                 | Tongyi Wanxiang 2.2 image vers vidéo                                                                       |
| ByteDance   | `doubao-seedance-2-0-260128`      | Entrée de référence multimodale, prise en charge image/vidéo/audio                                         |
| ByteDance   | `doubao-seedance-2-0-fast-260128` | Version rapide de Seedance 2.0                                                                             |
| Kuaishou    | `kling-v1-6` etc.                 | Kling image vers vidéo, prise en charge des images de fin, de la référence multi-images (jusqu'à 4 images) |

<Note>
  La génération image vers vidéo nécessite de passer une image de référence via le paramètre `input_reference` (Tongyi Wanxiang d'Alibaba) ; pour Doubao Seedance, les références sont passées via le tableau `extra_body.content`, qui prend en charge plusieurs types de référence : image, vidéo, audio ; Kling utilise `image` / `image_tail` / `image_list` pour passer les images, voir la section [Kling](#kling) ci-dessous.
</Note>

## Description détaillée de l'API

### En-têtes de requête

```shellscript theme={null}
Authorization: Bearer $AIHUBMIX_API_KEY
Content-Type: application/json
```

### Créer une tâche de génération vidéo

```shellscript theme={null}
POST /v1/videos
```

#### **Corps de la requête**

| Paramètre         | Type          | Obligatoire | Description                                                                                                        |
| :---------------- | :------------ | :---------- | :----------------------------------------------------------------------------------------------------------------- |
| `model`           | string        | Oui         | Nom du modèle, par ex. `wan2.6-t2v`、`sora-2`                                                                       |
| `prompt`          | string        | Oui         | Texte décrivant la vidéo                                                                                           |
| `seconds`         | string        | Non         | Durée de la vidéo (secondes), toujours de type chaîne, par ex. `"5"`、`"8"` (voir le détail de chaque modèle)       |
| `size`            | string        | Non         | Résolution, format `largeurxhauteur`, par ex. `1920x1080` (les valeurs prises en charge diffèrent selon le modèle) |
| `input_reference` | string/object | Non         | Image de référence (image vers vidéo), prise en charge d'URL ou de base64                                          |

> Le format de réponse varie légèrement selon le modèle, mais tous contiennent les champs `id` (video\_id) et `status`. Il suffit de se fier à `status` pour suivre la progression de la tâche.

#### Exemple de réponse (**Tongyi Wanxiang/Veo/Jimeng AI**)

```json theme={null}
{
  "id": "eyJtb2RlbCI6IndhbjI...",
  "object": "video",
  "created": 1772460274,
  "model": "wan2.6-t2v",
  "status": "in_progress",
  "prompt": "A cat watching the rain on a windowsill",
  "duration": 5,
  "width": 1920,
  "height": 1080,
  "url": null,
  "error": null
}
```

**Exemple de réponse (Sora)**

```json theme={null}
{
  "id": "eyJtb2RlbCI6InNvcmEtMi...",
  "object": "video",
  "created_at": 1772451930,
  "status": "queued",
  "model": "sora-2",
  "progress": 0,
  "prompt": "A cinematic drone shot over mountains",
  "seconds": "8",
  "size": "1280x720"
}
```

#### Description des valeurs de statut communes

| Statut        | Description                                  |
| :------------ | :------------------------------------------- |
| `queued`      | En file d'attente (spécifique à Sora)        |
| `in_progress` | En cours de génération                       |
| `completed`   | Génération terminée, téléchargement possible |
| `failed`      | Échec de la génération                       |

### Interroger le statut de la vidéo

```shellscript theme={null}
GET /v1/videos/{video_id}
```

Interrogez cette interface pour vérifier si la tâche est terminée. Il est recommandé d'interroger toutes les **15 secondes**.

#### **Exemple de réponse (génération terminée - Tongyi Wanxiang)**

```json theme={null}
{
  "id": "eyJtb2RlbCI6IndhbjI...",
  "object": "video",
  "status": "completed",
  "model": "wan2.5-t2v-preview",
  "duration": 5,
  "width": 1920,
  "height": 1080,
  "url": "https://aihubmix.com/v1/videos/eyJtb2RlbCI6IndhbjI.../content",
  "error": null
}
```

#### **Exemple de réponse (génération terminée - Sora)**

```json theme={null}
{
  "id": "eyJtb2RlbCI6InNvcmEtMi...",
  "object": "video",
  "created_at": 1772451930,
  "status": "completed",
  "completed_at": 1772452114,
  "expires_at": 1772538330,
  "model": "sora-2",
  "progress": 100,
  "prompt": "A cinematic drone shot over mountains",
  "seconds": "8",
  "size": "1280x720"
}
```

> Tous les modèles déterminent l'état d'achèvement via `status == "completed"`, puis appellent l'interface `/content` pour télécharger.

### Télécharger le contenu de la vidéo

```shellscript theme={null}
GET /v1/videos/{video_id}/content
```

Une fois le statut passé à `completed`, appelez cette interface pour télécharger le fichier vidéo MP4.

**Réponse** : renvoie directement le flux binaire de la vidéo (`Content-Type: video/mp4`).

```shellscript theme={null}
curl https://aihubmix.com/v1/videos/{video_id}/content \
  -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
  --output my_video.mp4
```

> **Remarque** : le lien de téléchargement de la vidéo a généralement une validité de 24 heures, veillez à télécharger et à sauvegarder à temps.

### Supprimer une tâche vidéo

Cette interface permet de supprimer une tâche vidéo déjà créée.

```shellscript theme={null}
DELETE /v1/videos/{video_id}
```

## Détail des paramètres par modèle

### **OpenAI Sora**

| Paramètre         | Valeurs prises en charge                                   |
| ----------------- | ---------------------------------------------------------- |
| Modèle            | `sora-2`、`sora-2-pro`                                      |
| Durée (seconds)   | `"4"` (par défaut)、`"8"`、`"12"`                            |
| Résolution (size) | `720x1280` (par défaut)、`1280x720`、`1024x1792`、`1792x1024` |
| Image vers vidéo  | Pris en charge, l'image est passée via `input_reference`   |

> Astuce : le paramètre `seconds` de tous les modèles est toujours passé sous forme de chaîne (par ex. `"8"`).

**Exemple**

<CodeGroup>
  ```shellscript Sora theme={null}
  curl -X POST https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "sora-2",
      "prompt": "A cinematic drone shot soaring over a misty mountain range at sunrise, golden light filtering through the clouds",
      "seconds": "8",
      "size": "1280x720"
    }'
  ```

  ```shellscript Sora Pro vidéo verticale theme={null}
  curl -X POST https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "sora-2-pro",
      "prompt": "A person walking through a neon-lit city street at night, rain reflecting on the pavement, cinematic lighting",
      "seconds": "12",
      "size": "720x1280"
    }'
  ```
</CodeGroup>

### Google Veo

| Paramètre                  | Valeurs prises en charge                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Modèle                     | `veo-3.1-generate-preview` (recommandé)、`veo-3.1-fast-generate-preview` (rapide)、`veo-3.0-generate-preview`、`veo-2.0-generate-001`                                                                                                                                                                                                                                                                                                                                                            |
| Durée (seconds)            | Veo 3/3.1 : `"4"`、`"6"`、`"8"` ; Veo 2 : `"5"`\~`"8"` (par défaut `"8"`)                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Résolution (size)          | `720p` (par défaut)、`1080p`、`4k` (4K uniquement Veo 3+), ou format en pixels comme `1280x720`、`1920x1080`                                                                                                                                                                                                                                                                                                                                                                                     |
| Rapport largeur/hauteur    | 16:9 (par défaut)、9:16                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Image vers vidéo (Veo 3.1) | **Première trame** : `first_frame` (ou le champ compatible `input_reference`) ; **Dernière trame** : `last_frame` ; **Images de référence** : `reference_images` (tableau, jusqu'à 3). Les images acceptent une URL publique, une data URL base64, ou un objet `{"mime_type": "...", "data": "..."}`. **Durée** : la première trame / la première-et-dernière trame prennent en charge `"4"`/`"6"`/`"8"` ; lorsque des images de référence sont utilisées, Google fixe la sortie à 8 secondes |

**Exemple**

<CodeGroup>
  ```shellscript Veo 3.1 theme={null}
  curl -X POST https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "veo-3.1-generate-preview",
      "prompt": "A tranquil Japanese garden, cherry blossom petals slowly drifting down, koi swimming in the pond, with the melodious sound of wind chimes in the background",
      "seconds": "8",
      "size": "1280x720"
    }'
  ```

  ```shellscript Veo 3.1 Fast theme={null}
  curl -X POST https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "veo-3.1-fast-generate-preview",
      "prompt": "Ocean waves crashing on rocky cliffs at sunset, seagulls flying overhead",
      "seconds": "8",
      "size": "1280x720"
    }'
  ```

  ```shellscript Première et dernière image theme={null}
  curl -X POST https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "veo-3.1-generate-preview",
      "prompt": "The camera slowly pushes in from a valley at dawn, transitioning naturally into sunset",
      "seconds": "8",
      "size": "1280x720",
      "first_frame": "https://example.com/first.jpg",
      "last_frame": "https://example.com/last.jpg"
    }'
  ```

  ```shellscript Images de référence (jusqu'à 3) theme={null}
  curl -X POST https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "veo-3.1-generate-preview",
      "prompt": "The character from the reference images walks through a forest, cinematic shot",
      "seconds": "8",
      "size": "1280x720",
      "reference_images": [
        "https://example.com/ref1.jpg",
        "https://example.com/ref2.jpg"
      ]
    }'
  ```
</CodeGroup>

<Note>
  **Notes sur les champs image** :

  * Priorité de la première trame : `first_frame` > `input_reference` (trame unique compatible OpenAI).
  * Chaque élément de `first_frame` / `last_frame` / `reference_images` accepte : une URL publique, une data URL base64 (`data:image/png;base64,...`), ou un objet `{"mime_type":"image/png","data":"<base64>"}`.
  * Les alias de style OpenRouter `frame_images` (éléments avec `frame_type: first_frame | last_frame`) et `input_references` sont également acceptés.
  * Jusqu'à 3 images de référence ; au-delà, une erreur 400 est renvoyée.
</Note>

> Astuce : Veo prend en charge la génération audio native, vous pouvez décrire les effets sonores dans le prompt, par ex. « chant d'oiseaux en fond », « mélodie de piano ».

### Tongyi Wanxiang

| Paramètre               | Valeurs prises en charge                                                                                            |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------- |
| Modèle texte vers vidéo | `wan2.6-t2v` (recommandé)、`wan2.5-t2v-preview`、`wan2.2-t2v-plus`                                                    |
| Modèle image vers vidéo | `wan2.6-i2v` (recommandé)、`wan2.5-i2v-preview`、`wan2.2-i2v-plus`                                                    |
| Durée (seconds)         | Variable selon le modèle (voir description ci-dessous), par défaut `"5"`                                            |
| Résolution (size)       | Voir le tableau ci-dessous, les séparateurs `x` et `*` sont tous deux acceptés (par ex. `1920x1080` ou `1920*1080`) |
| Image vers vidéo        | L'image est passée via `input_reference` sous forme d'URL ou de base64                                              |

**Durées prises en charge par modèle**

| Modèle                                      | Valeurs possibles de seconds | Valeur par défaut |
| :------------------------------------------ | :--------------------------- | :---------------- |
| `wan2.6-t2v` / `wan2.6-i2v`                 | `"2"`\~`"15"` (tout entier)  | `"5"`             |
| `wan2.5-t2v-preview` / `wan2.5-i2v-preview` | `"5"` ou `"10"`              | `"5"`             |
| `wan2.2-t2v-plus` / `wan2.2-i2v-plus`       | `"5"` (fixe)                 | `"5"`             |

**Résolutions prises en charge (largeur\*hauteur)**

| Définition | Résolutions possibles                                                          |
| :--------- | :----------------------------------------------------------------------------- |
| 480P       | `832x480`、`480x832`、`624x624`                                                  |
| 720P       | `1280x720` (par défaut)、`720x1280`、`960x960`、`1088x832` (4:3)、`832x1088` (3:4) |
| 1080P      | `1920x1080`、`1080x1920`、`1440x1440`、`1632x1248` (4:3)、`1248x1632` (3:4)        |

> **Remarque** : wan2.6 ne prend en charge que 720P et 1080P ; wan2.5 prend en charge 480P, 720P, 1080P ; wan2.2 ne prend en charge que 480P et 1080P.

**Exemple**

<CodeGroup>
  ```shellscript Texte vers vidéo theme={null}
  curl -X POST https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "wan2.6-t2v",
      "prompt": "A winding stream flows through an autumn forest, golden fallen leaves drifting on the water surface, sunlight casting dappled light and shadow through the leaves",
      "seconds": "5",
      "size": "1920x1080"
    }'
  ```

  ```shellscript Image vers vidéo theme={null}
  curl -X POST https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "wan2.6-i2v",
      "prompt": "The character in the frame slowly turns their head and smiles, the camera slowly pushes in",
      "seconds": "5",
      "size": "1280x720",
      "input_reference": "https://example.com/my-image.jpg"
    }'
  ```
</CodeGroup>

> Astuce : wan2.5 et versions ultérieures génèrent par défaut des vidéos sonores (doublage automatique), les prompts en chinois donnent de meilleurs résultats.

### Jimeng AI

| Paramètre         | Valeurs prises en charge                                                               |
| ----------------- | -------------------------------------------------------------------------------------- |
| Modèle            | `jimeng-3.0-pro` (recommandé)、`jimeng-3.0-1080p`                                       |
| Durée (seconds)   | `"5"` ou `"10"` (par défaut `"5"`)                                                     |
| Résolution (size) | Prend en charge le format en rapport largeur/hauteur ou en pixels                      |
| Image vers vidéo  | Pris en charge, l'image est passée via `input_reference` sous forme d'URL ou de base64 |

**Rapports largeur/hauteur pris en charge et résolutions correspondantes**

| Rapport largeur/hauteur (size) | Résolution réelle |
| :----------------------------- | :---------------- |
| `16:9` ou `1920x1080`          | 1920×1088         |
| `9:16` ou `1080x1920`          | 1088×1920         |
| `4:3` ou `1664x1248`           | 1664×1248         |
| `3:4` ou `1248x1664`           | 1248×1664         |
| `1:1` ou `1440x1440`           | 1440×1440         |
| `21:9` ou `2176x928`           | 2176×928          |

**Exemple**

<CodeGroup>
  ```shellscript Jimeng AI theme={null}
  curl -X POST https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "jimeng-3.0-pro",
      "prompt": "A young woman in Hanfu dances gracefully amid a bamboo forest, her long dress flowing in the wind, with a faint morning mist in the background",
      "seconds": "5",
      "size": "16:9"
    }'
  ```

  ```Jimeng AI version verticale theme={null}
  curl -X POST https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "jimeng-3.0-1080p",
      "prompt": "A sunset over the ocean, waves gently rolling, warm golden light",
      "seconds": "5",
      "size": "9:16"
    }'
  ```
</CodeGroup>

### Doubao Seedance

| Paramètre                       | Valeurs prises en charge                                                                             |
| ------------------------------- | ---------------------------------------------------------------------------------------------------- |
| Modèle                          | `doubao-seedance-2-0-260128`、`doubao-seedance-2-0-fast-260128`                                       |
| Résolution (resolution)         | `"480p"`、`"720p"` (par défaut)                                                                       |
| Durée (duration)                | Entier, plage `4`\~`15`, ou `-1` (décidé automatiquement par le modèle)                              |
| Rapport largeur/hauteur (ratio) | `"adaptive"` (par défaut, adaptation automatique)、`"16:9"`、`"9:16"`、`"1:1"`、`"4:3"`、`"3:4"`、`"21:9"` |
| Vidéo sonore (generate\_audio)  | `true` par défaut ; mettre `false` pour générer une vidéo muette                                     |
| Filigrane (watermark)           | `false` par défaut                                                                                   |
| Référence multimodale           | Prise en charge image, vidéo, audio                                                                  |

**Types de référence pris en charge par `extra_body.content`**

| Type               | Valeur `type` | Valeur `role`     | Description                                           |
| ------------------ | ------------- | ----------------- | ----------------------------------------------------- |
| Image de référence | `image_url`   | `reference_image` | Image de référence de cadrage/style                   |
| Vidéo de référence | `video_url`   | `reference_video` | Vidéo de référence de mouvement de caméra/composition |
| Audio de référence | `audio_url`   | `reference_audio` | Fichier audio de musique de fond                      |

**Exemple**

```shellscript Seedance 2.0 / 2.0 Fast theme={null}
curl -X POST "https://aihubmix.com/v1/videos" \
  -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-0-260128",
    "prompt": "Use the first-person POV framing from Video 1 throughout, and use Audio 1 as the background music for the entire clip. Create a first-person fruit tea commercial featuring the Seedance brand limited-edition apple fruit tea, "Ping Ping An An." 

Opening frame: Image 1. From a first-person perspective, your hand picks a dew-covered Aksu red apple, accompanied by a crisp, satisfying bite-like tapping sound.

Seconds 2–4: Fast-paced cuts. Your hand drops freshly cut apple chunks into a shaker, adds ice and tea base, then shakes vigorously. The sound of ice clinking and shaking syncs with upbeat percussion. Background voiceover: "Freshly cut, freshly shaken."

Seconds 4–6: First-person close-up of the finished drink. The layered fruit tea is poured into a clear cup. Your hand gently squeezes a creamy topping across the surface. A pink label is placed on the cup. The camera pushes in to highlight the rich texture and layering.

Seconds 6–8: First-person hand holding the drink. You raise the fruit tea from Image 2 toward the camera, as if offering it directly to the viewer. The label is clearly visible. Background voiceover: "Take a refreshing sip."

Final frame: Freeze on Image 2. 

All background voiceovers should be in a female voice.",
    "extra_body": {
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic1.jpg"
          },
          "role": "reference_image"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic2.jpg"
          },
          "role": "reference_image"
        },
        {
          "type": "video_url",
          "video_url": {
            "url": "https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_tea_video1.mp4"
          },
          "role": "reference_video"
        },
        {
          "type": "audio_url",
          "audio_url": {
            "url": "https://ark-project.tos-cn-beijing.volces.com/doc_audio/r2v_tea_audio1.mp3"
          },
          "role": "reference_audio"
        }
      ],
      "ratio": "16:9",
      "duration": 11,
      "watermark": false
    }
  }'
```

### Kling

Kling prend en charge **quatre types de capacités : texte vers vidéo, image vers vidéo, génération vidéo à partir de plusieurs images de référence, et OmniVideo multimodal**, le tout appelé de manière unifiée via l'interface `/v1/videos`. La passerelle route automatiquement vers le point de terminaison Kling correspondant selon « nom du modèle + forme d'entrée », sans que l'appelant ait à les distinguer.

| Capacité                            | Modèle                                                                                       |
| ----------------------------------- | -------------------------------------------------------------------------------------------- |
| Texte vers vidéo / Image vers vidéo | `kling-v1`、`kling-v1-5`、`kling-v1-6`、`kling-v2-1`、`kling-v2-5-turbo`、`kling-v2-6`、`kling-v3` |
| Référence multi-images              | `kling-v1-6`                                                                                 |
| OmniVideo multimodal                | `kling-video-o1`、`kling-v3-omni`                                                             |

**Paramètres**

| Paramètre              | Type   | Description                                                                                                                                                |
| ---------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `model`                | string | **Obligatoire**, `kling-*`, détermine la capacité et la version                                                                                            |
| `prompt`               | string | Texte du prompt                                                                                                                                            |
| `negative_prompt`      | string | Prompt négatif                                                                                                                                             |
| `mode`                 | string | Mode de génération : `std` (720P) / `pro` (1080P) / `4k`, par défaut `std`                                                                                 |
| `duration` / `seconds` | string | Durée (secondes), anciens modèles `5`/`10`, nouveaux modèles `3`\~`15`, par défaut `5`                                                                     |
| `aspect_ratio`         | string | Cadrage : `16:9` / `9:16` / `1:1` (obligatoire pour omni en texte pur et avec référence vidéo, complété automatiquement à `16:9` si absent)                |
| `cfg_scale`            | float  | Pertinence du prompt `[0, 1]`, par défaut `0.5` (non pris en charge par `kling-v2.x`)                                                                      |
| `image`                | string | **Image vers vidéo** : image unique, URL d'image ou Base64 (Base64 sans le préfixe `data:image/...;base64,`)                                               |
| `image_tail`           | string | **Image vers vidéo** : image de fin (facultatif)                                                                                                           |
| `image_list`           | array  | **Référence multi-images** : tableau d'URL d'images, jusqu'à 4 images                                                                                      |
| `sound`                | string | **omni** : `on`/`off`, génère ou non l'audio natif, par défaut `off`                                                                                       |
| `video_list`           | array  | **omni** : vidéo de référence `[{ "video_url": "...", "refer_type": "feature" }]`, `refer_type` prend `feature` (référence vidéo) / `base` (édition vidéo) |

<Note>
  Les paramètres clés non pris en charge ou non mappés provoquent une erreur explicite et ne sont pas ignorés silencieusement. Les autres paramètres natifs de Kling peuvent être placés dans `extra_body` pour être transmis tels quels au backend.
</Note>

**Exemple**

<CodeGroup>
  ```shellscript Texte vers vidéo theme={null}
  curl https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "kling-v1-6",
      "prompt": "An orange cat running on a sunlit grassy meadow",
      "mode": "std",
      "duration": "5"
    }'
  ```

  ```shellscript Image vers vidéo theme={null}
  curl https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "kling-v1-6",
      "image": "https://example.com/first.png",
      "prompt": "The camera pulls back, the character smiles",
      "mode": "std",
      "duration": "5"
    }'
  ```

  ```shellscript Référence multi-images theme={null}
  curl https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "kling-v1-6",
      "image_list": ["https://example.com/a.png", "https://example.com/b.png"],
      "prompt": "Two characters meet on the street",
      "mode": "std",
      "duration": "5"
    }'
  ```

  ```shellscript OmniVideo référence vidéo theme={null}
  curl https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "kling-v3-omni",
      "prompt": "Generate the next shot based on the reference video",
      "video_list": [{ "video_url": "https://example.com/in.mp4", "refer_type": "feature" }],
      "mode": "std",
      "duration": "5"
    }'
  ```

  ```shellscript OmniVideo audio natif theme={null}
  curl https://aihubmix.com/v1/videos \
    -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "kling-v3-omni",
      "prompt": "A man smiles and says hello",
      "sound": "on",
      "aspect_ratio": "16:9",
      "duration": "5"
    }'
  ```
</CodeGroup>

**Précisions**

* **Trois étapes asynchrones** : soumettre pour obtenir `video_id` → interroger `GET /v1/videos/{video_id}` jusqu'à ce que `status` soit `completed` → `GET /v1/videos/{video_id}/content` pour télécharger le MP4. Valeurs de statut : `in_progress` / `completed` / `failed`.
* La production prend généralement 1\~3 minutes ; l'URL de la vidéo résultante est **supprimée après 30 jours**, veuillez la sauvegarder à temps.
* **Supprimer une tâche** : Kling ne dispose pas d'interface de suppression, `DELETE /v1/videos/{video_id}` renvoie `501 not_supported`.
* **Facturation** : facturée selon modèle × `mode` × durée × capacité (avec ou sans vidéo de référence / son) ; **pas de facturation en cas d'échec de la génération**, l'interrogation et le téléchargement ne sont pas facturés.

## **Exemple d'appel complet**

<CodeGroup>
  ```python Tongyi Wanxiang theme={null}
  import requests
  import time

  API_KEY = "AIHUBMIX_API_KEY"
  BASE_URL = "https://aihubmix.com"
  HEADERS = {
      "Authorization": f"Bearer {API_KEY}",
      "Content-Type": "application/json"
  }

  # Étape 1 : créer la tâche de génération vidéo
  response = requests.post(
      f"{BASE_URL}/v1/videos",
      headers=HEADERS,
      json={
          "model": "wan2.6-t2v",
          "prompt": "A desert under a starry sky, a meteor streaking across the night sky, the glow of a distant campfire flickering in the breeze",
          "seconds": "5",
          "size": "1920x1080"
      }
  )
  result = response.json()
  video_id = result["id"]
  print(f"Tâche créée, video_id : {video_id}")

  # Étape 2 : interroger le statut
  while True:
      status_response = requests.get(
          f"{BASE_URL}/v1/videos/{video_id}",
          headers=HEADERS
      )
      status_data = status_response.json()
      current_status = status_data["status"]
      print(f"Statut actuel : {current_status}")

      if current_status == "completed":
          print("Génération vidéo terminée !")
          break
      elif current_status == "failed":
          error_msg = status_data.get("error", {})
          if isinstance(error_msg, dict):
              error_msg = error_msg.get("message", "Erreur inconnue")
          print(f"Échec de la génération : {error_msg}")
          break

      time.sleep(15)  # interroger toutes les 15 secondes

  # Étape 3 : télécharger la vidéo
  video_response = requests.get(
      f"{BASE_URL}/v1/videos/{video_id}/content",
      headers=HEADERS
  )
  with open("output.mp4", "wb") as f:
      f.write(video_response.content)
  print(f"Vidéo sauvegardée sous output.mp4 ({len(video_response.content) / 1024 / 1024:.1f} MB)")
  ```

  ```python Sora theme={null}
  import requests
  import time

  API_KEY = "AIHUBMIX_API_KEY"
  BASE_URL = "https://aihubmix.com"
  HEADERS = {
      "Authorization": f"Bearer {API_KEY}",
      "Content-Type": "application/json"
  }

  # Créer la tâche de génération vidéo
  response = requests.post(
      f"{BASE_URL}/v1/videos",
      headers=HEADERS,
      json={
          "model": "sora-2",
          "prompt": "A cinematic shot of a futuristic city at sunset, flying cars in the background",
          "seconds": "8",       # au choix "4"/"8"/"12"
          "size": "1280x720"    # prend en charge 1280x720, 720x1280, 1024x1792, 1792x1024
      }
  )
  result = response.json()
  video_id = result["id"]
  print(f"Tâche créée, video_id : {video_id}")

  # Interrogation du statut Sora (peut passer par queued -> in_progress -> completed)
  while True:
      status_response = requests.get(
          f"{BASE_URL}/v1/videos/{video_id}",
          headers=HEADERS
      )
      status_data = status_response.json()
      current_status = status_data["status"]
      progress = status_data.get("progress", "")
      print(f"Statut : {current_status}, progression : {progress}%")

      if current_status == "completed":
          print("Génération vidéo terminée !")
          break
      elif current_status == "failed":
          print(f"Échec de la génération : {status_data.get('error')}")
          break

      time.sleep(15)

  # Télécharger la vidéo
  video_response = requests.get(
      f"{BASE_URL}/v1/videos/{video_id}/content",
      headers=HEADERS
  )
  with open("sora_output.mp4", "wb") as f:
      f.write(video_response.content)
  print("Vidéo sauvegardée sous sora_output.mp4")
  ```

  ```javascript Node.js theme={null}
  const API_KEY = "your_aihubmix_api_key";
  const BASE_URL = "https://aihubmix.com";

  async function generateVideo() {
    // Étape 1 : créer la tâche (exemple avec Veo 3.1)
    const createResponse = await fetch(`${BASE_URL}/v1/videos`, {
      method: "POST",
      headers: {
        "Authorization": `Bearer ${API_KEY}`,
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        model: "veo-3.1-generate-preview",
        prompt: "A desert under a starry sky, a meteor streaking across the night sky",
        seconds: "8",
        size: "1280x720"
      })
    });
    const { id: videoId } = await createResponse.json();
    console.log(`Tâche créée : ${videoId}`);

    // Étape 2 : interroger le statut
    let status = "in_progress";
    while (status !== "completed" && status !== "failed") {
      await new Promise(resolve => setTimeout(resolve, 15000));
      const statusResponse = await fetch(`${BASE_URL}/v1/videos/${videoId}`, {
        headers: { "Authorization": `Bearer ${API_KEY}` }
      });
      const result = await statusResponse.json();
      status = result.status;
      console.log(`Statut actuel : ${status}`);
    }

    if (status === "completed") {
      // Étape 3 : télécharger la vidéo
      const videoResponse = await fetch(`${BASE_URL}/v1/videos/${videoId}/content`, {
        headers: { "Authorization": `Bearer ${API_KEY}` }
      });
      const fs = require("fs");
      const buffer = Buffer.from(await videoResponse.arrayBuffer());
      fs.writeFileSync("output.mp4", buffer);
      console.log("Vidéo sauvegardée sous output.mp4");
    }
  }

  generateVideo();
  ```
</CodeGroup>

## **FAQ**

### **Combien de temps prend la génération vidéo ?**

La génération vidéo prend généralement 1 à 5 minutes, le temps exact dépend du modèle, de la résolution et de la durée. Il est recommandé de définir un intervalle d'interrogation de 15 secondes.

### **Comment utiliser le paramètre** `input_reference` **?**

`input_reference` est utilisé pour les scénarios image vers vidéo, et prend en charge trois modes de passage :

```json theme={null}
// Mode 1 : passer directement l'URL de l'image
"input_reference": "https://example.com/image.jpg"

// Mode 2 : passer l'image encodée en base64 (format objet)
"input_reference": {
  "mime_type": "image/jpeg",
  "data": "<BASE64_ENCODED_IMAGE>"
}

// Mode 3 : passer une data URL
"input_reference": "data:image/jpeg;base64,<BASE64_ENCODED_IMAGE>"
```

### **Quelle est la durée de validité du lien de téléchargement de la vidéo ?**

Le lien de téléchargement de la vidéo générée a généralement une validité de **24 heures**, veillez à télécharger et à sauvegarder à temps.

### **Quelles différences pour le paramètre** `seconds` **selon les modèles ?**

| Modèle                                                            | Valeurs possibles                   | Valeur par défaut |
| ----------------------------------------------------------------- | ----------------------------------- | ----------------- |
| Sora (`sora-2` / `sora-2-pro`)                                    | `"4"`, `"8"`, `"12"`                | `"4"`             |
| Veo 3/3.1 (`veo-3.1-generate-preview` etc.)                       | `"4"`, `"6"`, `"8"`                 | `"8"`             |
| Veo 2 (`veo-2.0-generate-001`)                                    | `"5"`\~`"8"`                        | `"8"`             |
| Tongyi Wanxiang `wan2.6`                                          | `"2"`\~`"15"`                       | `"5"`             |
| Tongyi Wanxiang `wan2.5`                                          | `"5"`, `"10"`                       | `"5"`             |
| Tongyi Wanxiang `wan2.2`                                          | `"5"` (fixe)                        | `"5"`             |
| Jimeng AI (`jimeng-3.0-pro` etc.)                                 | `"5"`, `"10"`                       | `"5"`             |
| Doubao Seedance (`doubao-seedance-2-0-*`)                         | entier `duration` `4`\~`15` ou `-1` | `5`               |
| Kling nouvelle version (`kling-v2-x` / `kling-v3` etc.)           | `"3"`\~`"15"`                       | `"5"`             |
| Kling ancienne version (`kling-v1` / `kling-v1-5` / `kling-v1-6`) | `"5"`, `"10"`                       | `"5"`             |

\> **Astuce** : le paramètre `seconds` de tous les modèles est toujours passé sous forme de chaîne (par ex. `"8"`), l'API le traite automatiquement.

### Quelles différences de format pour le paramètre `size` selon les modèles ?

| Modèle          | Valeurs de size prises en charge                                                                                                                   |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| Sora            | `1280x720`、`720x1280`、`1024x1792`、`1792x1024`                                                                                                      |
| Veo             | format en pixels (`1280x720` etc.) ou étiquettes de résolution (`720p`、`1080p`、`4k`)                                                               |
| Tongyi Wanxiang | format en pixels, `x` et `*` acceptés (par ex. `1920x1080` ou `1920*1080`)                                                                         |
| Jimeng AI       | format en rapport largeur/hauteur (`16:9`、`9:16` etc.) ou format en pixels                                                                         |
| Doubao Seedance | format en rapport largeur/hauteur (`"adaptive"`、`"16:9"`、`"9:16"` etc.)                                                                            |
| Kling           | n'utilise pas `size`, mais `mode` (`std`/`pro`/`4k` pour contrôler la définition) + `aspect_ratio` (`16:9`/`9:16`/`1:1` pour contrôler le cadrage) |

### **Quelle est la différence entre** `seconds` **et** `duration` **?**

Les deux ont la même signification et désignent tous deux la durée de la vidéo. L'API prend en charge ces deux noms de paramètre (sauf Sora, qui n'accepte que `seconds`). Il est recommandé d'utiliser systématiquement `seconds`.

### Comment écrire un meilleur prompt ?

* **Décrire une scène concrète** : inclure le sujet, l'action, l'environnement, la lumière, l'ambiance
* **Spécifier le langage de caméra** : par ex. « gros plan », « vue aérienne », « travelling avant », « ralenti »
* **Décrire le style** : par ex. « cinématographique », « style documentaire », « style animation »
* **Les modèles chinois donnent de meilleurs résultats avec un prompt en chinois** : Tongyi Wanxiang est optimisé pour le chinois
* **Veo prend en charge la description audio** : vous pouvez décrire les sons dans le prompt, par ex. « chant d'oiseaux », « mélodie de piano »

### Que faire en cas d'échec de la tâche ?

Lorsque `status` est `failed`, le champ `error` de la réponse contient les informations sur l'erreur :

```json theme={null}
{
  "status": "failed",
  "error": {
    "message": "Video generation failed due to content policy violation",
    "type": "video_generation_error"
  }
}
```

## Les causes courantes d'échec incluent : contenu non conforme, prompt trop long, format d'image non pris en charge, etc. Veuillez ajuster en fonction du message d'erreur puis réessayer.

Dernière mise à jour : 2026-06-01
