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

# Vidu Q4 Preview Génération vidéo

> Générez des vidéos à partir d’une image initiale ou de 15 images et 3 clips audio de référence maximum. 3–16 secondes, jusqu’à 4K, avec son par défaut.

<Info>
  Ce modèle prend en charge la génération à partir d’une image ou de références, mais pas le texte seul ni les images initiale et finale combinées. Après soumission, récupérez l’ID dans `data[0].task_id` et consultez le [suivi des tâches](/fr/api-reference/tasks/status) pour obtenir l’état et le résultat.
</Info>

## Modes de génération

`viduq4-preview` choisit automatiquement le mode selon les images, les rôles et les audios de référence. Aucun paramètre de mode supplémentaire n’est nécessaire.

| Entrée | Mode |
| - | - |
| Uniquement `first_frame_image` ou une image avec `role: "first_frame"` | Image vers vidéo |
| Une image sans rôle et sans audio de référence | Image vers vidéo |
| Rôle `reference_image` ou `reference` présent, sans image initiale explicite | Références vers vidéo |
| 2–15 images au total, sans image initiale explicite | Références vers vidéo |
| Audio de référence et 1–15 images, sans image initiale explicite | Références vers vidéo |

* **Image vers vidéo** : exactement une image initiale ; prompt facultatif ; aucun audio de référence.
* **Références vers vidéo** : 1–15 images, jusqu’à 3 clips audio de référence et **prompt obligatoire**. Avec une seule image sans audio de référence, définissez explicitement `role: "reference_image"` ; sinon, le mode image vers vidéo s’applique.
* Une image initiale explicite (`first_frame_image` ou `role: "first_frame"`) ne peut pas être associée à d’autres images, rôles de référence ou audios de référence. Sinon, HTTP 400.

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST \
    --url https://api.apimart.ai/v1/videos/generations \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{
      "model": "viduq4-preview",
      "prompt": "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
      "image_urls": ["https://example.com/first-frame.png"],
      "duration": 5,
      "resolution": "1080p"
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.apimart.ai/v1/videos/generations",
      headers={"Authorization": "Bearer <token>"},
      json={
          "model": "viduq4-preview",
          "prompt": "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
          "image_urls": ["https://example.com/first-frame.png"],
          "duration": 5,
          "resolution": "1080p"
      }
  )
  response.raise_for_status()
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
    method: "POST",
    headers: {
      Authorization: "Bearer <token>",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "viduq4-preview",
      prompt: "Une fille se retourne en souriant, ses longs cheveux flottent au vent et la caméra avance lentement",
      image_urls: ["https://example.com/first-frame.png"],
      duration: 5,
      resolution: "1080p"
    })
  });
  if (!response.ok) throw new Error(await response.text());
  console.log(await response.json());
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "code": 200,
    "data": [
      {
        "status": "submitted",
        "task_id": "task_01K..."
      }
    ]
  }
  ```
</ResponseExample>

## En-têtes de requête

<ParamField header="Authorization" type="string" required>
  Authentification Bearer au format `Bearer <token>`, où `<token>` est votre APIMart API Key.
</ParamField>

## Paramètres de requête

<ParamField body="model" type="string" required>
  Doit correspondre exactement à `viduq4-preview`, en minuscules.
</ParamField>

<ParamField body="prompt" type="string">
  Prompt de génération vidéo, jusqu’à 20 000 caractères.

  * Image vers vidéo : facultatif. S’il est omis, le modèle génère le contenu à partir de l’image initiale.
  * Références vers vidéo : obligatoire. Son absence renvoie HTTP 400.
</ParamField>

<ParamField body="image_urls" type="string[]">
  Tableau d’images. Accepte les URL publiques ou les Data URL Base64 telles que `data:image/png;base64,...`.

  * Image vers vidéo : une seule image, utilisée comme image initiale.
  * Références vers vidéo : 1–15 images au total avec `image_with_roles`.

  Peut être combiné avec `image_with_roles` ; les quantités sont additionnées. Ne pas combiner avec `first_frame_image` ou un rôle `first_frame` explicite. Pour une seule image sans rôle, la présence d’audio de référence détermine aussi le mode.
</ParamField>

<ParamField body="image_with_roles" type="object[]">
  Tableau d’images avec rôles. Un élément pour image vers vidéo ; 1–15 images au total avec `image_urls` pour références vers vidéo.

  <Expandable title="Afficher les champs des images">
    <ParamField body="url" type="string" required>
      URL publique de l’image ou Data URL Base64.
    </ParamField>

    <ParamField body="role" type="string">
      Rôle de l’image, sans distinction de casse :

      * `first_frame` : image initiale pour image vers vidéo.
      * `reference_image` : image de référence ; `reference` est également accepté.
      * Omis ou vide : sans audio de référence, le nombre total détermine le mode : une image pour image vers vidéo, deux ou plus pour références vers vidéo. Avec audio de référence, le mode références vers vidéo s’applique.

      Les autres valeurs, comme `last_frame`, renvoient HTTP 400 de manière synchrone.
    </ParamField>
  </Expandable>

  Peut être combiné avec `image_urls` pour fournir des références, mais les rôles d’image initiale ne peuvent pas être mélangés aux références.
</ParamField>

<ParamField body="first_frame_image" type="string">
  Uniquement pour image vers vidéo. URL publique ou Data URL Base64 de l’image initiale.

  Avec ce champ, ne fournissez pas d’autres images ni d’audio de référence. Pour références vers vidéo, utilisez `image_urls` ou `image_with_roles`.
</ParamField>

<ParamField body="audio_urls" type="string[]">
  Tableau d’URL audio de référence, uniquement pour références vers vidéo. Maximum 3 clips au total avec `audio_url`.

  Format MP3 requis, 3–12 secondes par clip, 50MB maximum chacun. Même avec de l’audio de référence, au moins une image et un `prompt` sont requis.

  Un format ou une durée audio non conforme entraîne un échec pendant l’exécution avec remboursement intégral, et non un HTTP 400 synchrone à la soumission.
</ParamField>

<ParamField body="audio_url" type="string">
  URL d’un seul audio de référence. Mêmes exigences que `audio_urls` ; maximum 3 clips pour les deux champs réunis.
</ParamField>

<ParamField body="aspect_ratio" type="string" default="16:9">
  Uniquement pour références vers vidéo. Valeurs : `1:1`, `9:16`, `16:9`, `3:4`, `4:3`. Par défaut : `16:9`.

  En mode image vers vidéo, l’image initiale détermine le ratio ; ce paramètre est ignoré.
</ParamField>

<ParamField body="size" type="string">
  Alias de compatibilité de `aspect_ratio`, avec les mêmes valeurs. Utilisez de préférence un seul des deux champs. Sans effet en mode image vers vidéo.
</ParamField>

<ParamField body="duration" type="integer" default="5">
  Durée en secondes. Accepte 3–16 secondes, pas 1–2 secondes.
</ParamField>

<ParamField body="resolution" type="string" default="720p">
  Résolution : `540p`, `720p`, `1080p`, `2K` ou `4K`, sans distinction de casse.
</ParamField>

<ParamField body="audio" type="boolean" default="true">
  Indique si la vidéo doit inclure des dialogues et des effets sonores.

  * `true` : vidéo avec piste audio (par défaut).
  * `false` : vidéo muette.

  Les vidéos avec ou sans son ont le même prix.
</ParamField>

<ParamField body="seed" type="integer">
  Graine aléatoire. Omettez ce champ ou utilisez `0` pour une valeur aléatoire.
</ParamField>

## Exigences des médias

* Image vers vidéo : exactement une image initiale requise ; aucun audio de référence.
* Références vers vidéo : 1–15 images requises ; jusqu’à 3 clips audio de référence facultatifs.
* PNG, JPEG, JPG et WEBP acceptés, maximum 50MB par image.
* En Base64, le corps complet de la requête doit être inférieur à 20MB. Privilégiez les URL publiques.
* Les URL d’images doivent être publiques. Remplacez les URL d’exemple par des adresses réellement accessibles.

<Warning>
  Les deux modes nécessitent des images et ne prennent pas en charge `last_frame_image`. Mélanger une image initiale et des références ou dépasser le nombre d’images/audios renvoie HTTP 400 à la soumission, sans création de tâche ni facturation. Un format ou une durée audio non conforme entraîne un échec pendant l’exécution et un remboursement.
</Warning>

## Exemples de requête

### Image initiale seule, sans prompt

```json theme={null}
{
  "model": "viduq4-preview",
  "image_urls": ["https://example.com/first-frame.png"]
}
```

Génère par défaut une vidéo de 5 secondes en 720p avec son.

### Image initiale avec rôle explicite et sortie 4K

```json theme={null}
{
  "model": "viduq4-preview",
  "prompt": "La caméra avance lentement tandis que la personne sourit naturellement",
  "image_with_roles": [
    {
      "url": "https://example.com/first-frame.png",
      "role": "first_frame"
    }
  ],
  "duration": 8,
  "resolution": "4K",
  "audio": true
}
```

### Vidéo muette avec le champ d’image initiale

```json theme={null}
{
  "model": "viduq4-preview",
  "first_frame_image": "https://example.com/first-frame.png",
  "duration": 5,
  "resolution": "1080p",
  "audio": false
}
```

### Vidéo à partir de plusieurs images et d’un audio de référence

```json theme={null}
{
  "model": "viduq4-preview",
  "prompt": "Le garçon de l’image 1 parle à la fille de l’image 2 avec le contenu de l’audio de référence, dans le café de l’image 3",
  "image_urls": [
    "https://example.com/boy.png",
    "https://example.com/girl.png",
    "https://example.com/cafe.png"
  ],
  "audio_urls": ["https://example.com/line.mp3"],
  "aspect_ratio": "16:9",
  "duration": 8,
  "resolution": "720p"
}
```

### Références vers vidéo avec une seule image

```json theme={null}
{
  "model": "viduq4-preview",
  "prompt": "La personne de l’image de référence entre dans un café et salue le personnel de la main",
  "image_with_roles": [
    {
      "url": "https://example.com/person.png",
      "role": "reference_image"
    }
  ],
  "aspect_ratio": "9:16",
  "duration": 5,
  "resolution": "1080p"
}
```

Cet exemple n’inclut pas d’audio de référence et sélectionne explicitement le mode références vers vidéo avec `reference_image`. Remplacez toutes les URL d’images et d’audios par des adresses accessibles.

## Réponse de soumission

<ResponseField name="code" type="integer">
  Code de réponse ; `200` indique un succès.
</ResponseField>

<ResponseField name="data" type="array">
  Résultat de la soumission de tâche.

  <Expandable title="Afficher les champs de la tâche">
    <ResponseField name="status" type="string">
      `submitted` indique une soumission réussie, pas la fin de la génération.
    </ResponseField>

    <ResponseField name="task_id" type="string">
      ID de tâche pour consulter l’état et le résultat.
    </ResponseField>
  </Expandable>
</ResponseField>

## Consulter les résultats

Interrogez toutes les 5–10 secondes et arrêtez à `completed` ou `failed`. Utilisez le point de terminaison unifié :

```bash theme={null}
curl --request GET \
  --url https://api.apimart.ai/v1/tasks/task_01K... \
  --header 'Authorization: Bearer <token>'
