API Image-to-Video

Convierte 1 o 2 imágenes en un vídeo. El comportamiento se determina por el número de imágenes que envíes:

  • 1 imagenModo de primer fotograma. La imagen se convierte en el primer fotograma del vídeo; el modelo genera el movimiento hacia adelante a partir de ella.
  • 2 imágenesModo de primer y último fotograma. La primera imagen abre el vídeo y la segunda lo cierra; el modelo genera la animación de transición entre ambas.

Endpoint

POST https://api.evolink.ai/v1/videos/generations

ID del modelo: seedance-2.0-image-to-video

La variante Fast seedance-2.0-fast-image-to-video detecta automáticamente el modo (primer fotograma frente a primer-último fotograma) según el número de imágenes.

Parámetros de la solicitud

ParámetroTipoObligatorioValor por defectoDescripción
modelstringDebe ser seedance-2.0-image-to-video
promptstringDescripción en lenguaje natural del movimiento, la cámara y la atmósfera. ≤ 500 caracteres chinos o ≤ 1000 palabras en inglés
image_urlsarray<string>1 o 2 URLs de imagen accesibles públicamente
durationintegerNo5Duración del vídeo en segundos, rango 415
qualitystringNo720p480p o 720p
aspect_ratiostringNo16:916:9, 9:16, 1:1, 4:3, 3:4, 21:9, adaptive
generate_audiobooleanNotrueSi se debe generar audio sincronizado
callback_urlstringNoURL HTTPS para el callback al completarse la tarea, máximo 2048 caracteres

Nota: Las imágenes se pasan únicamente como URLs: no se admite incrustación en Base64. Las URLs deben ser accesibles mediante GET sin autenticación y no deben redirigir a páginas de inicio de sesión.

Requisitos para las imágenes de entrada

RestricciónLímite
Cantidad1 o 2 imágenes
Formato.jpeg, .png, .webp
Dimensiones300–6000 px por lado
Relación de aspecto0.4 – 2.5 (es decir, de 2:5 a 5:2)
Tamaño máximo por imagen30 MB
Cuerpo total de la solicitud≤ 64 MB

Cualquier solicitud que supere estos límites devuelve invalid_request. Las caras humanas realistas no están soportadas: el sistema las rechaza automáticamente.

Modo de primer fotograma (1 imagen)

curl -X POST https://api.evolink.ai/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-image-to-video",
    "prompt": "The camera slowly pushes in and the scene comes alive, with wind gently moving the grass in the background.",
    "image_urls": ["https://example.com/first-frame.jpg"],
    "duration": 5,
    "aspect_ratio": "adaptive"
  }'

aspect_ratio: "adaptive" ajusta automáticamente la relación de aspecto de salida a la de la imagen de entrada.

Modo de primer y último fotograma (2 imágenes)

curl -X POST https://api.evolink.ai/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-image-to-video",
    "prompt": "A smooth transition from the sunrise ocean to the sunset ocean in the same location",
    "image_urls": [
      "https://example.com/sunrise.jpg",
      "https://example.com/sunset.jpg"
    ],
    "duration": 6,
    "quality": "720p",
    "aspect_ratio": "16:9"
  }'

Ambas imágenes deben tener dimensiones y relaciones de aspecto similares; de lo contrario, el modelo puede generar distorsiones durante la transición.

Ejemplo en Python

import requests

response = requests.post(
    "https://api.evolink.ai/v1/videos/generations",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
    },
    json={
        "model": "seedance-2.0-image-to-video",
        "prompt": "The model slowly turns, hair flowing gently in the wind",
        "image_urls": ["https://example.com/portrait.jpg"],
        "duration": 5,
        "quality": "720p"
    }
)

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

Respuesta

{
    "id": "task-unified-1774857405-abc123",
    "object": "video.generation.task",
    "created": 1774857405,
    "model": "seedance-2.0-image-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"
    }
}

La semántica de los campos es idéntica a la del resto de modelos de Seedance 2.0; consulta Tareas asíncronas para ver el ciclo de vida completo.

Preguntas frecuentes

¿Qué pasa si envío 3 imágenes? Devuelve invalid_request. Image-to-video requiere estrictamente 1 o 2 imágenes. Si necesitas más de 2 imágenes como referencia de estilo o sujeto, usa Reference-to-Video.

¿Las URLs de imagen tienen que estar autoalojadas? No es necesario. Cualquier URL accesible mediante GET sirve. Para pipelines de producción que necesiten reproducibilidad, aloja las imágenes en tu propio almacenamiento de objetos (OSS / S3 / R2) y evita que las URLs de terceros caduquen.

¿La salida conservará las caras humanas de la entrada? Si la imagen de entrada contiene una cara humana realista, la solicitud se rechaza directamente. Para personajes virtuales con caras consistentes, sintetiza primero rostros no realistas con otra herramienta y luego pásalos a esta API.

Relacionado