Aller au contenu principal
info
La fonctionnalité décrite sur cette page est en version bêta.

API Vidéo

Une requête produit une vidéo. Nommez un personnage et son apparence est conservée, comme avec l'API Images.

Générer​

curl -X POST https://api.aicu.ai/v1/video/generate \
-H "Authorization: Bearer $AICU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video",
"prompt": "@MeiSoleil waves at the camera on a beach at sunset",
"resolution": "720p",
"seconds": 5
}'
{
"id": "5f9c…",
"status": "processing",
"ap_cost": 7000,
"status_url": "https://api.aicu.ai/v1/video/status/5f9c…",
"url": "https://api.aicu.ai/v1/video/file/5f9c…"
}

La génération prend plus de temps qu'une requête HTTP ne le permet : l'appel renvoie donc immédiatement 202 avec un id. Interrogez status_url jusqu'à ce qu'il indique completed, puis récupérez url.

curl "https://api.aicu.ai/v1/video/status/$ID" -H "Authorization: Bearer $AICU_API_KEY"
{
"id": "5f9c…",
"status": "completed",
"ap_cost": 7000,
"url": "https://api.aicu.ai/v1/video/file/5f9c…",
"download_url": "https://api.aicu.ai/v1/video/d/…",
"download_expires_at": "2026-12-03T00:00:00.000Z"
}
curl -L "https://api.aicu.ai/v1/video/file/$ID" -H "Authorization: Bearer $AICU_API_KEY" -o out.mp4

status vaut processing, completed ou failed. Interroger toutes les 10 secondes suffit largement ; un clip de 5 secondes arrive en général en une à cinq minutes.

Transmettre la vidéo à quelqu'un​

url exige votre clé API : elle est destinée à votre programme, pas à une personne. Une tâche terminée fournit aussi download_url, qui s'ouvre sans clé — c'est celle-là qu'il faut mettre dans un e-mail, un message de chat ou une page web.

# S'ouvre dans un navigateur. Sans clé, sans en-tête.
open "$(curl -s "https://api.aicu.ai/v1/video/status/$ID" \
-H "Authorization: Bearer $AICU_API_KEY" | jq -r .download_url)"

Ajoutez ?dl=1 pour que le navigateur enregistre le fichier au lieu de le lire.

Le lien expire 30 jours après la création de la vidéo ; download_expires_at en donne le moment exact. Passé ce délai, comme pour un jeton qui n'a jamais existé ou dont la forme est incorrecte, le lien renvoie le même 404 — sans préciser lequel des cas, si bien qu'un lien que vous partagez ne révèle rien sur les autres.

Gardez une copie de tout ce dont vous avez besoin plus longtemps. Le lien sert à remettre le résultat, pas à le stocker.

Choisir un modèle​

model choisit le modèle vidéo. Si vous l'omettez, vous obtenez gemini-omni-1.1-flash, ce qui permet aux appels existants de continuer à fonctionner.

modelOrigineRésolutionsSecondesIdéal pour
gemini-omni-1.1-flash (par défaut)Google360p / 720p / 1080p5 à 10, décidé par le modèleLe rapport qualité-prix en 720p. Vous êtes facturé pour la durée réellement produite.
wan3.0-videoAlibaba480p / 720p / 1080p2 à 10La qualité, avec le son. Conserve un personnage à partir d'une seule image de référence.
wan3.0-video-primeAlibaba480p / 720p / 1080p2 à 10La même qualité, en un tiers à la moitié du temps.

La liste à jour, avec les limites et les tarifs de chaque modèle, se trouve toujours dans GET /v1/models (type: "video"). Un modèle ou une résolution hors de ces plages renvoie 400 au lieu d'être arrondi en silence.

Champs​

ChampSignification
modelVoir ci-dessus. Par défaut gemini-omni-1.1-flash.
promptCe qui se passe dans le plan. Un @Name placé n'importe où dans le texte sélectionne ce personnage et est retiré du prompt.
characterÉquivaut à écrire @Name, sous forme de champ séparé. Un personnage enregistré fournit sa propre image de référence ; le nom de votre propre personnage exige reference_image.
reference_imageImage en base64 utilisée comme référence du personnage. Jusqu'à environ 8 MB.
first_frameImage en base64 qui devient la première image, pour animer un storyboard. Ne peut pas être combinée avec reference_image.
last_frameImage en base64 qui devient la dernière image. Utilisez-la avec first_frame et le modèle comble le mouvement entre les deux.
resolutionDépend du modèle (tableau ci-dessus). Par défaut 720p. Détermine le prix.
secondsDépend du modèle (tableau ci-dessus). Par défaut 5. Détermine le prix.
aspect_ratio16:9 (par défaut), 9:16, ou 1:1 si le modèle le prend en charge. Avec first_frame, ce sont les images qui décident du format.
visibilitypublic liste le résultat avec sa ligne de crédit ; private ne conserve rien.

