Seedance 1.5 Pro es el modelo de generación de vídeo con sincronización audiovisual de ByteDance en BytePlus ModelArk, descrito oficialmente como creado a propósito para la generación conjunta y nativa de audio y vídeo, y que cubre texto a vídeo además de imagen a vídeo con primer fotograma y con primer y último fotograma.
- Entrada
- texto imagen
- Salida
- vídeo $2.4/M
Benchmarks
Seedance 1.5 Pro: 12 publicados, pero ningún benchmark compartido con suficientes modelos para comparar.
Publicado por los proveedores: ByteDance
El precio en contexto
Posición del precio entre 5 modelos comparables
La barra muestra dónde queda el precio de este modelo entre todos los modelos del mismo tipo en Synthorai. En cada extremo se nombra el más barato y el más caro. Son tarifas base; los descuentos por lote, región y escritura en caché están en la página de precios.
Especificaciones y límites
Vídeo
| Resolución | 480p / 720p / 1080p Un conjunto fijo de opciones, no un rango. |
|---|---|
| Duración del clip | 4-12 s Un rango continuo, no un conjunto fijo. |
| Fotogramas por segundo | 24 fps |
| Relaciones de aspecto | 6 (incl. 16:9, 9:16, 1:1) |
| Entradas de vídeo | texto a vídeo · imagen a vídeo con primer fotograma y con primer/último fotograma |
| Audio nativo | Sí, genera sonido |
| Formato | .mp4 |
Modelo
| Modalidades | texto + imagen → vídeo |
|---|
- Generación de vídeo con sincronización audiovisual: texto a vídeo e imagen a vídeo con primer fotograma y con primer y último fotograma a 480p/720p/1080p, 24 fps, 4-12 s, seis relaciones de aspecto, .mp4
- generate_audio alterna entre salida con sonido y muda con tarifas por token distintas
- el único Seedance con modo borrador (vista previa rápida a 480p con menos tokens)
- la fecha de versión 251215 va codificada en el id del modelo
Un prompt, medido a través del gateway
Seedance 1.5 Pro
Devuelto por el modelo 1280×720 Duración 5s latencia 49 s
Un prompt, una solicitud por modelo, sin reintentos y sin selección a dedo - el primer resultado que cada modelo devolvió. Ni el tamaño ni la duración se fijaron: cada modelo utilizó su propio valor por defecto, porque una solicitud diseñada para adaptarse a todos no favorecería a ninguno. Los archivos aquí están recodificados para la web, así que juzgue la composición y la adherencia al prompt, no la compresión.
Use Seedance 1.5 Pro en 30 segundos
API de jobs asíncrona: crea una tarea y consúltala, o mantén la petición abierta con Prefer: wait. POST /v1/videos
import time
import requests
BASE = "https://synthorai.io/v1"
HEADERS = {"Authorization": "Bearer sk-syn-..."}
# 1) create the video generation job (POST /v1/videos)
task = requests.post(
f"{BASE}/videos",
headers=HEADERS,
json={
"model": "seedance-1-5-pro-251215",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5,
},
).json()
# 2) poll the job until it reaches a terminal state
while task["status"] in ("queued", "in_progress"):
time.sleep(5)
task = requests.get(f"{BASE}/videos/{task['id']}", headers=HEADERS).json()
# 3) completed → signed video URL (valid ~24h - download and store it promptly)
if task["status"] == "completed":
print(task["data"][0]["url"])
else:
print(task["error"])const HEADERS = {
Authorization: "Bearer sk-syn-...",
"Content-Type": "application/json",
};
interface VideoTask {
id: string;
status: "queued" | "in_progress" | "completed" | "failed" | "cancelled";
data?: Array<{ url: string }>;
error?: { code: string; message: string };
}
// 1) create the video generation job (POST /v1/videos)
const created = await fetch("https://synthorai.io/v1/videos", {
method: "POST",
headers: HEADERS,
body: JSON.stringify({
model: "seedance-1-5-pro-251215",
prompt: "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
resolution: "720p",
duration: 5,
}),
});
let task = (await created.json()) as VideoTask;
// 2) poll the job until it reaches a terminal state
while (task.status === "queued" || task.status === "in_progress") {
await new Promise((r) => setTimeout(r, 5000));
const res = await fetch(`https://synthorai.io/v1/videos/${task.id}`, { headers: HEADERS });
task = (await res.json()) as VideoTask;
}
// 3) completed → signed video URL (valid ~24h — download and store it promptly)
if (task.status === "completed") console.log(task.data?.[0]?.url);
else console.error(task.error);# Create the job; "Prefer: wait" holds the request up to 60s and returns the
# completed task when generation finishes in time (else the queued task).
curl https://synthorai.io/v1/videos \
-H "Authorization: Bearer sk-syn-..." \
-H "Content-Type: application/json" \
-H "Prefer: wait=60" \
-d '{
"model": "seedance-1-5-pro-251215",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5
}'
# Still queued / in_progress? Poll until completed → data[0].url (valid ~24h).
curl https://synthorai.io/v1/videos/vid_9f2e8c1a4b7d \
-H "Authorization: Bearer sk-syn-..."package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
const base = "https://synthorai.io/v1"
type videoTask struct {
ID string `json:"id"`
Status string `json:"status"`
Data []struct {
URL string `json:"url"`
} `json:"data"`
}
func call(method, url string, body []byte) (t videoTask) {
req, _ := http.NewRequest(method, url, bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer sk-syn-...")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
json.NewDecoder(resp.Body).Decode(&t)
return t
}
func main() {
// 1) create the video generation job (POST /v1/videos)
payload, _ := json.Marshal(map[string]any{
"model": "seedance-1-5-pro-251215",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5,
})
task := call("POST", base+"/videos", payload)
// 2) poll the job until it reaches a terminal state
for task.Status == "queued" || task.Status == "in_progress" {
time.Sleep(5 * time.Second)
task = call("GET", base+"/videos/"+task.ID, nil)
}
// 3) completed → signed video URL (valid ~24h — download and store promptly)
if task.Status == "completed" {
fmt.Println(task.Data[0].URL)
}
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
// JDK built-in HttpClient — no extra dependency needed.
HttpClient http = HttpClient.newHttpClient();
// 1) create the job; "Prefer: wait=60" holds the request up to 60s and
// returns the completed task when generation finishes in time
HttpRequest create = HttpRequest.newBuilder(URI.create("https://synthorai.io/v1/videos"))
.header("Authorization", "Bearer sk-syn-...")
.header("Content-Type", "application/json")
.header("Prefer", "wait=60")
.POST(HttpRequest.BodyPublishers.ofString("""
{"model": "seedance-1-5-pro-251215",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p", "duration": 5}"""))
.build();
String task = http.send(create, HttpResponse.BodyHandlers.ofString()).body();
System.out.println(task); // {"id":"vid_…","status":…} — completed → data[0].url
// 2) still queued / in_progress? Poll GET https://synthorai.io/v1/videos/{id} until the
// status turns completed, then download data[0].url (valid ~24h).Acerca de Seedance 1.5 Pro
- BytePlus destaca una sincronía labial a nivel de milisegundo para diálogos con varios hablantes en mandarín y varios dialectos chinos, así como en inglés, japonés, coreano, español e indonesio, junto con sonido ambiente, foley de acciones, instrumentos y música de fondo.
- Produce clips .mp4 en 480p, 720p o 1080p a 24 fps, de 4 a 12 segundos, en seis relaciones de aspecto, y acepta -1 como duración para que el modelo elija.
- Su interruptor generate_audio selecciona salida con sonido o silenciosa, ambas se facturan a tarifas por token separadas, con la generación silenciosa a la mitad de la tarifa con audio, y el audio está activado por defecto, así que la ruta más cara es la que se obtiene salvo que se renuncie a ella.
- Es además el único modelo Seedance con modo borrador, una opción de previsualización rápida en 480p con menos tokens: los borradores son solo 480p, no pueden devolver un último fotograma y siguen siendo válidos durante siete días, tras los cuales promover uno a render final reutiliza el prompt, la imagen, la semilla, la relación, la duración y el ajuste de audio del borrador.
- Synthorai lo sirve mediante la API asíncrona de jobs /v1/videos: crea una tarea, consulta su URL de estado o mantén la llamada abierta con Prefer: wait.
Preguntas frecuentes
¿Se puede probar gratis la API de Seedance 1.5 Pro?
Sí: las cuentas nuevas reciben 10 llamadas de prueba y hasta $1 de crédito gratuito, sin tarjeta. Suficiente para probar Seedance 1.5 Pro con su carga de trabajo real antes de añadir un método de pago.
¿En qué destaca Seedance 1.5 Pro?
Salida con sonido o silenciosa a tarifas separadas; 480p a 1080p, 4-12 segundos; único Seedance con modo borrador. Consulte la sección Acerca de para el panorama completo según las notas de lanzamiento del propio proveedor.
¿Cuánto cuesta Seedance 1.5 Pro?
Seedance 1.5 Pro cuesta $2.4 por millón de tokens de vídeo en Synthorai (tokens de vídeo ≈ ancho × alto × 24fps × segundos ÷ 1024). Solo se facturan las generaciones exitosas: pago por uso, sin margen de plataforma, sin suscripción.
¿Cómo genero vídeos con la API de Seedance 1.5 Pro?
Envíe un POST a /v1/videos en Synthorai con model="seedance-1-5-pro-251215" para crear un job asíncrono y luego consulte la tarea (o mantenga la petición abierta con la cabecera Prefer: wait) hasta obtener la URL del vídeo. No hace falta ningún SDK del proveedor.
¿Cómo obtengo acceso a Seedance 1.5 Pro?
Apunte su SDK de OpenAI existente a base_url="https://synthorai.io/v1", configure model="seedance-1-5-pro-251215" y listo. Una sola clave API cubre todos los modelos del gateway.
Modelos relacionados
Comparar
Cada valor de esta página está transcrito de la documentación del proveedor, enlazada arriba, y lleva la fecha en que se comprobó. Los precios se comparan en todo el catálogo; los valores de especificación que los proveedores definen de forma distinta se muestran indicando la diferencia en lugar de representarse en un gráfico. Nada aquí lo medimos nosotros, y nada se puntúa.