Dreamina Seedance 2.0 Mini vs Veo 3.1
Qual usar e quando
Esses dois aceitam entrada de texto e imagem e emitem .mp4 com áudio nativo a 24 fps, mas cobram em unidades diferentes - dreamina-seedance-2-0-mini-260615 a $3.5 por milhão de tokens de saída contra veo-3.1-generate-001 a $0.2 por segundo sem áudio e $0.4 por segundo com ele - portanto, nenhuma conversão única entre eles é honesta. Escolha o modelo da ByteDance quando você quiser uma duração livre de 4-15 s, 480p ou 720p, e uma escolha de 6 proporções de tela incluindo 1:1. Escolha veo-3.1-generate-001, lançado em 2025-10, para saída em 1080p, clipes fixos de 4/6/8 s em 16:9 ou 9:16, e até 2 imagens guia.
Benchmarks
Dreamina Seedance 2.0 Mini: o provedor não publicou resultados de benchmark.
Veo 3.1: 12 publicados, mas nenhum benchmark em comum com modelos suficientes para comparar.
Publicado pelos provedores: ByteDance
Preços
| Dreamina Seedance 2.0 Mini | Veo 3.1 | Δ | |
|---|---|---|---|
| Por segundo de saída (com áudio) | - | $0.4 | - |
| Por segundo de saída (sem áudio) | - | $0.2 | - |
| Por 1M tokens de vídeo | $3.5 | - | - |
Estes dois modelos cobram em unidades diferentes, então nenhum Δ é mostrado: converter uma na outra exigiria uma suposição que não medimos. Acima, os preços de cada um aparecem na sua própria unidade.
Capacidades
| Dreamina Seedance 2.0 Mini | Veo 3.1 | |
|---|---|---|
| Áudio nativo | sim | sim |
Especificações
| Dreamina Seedance 2.0 Mini | Veo 3.1 | |
|---|---|---|
| Modalidades de entrada | texto imagem | texto imagem |
| Modalidades de saída | vídeo | vídeo |
| Lançamento | 2026-06 | 2025-10 |
| Resolução | 480p / 720p (conjunto fixo) | 720p / 1080p (conjunto fixo) |
| Duração do clipe | 4-15 s (intervalo) | 4 / 6 / 8 s (conjunto fixo) |
| Taxa de quadros | 24 fps | 24 fps |
| Proporções de tela | 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 Mini · Veo 3.1
Um prompt, os dois modelos, medidos pelo gateway
Retornado pelo modelo 1280×720 Duração 5s
Retornado pelo modelo 1280×720 Duração 8s latência 63 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-mini-260615",
# "model": "veo-3.1-generate-001", # 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-mini-260615",
// model: "veo-3.1-generate-001", // 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-mini-260615",
# "model": "veo-3.1-generate-001", # 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-mini-260615",
// "model": "veo-3.1-generate-001", // 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-mini-260615",
// {"model": "veo-3.1-generate-001", // 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 Mini ou Veo 3.1?
Eles cobram em unidades diferentes, então não existe um número único que seja honesto: na tabela acima, Dreamina Seedance 2.0 Mini e Veo 3.1 aparecem cada um na sua unidade. Compare os dois na sua própria carga de trabalho; o trade-off na prática está descrito no veredito, no topo desta página.
Posso fazer um teste A/B de Dreamina Seedance 2.0 Mini contra Veo 3.1 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.