HiAPI
Blog

Guía de uso

Crear videos cortos con seedance-2.0-mini: flujo de trabajo de extremo a extremo con la API de hiapi

Jul 7, 2026
Crear videos cortos con seedance-2.0-mini: flujo de trabajo de extremo a extremo con la API de hiapi

TL;DR

  • Qué es esto: un flujo de trabajo de extremo a extremo para producir videos cortos verticales al estilo TikTok/Reels con seedance-2.0-mini en la API de hiapi: desde la primera llamada curl hasta un script que renderiza por lotes el contenido de una semana entera. Los clips de demostración de esta página se generaron exactamente con las solicitudes que se muestran en el texto.
  • Por qué elegir este modelo para video corto: admite 9:16 de forma nativa, incluye audio sincronizado (sin necesidad de procesar efectos de sonido por separado), permite elegir entre 4 y 15 segundos de duración y un borrador en 480p cuesta solo $0.0272 por segundo; un borrador vertical de 4 segundos cuesta unos $0.11 (precios).
  • Datos de la API verificados: prompt, duration (entero de 4 a 15) y resolution (480p | 720p) son obligatorios; aspect_ratio acepta 1:1, 4:3, 3:4, 16:9, 9:16, 21:9, adaptive. Para imagen a video se usan first_frame_url / last_frame_url. El esquema es estricto: campos desconocidos como seed se rechazan con un 400.
  • Flujo de trabajo: genera en 480p para iterar los prompts, vuelve a renderizar en 720p los clips que conserves y envía tareas en paralelo por lotes; la cola asíncrona de /v1/tasks se encarga del fan-out por ti.

Por qué seedance-2.0-mini encaja en el ciclo de video corto

La producción de video corto es trabajo cuantitativo: borras muchos clips, conservas unos pocos y publicas a diario. Ese flujo de trabajo exige tres cosas de una API de video —iteración de bajo costo, salida vertical y sonido— y seedance-2.0-mini cumple las tres:

  • El costo por borrador es lo bastante bajo para iterar una y otra vez. En 480p, el modelo cobra $0.0272 por segundo de salida, así que un borrador de 4 segundos cuesta unos $0.11, e incluso un clip completo de 15 segundos cuesta solo unos $0.41. La tarifa 720p es de $0.0586/s. (Precios verificados con la página de precios en vivo; el video se factura por segundo, así que duration es tu palanca de costo).
  • 9:16 nativo. Renderiza vertical directamente, en lugar de recortar un clip horizontal y perder la composición.
  • Audio sincronizado nativo. El MP4 de salida incluye una pista AAC generada junto con la escena: ambiente, foley, ruido de fondo de la sala. Para contenido de feed que se reproduce automáticamente con sonido, esto ahorra todo un paso de edición.

Si quieres un modelo hermano más grande para contenido de pieza principal, el mismo flujo de trabajo sirve con seedance-2-0; solo cambia la tarifa.

Configuración

Solo necesitas una clave de API de hiapi y nada más: no hace falta SDK. Guarda la clave en una variable de entorno:

export HIAPI_API_KEY="sk-..."

Todos los modelos de video de hiapi funcionan mediante el endpoint unificado de tareas asíncronas: POST https://api.hiapi.ai/v1/tasks devuelve inmediatamente un taskId y luego consultas GET /v1/tasks/{taskId} hasta que termine. Consulta la documentación para más detalles.

Tu primer clip vertical (T2V)

La solicitud válida mínima requiere prompt, duration y resolution. Añade aspect_ratio: "9:16" para video corto:

curl -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-mini",
    "input": {
      "prompt": "Video corto vertical. Sobre la barra de una cafetería bañada por el sol, un matcha latte recién hecho se vierte lentamente en un vaso de cristal transparente, un remolino verde florece entre la leche, luz de ventana suave, poca profundidad de campo. Audio nativo: suave ambiente de cafetería, sonido de líquido vertiéndose. Nítido, apetitoso, fotorrealista.",
      "duration": 4,
      "resolution": "480p",
      "aspect_ratio": "9:16"
    }
  }'

La respuesta vuelve al instante:

{"code": 200, "data": {"taskId": "tk-hiapi-01KWTTFDPHSDWZ0FP1QAS5J79Q"}, "message": "success"}

