Tutoriel
Guide de l'API Hailuo 2.3 : texte-vers-vidéo, image-vers-vidéo et version Fast
Un seul guide couvre les trois endpoints de Hailuo 2.3 : prix à l'unité, sorties réelles, le piège de la chaîne duration, et des commandes curl et Python directement exécutables.
TL;DR
- Hailuo 2.3 est le modèle vidéo de MiniMax. Sur HiAPI, il dispose de trois endpoints :
hailuo-2.3/text-to-video,hailuo-2.3/image-to-video, ainsi que le moins cherhailuo-2.3-fast/image-to-video. - Il est facturé à l'unité, et non à la seconde : 0,40 $ pour une vidéo de 6 secondes, 0,80 $ pour 10 secondes. Le Fast image-vers-vidéo coûte 0,27 $ et 0,46 $.
- Peu de paramètres d'entrée :
prompt,duration(chaîne"6"ou"10"),prompt_optimizer, plus unimage_urlpour l'image-vers-vidéo. Aucun paramètre de résolution, de ratio d'aspect ni de seed. Ouvrez la page du modèle texte-vers-vidéo pour l'essayer ; les nouveaux comptes reçoivent 200 crédits gratuits.
Quel endpoint utiliser
| Texte-vers-vidéo | Image-vers-vidéo | Fast image-vers-vidéo | |
|---|---|---|---|
| ID du modèle | hailuo-2.3/text-to-video |
hailuo-2.3/image-to-video |
hailuo-2.3-fast/image-to-video |
| Paramètres requis | prompt |
prompt + image_url |
prompt + image_url |
| Vidéo de 6 secondes | 0,40 $ | 0,40 $ | 0,27 $ |
| Vidéo de 10 secondes | 0,80 $ | 0,80 $ | 0,46 $ |
| Entrée image | Aucune | Une première image | Une première image |
Prix HiAPI en temps réel, vérifiés le 20 octobre 2026. Les tâches échouées ne sont pas facturées.
Commencez par le texte pour explorer une scène ; commencez par l'image lorsque la première image doit être précise (par exemple un produit ou un personnage existant). En image-vers-vidéo, Fast coûte un tiers de moins avec les mêmes entrées : vous pouvez donc d'abord faire des brouillons avec Fast, puis passer au modèle standard lorsqu'un plan nécessite davantage de détails de mouvement.
Texte-vers-vidéo : sortie réelle
Voici l'exemple de la page du modèle, d'une durée de 6 secondes :
a kung fu master practicing forms in heavy rain, water droplets scattering in slow motion, smooth natural motion, stable cinematic camera movement, consistent lighting across frames, cinematic composition, dramatic directional lighting, rich cohesive color grade, ultra-detailed, premium commercial finish
hailuo-2.3/text-to-video, 6 secondes, 1366×768, sans audio, 0,40 $.
En six secondes, le maître enchaîne plusieurs postures et frappes de bras tandis que la pluie continue de tomber derrière lui. La caméra reste stable. Bien qu'aucun champ de ratio d'aspect ne figure dans la requête, la sortie est en paysage ; le texte-vers-vidéo ne permet pas de spécifier le portrait.
Image-vers-vidéo : sortie réelle
L'image-vers-vidéo conserve votre image et la met en mouvement. Les deux exemples ci-dessous utilisent une première image en 16:9 et renvoient un résultat en 1364×768.
Première image :

steam bursts from the locomotive as it slowly starts moving, wheels turning, smooth natural motion, stable cinematic camera movement, consistent lighting across frames, cinematic composition, dramatic directional lighting, rich cohesive color grade, ultra-detailed, premium commercial finish
hailuo-2.3/image-to-video, 6 secondes, 1364×768, sans audio, 0,40 $.
La gare, la voiture et le coucher du soleil restent identiques à l'image. La locomotive avance, et la vapeur se répand bas sur le quai.
La même approche avec Fast, pour une scène plus calme :

