Inicio rápido

Pasa de cero a generar un vídeo con IA en aproximadamente 5 minutos.

Aviso importante de inicio: Seedance 2.0 tiene 6 modelos, no 1. No existe la "detección automática de modo": debes elegir el valor de model correcto según tu tipo de entrada. Consulta la matriz completa en Visión general de modelos.

Requisitos previos

URL base

https://api.evolink.ai

Paso 1: guarda tu API key

export EVOLINK_API_KEY="your-api-key-here"

Paso 2: elige el modelo correcto

Según lo que tengas:

Tu entradaModelo a usar
Solo prompt de textoseedance-2.0-text-to-video
1–2 imágenes de referenciaseedance-2.0-image-to-video
Imágenes + vídeos + audio (multimodal)seedance-2.0-reference-to-video

¿Necesitas generación más rápida y menor coste? Añade el prefijo fast- a cualquiera de los anteriores, p. ej. seedance-2.0-fast-text-to-video. Consulta Modelos Fast.

Paso 3: realiza tu primera solicitud

Aquí tienes un ejemplo de text-to-video:

import os
import requests

response = requests.post(
    "https://api.evolink.ai/v1/videos/generations",
    headers={
        "Authorization": f"Bearer {os.environ['EVOLINK_API_KEY']}",
        "Content-Type": "application/json"
    },
    json={
        "model": "seedance-2.0-text-to-video",
        "prompt": "A golden retriever running through a sunlit meadow, cinematic slow motion",
        "duration": 5,
        "quality": "720p",
        "aspect_ratio": "16:9"
    }
)

task = response.json()
print(f"Task ID: {task['id']}")
print(f"Status: {task['status']}")

Respuesta (HTTP 200)

{
    "id": "task-unified-1774857405-abc123",
    "object": "video.generation.task",
    "created": 1774857405,
    "model": "seedance-2.0-text-to-video",
    "status": "pending",
    "progress": 0,
    "type": "video",
    "task_info": {
        "can_cancel": true,
        "estimated_time": 165,
        "video_duration": 5
    },
    "usage": {
        "billing_rule": "per_second",
        "credits_reserved": 50,
        "user_group": "default"
    }
}

Observa que billing_rule siempre es per_second: valores de duration mayores cuestan más.

Paso 4: haz polling para obtener el vídeo

Cada solicitud de generación es asíncrona. Usa el ID de tarea para hacer polling del resultado:

import time

task_id = task["id"]

while True:
    status = requests.get(
        f"https://api.evolink.ai/v1/tasks/{task_id}",
        headers={"Authorization": f"Bearer {os.environ['EVOLINK_API_KEY']}"}
    )
    result = status.json()

    if result["status"] == "completed":
        print(f"Video URL: {result['results'][0]}")
        break
    if result["status"] == "failed":
        print("Generation failed")
        break

    print(f"Progress: {result['progress']}%")
    time.sleep(5)

Importante: Las URLs de los vídeos generados son válidas durante 24 horas. Descárgalos y guárdalos en tu propio almacenamiento sin demora.

Para producción, prefiere Webhooks (callback_url) en lugar de polling.

Errores comunes

SíntomaCausaSolución
400 invalid_request en modelHas escrito "model": "seedance-2.0"Usa el ID de modelo completo, p. ej. seedance-2.0-text-to-video
Error al pasar image_urlstext-to-video no acepta entradas multimediaUsa seedance-2.0-image-to-video
quality: "1080p" rechazada1080p no está soportadoUsa 480p o 720p
Imagen > 30 MB o > 6000 px rechazadaSupera los límites de imagen de entradaComprime al rango permitido (consulta image-to-video)

Próximos pasos