Seedance 2.5
Genera, modifica ed estendi video con Seedance 2.5 tramite l'API di attività ufficiale ModelArk: fino a 30 secondi a 1080p, con fino a 30 riferimenti immagine, 10 video e 10 audio.
Seedance 2.5 è il modello di generazione video più recente di ByteDance (Dreamina Seedance 2.5). Invia il corpo dell'attività ufficiale ModelArk, conserva l'identificativo dell'attività restituito e leggi il video finito dall'attività. Immagini, video e audio vanno in content come URL.
ID modello
| ID modello | Risoluzioni | Durata |
|---|---|---|
dreamina-seedance-2-5 | 480p, 720p, 1080p | 4–30 secondi, oppure automatica |
Consulta la pagina del modello per i prezzi attuali.
Esempio rapido
curl https://api.seedrouter.ai/v1/contents/generations/tasks \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-5",
"content": [{"type": "text", "text": "A red paper boat drifts across a calm pond at sunrise, slow dolly-in"}],
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"generate_audio": true
}'Endpoint
POST https://api.seedrouter.ai/v1/contents/generations/tasks| Header | Valore |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Il corpo è la richiesta ufficiale ModelArk «crea un'attività di generazione video». Se chiami già ModelArk, cambia solo l'URL di base in https://api.seedrouter.ai/v1 e la chiave API. La risposta è {"id": "task_..."}, non il video finito. Tieni le chiavi API nel codice lato server.
Parametri
| Nome | Tipo | Obbligatorio | Predefinito | Note |
|---|---|---|---|---|
model | string | Sì | — | dreamina-seedance-2-5. |
content | object[] | Sì | — | Il prompt e i media; vedi sotto. |
resolution | enum | No | 720p | 480p, 720p, 1080p. |
ratio | enum | No | adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive. Deve essere adaptive (od omesso) con un primo fotogramma e per edit ed extend. |
duration | integer | No | -1 | 4–30 secondi, oppure -1 per lasciar scegliere il modello. Deve essere -1 per edit. |
generate_audio | boolean | No | true | Genera l'audio insieme al video. |
watermark | boolean | No | false | Aggiunge una filigrana. |
return_last_frame | boolean | No | false | Restituisce anche il fotogramma finale come URL di immagine. |
output_format | enum | No | mp4 | mp4 o mov. |
omni_reference_task_type | enum | No | auto | auto, reference, edit, extend. edit ed extend richiedono un video di riferimento. |
execution_expires_after | integer | No | 172800 | 3600–259200 secondi. Un'attività ancora non conclusa dopo questo tempo diventa expired e non viene addebitata. |
priority | integer | No | 0 | 0–9. |
safety_identifier | string | No | — | 1–64 caratteri che identificano il tuo utente finale. Va bene anche un hash. |
service_tier | enum | No | default | Solo default. |
content_filter | boolean | No | true | Estensione di SeedRouter. false disattiva il filtro dei contenuti per questa richiesta. |
Elementi di content
| Elemento | Forma | Ruolo | Limite |
|---|---|---|---|
| Testo | {"type": "text", "text": "..."} | — | Uno. |
| Immagine | {"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."} | first_frame, last_frame, reference_image | Fino a 30 immagini di riferimento. |
| Video | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | Fino a 10. |
| Audio | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | Fino a 10. |
I campi sconosciuti vengono rifiutati. Non supportati: seed, callback_url (interroga invece l'attività), draft e draft_task, tools e i parametri frames e camera_fixed esclusivi di 1.x. Le attività non possono essere annullate né eliminate.
Modalità
La modalità dipende dagli elementi di content; non esiste un parametro di modalità.
| Modalità | content |
|---|---|
| Da testo a video | un elemento di testo |
| Primo fotogramma | testo (facoltativo) + un'immagine con ruolo first_frame, oppure un'immagine senza ruolo |
| Primo e ultimo fotogramma | testo (facoltativo) + un'immagine first_frame + un'immagine last_frame |
| Riferimento multimodale | testo + qualsiasi combinazione di elementi reference_image, reference_video e reference_audio |
| Modificare un video | testo + un reference_video, con omni_reference_task_type: "edit" |
| Estendere un video | testo + un reference_video, con omni_reference_task_type: "extend" |
Le modalità con primo fotogramma non possono essere combinate con elementi di riferimento. Con più immagini o con altri media, ogni immagine richiede un role.
Esempio con riferimenti
curl https://api.seedrouter.ai/v1/contents/generations/tasks \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dreamina-seedance-2-5",
"content": [
{"type": "text", "text": "The character from the image walks through the market in the video, same camera move"},
{"type": "image_url", "image_url": {"url": "https://example.com/character.png"}, "role": "reference_image"},
{"type": "video_url", "video_url": {"url": "https://example.com/market.mp4"}, "role": "reference_video"}
],
"ratio": "adaptive",
"duration": 8
}'Sostituisci gli URL di esempio con file tuoi accessibili.
Input multimediali
Questa API accetta solo riferimenti tramite URL. Non sono accettati base64, URL data:, identificativi asset:// e caricamenti multipart. Il Playground carica i file selezionati nello storage prima di inviarne gli URL.
I media devono essere URL HTTP(S) pubblici e rispettare i limiti ufficiali del modello:
| Media | Formati | Limiti |
|---|---|---|
| Immagine | JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIF | Meno di 30 MB; larghezza e altezza 300–6000 px; rapporto d'aspetto (larghezza / altezza) 0,4–2,5; 1–30 immagini di riferimento |
| Video | MP4, MOV (H.264 o H.265) | 2–30 secondi ciascuno (4–30 secondi per edit), fino a 10, al massimo 30 secondi in totale; al massimo 200 MB; 24–60 FPS; larghezza e altezza 300–6000 px; rapporto d'aspetto 0,4–2,5; 407.696–8.295.044 pixel (larghezza × altezza) |
| Audio | WAV, MP3 | 2–30 secondi ciascuno, fino a 10, al massimo 30 secondi in totale; al massimo 15 MB |
Il modello non supporta immagini e video di riferimento che contengono volti umani reali.
I media vengono controllati all'avvio dell'attività, prima di qualsiasi generazione. Un'attività i cui media violano uno di questi limiti termina come failed con invalid_request_error e un messaggio che indica la regola, ad esempio The request was rejected: content reference videos must total at most 15 seconds., e non viene addebitata. Un file che in quel momento non può essere letto viene passato al modello, che lo accetta o lo rifiuta; in entrambi i casi un'attività fallita non viene addebitata.
Fattori di costo
Consulta la sezione prezzi del modello per le tariffe correnti. Seedance 2.5 fattura i token video, l'unità ufficiale:
video tokens = (output seconds + reference video seconds) × width × height × 24 / 1024La tariffa per milione di token dipende dalla risoluzione di output e dalla presenza di un video di riferimento nella richiesta; una richiesta con video di riferimento applica una tariffa più bassa a tutti i suoi token. Gli input di testo, immagine e audio non vengono fatturati. In 16:9, un secondo corrisponde a 9.607,5 token a 480p (854×480), 21.600 a 720p, 48.600 a 1080p.
L'addebito segue i token dichiarati dal video finito (usage.completion_tokens), quindi duration: -1 viene fatturato sulla durata effettivamente generata. Le clip renderizzate durano leggermente più di quanto richiesto: una richiesta di 5 secondi a 720p in 16:9 renderizza 121 fotogrammi e dichiara 108.900 token anziché 108.000. Gli addebiti definitivi sono nello storico di utilizzo del tuo account. Le attività fallite e scadute non vengono addebitate.
Schema di output
L'invio restituisce l'identificativo dell'attività:
{"id": "task_..."}Recuperare l'attività
curl https://api.seedrouter.ai/v1/contents/generations/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Interroga ogni 10–20 secondi finché status non diventa succeeded, failed o expired. Un timeout di rete durante il polling non significa che la generazione sia fallita: conserva l'identificativo dell'attività e riprendi il controllo. Non creare un'altra attività per verificare l'avanzamento.
Esempio di polling completo
Esegui questo dopo l'esempio di invio in Python qui sopra.
import time
deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
result = requests.get(
f"https://api.seedrouter.ai/v1/contents/generations/tasks/{task_id}",
headers={"Authorization": f"Bearer {os.environ['SEEDROUTER_API_KEY']}"},
timeout=30,
)
result.raise_for_status()
task = result.json()
if task["status"] == "succeeded":
print(task["content"]["video_url"])
break
if task["status"] in ("failed", "expired"):
raise RuntimeError(task["error"]["message"])
time.sleep(15)
else:
raise TimeoutError(f"Still waiting. Resume polling task {task_id}.")Attività riuscita
{
"id": "task_...",
"model": "dreamina-seedance-2-5",
"status": "succeeded",
"content": {
"video_url": "https://static.seedrouter.ai/media/tasks/task_example/0.mp4",
"last_frame_url": "https://static.seedrouter.ai/media/tasks/task_example/last_frame/0.jpg"
},
"usage": {"completion_tokens": 108900, "total_tokens": 108900},
"seed": 42,
"resolution": "720p",
"ratio": "16:9",
"duration": 5,
"framespersecond": 24,
"generate_audio": true,
"draft": false,
"output_format": "mp4",
"service_tier": "default",
"execution_expires_after": 172800,
"priority": 0,
"created_at": 1790321515,
"updated_at": 1790321652
}| Campo | Significato |
|---|---|
id | Conserva questo identificativo per le interrogazioni successive. |
status | queued, running, succeeded, failed o expired. |
content.video_url | Il video generato. |
content.last_frame_url | Il fotogramma finale, quando return_last_frame è true. |
usage.completion_tokens | Token video del video finito; la quantità fatturata. |
duration, resolution, ratio, framespersecond, seed | I valori effettivamente renderizzati; seed è quello scelto dal modello. |
created_at, updated_at | Timestamp Unix in secondi. |
error | {"code", "message"} per un'attività fallita o scaduta. |
Gli URL dei video sono ospitati sul nostro storage. Salva il file nel tuo storage se ti serve una copia duratura.
Elencare le attività
curl "https://api.seedrouter.ai/v1/contents/generations/tasks?page_num=1&page_size=20&filter.status=succeeded" \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Restituisce {"total": N, "items": [...]} con gli oggetti attività degli ultimi 7 giorni, dal più recente. page_num e page_size accettano valori 1–500 (predefiniti 1 e 20). Filtri: filter.status, filter.model, filter.task_ids (ripetibile) e filter.service_tier.
Errori
Le richieste rifiutate prima della creazione di un'attività restituiscono un errore HTTP con un oggetto error e non vengono addebitate. Un'attività che fallisce dopo l'accettazione restituisce HTTP 200 all'interrogazione, con status: "failed" (o "expired") e un oggetto error. L'output bloccato dal filtro dei contenuti fallisce con content_policy_violation; un'attività che supera execution_expires_after termina come expired con task_expired.
Vedi il catalogo errori comune per codici, stati HTTP e indicazioni sui tentativi.
{
"id": "task_...",
"model": "dreamina-seedance-2-5",
"status": "failed",
"error": {
"code": 60001,
"message": "The request was rejected by the content policy. Please revise the prompt or input images."
}
}Se è l'invio stesso ad andare in timeout, controlla l'elenco delle attività prima di inviare di nuovo: la prima richiesta potrebbe essere già stata accettata.
Suggerimenti
- Descrivi il soggetto, l'azione, il movimento di camera e l'illuminazione con frasi complete.
- Fai le bozze a 480p con una
durationbreve, poi renderizza la versione scelta a una risoluzione più alta. - Concatena le inquadrature con
return_last_frame: usa il fotogramma restituito comefirst_framedell'attività successiva. - Per modificare un filmato, imposta
omni_reference_task_typesuedite descrivi solo ciò che deve cambiare.
