Claude Opus 5.5 ya está disponible en SeedRouter
SeedRouter Docs

Seedance 2.0

Genera vídeo con Seedance 2.0 a través de la API de tareas oficial de ModelArk: texto a vídeo, primer y último fotograma, y referencias de imagen, vídeo y audio, de 480p a 4K.

View Markdown

Seedance 2.0 es el modelo de generación de vídeo de ByteDance (Dreamina Seedance 2.0). Envía el cuerpo de tarea oficial de ModelArk, conserva el identificador de tarea devuelto y obtén el vídeo terminado desde la tarea. Las imágenes, los vídeos y el audio van en content como URL.

ID de modelo

ID de modeloResolucionesNotas
dreamina-seedance-2-0480p, 720p, 1080p, 4KModelo completo
dreamina-seedance-2-0-fast480p, 720pPrecio por segundo más bajo
dreamina-seedance-2-0-mini480p, 720pEl precio por segundo más bajo

Los tres ID aceptan los mismos parámetros. Consulta la página del modelo para ver los precios actuales.

Ejemplo rápido

curl https://api.seedrouter.ai/v1/contents/generations/tasks \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dreamina-seedance-2-0",
    "content": [{"type": "text", "text": "A red paper boat drifts across a calm pond at sunrise, slow dolly-in"}],
    "resolution": "720p",
    "ratio": "16:9",
    "duration": 5,
    "generate_audio": true
  }'

Endpoint

POST https://api.seedrouter.ai/v1/contents/generations/tasks
CabeceraValor
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/json

El cuerpo es la solicitud oficial de ModelArk para «crear una tarea de generación de vídeo». Si ya llamas a ModelArk, cambia solo la URL base a https://api.seedrouter.ai/v1 y la clave API. La respuesta es {"id": "task_..."}, no el vídeo terminado. Mantén las claves API en código del servidor.

Parámetros

NombreTipoObligatorioPor defectoNotas
modelstringSí—Uno de los tres ID de modelo anteriores.
contentobject[]Sí—El prompt y los medios; consulta más abajo.
resolutionenumNo720p480p, 720p, 1080p, 4k; los ID Fast y Mini solo aceptan 480p y 720p.
ratioenumNoadaptive16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive.
durationintegerNo5De 4 a 15 segundos, o -1 para que elija el modelo.
generate_audiobooleanNotrueGenera sonido junto con el vídeo.
watermarkbooleanNofalseAñade una marca de agua.
return_last_framebooleanNofalseDevuelve también el último fotograma como URL de imagen.
execution_expires_afterintegerNo172800De 3600 a 259200 segundos. Una tarea que siga sin terminar pasado este plazo pasa a expired y no se cobra.
priorityintegerNo0De 0 a 9.
safety_identifierstringNo—De 1 a 64 caracteres que identifican a tu usuario final. Un hash sirve.
service_tierenumNodefaultSolo default.
content_filterbooleanNotrueExtensión de SeedRouter. false desactiva el filtrado de contenido en esta solicitud.

Elementos de content

ElementoFormaRolLímite
Texto{"type": "text", "text": "..."}—Uno.
Imagen{"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."}first_frame, last_frame, reference_imageHasta 9 imágenes de referencia.
Vídeo{"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"}reference_videoHasta 3.
Audio{"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"}reference_audioHasta 3. Requiere una imagen o un vídeo de referencia.

Los campos desconocidos se rechazan. No se admiten: seed, callback_url (sondea la tarea en su lugar), draft y draft_task, tools, ni frames y camera_fixed, exclusivos de 1.x, así como output_format y omni_reference_task_type (solo de Seedance 2.5). Las tareas no se pueden cancelar ni eliminar.

Modos

El modo se deduce de los elementos de content; no hay un parámetro de modo.

