Dreamina Seedance 2.0 vs Veo 3.1
Quale scegliere e quando
Entrambi accettano input di testo o immagine e restituiscono video in .mp4 a 24 fps con audio nativo e guida basata sul primo frame o sul primo/ultimo frame, quindi la vera differenza è tra l'ampiezza delle opzioni e la prevedibilità: dreamina-seedance-2-0-260128 (2026-01) spazia da 480p a 4K con qualsiasi durata compresa tra 4-15 s e 6 rapporti d'aspetto, mentre veo-3.1-generate-001 (2025-10) è fissato a 720p/1080p, 4/6/8 s e formati 16:9 o 9:16, con fino a 2 immagini guida. Nota che i due modelli fatturano in unità diverse - $7 per milione di token di output contro $0.2 per secondo senza audio e $0.4 con - quindi nessuna conversione singola è onesta; il prezzo per clip deve essere verificato in base alla durata delle tue riprese.
Benchmark
Dreamina Seedance 2.0: il provider non ha pubblicato risultati di benchmark.
Veo 3.1: 12 pubblicati, ma nessun benchmark in comune con abbastanza altri modelli per fare un confronto.
Dati pubblicati dai provider: ByteDance
Prezzi
| Dreamina Seedance 2.0 | Veo 3.1 | Δ | |
|---|---|---|---|
| Al secondo di output (con audio) | - | $0.4 | - |
| Al secondo di output (senza audio) | - | $0.2 | - |
| Per 1M token video | $7 | - | - |
Questi due modelli si pagano in unità diverse, quindi non mostriamo alcun Δ: per convertirle servirebbe un'ipotesi che non abbiamo misurato. Qui sopra ogni listino è riportato nella propria unità.
Funzionalità
| Dreamina Seedance 2.0 | Veo 3.1 | |
|---|---|---|
| Audio nativo | sì | sì |
Specifiche
| Dreamina Seedance 2.0 | Veo 3.1 | |
|---|---|---|
| Modalità di input | testo immagine | testo immagine |
| Modalità di output | video | video |
| Rilascio | 2026-01 | 2025-10 |
| Risoluzione | 480p - 4K (10-bit at 4K) (intervallo) | 720p / 1080p (insieme fisso) |
| Durata della clip | 4-15 s (intervallo) | 4 / 6 / 8 s (insieme fisso) |
| Frame rate | 24 fps | 24 fps |
| Proporzioni | 6 (incl. 16:9, 9:16, 1:1) |
|
| Modalità di input |
|
|
| Formato | .mp4 | .mp4 |
Le specifiche sono riprese dalla documentazione di ciascun provider; se un provider non pubblica un dato, la riga viene omessa e non dedotta. Fonti complete: Dreamina Seedance 2.0 · Veo 3.1
Un solo prompt, entrambi i modelli, misurati attraverso il gateway
Restituito dal modello 1280×720 Durata 5s latenza 133 s
Restituito dal modello 1280×720 Durata 8s latenza 63 s
Un prompt, una richiesta per modello, nessun nuovo tentativo e nessuna selezione: è il primo risultato restituito da ciascun modello. Non abbiamo fissato né le dimensioni né la durata: ogni modello ha usato il proprio default, perché una richiesta costruita per andare bene a tutti non avrebbe valorizzato nessuno. I file sono stati ricodificati per il web, quindi valuta la composizione e l'aderenza al prompt, non la compressione.
Passa dall'uno all'altro cambiando una sola riga
In ogni scheda qui sotto ci sono entrambi gli id: le due righe evidenziate sono l'unica modifica. Stesso endpoint, stessa chiave, stessa struttura della richiesta.
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", # decommenta questa riga, commenta quella sopra
"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", // decommenta questa riga, commenta quella sopra
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", # decommenta questa riga, commenta quella sopra
"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", // decommenta questa riga, commenta quella sopra
"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", // decommenta questa riga, commenta quella sopra
"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
Qual è il più economico, Dreamina Seedance 2.0 o Veo 3.1?
Si pagano in unità diverse, quindi non esiste un numero unico che sia corretto. Nella tabella qui sopra Dreamina Seedance 2.0 e Veo 3.1 compaiono ciascuno nella propria unità. Confrontali sul tuo carico di lavoro: il compromesso pratico è descritto nel verdetto in cima alla pagina.
Posso fare un A/B test di Dreamina Seedance 2.0 contro Veo 3.1 senza due integrazioni?
Sì. Si chiamano entrambi dallo stesso endpoint compatibile con OpenAI, con una sola chiave API. Per passare dall'uno all'altro basta cambiare la stringa del modello in una riga, quindi puoi mandare una parte del traffico a ciascuno e confrontare direttamente i costi.
Quali durate delle clip e quali risoluzioni supportano?
La tabella delle specifiche qui sopra elenca le risoluzioni e le durate delle clip pubblicate per ciascun modello, e indica se un valore è un insieme fisso di opzioni o un intervallo continuo. Le due cose si somigliano ma incidono in modo diverso sul prezzo, perché con la fatturazione al secondo il costo cresce con la durata.