boats rocking gently, seagulls gliding through the morning mist, smooth natural motion, stable cinematic camera movement, consistent lighting across frames, cinematic composition, dramatic directional lighting, rich cohesive color grade, ultra-detailed, premium commercial finish
hailuo-2.3-fast/image-to-video, 6 secondes, 1364×768, sans audio, 0,27 $.
Le mouvement est léger : les bateaux se balancent doucement, la brume dérive lentement, et une mouette apparaît vers la fin. Pour un plan aussi calme et atmosphérique, Fast suffit.
Les prompts d'image-vers-vidéo doivent décrire ce qui se passe ensuite. Le modèle a déjà vu l'image, donc « une locomotive noire à l'arrêt en gare » n'apporte aucune information ; « de la vapeur s'échappe lorsqu'elle commence à avancer » lui indique quoi faire.
curl
curl -s -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "hailuo-2.3/text-to-video",
"input": {
"prompt": "A glass of iced tea tips over in slow motion, tea splashing across a wooden table, ice cubes tumbling, macro shot",
"duration": "6",
"prompt_optimizer": true
}
}'
Vous recevez un taskId. Interrogez GET https://api.hiapi.ai/v1/tasks/{taskId} jusqu'à ce que data.status vaille success, puis téléchargez data.output[0].url. La vidéo prend quelques minutes, pas quelques secondes.
Pour l'image-vers-vidéo, changez de modèle et ajoutez une image :
{
"model": "hailuo-2.3-fast/image-to-video",
"input": {
"prompt": "The cat stretches, hops off the windowsill and walks toward the camera",
"image_url": "https://your-cdn.example.com/first-frame.jpg",
"duration": "6"
}
}
Python : soumettre, interroger, télécharger
# pip install requests; export HIAPI_KEY=your-key first
import os, time, requests
API = "https://api.hiapi.ai/v1/tasks"
H = {"Authorization": f"Bearer {os.environ['HIAPI_KEY']}"}
def generate(model, timeout_s=900, **inp):
r = requests.post(API, json={"model": model, "input": inp}, headers=H, timeout=30).json()
if r.get("code") != 200:
raise RuntimeError(r) # a 400 lists every invalid field at once
task_id = r["data"]["taskId"] # save this; if your script dies, poll it again instead of resubmitting
deadline = time.time() + timeout_s
while time.time() < deadline:
d = requests.get(f"{API}/{task_id}", headers=H, timeout=30).json()["data"]
if d["status"] == "success":
return d["output"][0]["url"]
if d["status"] == "fail":
raise RuntimeError(d.get("error"))
time.sleep(10)
raise TimeoutError(task_id)
url = generate("hailuo-2.3/image-to-video",
prompt="Steam bursts from the locomotive as it slowly starts moving, wheels turning",
image_url="https://your-cdn.example.com/train.jpg",
duration="10") # a string, not 10
with open("hailuo.mp4", "wb") as f:
f.write(requests.get(url, timeout=120).content)
Les liens de sortie expirent environ 7 jours après la fin de la tâche : enregistrez donc le fichier, pas seulement le lien.
Paramètres
| Champ | Requis | Valeurs | Description |
|---|---|---|---|
prompt |
Oui | Texte | Décrit le mouvement et les mouvements de caméra |
image_url |
Image-vers-vidéo uniquement | Une URL publique | Une seule chaîne, pas un tableau. jpeg, png ou webp |
duration |
Non | "6" (par défaut) ou "10" |
Doit être une chaîne |
prompt_optimizer |
Non | true (par défaut) / false |
Développe les prompts courts avant la génération |
Le mouvement et les mouvements de caméra s'écrivent dans le prompt. Il n'existe aucun champ motion_strength, camera_movement, resolution, aspect_ratio ni seed.
Erreurs que vous rencontrerez
Ces erreurs sont renvoyées au moment de la soumission avec un HTTP 400 : aucune tâche n'est créée et rien n'est facturé :
duration: got number, want string: vous avez passé6. Passez"6".duration: value must be one of '6', '10': il n'existe que deux durées.image_url: missing required field "image_url": l'image-vers-vidéo nécessite une première image. Le nom du champ estimage_url, au singulier.additional properties 'resolution' not allowed(ouaspect_ratio,image_urls,seed) : supprimez ce champ.
Si une tâche se termine finalement avec fail, lisez data.error. En image-vers-vidéo, la cause fréquente est l'impossibilité pour le serveur de récupérer l'URL de l'image, par exemple un bucket privé ou un lien signé expiré.
FAQ
Combien coûte Hailuo 2.3 par seconde ?
La facturation n'est pas à la seconde. Vous payez à l'unité : 0,40 $ pour 6 secondes et 0,80 $ pour 10 secondes avec le modèle standard ; 0,27 $ et 0,46 $ avec Fast. Ramené à la seconde, cela représente environ 0,067 $ par seconde pour une vidéo de 6 secondes avec le modèle standard, et environ 0,045 $ par seconde avec Fast.
Puis-je générer une vidéo en portrait ?
Pas avec le texte-vers-vidéo : il n'a pas de champ de ratio d'aspect et renvoie du paysage. L'image-vers-vidéo n'a pas non plus de champ de ratio d'aspect ; la documentation ne précise pas si une première image en portrait produit une vidéo en portrait, donc avant de développer dessus, testez une vidéo Fast de 6 secondes à 0,27 $.
Dois-je désactiver prompt_optimizer ?
Laissez-le activé pour les prompts courts. Désactivez-le lorsque vous avez soigneusement rédigé votre formulation et souhaitez que le modèle l'exécute strictement telle quelle.
Y a-t-il du son ?
Les trois exemples vidéo ci-dessus n'ont pas de piste audio, et aucun champ ne permet d'activer le son.
Fast est-il moins bon ?
Il a les mêmes entrées et coûte un tiers de moins. Dans l'exemple des bateaux ci-dessus, le mouvement est doux et propre. Pour les plans comportant beaucoup d'actions rapides, générez d'abord un brouillon de 6 secondes sur les deux modèles pour comparer, puis produisez la version de 10 secondes.
Pour comparer davantage de modèles vidéo : les API d'image et de vidéo les moins chères sur HiAPI. Pour essayer Hailuo sans code, ouvrez la page du modèle image-vers-vidéo.
Articles similaires
Voir tous les articles →-
Tutoriel
Comment appeler hailuo-2.3-fast/image-to-video via l'API HiAPI : curl et Python en pratique
La première requête exploitable du palier image-vers-vidéo rapide et économique — de l'ID du modèle au téléchargement du MP4
-
Tutoriel
Comment appeler hailuo-2.3/text-to-video via l'API HiAPI : curl, Python et exemples de requêtes exécutables
-
Tutoriel
Utiliser Kandinsky 6.0 Pro texte-vers-vidéo sur HiAPI : tutoriel curl et Python
Démonstration pratique axée sur la requête : construire l'appel du prompt au clip vidéo, soumettre la requête, interroger l'état d'achèvement et télécharger le résultat