HiAPI
Blog

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.

Jul 10, 2026
Guide de l'API Hailuo 2.3 : texte-vers-vidéo, image-vers-vidéo et version Fast

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 cher hailuo-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 un image_url pour 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

Générer avec ce prompt →

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

Générer avec ce prompt →

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

Générer avec ce prompt →

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 est image_url, au singulier.
  • additional properties 'resolution' not allowed (ou aspect_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 →

Commencez avec des artefacts IA persistants

Obtenez votre clé API et appelez des modèles d'image, de vidéo et d'audio via une API unique basée sur les tasks.

Lire la documentation de l'API