En bref
L'API image-vers-vidéo de Grok permet d'animer une image statique en un clip vidéo à l'aide du modèle grok-imagine-video. Pour l'utiliser, envoyez (POST) l’URL de votre image, un prompt et des paramètres optionnels à https://api.x.ai/v1/videos/generations. L’API retourne immédiatement un request_id. Vous devez ensuite interroger (poll) GET /v1/videos/{request_id} jusqu’à ce que le champ status passe à "done". La génération prend entre 1 et 15 secondes de vidéo. Tarification : à partir de 0,05 $/seconde en 480p.
Essayez Apidog dès aujourd'hui
Introduction
Le 28 janvier 2026, xAI a lancé le modèle grok-imagine-video en accès public via API. En un mois, il a généré 1,2 milliard de vidéos et s'est hissé en tête du classement "text-to-video" d’Artificial Analysis. L’animation d’une photo en vidéo est l’une de ses fonctions principales : fournissez une photo et une invite descriptive, et l’API génère un clip MP4 animé à télécharger.
Ce flux asynchrone — soumission d’une tâche puis interrogation de son état — pose un défi de test que beaucoup de développeurs sous-estiment. Une intégration n’est pas terminée après le premier POST 200, mais lorsque la boucle de polling gère correctement les états "processing", "done" et "failed" dans des conditions réelles.
Les Scénarios de Test d’Apidog apportent une solution directe : construisez une séquence chaînée (POST /v1/videos/generations, extraction du request_id, boucle d’interrogation jusqu’à status == "done", puis assertion sur la présence de l’URL vidéo). Suivez ce guide pour mettre en place votre workflow de test.
Qu'est-ce que l'API Grok image-vers-vidéo ?
L’API Grok image-vers-vidéo fait partie du produit vidéo de xAI. Elle utilise le modèle grok-imagine-video et prend une image comme première frame de la vidéo générée. Le modèle analyse l’image et le prompt, puis génère un mouvement naturel pour l’animer.
Endpoint API :
POST https://api.x.ai/v1/videos/generations
Authentification :
Authorization: Bearer YOUR_XAI_API_KEY
Obtenez votre clé API sur la console xAI. Cette API supporte également le texte-vers-vidéo (sans paramètre image), l’extension et la modification vidéo.
Fonctionnement du processus image-vers-vidéo
Le paramètre image du body représente la première image de la vidéo. Le modèle anime la scène depuis cette image, chaque pixel initial provient de votre source. Ensuite, selon votre prompt, la scène évolue.
Exemple : une photo d’un lac de montagne au lever du soleil, avec le prompt : « De douces ondulations se propagent à la surface de l’eau tandis que la brume matinale s’élève. » La première frame sera la photo ; les frames suivantes montrent l’animation de l’eau et de la brume.
Différence par rapport au texte-vers-vidéo : le texte-vers-vidéo génère la première image, tandis qu’image-vers-vidéo vous donne un contrôle précis sur la scène initiale.
Utilisez image-vers-vidéo si :
- Vous souhaitez animer des photos de produits, paysages, portraits existants.
- Votre branding nécessite une identité visuelle cohérente.
- Le mouvement doit partir d’une scène réelle.
Utilisez texte-vers-vidéo si :
- Vous n’avez pas d’image de référence.
- Vous laissez le modèle choisir la composition.
- L’itération rapide prime sur la fidélité à une image.
Prérequis
Avant de commencer :
- Compte xAI sur console.x.ai.
- Clé API depuis la console xAI (stockez-la dans une variable d’environnement).
- Python 3.8+ ou Node.js 18+ (exemples pour les deux).
- URL d’image publique ou image encodée en base64 (data URI).
Définissez la clé API :
export XAI_API_KEY="votre_clé_ici"
Installez le SDK Python xAI (optionnel) :
pip install xai-sdk
Pour les appels HTTP bruts : utilisez requests (Python) ou fetch (Node.js).
Effectuer votre première requête image-vers-vidéo
Utilisation de curl
curl -X POST https://api.x.ai/v1/videos/generations \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video",
"prompt": "De douces vagues se déplacent à la surface, la brume matinale s'élève lentement",
"image": {
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg"
},
"duration": 6,
"resolution": "720p",
"aspect_ratio": "16:9"
}'
Réponse immédiate :
{
"request_id": "d97415a1-5796-b7ec-379f-4e6819e08fdf"
}
La génération est asynchrone. Passez à l’étape d’interrogation.
Utilisation de Python (requêtes brutes)
import os
import requests
api_key = os.environ["XAI_API_KEY"]
payload = {
"model": "grok-imagine-video",
"prompt": "De douces vagues se déplacent à la surface, la brume matinale s'élève lentement",
"image": {
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg"
},
"duration": 6,
"resolution": "720p",
"aspect_ratio": "16:9"
}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(
"https://api.x.ai/v1/videos/generations",
json=payload,
headers=headers
)
data = response.json()
request_id = data["request_id"]
print(f"Tâche démarrée : {request_id}")
Utilisation d'une image Base64
Pour une image locale/non publique :
import base64
with open("my_image.jpg", "rb") as f:
encoded = base64.b64encode(f.read()).decode("utf-8")
payload["image"] = {
"url": f"data:image/jpeg;base64,{encoded}"
}
Interrogation du résultat
La génération vidéo étant asynchrone, interrogez :
GET https://api.x.ai/v1/videos/{request_id}
Statuts possibles :
| Statut | Signification |
|---|---|
"processing" |
Vidéo en cours de rendu |
"done" |
Vidéo prête, URL disponible |
"failed" |
Une erreur est survenue |
Réponse complète :
{
"status": "done",
"video": {
"url": "https://vidgen.x.ai/....mp4",
"duration": 6
},
"progress": 100
}
Boucle d'interrogation Python complète
import time
def poll_video(request_id: str, api_key: str, interval: int = 5) -> dict:
url = f"https://api.x.ai/v1/videos/{request_id}"
headers = {"Authorization": f"Bearer {api_key}"}
while True:
response = requests.get(url, headers=headers)
data = response.json()
status = data.get("status")
print(f"Statut : {status} | Progression : {data.get('progress', 0)}%")
if status == "done":
return data["video"]
elif status == "failed":
raise RuntimeError(f"La génération vidéo a échoué pour {request_id}")
time.sleep(interval)
# Utilisation
video = poll_video(request_id, api_key)
print(f"URL de la vidéo : {video['url']}")
print(f"Durée : {video['duration']}s")
Gardez un intervalle d’au moins 5 s. Limite d’API : 60 requêtes/minute (1/s).
Utilisation du SDK Python xAI
Le package xai-sdk gère pour vous la logique asynchrone :
from xai_sdk import Client
import os
client = Client(api_key=os.environ["XAI_API_KEY"])
video = client.video.generate(
model="grok-imagine-video",
prompt="De douces vagues se déplacent à la surface, la brume matinale s'élève lentement",
image={"url": "https://example.com/landscape.jpg"},
duration=6,
resolution="720p",
aspect_ratio="16:9"
)
print(f"URL de la vidéo : {video.url}")
print(f"Durée : {video.duration}s")
Le SDK s’occupe du polling, des erreurs, etc. Pour un contrôle granulaire sur la boucle ou les logs, utilisez les requêtes brutes.
Contrôle de la résolution, de la durée et du rapport d’aspect
L’API offre un contrôle précis sur la sortie :
Durée
duration : entier de 1 à 15 secondes (par défaut : 6).
"duration": 10
Plus la vidéo est longue, plus le coût augmente.
Résolution
| Valeur | Description |
|---|---|
"480p" |
Par défaut. Moins cher, plus rapide. |
"720p" |
Qualité supérieure. 0,07 $/sec vs 0,05 $ |
"resolution": "720p"
Rapport d’aspect
| Valeur | Cas d'utilisation |
|---|---|
| "16:9" | Par défaut, paysage |
| "9:16" | Vertical, stories/mobile |
| "1:1" | Carré, réseaux sociaux/thumbnails |
| "4:3" | Photo/presentation classique |
| "3:4" | Portrait |
| "3:2" | Photo standard |
| "2:3" | Portrait haut |
Par défaut, l’aspect ratio suit celui de l’image source. Spécifiez-le pour forcer un recadrage.
Utilisation d’images de référence pour l’orientation stylistique
Le paramètre reference_images est différent de image :
-
image: Première image de la vidéo (point de départ pour l’animation). -
reference_images: Tableau (max 7) d’images qui guident le style, le contenu ou le contexte. Elles influencent l’apparence, sans être affichées.
Exemple d’usage :
{
"model": "grok-imagine-video",
"prompt": "Un produit tournant lentement sur une surface blanche propre",
"image": {
"url": "https://example.com/product-shot.jpg"
},
"reference_images": [
{"url": "https://example.com/brand-style-reference-1.jpg"},
{"url": "https://example.com/lighting-reference.jpg"}
],
"duration": 6,
"resolution": "720p"
}
Ici, product-shot.jpg est la première image ; les références influencent le style/éclairage.
Vous pouvez utiliser uniquement des images de référence (sans image) pour guider un texte-vers-vidéo.
Extension et édition de vidéos
Deux opérations avancées :
Extension d’une vidéo
POST /v1/videos/extensions : ajoute des secondes à une vidéo existante (max 15 s par appel).
curl -X POST https://api.x.ai/v1/videos/extensions \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video",
"video_id": "votre_request_id_original",
"prompt": "La brume continue de se lever alors que la lumière du soleil perce",
"duration": 5
}'
Interrogez ensuite GET /v1/videos/{request_id} comme précédemment.
Modification d’une vidéo
POST /v1/videos/edits : modifie le contenu ou le mouvement d’une vidéo existante sur la base d’un nouveau prompt.
curl -X POST https://api.x.ai/v1/videos/edits \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video",
"video_id": "votre_request_id_original",
"prompt": "Changer le ciel en un coucher de soleil dramatique avec des tons orange profond"
}'
Extensions et modifications utilisent aussi le modèle asynchrone.
Détail des prix : combien coûte une vidéo de 10 s ?
L’API facture :
- Le traitement de l’image d’entrée
- La durée de la vidéo de sortie
| Composant | Coût |
|---|---|
| Image d’entrée | 0,002 $ / image |
| Sortie en 480p | 0,05 $ / seconde |
| Sortie en 720p | 0,07 $ / seconde |
Exemple (10 s en 720p) :
- Image d’entrée : 0,002 $
- Sortie : 10 × 0,07 $ = 0,70 $
- Total : 0,702 $
Exemple (6 s en 480p) :
- Image d’entrée : 0,002 $
- Sortie : 6 × 0,05 $ = 0,30 $
- Total : 0,302 $
À chaque génération, le coût de l’image d’entrée s’applique, même avec la même URL.
Le texte-vers-vidéo ne facture pas de coût d’image.
Comment tester votre intégration de l’API vidéo Grok avec Apidog
Pour tester correctement une API asynchrone, validez :
- La génération retourne bien un
request_id - Le polling gère l’état
"processing"pendant l’attente - La réponse finale a
status == "done"et une URL vidéo non vide
Les Scénarios de Test d’Apidog permettent d’automatiser ce workflow.
Étape 1 : Créer un nouveau scénario de test
Dans Apidog, module Tests → bouton + → nommer (« Flux asynchrone Grok image-vers-vidéo »).
Étape 2 : Ajouter la requête de génération
- URL :
https://api.x.ai/v1/videos/generations - Méthode : POST
- En-tête :
Authorization: Bearer {{xai_api_key}} - Body JSON :
{
"model": "grok-imagine-video",
"prompt": "Une douce brume s'élève de l'eau tandis que la lumière filtre à travers les arbres",
"image": {
"url": "https://example.com/your-test-image.jpg"
},
"duration": 6,
"resolution": "480p"
}
Étape 3 : Extraire le request_id
- Processeur "Extraire Variable" :
- Nom :
video_request_id - Source : corps de la réponse
- Méthode : JSONPath :
$.request_id
- Nom :
Étape 4 : Boucle d’interrogation
- Processeur "For" (boucle) ; à l’intérieur :
- Requête GET :
https://api.x.ai/v1/videos/{{video_request_id}} - Header :
Authorization: Bearer {{xai_api_key}} - Extraction "video_status" : JSONPath
$.status - Attendre 5000ms pour éviter la limite de débit
- Condition d’arrêt de boucle :
{{video_status}} == "done"
- Requête GET :
Étape 5 : Assertion sur l’URL vidéo
- Requête GET finale
- Processeur "Assertion" :
- Champ :
$.video.url - Condition : "n’est pas vide"
- Champ :
Vous pouvez intégrer ce scénario dans votre pipeline CI/CD avec la CLI Apidog :
apidog run --scenario grok-video-async-flow --env production
Erreurs courantes et corrections
401 Non autorisé : Clé API manquante/invalide. Vérifiez l’en-tête Authorization.
422 Entité non traitable : Body malformé, champ model ou prompt manquant, ou image non accessible.
URL d’image non accessible : L’URL doit être publique. Les URLs privées ou localhost échouent. Pour les images locales, utilisez un data URI base64.
Statut bloqué sur "processing" : Patientez jusqu’à 10 min. Si bloqué, renvoyez la requête.
Limite de débit (429) : Maximum 60 requêtes/minute (1/s). Ajoutez un time.sleep(1) entre les polls si besoin.
Erreur Base64 : Vérifiez que l’URI commence par le bon préfixe MIME (data:image/jpeg;base64,).
Mauvais aspect ratio : Si le ratio ne correspond pas, le modèle peut recadrer ou ajouter des bandes noires. Idéal : faites correspondre le ratio à l’image source.
Conclusion
L’API Grok image-vers-vidéo transforme une photo statique en clip animé : POST de l’image et du prompt, extraction du request_id, polling jusqu’à complétion, téléchargement du MP4. Le modèle grok-imagine-video domine le classement Artificial Analysis (janvier 2026) avec plus d’un milliard de vidéos générées ce mois-là.
La gestion du polling asynchrone est la principale difficulté d’intégration. Avec Apidog, créez des tests qui extraient les variables, bouclent sur l’état et valident le résultat, pour détecter les problèmes avant la production.
Commencez à construire votre intégration avec Apidog gratuitement. Aucune carte bancaire requise.
FAQ
Quel nom de modèle pour l’API Grok image-vers-vidéo ?
Utilisez grok-imagine-video dans le champ model du POST.
Différence entre image et reference_images ?
image : première image de la vidéo.
reference_images : indications de style et de contenu, non utilisées comme frame de départ. Vous pouvez les combiner.
Temps de génération d’une vidéo ?
6 s en 480p : 1–3 min.
15 s en 720p : 4–8 min.
Interrogez toutes les 5 s pour éviter la limite.
Utiliser un fichier local ?
Oui, encodez-le en base64 : data:image/jpeg;base64,{octets_encodes}.
Que se passe-t-il si je ne précise pas aspect_ratio ?
Avec image, le ratio suit l’image source. Sans image (texte-vers-vidéo), défaut : 16:9.
Tarif d’une vidéo 10 s 720p ?
Image d’entrée : 0,002 $. Sortie : 0,70 $. Total : 0,702 $.
Quelles limites de débit ?
60 requêtes/minute, 1/s. POST + GET combinés.
Prolonger une vidéo >15 s ?
Oui, via POST /v1/videos/extensions en générant plusieurs fragments successifs.

Top comments (0)