Tutoriel
Comment utiliser LTX 2.5 Fast Image to Video API ? Faites bouger une image fixe
La première image (avec éventuellement une dernière image) devient une vidéo de 2 à 20 secondes : exemples curl/Python, usage des première et dernière images et tableau des paramètres.
TL;DR
- LTX 2.5 Fast Image to Video (
ltx-2.5-fast/image-to-video) fait bouger une image fixe : téléchargez 1 image de première frame (vous pouvez en ajouter 1 de dernière frame), générez une vidéo 720p / 1080p de 2 à 20 secondes avec audio natif. Ouvrez la page du modèle et téléchargez une image pour essayer ; les nouveaux utilisateurs reçoivent 200 crédits à l'inscription. - Prix identique à la génération texte-vers-vidéo : 720p à 0,043 $/seconde, 1080p à 0,086 $/seconde, facturé selon le nombre de secondes de
duration; l'activation de l'audio n'influence pas le prix. - L'appel passe par l'API HiAPI
/v1/tasks:image_urlstransmet 1 à 2 images (première frame / première frame + dernière frame), puis récupérez la vidéo dansoutputaprès succès.
Ce qu'il peut faire
- Animer la première frame : une photo fixe + une phrase décrivant le mouvement ; le sujet reste inchangé, avec ajout de mouvement, de caméra et de son.
- Première frame + dernière frame : transmettez deux images, le modèle génère la transition de la première à la dernière frame (par exemple d'une cabane de jour à une cabane sous un ciel étoilé).
- Format vertical respecté : le format de sortie est déterminé par
aspect_ratio(16:9 / 9:16) ; il est recommandé de l'aligner sur la première frame pour éviter le recadrage ou les bandes. - Génération texte-vers-vidéo de la même série : pour générer à partir de zéro, consultez le guide d'intégration texte-vers-vidéo ; les règles tarifaires des deux API sont identiques.
Voici une vidéo réelle (photo fixe d'un phare → plan sonore de 6 secondes) :
Waves crash against the rocks below the lighthouse, seagulls glide across the golden sky, the camera slowly pushes in, sound of surf and gulls
(Signification en chinois : les vagues frappent les rochers sous le phare, les mouettes glissent dans le ciel doré, la caméra avance lentement, sons des vagues et des mouettes. La première frame utilise la photo du phare fournie, paramètres : 720p, 6 secondes, 16:9.)
→ 
ltx-2.5-fast/image-to-video, 720p, 6 secondes, 16:9, 1280×720, avec audio, 0,258 $.Voir la vidéo complète →
Comment transmettre la première frame / la première + dernière frame
| Entrée | image_urls |
Effet |
|---|---|---|
| 1 image | ["image de première frame"] |
Démarre à partir de cette image, le sujet reste inchangé |
| 2 images | ["image de première frame", "image de dernière frame"] |
Transition de la première à la dernière frame, le modèle génère l'intermédiaire |
Les images acceptent des adresses publiques JPG / PNG / WebP ; il est recommandé que les deux images aient le même format, et que aspect_ratio soit défini comme celui de la première frame.
Deux parcours de prise en main
3 étapes dans le navigateur : ouvrez la page du modèle → téléchargez l'image de première frame, rédigez la description du mouvement → cliquez sur générer, puis prévisualisez directement le résultat.
3 étapes via l'API : POST /v1/tasks pour soumettre → récupérez taskId → GET /v1/tasks/<taskId> jusqu'à success, puis téléchargez.
curl : premier appel (première frame seule)
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: your-unique-key-001" \
-d '{
"model": "ltx-2.5-fast/image-to-video",
"input": {
"prompt": "Waves crash against the rocks below the lighthouse, seagulls glide across the golden sky, the camera slowly pushes in, sound of surf and gulls",
"image_urls": ["https://static.hiapi.ai/gallery/2026/10/0ca26560398eae72.jpg"],
"resolution": "720p",
"duration": 6,
"aspect_ratio": "16:9"
}
}'
Pour la première + dernière frame (cabane de jour → cabane sous un ciel étoilé), modifiez uniquement image_urls :
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ltx-2.5-fast/image-to-video",
"input": {
"prompt": "Time passes from bright winter day to starry night, the sky darkens, the cabin windows light up warmly and smoke rises from the chimney, an aurora appears, fixed camera",
"image_urls": [
"https://static.hiapi.ai/gallery/2026/10/7756ea1a228b0b88.jpg",
"https://static.hiapi.ai/gallery/2026/10/16e267619aa1b003.jpg"
],
"resolution": "720p",
"duration": 5,
"aspect_ratio": "16:9"
}
}'
Python : soumettre, interroger, télécharger
import time, uuid, requests
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
}
payload = {
"model": "ltx-2.5-fast/image-to-video",
"input": {
"prompt": "Waves crash against the rocks below the lighthouse, seagulls glide across the golden sky, the camera slowly pushes in, sound of surf and gulls",
"image_urls": ["https://example.com/your-first-frame.jpg"],
"resolution": "720p",
"duration": 6,
"aspect_ratio": "16:9",
},
}
resp = requests.post(
BASE,
headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())},
json=payload,
timeout=30,
)
resp.raise_for_status()
task_id = resp.json()["taskId"]
while True:
task = requests.get(f"{BASE}/{task_id}", headers=HEADERS, timeout=30).json()
print(task["status"])
if task["status"] in ("success", "fail"):
break
time.sleep(5)
if task["status"] == "success":
video = next(o for o in task["output"] if o.get("type") == "video")
mp4 = requests.get(video["url"], timeout=120) # adresse temporaire, à sauvegarder au plus vite
with open("output.mp4", "wb") as f:
f.write(mp4.content)
print("saved output.mp4")
Tableau des paramètres
| Champ | Obligatoire | Valeurs | Description |
|---|---|---|---|
image_urls |
Oui | 1–2 adresses publiques | La 1re est la première frame ; la 2e est la dernière frame (JPG/PNG/WebP) |
prompt |
Oui | 1–5000 caractères | Décrit le mouvement, la caméra et le son ; inutile de répéter ce qui est déjà visible dans l'image |
resolution |
Non | 720p / 1080p, 720p par défaut | Le prix par seconde en 1080p est environ 2 fois celui de 720p |
duration |
Non | 2/3/4/5/6/8/10/12/14/16/18/20, 6 par défaut | Valeurs d'énumération |
aspect_ratio |
Non | 16:9 / 9:16, 16:9 par défaut | Recommandé d'aligner sur la première frame pour éviter le recadrage ou les bandes |
generate_audio |
Non | true par défaut | Audio natif ; désactivez si vous voulez ajouter votre propre musique en post-production |
La présence d'un champ hors tableau dans le corps de la requête renvoie directement une erreur 400.
Erreurs que vous rencontrerez
| Code de statut | Signification | Que faire |
|---|---|---|
| 400 INVALID_REQUEST | Corps de requête invalide (image_urls ou prompt manquant, 3 images transmises, duration hors énumération) |
Corrigez le corps de la requête d'après le tableau des paramètres |
| 402 INSUFFICIENT_QUOTA | Solde insuffisant (aucun débit) | Rechargez puis réessayez |
| 429 RATE_LIMITED | Limite de débit atteinte | Réduisez la fréquence de soumission |
| 409 / 422 IDEMPOTENCY_KEY_* | Soumission répétée avec la même clé d'idempotence | Utilisez un nouveau Idempotency-Key |
L'échec en état final d'une tâche peut aussi renvoyer CONTENT_POLICY_VIOLATION, TASK_FAILED, TASK_TIMEOUT, etc. ; aucun débit en cas d'échec.
À vérifier avant la mise en production
- Callback : les tâches vidéo sont longues ; transmettez
"callback": {"url": "https://..."}au niveau supérieur du corps de la requête pour éviter l'interrogation répétée. - Sauvegardez rapidement : l'adresse vidéo dans
outputest temporaire, téléchargez-la dès réception. - Formats des première et dernière frames identiques : si les proportions des deux images diffèrent trop, la transition se déforme facilement ; définissez
aspect_ratiocomme celui de la première frame. - Pour ajouter votre propre musique en post-production : passez
generate_audioà false pour obtenir une image propre, sans changement de prix. - La qualité de la première frame détermine la qualité de la vidéo : une première frame floue ou de trop faible résolution ne deviendra pas nette en mouvement ; utilisez d'abord une grande image nette, puis laissez le modèle ajouter le dynamisme.
Questions fréquentes
- Oui, 2 images maximum : 1 première frame ou première frame + dernière frame ; une 3e image renvoie une erreur 400.
- Oui, le format ne suit pas l'image : il est déterminé par
aspect_ratio, il est donc recommandé de le définir manuellement comme celui de la première frame. - Oui, le prix est identique à la génération texte-vers-vidéo : 720p à 0,043 $/seconde, 0,258 $ pour 6 secondes.
- Oui, la transition de dernière frame convient au « passage du temps » : du jour à la nuit, d'une scène vide à une scène remplie de produits, deux images et un prompt suffisent.
- Oui, animer des images produit est son point fort : prenez l'image principale du produit comme première frame, écrivez dans le prompt les mouvements de caméra (orbit, push in) et les éléments décoratifs, et vous obtenez une vidéo de présentation.
- Oui, une photo verticale s'accompagne de 9:16 : sortie en 720×1280, directement publiable sur les plateformes de vidéo courte ; pour une photo horizontale, gardez 16:9.
Prochaine étape : prenez une image de votre produit et animez-la sur la page du modèle ; pour les quatre scénarios de génération image-vers-vidéo, consultez le recueil de prompts.
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