Modocontent
Texto a vídeoun elemento de texto
Primer fotogramatexto (opcional) + una imagen con el rol first_frame, o una imagen sin rol
Primer y último fotogramatexto (opcional) + una imagen first_frame + una imagen last_frame
Referencia multimodaltexto + cualquier combinación de elementos reference_image, reference_video y reference_audio

Los modos de primer fotograma no se pueden combinar con elementos de referencia. Con varias imágenes o con cualquier otro medio, cada imagen necesita un role.

Ejemplo con referencias

curl https://api.seedrouter.ai/v1/contents/generations/tasks \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dreamina-seedance-2-0",
    "content": [
      {"type": "text", "text": "The character from the image walks through the market in the video, same camera move"},
      {"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"},
      {"type": "video_url", "video_url": {"url": "https://example.com/market.mp4"}, "role": "reference_video"}
    ],
    "ratio": "adaptive",
    "duration": 8
  }'

Sustituye las URL de ejemplo por archivos propios accesibles.

Entradas multimedia

Esta API solo acepta referencias por URL. No se aceptan base64, URL data:, ID asset:// ni subidas multipart. El Playground sube los archivos seleccionados al almacenamiento antes de enviar sus URL.

Los medios deben ser URL HTTP(S) públicas y cumplir los límites oficiales del modelo:

MedioFormatosLímites
ImagenJPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIFMenos de 30 MB; ancho y alto de 300–6000 px; relación de aspecto (ancho / alto) de 0,4–2,5; de 1 a 9 imágenes de referencia
VídeoMP4, MOV (H.264 o H.265)De 2 a 15 segundos cada uno, hasta 3, como máximo 15 segundos en total; como máximo 200 MB; 24–60 FPS; ancho y alto de 300–6000 px; relación de aspecto de 0,4–2,5; 407.696–8.295.044 píxeles (ancho × alto)
AudioWAV, MP3De 2 a 15 segundos cada uno, hasta 3, como máximo 15 segundos en total; requiere una imagen o un vídeo de referencia; como máximo 15 MB

El modelo no admite imágenes ni vídeos de referencia que contengan rostros humanos reales.

Los medios se comprueban al iniciarse la tarea, antes de cualquier generación. Una tarea cuyos medios incumplan uno de estos límites termina como failed con invalid_request_error y un mensaje que nombra la regla, por ejemplo The request was rejected: content reference videos must total at most 15 seconds., y no se cobra. Un archivo que no se pueda leer en ese momento se pasa al modelo, que lo acepta o lo rechaza; en ningún caso se cobra una tarea fallida.

Factores de coste

Consulta la sección de precios del modelo para ver las tarifas actuales. Seedance 2.0 factura tokens de vídeo, la unidad oficial:

video tokens = (output seconds + reference video seconds) × width × height × 24 / 1024

La tarifa por millón de tokens depende de la resolución de salida y de si la solicitud incluye un vídeo de referencia; una solicitud con vídeo de referencia aplica una tarifa más baja a todos sus tokens. Las entradas de texto, imagen y audio no se facturan. En 16:9, un segundo son 10.044 tokens en 480p (864×496), 21.600 en 720p, 48.600 en 1080p y 194.400 en 4K.

El cargo sigue los tokens que informa el vídeo terminado (usage.completion_tokens), así que duration: -1 se factura según la duración realmente generada. Los clips renderizados duran algo más de lo solicitado: una solicitud de 5 segundos en 720p y 16:9 renderiza 121 fotogramas e informa 108.900 tokens en lugar de 108.000. Consulta los cargos definitivos en el historial de uso de tu cuenta. Las tareas fallidas y caducadas no se cobran.

Esquema de salida

El envío devuelve el identificador de tarea:

{"id": "task_..."}

Consultar la tarea

curl https://api.seedrouter.ai/v1/contents/generations/tasks/YOUR_TASK_ID \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY"

Sondea cada 10–20 segundos hasta que status sea succeeded, failed o expired. Que se agote el tiempo de red durante el sondeo no significa que la generación haya fallado: conserva el identificador de tarea y reanuda la comprobación. No crees otra tarea para consultar el progreso.

