Seedance 1.5 Pro è il modello di generazione video con sincronizzazione audio-video di ByteDance su BytePlus ModelArk, descritto ufficialmente come costruito appositamente per la generazione nativa e congiunta di audio e video, e copre il text-to-video oltre all'image-to-video con primo fotogramma e con primo e ultimo fotogramma.
- Input
- testo immagine
- Output
- video $2.4/M
Benchmark
Seedance 1.5 Pro: 12 pubblicati, ma nessun benchmark in comune con abbastanza altri modelli per fare un confronto.
Dati pubblicati dai provider: ByteDance
Il prezzo a confronto
Dove si colloca il prezzo tra 5 modelli confrontabili
La barra mostra dove si colloca il prezzo di questo modello tra tutti i modelli dello stesso tipo su Synthorai. Alle due estremità sono indicati il più economico e il più caro. Sono tariffe base; gli sconti per batch, regione e scrittura in cache sono nella pagina dei prezzi.
Specifiche e limiti
Video
| Risoluzione | 480p / 720p / 1080p Un insieme fisso di opzioni, non un intervallo. |
|---|---|
| Durata della clip | 4-12 s Un intervallo continuo, non un insieme fisso. |
| Frame rate | 24 fps |
| Proporzioni | 6 (tra cui 16:9, 9:16, 1:1) |
| Input video | text-to-video · image-to-video con primo fotogramma e con primo/ultimo fotogramma |
| Audio nativo | Sì, genera audio |
| Formato | .mp4 |
Modello
| Modalità | testo + immagine → video |
|---|
- Generazione video con sincronizzazione audio-video: text-to-video + image-to-video con primo fotogramma e con primo e ultimo fotogramma a 480p/720p/1080p, 24 fps, 4-12 s, sei proporzioni, .mp4
- generate_audio alterna output con audio e output muto a tariffe per token distinte
- l'unico Seedance con la draft mode (anteprima rapida 480p a token ridotti)
- data di versione 251215 codificata nell'id del modello
Un solo prompt, misurato attraverso il gateway
Seedance 1.5 Pro
Restituito dal modello 1280×720 Durata 5s latenza 49 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.
Usa Seedance 1.5 Pro in 30 secondi
API asincrona a job: crei un task e fai polling, oppure tieni aperta la richiesta 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).Informazioni su Seedance 1.5 Pro
- BytePlus evidenzia una sincronizzazione labiale al millisecondo per dialoghi multi-parlante in mandarino e in diversi dialetti cinesi, oltre che in inglese, giapponese, coreano, spagnolo e indonesiano, insieme a suono ambientale, foley delle azioni, strumenti e musica di sottofondo.
- Produce clip .mp4 in 480p, 720p o 1080p a 24 fps, lunghe 4-12 secondi, in sei proporzioni, e accetta -1 come durata per lasciare la scelta al modello.
- Il suo interruttore generate_audio seleziona output sonoro o silenzioso, i due sono fatturati a tariffe per token separate con la generazione silenziosa a metà della tariffa audio, e l'audio è attivo di default, quindi si ottiene il percorso più costoso se non si sceglie diversamente.
- È anche l'unico modello Seedance con la modalità bozza, un'opzione di anteprima rapida in 480p a token ridotti: le bozze sono solo in 480p, non possono restituire un ultimo fotogramma e restano valide per sette giorni, dopodiché promuoverne una a rendering finale riutilizza prompt, immagine, seed, proporzione, durata e impostazione audio della bozza.
- Synthorai lo serve tramite l'API di job asincrona /v1/videos: crea un task, interroga il suo URL di stato oppure tieni aperta la chiamata con Prefer: wait.
FAQ
L'API di Seedance 1.5 Pro si può provare gratis?
Sì: i nuovi account ricevono 10 chiamate di prova e fino a $1 di credito gratuito, senza bisogno di carta. Abbastanza per provare Seedance 1.5 Pro sul tuo carico di lavoro reale prima di aggiungere un metodo di pagamento.
In cosa eccelle Seedance 1.5 Pro?
Output sonoro o silenzioso a tariffe separate; 480p a 1080p, 4-12 secondi; unico Seedance con modalità bozza. Il quadro completo è nella sezione «Informazioni», ripreso dalle note di rilascio ufficiali del provider.
Quanto costa Seedance 1.5 Pro?
Su Synthorai Seedance 1.5 Pro costa $2.4 per milione di token video (token video ≈ larghezza × altezza × 24fps × secondi ÷ 1024). Si pagano solo le generazioni riuscite: a consumo, senza sovrapprezzo di piattaforma e senza abbonamento.
Come genero video con l'API di Seedance 1.5 Pro?
Invia una POST a /v1/videos su Synthorai con model="seedance-1-5-pro-251215" per creare un job asincrono, poi fai polling sul task (o tieni aperta la richiesta con l'header Prefer: wait) finché l'URL del video non è pronto. Non serve alcun SDK del provider.
Come ottengo l'accesso a Seedance 1.5 Pro?
Fai puntare l'SDK OpenAI che usi già a base_url="https://synthorai.io/v1", imposta model="seedance-1-5-pro-251215" e hai finito: una sola chiave API vale per tutti i modelli del gateway.
Modelli correlati
Confronta
Ogni valore di questa pagina è ripreso dalla documentazione del provider (il link è qui sopra) e riporta la data dell'ultima verifica. I prezzi sono confrontati sull'intero catalogo; per le specifiche che ogni provider definisce a modo suo indichiamo la differenza invece di metterle in un grafico. Qui non c'è nulla di misurato da noi e non assegniamo punteggi.