Dreamina Seedance 2.0 vs Seedance 1.5 Pro
Qual usar e quando
O mais antigo seedance-1-5-pro-251215 é o mais barato, $2.4 por milhão de tokens de vídeo contra $7, e para em 1080p com clipes de 4-12 s. O dreamina-seedance-2-0-260128 compra alcance: de 480p a 4K com saída de 10 bits em 4K, e clipes de 4-15 s. Taxa de quadros, áudio nativo, as seis proporções e imagem-para-vídeo por primeiro/último quadro são iguais, então escolha o 1.5 pro pelo custo em 1080p e abaixo.
Benchmarks
Dreamina Seedance 2.0: o provedor não publicou resultados de benchmark.
Seedance 1.5 Pro: 12 publicados, mas nenhum benchmark em comum com modelos suficientes para comparar.
Publicado pelos provedores: ByteDance
Preços
| Dreamina Seedance 2.0 | Seedance 1.5 Pro | Δ | |
|---|---|---|---|
| Por 1M tokens de vídeo | $7 | $2.4 | 2.9× |
Tarifas do catálogo em tempo real, lidas no momento do build; a página de cada modelo traz a tabela de preços atual.
Onde cada um fica: preço por 1M tokens de vídeo entre os 5 modelos de geração de vídeo com esta unidade de cobrança (escala logarítmica)
Capacidades
| Dreamina Seedance 2.0 | Seedance 1.5 Pro | |
|---|---|---|
| Áudio nativo | sim | sim |
Especificações
| Dreamina Seedance 2.0 | Seedance 1.5 Pro | |
|---|---|---|
| Modalidades de entrada | texto imagem | texto imagem |
| Modalidades de saída | vídeo | vídeo |
| Lançamento | 2026-01 | 2025-12 |
| Resolução | 480p - 4K (10-bit at 4K) (intervalo) | 480p / 720p / 1080p (conjunto fixo) |
| Duração do clipe | 4-15 s (intervalo) | 4-12 s (intervalo) |
| Taxa de quadros | 24 fps | 24 fps |
| Proporções de tela | 6 (incl. 16:9, 9:16, 1:1) | 6 (incl. 16:9, 9:16, 1:1) |
| Modos de entrada |
|
|
| Formato | .mp4 | .mp4 |
As especificações são transcritas da documentação de cada provedor; quando um provedor não publica um dado, a linha é omitida, e não inferida. Fontes completas: Dreamina Seedance 2.0 · Seedance 1.5 Pro
Um prompt, os dois modelos, medidos pelo gateway
Retornado pelo modelo 1280×720 Duração 5s latência 133 s
Retornado pelo modelo 1280×720 Duração 5s latência 49 s
Um prompt, uma requisição por modelo, sem novas tentativas e sem escolher o melhor resultado: é o primeiro que cada modelo retornou. Nem o tamanho nem a duração foram fixados; cada modelo usou seu próprio padrão, porque uma requisição ajustada para servir a todos não mostraria o melhor de nenhum. Os arquivos foram recodificados para a web, então avalie a composição e a aderência ao prompt, e não a compressão.
Troque de um para o outro mudando uma linha
Os dois ids estão em todas as abas abaixo; o par de linhas destacado é a única alteração. O endpoint, a chave e o formato da requisição são os mesmos.
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": "dreamina-seedance-2-0-260128",
# "model": "seedance-1-5-pro-251215", # descomente esta linha, comente a linha acima
"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: "dreamina-seedance-2-0-260128",
// model: "seedance-1-5-pro-251215", // descomente esta linha, comente a linha acima
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": "dreamina-seedance-2-0-260128",
# "model": "seedance-1-5-pro-251215", # descomente esta linha, comente a linha acima
"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": "dreamina-seedance-2-0-260128",
// "model": "seedance-1-5-pro-251215", // descomente esta linha, comente a linha acima
"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": "dreamina-seedance-2-0-260128",
// {"model": "seedance-1-5-pro-251215", // descomente esta linha, comente a linha acima
"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).Perguntas frequentes
Qual é mais barato, Dreamina Seedance 2.0 ou Seedance 1.5 Pro?
Seedance 1.5 Pro sai mais barato na linha “Por 1M tokens de vídeo” ($2.4 contra $7, 2.9× de diferença). Outras linhas podem pender para o outro lado: a tabela acima mostra todos os preços, e o custo real depende do seu mix de uso.
Posso fazer um teste A/B de Dreamina Seedance 2.0 contra Seedance 1.5 Pro sem duas integrações?
Sim. Os dois são servidos pelo mesmo endpoint compatível com OpenAI, com uma única chave de API. Para trocar, basta mudar uma linha, a string do modelo; assim você pode direcionar uma parte do tráfego para cada um e comparar as contas diretamente.
Quais durações de clipe e resoluções eles suportam?
A tabela de especificações acima traz as resoluções e durações de clipe publicadas de cada modelo e indica se um valor é um conjunto fixo de opções ou um intervalo contínuo. Os dois parecem iguais, mas pesam de forma diferente no preço, já que a cobrança por segundo é multiplicada pela duração.