Dreamina Seedance 2.0 vs Veo 3.1
Welches Modell wofür
Beide akzeptieren Text- oder Bildeingaben und liefern .mp4-Videos mit 24 fps, nativem Audio und First-Frame- oder First/Last-Frame-Guidance zurück, der eigentliche Unterschied liegt also in Bandbreite versus Vorhersehbarkeit: dreamina-seedance-2-0-260128 (2026-01) deckt 480p bis 4K mit jeder beliebigen Dauer von 4-15 s und 6 Seitenverhältnissen ab, während veo-3.1-generate-001 (2025-10) auf 720p/1080p, 4/6/8 s und 16:9 oder 9:16 mit bis zu 2 Guide-Bildern festgelegt ist. Beachten Sie, dass die beiden in unterschiedlichen Einheiten abrechnen - $7 pro Million Output-Tokens gegenüber $0.2 pro Sekunde ohne Audio und $0.4 mit - daher ist keine einzelne Umrechnung ehrlich; der Preis pro Clip muss anhand Ihrer eigenen Aufnahmelängen überprüft werden.
Benchmarks
Dreamina Seedance 2.0: Der Anbieter hat keine Benchmark-Werte veröffentlicht.
Veo 3.1: 12 veröffentlicht, aber kein Benchmark, den genug andere Modelle teilen.
Anbieterangaben: ByteDance
Preise
| Dreamina Seedance 2.0 | Veo 3.1 | Δ | |
|---|---|---|---|
| Pro Ausgabesekunde (mit Audio) | - | $0.4 | - |
| Pro Ausgabesekunde (ohne Ton) | - | $0.2 | - |
| Pro 1M Video-Tokens | $7 | - | - |
Die beiden Modelle werden in unterschiedlichen Einheiten abgerechnet, deshalb zeigen wir kein Δ: Für eine Umrechnung müssten wir etwas annehmen, das wir nicht gemessen haben. Oben steht jeder Preis in seiner eigenen Einheit.
Fähigkeiten
| Dreamina Seedance 2.0 | Veo 3.1 | |
|---|---|---|
| Natives Audio | ja | ja |
Spezifikationen
| Dreamina Seedance 2.0 | Veo 3.1 | |
|---|---|---|
| Eingabemodalitäten | Text Bild | Text Bild |
| Ausgabemodalitäten | Video | Video |
| Veröffentlicht | 2026-01 | 2025-10 |
| Auflösung | 480p - 4K (10-bit at 4K) (Bereich) | 720p / 1080p (feste Auswahl) |
| Cliplänge | 4-15 s (Bereich) | 4 / 6 / 8 s (feste Auswahl) |
| Bildrate | 24 fps | 24 fps |
| Seitenverhältnisse | 6 (incl. 16:9, 9:16, 1:1) |
|
| Eingabemodi |
|
|
| Format | .mp4 | .mp4 |
Die Spezifikationen stammen aus der Dokumentation des jeweiligen Anbieters. Veröffentlicht ein Anbieter eine Angabe nicht, lassen wir die Zeile weg, statt sie zu schätzen. Vollständige Quellen: Dreamina Seedance 2.0 · Veo 3.1
Ein Prompt, beide Modelle, gemessen über das Gateway
Vom Modell zurückgegeben 1280×720 Dauer 5s Latenz 133 s
Vom Modell zurückgegeben 1280×720 Dauer 8s Latenz 63 s
Ein Prompt, eine Anfrage pro Modell, keine Wiederholungen und keine Auswahl der besten Ergebnisse: Sie sehen das erste Ergebnis, das jedes Modell geliefert hat. Größe und Dauer haben wir nicht vorgegeben. Jedes Modell hat seinen eigenen Standardwert verwendet, denn eine Anfrage, die auf alle zugeschnitten ist, würde keinem gerecht. Die Dateien wurden für das Web neu kodiert. Beurteilen Sie deshalb Bildaufbau und Prompt-Treue, nicht die Kompression.
Eine Zeile genügt für den Wechsel
Beide IDs stehen in jedem Tab unten. Die beiden hervorgehobenen Zeilen sind die einzige Änderung. Gleicher Endpunkt, gleicher Schlüssel, gleiches Anfrageformat.
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": "veo-3.1-generate-001", # diese Zeile einkommentieren, die darüberliegende auskommentieren
"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: "veo-3.1-generate-001", // diese Zeile einkommentieren, die darüberliegende auskommentieren
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": "veo-3.1-generate-001", # diese Zeile einkommentieren, die darüberliegende auskommentieren
"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": "veo-3.1-generate-001", // diese Zeile einkommentieren, die darüberliegende auskommentieren
"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": "veo-3.1-generate-001", // diese Zeile einkommentieren, die darüberliegende auskommentieren
"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).FAQ
Welches Modell ist günstiger: Dreamina Seedance 2.0 oder Veo 3.1?
Die beiden werden in unterschiedlichen Einheiten abgerechnet, eine einzelne belastbare Zahl gibt es deshalb nicht: Dreamina Seedance 2.0 und Veo 3.1 stehen in der Tabelle oben jeweils in ihrer eigenen Einheit. Vergleichen Sie sie mit Ihrem eigenen Workload. Welche Abwägung dahintersteckt, beschreibt das Fazit oben auf dieser Seite.
Kann ich Dreamina Seedance 2.0 gegen Veo 3.1 A/B-testen, ohne zweimal zu integrieren?
Ja. Beide laufen über denselben OpenAI-kompatiblen Endpunkt mit einem API-Schlüssel. Für den Wechsel ändern Sie nur eine Zeile, den Modellnamen. So können Sie einen Teil des Traffics an jedes Modell schicken und die Kosten direkt vergleichen.
Welche Cliplängen und Auflösungen unterstützen die Modelle?
Die Spezifikationstabelle oben nennt für jedes Modell die veröffentlichten Auflösungen und Cliplängen und kennzeichnet, ob ein Wert eine feste Auswahl oder ein durchgehender Bereich ist. Beides sieht ähnlich aus, kostet aber unterschiedlich viel, weil sich die Abrechnung pro Sekunde mit der Länge multipliziert.