Consulta la tarea hasta que status sea success y luego descarga output[0].url de inmediato: las URL de salida son temporales y caducan. Aquí está el clip real generado por esa solicitud (4 segundos, 480p, 9:16, con audio nativo de vertido y ambiente; activa el sonido para escucharlo):

Dos notas prácticas de este render: la salida vertical en "480p" medía en realidad 496×864 píxeles, y el audio entra en el MP4 como una pista AAC estándar, sin necesidad de composición con archivos separados.

Modos de entrada, verificados contra la API en vivo

El esquema es estricto. A continuación, una respuesta de validación real, reproducida literalmente, para que la reconozcas en tus logs:

Campo Tipo Obligatorio Valores
prompt string ✅ (longitud mínima 3) La descripción de tu toma
duration integer ✅ 4–15 (segundos)
resolution string ✅ 480p, 720p
aspect_ratio string Opcional 1:1, 4:3, 3:4, 16:9, 9:16, 21:9, adaptive
first_frame_url string Opcional URL de imagen del fotograma inicial para I2V
last_frame_url string Opcional URL de imagen para controlar el fotograma final
image_input array Opcional Referencia de imagen multimodal
reference_video_urls array Opcional Video de referencia de estilo/movimiento (tarifa por segundo más baja)

Si omites un campo obligatorio, la tarea se rechaza antes de crearse (sin cargo):

{"code": 400, "error_code": "INVALID_REQUEST", "message": "invalid input: resolution: missing required field \"resolution\"; duration: missing required field \"duration\""}

Los valores fuera de rango indican el límite exacto: duration: maximum: got 16, want 15, y los campos desconocidos se rechazan en lugar de ignorarse:

{"code": 400, "error_code": "INVALID_REQUEST", "message": "invalid input: <root>: additional properties 'seed' not allowed"}

Merece la pena interiorizar este último comportamiento: si reutilizas una estructura de solicitud de otro modelo (un seed, un size, un indicador audio), seedance-2.0-mini devolverá un 400 en lugar de descartar ese campo silenciosamente.

Función Python reutilizable

Todo lo necesario para producción cabe en unas 40 líneas: enviar, consultar, descargar:

import os, time, requests

API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"}

def submit(prompt: str, duration: int = 4, resolution: str = "480p",
           aspect_ratio: str = "9:16", **extra) -> str:
    r = requests.post(API, headers=HEADERS, json={
        "model": "seedance-2.0-mini",
        "input": {"prompt": prompt, "duration": duration,
                  "resolution": resolution, "aspect_ratio": aspect_ratio, **extra},
    }, timeout=60)
    data = r.json()
    task_id = (data.get("data") or {}).get("taskId")
    if not task_id:
        raise RuntimeError(f"submit failed: {data}")
    return task_id

def wait(task_id: str, timeout_s: int = 900) -> dict:
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        task = requests.get(f"{API}/{task_id}", headers=HEADERS, timeout=30).json()["data"]
        if task["status"] == "success":
            return task
        if task["status"] == "fail":
            raise RuntimeError(f"task failed: {task.get('error')}")
        time.sleep(8)
    raise TimeoutError(task_id)

def make_clip(prompt: str, out_path: str, **kw):
    task = wait(submit(prompt, **kw))
    url = task["output"][0]["url"]          # URL temporal: descárgala de inmediato
    with open(out_path, "wb") as f:
        f.write(requests.get(url, timeout=120).content)

Un clip de 4 segundos en 480p suele completarse en pocos minutos; en horas punta, deja hasta unos 10 minutos antes de declarar un timeout.

Imagen a video: fijar el primer fotograma

Para cortos centrados en un producto, la deriva del prompt es el enemigo: quieres que tu producto aparezca en la toma, no la imaginación que el modelo tiene de él. La solución es I2V con first_frame_url: genera (o fotografía) una imagen fija y luego anímala. Una imagen de referencia vertical como esta, creada con gpt-image-2 a través del mismo endpoint /v1/tasks, funciona bien como fotograma inicial:

La solicitud solo añade un campo:

task_id = submit(
    "El agua caliente se vierte suavemente en círculos desde arriba, el goteador comienza a soltar vapor, "
    "las gotas caen en la jarra de cristal de debajo, la luz del sol ilumina el vapor. Acercamiento lento y suave. "
    "Audio nativo: suave sonido de agua, ruido de fondo silencioso de una habitación por la mañana.",
    duration=4, resolution="480p", aspect_ratio="9:16",
    first_frame_url="https://your-cdn.example/pourover-ref.jpg",
)

Aquí está el efecto real de animar un primer fotograma: una imagen fija de nuestra biblioteca de recetas de seedance-2.0-mini y el clip que genera, con el mismo modelo y estructura de solicitud (en este caso, 16:9):

La composición, la tonalidad y el sujeto quedan fijados a tu imagen estática; el prompt solo tiene que describir el movimiento. Si necesitas que el clip termine en un fotograma final concreto, también existe last_frame_url, útil para bucles que vuelven a una tarjeta de producto.

Producir una semana de contenido por lotes

Como /v1/tasks es asíncrono, la producción por lotes consiste en: enviar todas las tareas y luego consultarlas. Sin cola en el cliente.

briefs = [
    ("mon-hook",  "Clip vertical. Espresso extrayéndose lentamente, ..."),
    ("tue-loop",  "Clip vertical en bucle perfecto. Vapor elevándose de la taza, ..."),
    ("wed-recipe","Clip vertical. Secuencia cenital de preparación de pour-over, ..."),
    # ... uno por cada día de publicación
]

tasks = {name: submit(p, duration=6) for name, p in briefs}   # fan-out
for name, tid in tasks.items():                                 # recopilar
    make = wait(tid)
    url = make["output"][0]["url"]
    open(f"{name}.mp4", "wb").write(requests.get(url, timeout=120).content)

El cálculo de costos se mantiene predecible porque se factura por segundo de salida:

Escenario Especificaciones Costo
1 iteración de borrador 4 segundos · 480p unos $0.11
1 clip listo para publicar 6 segundos · 480p unos $0.16
7 clips (una semana, uno al día) 7 × 6 segundos · 480p unos $1.14
Re-render de la pieza principal 6 segundos · 720p unos $0.35

Un flujo de trabajo que funciona: borrador en 480p para cada idea, conservar los ganadores y volver a renderizar solo esos en 720p. Para más palancas (niveles de resolución, recorte de duración, programación por lotes), consulta nuestra guía sobre cómo controlar el costo de las API de imágenes y video de IA.

Trucos de prompt para el feed

Lo que funcionó en nuestros renders de prueba, ajustado para video corto:

  • Escribe «vertical» y compón para ello. Empieza con «Video corto vertical.» y añade aspect_ratio: "9:16" para que el sujeto quede centrado en un encuadre alto, en lugar de encuadrar una escena horizontal que acabará recortada.
  • Pon el gancho en el primer segundo. El feed decide en el primer segundo: haz que la acción inicial sea la recompensa (el vertido ya está en marcha, el vapor ya sube), no una presentación lenta.
  • Escribe el audio en el prompt. Una frase «Audio nativo: ...» con 2 o 3 sonidos concretos (líquido vertiéndose, ambiente de cafetería) moldea la pista de audio de forma fiable. Si no lo pides, solo obtendrás ruido de fondo genérico.
  • Para clips en bucle, minimiza el cambio entre inicio y fin. Partículas a la deriva, brillos pulsantes, vapor ondulante: describe un movimiento estable y los fotogramas inicial y final quedarán lo bastante cerca para hacer un bucle.

Conclusión

Hacer video corto con seedance-2.0-mini se reduce a un endpoint asíncrono, tres campos obligatorios y una facturación por segundo que abarata la iteración: borra clips verticales en 480p por unos veinticinco centavos cada uno, fija las tomas de producto con first_frame_url, envía por lotes tu calendario de publicación y vuelve a renderizar en 720p los que conserves. Consigue una clave de API y empieza con la solicitud curl de 4 segundos de arriba; la página del modelo seedance-2.0-mini tiene la referencia de parámetros y los precios en vivo para continuar desde ahí.

Artículos relacionados

Ver todos los artículos →

Empieza a crear con artefactos de IA persistentes

Consigue tu API key y llama a modelos de imagen, vídeo y audio a través de una única API basada en tasks.

Leer la documentación de la API