Première et dernière image​

Donnez le début et la fin, et laissez le modèle trouver le chemin entre les deux.

{
"model": "wan3.0-video",
"first_frame": "<base64 of the opening shot>",
"last_frame": "<base64 of the closing shot>",
"prompt": "the camera slowly pulls back as she turns toward the window",
"seconds": 5
}

Deux images d'une même planche contact (voir plus bas) forment une paire naturelle : même éclairage, même personnage, moment différent.

Prix​

À la seconde de vidéo terminée, selon le modèle et la résolution. 1 USD = 10,000 AP. Les tarifs en vigueur figurent sur la page des tarifs et dans GET /v1/models (type: "video") ; les changements de tarif sont annoncés dans les Actualités sept jours à l'avance.

Les AP sont réservés au démarrage de la tâche et intégralement restitués si la tâche échoue ou dépasse le délai. Une génération échouée ne coûte rien. Quand le modèle décide de la durée, le maximum est réservé et la différence est restituée une fois la vidéo terminée. Vous pouvez avoir trois tâches en cours simultanément par clé.

Scope​

La vidéo exige le scope video. Il n'est pas inclus dans les anciennes clés : une clé émise uniquement pour les images n'a jamais été prévue pour dépenser aux tarifs de la vidéo. Ajoutez-le depuis votre page de clés, ou émettez une nouvelle clé, qui reçoit tous les scopes publics disponibles.

Un appel sans ce scope renvoie 403 forbidden_scope avec required_scope: "video".

Personnages​

Un personnage enregistré n'a besoin que de son nom.

{ "prompt": "@SakiNoire walks through a neon backstreet at night", "seconds": 5 }

Votre propre personnage a besoin d'une image de lui, exactement comme dans l'API Personnages.

{ "character": "luc4", "reference_image": "<base64>", "prompt": "sitting at a cafe, typing on a laptop" }

LuC4 généré à partir d&#39;une seule image de référence

La même référence qui produit cette image fixe est celle qui maintient le personnage stable d'une image à l'autre. Placez les mots décrivant l'apparence officielle du personnage avant la scène ; la référence fixe l'aspect général et les mots tiennent les détails.

Réussir la première image​

Une vidéo ne vaut que ce que vaut l'image dont elle part, et l'API Images est juste là. Une technique qui marche bien : demandez une planche contact, puis donnez la planche au modèle vidéo.

curl -X POST https://api.aicu.ai/v1/images/generations \
-H "Authorization: Bearer $AICU_API_KEY" -H "Content-Type: application/json" \
-d '{"model":"gpt-image-2.5-flare","size":"1024x1536","quality":"medium",
"prompt":"A 3x3 contact sheet of snapshots a child took on a phone, 9:16. Low angles, feet, the dog’s nose up close, the sky, a palm, a parent seen from below, a toy on the floor. Everyday and lived-in. No text or logos."}'

Demander les photos d'un enfant vous donne des contre-plongées, parce que c'est à cette hauteur que se trouvent ses yeux. Demander des ratés d'amateur vous donne du flou de bougé, un pouce devant l'objectif et un contre-jour brûlé. Vous n'avez eu à décrire rien de tout cela.

Les photos d'un enfantRatés d'amateurLes instantanés d'un personnage
planche contact, photos d&#39;un enfantplanche contact, ratés d&#39;amateurplanche contact, instantanés d&#39;un personnage

Chaque case de la planche est une première image utilisable. Passez-en une comme reference_image et décrivez le mouvement dans prompt.

Erreurs​

StatutCodeQue faire
400invalid_parameterVérifiez model, resolution, seconds ou la taille des images
402insufficient_apRechargez. Rien n'a été lancé.
403forbidden_scopeAjoutez le scope video à la clé
429rate_limitedTrois tâches sont déjà en cours pour cette clé. Attendez qu'une se termine.
5xxgeneration_failedRéessayez. Les AP réservés ont déjà été restitués.

Assistance​

© 2026 AICU Inc.