Tutorial
¿Cómo usar la API de imagen a video de LTX 2.5 Fast? Haz que las imágenes estáticas se muevan
Primer fotograma (opcionalmente con fotograma final) a video de 2–20 segundos: ejemplos en curl/Python, uso de fotogramas inicial y final, y tabla de parámetros.
TL;DR
- LTX 2.5 Fast Image to Video (
ltx-2.5-fast/image-to-video) hace que las imágenes estáticas se muevan: sube 1 imagen de primer fotograma (puedes añadir 1 más de fotograma final), genera un video de 2–20 segundos en 720p / 1080p con audio nativo. Abre la página del modelo, sube una imagen y pruébalo; los nuevos usuarios reciben 200 créditos al registrarse. - El precio sigue la misma regla que texto a video: 720p a $0.043 por segundo, 1080p a $0.086 por segundo, facturado según los segundos de
duration; el interruptor de audio no afecta el precio. - La llamada se hace a través del endpoint
/v1/tasksde HiAPI:image_urlsrecibe 1–2 imágenes (primer fotograma / primer fotograma + fotograma final); tras el éxito, obtén el video desdeoutput.
Qué puede hacer
- Animar el primer fotograma: una foto estática + una descripción de movimiento; el sujeto se mantiene igual mientras se añaden movimiento, cámara y sonido.
- Primer fotograma + fotograma final: sube dos imágenes y el modelo completa la transición del primer al último fotograma (por ejemplo, de una cabaña de día a una cabaña en una noche estrellada).
- Formato vertical: el formato de salida lo determina
aspect_ratio(16:9 / 9:16); se recomienda que coincida con el del primer fotograma para evitar recortes o bordes. - Texto a video de la misma serie: para generar desde cero, consulta la guía de integración de texto a video; las reglas de precio de ambos endpoints son idénticas.
Este es un resultado real (foto estática de un faro → plano de 6 segundos con sonido):
Waves crash against the rocks below the lighthouse, seagulls glide across the golden sky, the camera slowly pushes in, sound of surf and gulls
(En español: las olas rompen contra las rocas bajo el faro, las gaviotas se deslizan por el cielo dorado, la cámara avanza lentamente, sonido del oleaje y las gaviotas. El primer fotograma usa la foto del faro incluida en los materiales; parámetros: 720p, 6 segundos, 16:9.)
→ 
ltx-2.5-fast/image-to-video, 720p, 6 segundos, 16:9, 1280×720, con sonido, $0.258.Ver el video completo →
Cómo enviar el primer fotograma / primer y último fotograma
| Entrada | image_urls |
Efecto |
|---|---|---|
| 1 imagen | ["imagen del primer fotograma"] |
Se anima a partir de esta imagen, el sujeto no cambia |
| 2 imágenes | ["imagen del primer fotograma", "imagen del fotograma final"] |
Transición del primer al último fotograma; el modelo completa el proceso intermedio |
Las imágenes pueden ser direcciones públicas JPG / PNG / WebP; se recomienda que las dos imágenes tengan el mismo formato y que aspect_ratio se configure igual que el del primer fotograma.
Dos formas de empezar
3 pasos en el navegador: abre la página del modelo → sube el primer fotograma y escribe la descripción del movimiento → haz clic en generar y previsualiza el resultado directamente.
3 pasos con la API: POST /v1/tasks para enviar → obtén el taskId → consulta con GET /v1/tasks/<taskId> hasta obtener success y descarga.
curl: la primera llamada (un solo primer fotograma)
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"
}
}'
Primer y último fotograma (cabaña de día → cabaña en noche estrellada): solo cambia 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: enviar, consultar y descargar
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) # 临时地址,尽快保存
with open("output.mp4", "wb") as f:
f.write(mp4.content)
print("saved output.mp4")
Tabla de parámetros
| Campo | Obligatorio | Valores | Descripción |
|---|---|---|---|
image_urls |
Sí | 1–2 direcciones públicas | La 1.ª es el primer fotograma; la 2.ª es el fotograma final (JPG/PNG/WebP) |
prompt |
Sí | 1–5000 caracteres | Describe movimiento, cámara y sonido; no repitas lo que ya aparece en la imagen |
resolution |
No | 720p / 1080p, por defecto 720p | El precio de 1080p por segundo es aproximadamente el doble que el de 720p |
duration |
No | 2/3/4/5/6/8/10/12/14/16/18/20, por defecto 6 | Valores enumerados |
aspect_ratio |
No | 16:9 / 9:16, por defecto 16:9 | Se recomienda que coincida con el del primer fotograma para evitar recortes o bordes |
generate_audio |
No | Por defecto true | Audio nativo; desactívalo si vas a añadir música en posproducción |
Si el cuerpo de la solicitud incluye campos que no están en la tabla, devuelve 400 directamente.
Errores que encontrarás
| Código de estado | Significado | Cómo resolverlo |
|---|---|---|
| 400 INVALID_REQUEST | Cuerpo de solicitud inválido (falta image_urls o prompt, se enviaron 3 imágenes, duration no es un valor enumerado) |
Corrige el cuerpo según la tabla de parámetros |
| 402 INSUFFICIENT_QUOTA | Saldo insuficiente (no se cobra) | Recarga y vuelve a intentarlo |
| 429 RATE_LIMITED | Se activó el límite de frecuencia | Reduce la frecuencia de envío |
| 409 / 422 IDEMPOTENCY_KEY_* | Reenvío con la misma clave de idempotencia | Usa un nuevo Idempotency-Key |
Si la tarea termina en estado de fallo, también puede devolver CONTENT_POLICY_VIOLATION, TASK_FAILED, TASK_TIMEOUT, etc.; los fallos no se cobran.
Antes de salir a producción
- Callback: las tareas de video tardan; pasa en el nivel superior del cuerpo
"callback": {"url": "https://..."}para ahorrarte el sondeo. - Guarda el video cuanto antes: la dirección del video en
outputes temporal; descárgalo en cuanto lo obtengas. - Mismo formato en primer y último fotograma: si la proporción de las dos imágenes difiere demasiado, la transición se deforma con facilidad; configura
aspect_ratioigual que el del primer fotograma. - Si vas a añadir música en posproducción: pasa
generate_audiocomo false para obtener una imagen limpia; el precio no cambia. - La calidad del primer fotograma determina la del resultado: un primer fotograma borroso o de baja resolución no se verá más nítido al animarse; usa primero una imagen grande y nítida y luego deja que el modelo añada el movimiento.
Preguntas frecuentes
- Sí, máximo 2 imágenes: 1 primer fotograma, o primer y último fotograma; una tercera devuelve 400.
- Sí, el formato no se adapta a la imagen: lo determina
aspect_ratio, así que se recomienda configurarlo manualmente igual que el del primer fotograma. - Sí, el precio es igual que el de texto a video: 720p a $0.043 por segundo; 6 segundos cuestan $0.258.
- Sí, la transición al fotograma final va bien para el «paso del tiempo»: de día a noche, de una escena vacía a una escena llena de productos; basta con dos imágenes y un prompt.
- Sí, animar imágenes de producto es su punto fuerte: usa la imagen principal del producto como primer fotograma y escribe en el prompt el movimiento de cámara (orbit, push in) y elementos decorativos; obtendrás un video de presentación.
- Sí, fotos verticales con 9:16: salida de 720×1280, lista para publicar en plataformas de video corto; para fotos horizontales, mantén 16:9.
Siguiente paso: toma una imagen de tu producto y anímala en la página del modelo; para los cuatro escenarios de imagen a video, consulta la guía completa de prompts.
Artículos relacionados
Ver todos los artículos →-
Tutorial
Cómo llamar a hailuo-2.3-fast/image-to-video a través de la API de HiAPI: práctica con curl y Python
La primera solicitud ejecutable del nivel rápido y de bajo coste de imagen a vídeo: del ID del modelo a la descarga del MP4
-
Tutorial
Cómo llamar a hailuo-2.3/text-to-video mediante la API de HiAPI: curl, Python y ejemplos de solicitud ejecutables
-
Tutorial
Uso de Kandinsky 6.0 Pro texto a video en HiAPI: tutorial con curl y Python
Demostración práctica centrada en la solicitud: construir la llamada de prompt a clip de video, enviar la solicitud, sondear el estado de finalización y descargar el resultado