```

Exemple de réponse réussie (URL vidéo fictive) :

```json theme={null}
{
  "code": 200,
  "data": {
    "id": "task_01K...",
    "status": "completed",
    "progress": 100,
    "result": {
      "videos": [
        {
          "url": ["https://example.com/generated-video.mp4"]
        }
      ]
    }
  }
}
```

| État | Action |
| - | - |
| `pending` | En attente ; continuer les interrogations |
| `processing` | Génération en cours ; continuer les interrogations |
| `completed` | Réussite ; lire les liens dans le tableau `data.result.videos[0].url` |
| `failed` | Échec ; lire la cause dans `data.error.message`, arrêter les interrogations ; remboursement intégral |

Les liens vidéo sont valables 24 heures. Téléchargez et sauvegardez rapidement les fichiers. Déterminez la fin avec `status`, et non avec des paliers de progression fixes.

## Facturation

Facturation selon la durée et la résolution : coût = durée (secondes) × tarif par seconde de la résolution.

Consultez les [tarifs des modèles](https://apimart.ai/pricing). Les deux modes coûtent le même prix, avec ou sans son. Les images et audios de référence ne sont pas facturés en supplément. Les tâches échouées sont automatiquement remboursées intégralement.

## Erreurs de paramètres fréquentes

Les cas suivants renvoient HTTP 400 de manière synchrone, sans création de tâche ni facturation :

| Problème | Action |
| - | - |
| Aucune image | Fournir une image initiale ou 1–15 images de référence selon le mode |
| Image initiale explicite mélangée à d’autres images, rôles ou audios de référence | Garder une seule image initiale pour image vers vidéo ; supprimer les champs/rôles d’image initiale explicites pour références vers vidéo |
| `role` non pris en charge, tel que `last_frame` | Utiliser `first_frame`, `reference_image`, `reference` ou laisser vide |
| Plus de 15 images de référence | Limiter `image_urls` et `image_with_roles` à 15 images au total |
| Plus de 3 clips audio de référence | Limiter `audio_urls` et `audio_url` à 3 clips au total |
| `prompt` absent en mode références vers vidéo | Ajouter un prompt de 20 000 caractères maximum |
| Ratio de référence non pris en charge, comme `21:9` | Utiliser `1:1`, `9:16`, `16:9`, `3:4` ou `4:3` |
| `last_frame_image` fourni | Supprimer le champ ; les images initiale et finale combinées ne sont pas prises en charge |
| `duration` inférieur à 3 ou supérieur à 16 | Utiliser un entier entre 3 et 16 secondes |
| Résolution non prise en charge, comme `480p` ou `8K` | Utiliser `540p`, `720p`, `1080p`, `2K` ou `4K` |

## Autres modèles Vidu

Pour le texte vers vidéo ou les images initiale et finale, utilisez [Vidu Q3 Pro / Turbo](/fr/api-reference/videos/vidu-q3-pro/generation). Ce modèle accepte déjà plusieurs images de référence ; [Vidu Q3 Mix / Standard](/fr/api-reference/videos/vidu-q3/generation) propose aussi ce mode. Pour 1–2 secondes, choisissez `viduq3-pro` ; ce modèle exige au moins 3 secondes.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.