Ejemplo completo de sondeo

Ejecuta esto después del ejemplo de envío en Python anterior.

import time

deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
    result = requests.get(
        f"https://api.seedrouter.ai/v1/contents/generations/tasks/{task_id}",
        headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
        timeout=30,
    )
    result.raise_for_status()
    task = result.json()
    if task["status"] == "succeeded":
        print(task["content"]["video_url"])
        break
    if task["status"] in ("failed", "expired"):
        raise RuntimeError(task["error"]["message"])
    time.sleep(15)
else:
    raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")

Tarea completada

{
  "id": "task_...",
  "model": "dreamina-seedance-2-0",
  "status": "succeeded",
  "content": {
    "video_url": "https://static.seedrouter.ai/media/tasks/task_example/0.mp4",
    "last_frame_url": "https://static.seedrouter.ai/media/tasks/task_example/last_frame/0.jpg"
  },
  "usage": {"completion_tokens": 108900, "total_tokens": 108900},
  "seed": 42,
  "resolution": "720p",
  "ratio": "16:9",
  "duration": 5,
  "framespersecond": 24,
  "generate_audio": true,
  "draft": false,
  "output_format": "mp4",
  "service_tier": "default",
  "execution_expires_after": 172800,
  "priority": 0,
  "created_at": 1790321515,
  "updated_at": 1790321652
}
CampoSignificado
idConserva este identificador para consultas posteriores.
statusqueued, running, succeeded, failed o expired.
content.video_urlEl vídeo generado.
content.last_frame_urlEl último fotograma, cuando return_last_frame es true.
usage.completion_tokensTokens de vídeo del vídeo terminado; la cantidad facturada.
duration, resolution, ratio, framespersecond, seedLo que se renderizó realmente; seed es la que eligió el modelo.
created_at, updated_atMarcas de tiempo Unix en segundos.
error{"code", "message"} en una tarea fallida o caducada.

Las URL de los vídeos se alojan en nuestro almacenamiento. Guarda el archivo en tu propio almacenamiento si necesitas una copia duradera.

Listar tareas

curl "https://api.seedrouter.ai/v1/contents/generations/tasks?page_num=1&page_size=20&filter.status=succeeded" \
  -H "Authorization: Bearer $SEEDROUTER_API_KEY"

Devuelve {"total": N, "items": [...]} con los objetos de tarea de los últimos 7 días, de la más reciente a la más antigua. page_num y page_size van de 1 a 500 (por defecto, 1 y 20). Filtros: filter.status, filter.model, filter.task_ids (repetible) y filter.service_tier.

Errores

Las solicitudes rechazadas antes de crear una tarea devuelven un error HTTP con un objeto error y no se cobran. Una tarea que falla tras ser aceptada devuelve HTTP 200 al consultarla, con status: "failed" (o "expired") y un objeto error. Un resultado retenido por el filtrado de contenido falla con content_policy_violation; una tarea que supera execution_expires_after termina como expired con task_expired.

Consulta el catálogo de errores común para ver códigos, estados HTTP y pautas de reintento.

{
  "id": "task_...",
  "model": "dreamina-seedance-2-0",
  "status": "failed",
  "error": {
    "code": 60001,
    "message": "The request was rejected by the content policy. Please revise the prompt or input images."
  }
}

Si el propio envío agota el tiempo de espera, revisa tu lista de tareas antes de volver a enviarlo: puede que la primera solicitud ya se haya aceptado.

Consejos

  • Describe el sujeto, la acción, el movimiento de cámara y la iluminación con frases completas.
  • Haz borradores en 480p con una duration corta y luego renderiza la versión elegida a una resolución mayor.
  • Encadena planos con return_last_frame: usa el fotograma devuelto como first_frame de la siguiente tarea.

Relacionado