Extension de vidéo avec /v1/videos/extensions
Mis à jour le 29 juillet 2026
Prolonger une vidéo existante
Là où l’édition transforme une séquence sans en changer la longueur, l’extension fait exactement l’inverse : elle allonge une vidéo en générant une suite cohérente avec ce qui précède. C’est la réponse au problème le plus banal de la génération vidéo — un clip réussi mais trop court, ou une scène qui mériterait de se développer au-delà de sa durée initiale. Plutôt que de tout régénérer en espérant retrouver le même rendu, vous partez de ce qui existe et vous continuez.
L’endpoint POST /v1/videos/extensions
La requête ressemble à celle d’une génération, avec la vidéo de départ en plus.
{
"model": "grok-imagine-video",
"prompt": "Continue la scène avec un zoom arrière révélant le paysage complet",
"video_url": "https://exemple.com/video-courte.mp4",
"duration": 5
}
Le champ model reste grok-imagine-video, prompt décrit ce qui doit se passer dans la suite, video_url désigne la vidéo à prolonger, et duration fixe la longueur de l’extension entre 2 et 10 secondes — la valeur par défaut étant 6 secondes. Contrairement à l’édition, vous récupérez donc ici la maîtrise de la durée.
Le tableau suivant résume ce qui sépare les deux endpoints, car la confusion est fréquente.
| Aspect | Édition (/edits) | Extension (/extensions) |
|---|---|---|
| Objectif | Modifier le contenu | Ajouter de la durée |
| Paramètre vidéo | video.url (objet) | video_url (string) |
| Durée sortie | Max 8.7s | 2-10s supplémentaires |
| Contenu original | Modifie | Préserve |
La ligne à retenir absolument est la deuxième. L’édition attend un objet video doté d’une propriété url, l’extension attend directement une chaîne video_url. Inverser les deux produit une erreur de validation dont le message ne saute pas toujours aux yeux, et cette faute coûte régulièrement une demi-heure de débogage à qui écrit les deux appels dans le même fichier.
Trois façons de continuer une scène
Le cas le plus simple consiste à laisser courir ce qui est déjà en train de se produire. Le prompt reprend l’action en cours et la prolonge sans rupture.
{
"model": "grok-imagine-video",
"prompt": "Le personnage continue sa marche le long de la plage, les vagues deferlent doucement",
"video_url": "https://exemple.com/promenade.mp4",
"duration": 6
}
Vous pouvez aussi introduire un changement, c’est-à-dire faire entrer un élément nouveau ou modifier la direction du regard. C’est ce qui donne à une séquence sa progression narrative.
{
"model": "grok-imagine-video",
"prompt": "La camera pivote vers la droite révélant un phare au loin, la lumière du phare commence a tourner",
"video_url": "https://exemple.com/plage.mp4",
"duration": 8
}
Troisième usage, la conclusion : une extension courte qui referme la séquence proprement, souvent par un fondu.
{
"model": "grok-imagine-video",
"prompt": "La scène se termine avec un fondu progressif vers le noir, les dernières lueurs du soleil disparaissent a l'horizon",
"video_url": "https://exemple.com/coucher-soleil.mp4",
"duration": 4
}
Chaîner les extensions pour construire une séquence
Rien n’empêche d’étendre une vidéo plusieurs fois de suite. Chaque extension produit une nouvelle vidéo dont l’URL peut servir de source à l’extension suivante, ce qui vous permet de bâtir une séquence longue par segments successifs, chacun piloté par son propre prompt. Le script ci-dessous enchaîne trois extensions en réinjectant à chaque tour l’URL obtenue.
import httpx
import time
api_key = "votre_cle"
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
def attendre_video(request_id):
"""Interroge le statut jusqu'a completion."""
while True:
resp = httpx.get(
f"https://api.x.ai/v1/videos/{request_id}",
headers=headers
).json()
if resp["status"] == "done":
return resp["video_url"]
if resp["status"] == "failed":
raise Exception("Generation echouee")
time.sleep(5)
# Video de base
video_url = "https://exemple.com/video-initiale.mp4"
# Chainer 3 extensions
prompts = [
"Le personnage traverse le pont, vue de profil",
"Il s'arrete au milieu et regarde la riviere en contrebas",
"Il reprend sa marche vers l'autre rive, la camera le suit"
]
for prompt in prompts:
resp = httpx.post(
"https://api.x.ai/v1/videos/extensions",
headers=headers,
json={
"model": "grok-imagine-video",
"prompt": prompt,
"video_url": video_url,
"duration": 5
}
).json()
video_url = attendre_video(resp["request_id"])
print(f"Extension terminee : {video_url}")
Cette élégance a un prix, au sens propre comme au figuré. Chaque extension est facturée séparément, exactement comme une génération de même durée. La cohérence visuelle se dégrade au fil des maillons, puisque chaque étape s’appuie sur une sortie déjà interprétée : au-delà de trois ou quatre extensions enchaînées, les dérives de couleur et de morphologie deviennent visibles. Et comme partout dans cette API, les URL sont temporaires — téléchargez chaque version intermédiaire, sans quoi un échec en fin de chaîne vous obligera à tout reprendre depuis le début.
Le duo génération puis extension
Le schéma le plus répandu en production combine les deux endpoints. Vous générez d’abord une base courte de 3 secondes avec un prompt très précis, via POST /v1/videos/generations, ce qui vous permet d’itérer à moindre coût sur l’esthétique de départ. Vous ajoutez ensuite 5 secondes de développement par POST /v1/videos/extensions, puis 4 secondes de conclusion par un second appel au même endpoint. Le résultat est une vidéo de 12 secondes construite segment par segment, où chaque partie a été validée avant que la suivante ne soit engagée — un contrôle qu’aucune génération unique de 12 secondes ne vous offrirait.
Points clés à retenir
- L’extension prolonge une vidéo existante de 2 à 10 secondes (défaut 6)
- Le paramètre est
video_url(string), pasvideo.url(objet) - Le chaînage permet de créer des séquences longues étape par étape
- La cohérence se dégrade au-delà de 3-4 extensions successives
- Combinez génération initiale + extensions pour un contrôle précis du contenu