OrcaRouter parla i modelli video Seedance sullo stesso endpoint
submit-and-poll di Kling. Invii model: byteplus/dreamina-seedance-2-0-260128,
OrcaRouter instrada la richiesta all’API upstream Ark
/contents/generations/tasks, e fai polling dello stesso task ID
attraverso OrcaRouter una volta che è completato (tipicamente da 30
secondi a 4 minuti a seconda di duration / resolution / generate_audio).
Modello attualmente disponibile. Solo Seedance 2.0 è provisionato in
questo momento, sotto il nome backend byteplus/dreamina-seedance-2-0-260128.
La tabella delle capacità qui sotto elenca il resto della famiglia
Seedance come riferimento, ma non sono ancora selezionabili nel
playground né instradabili attraverso OrcaRouter — usa
byteplus/dreamina-seedance-2-0-260128 per ogni richiesta per ora.
L’endpoint di submit POST /v1/video/generations e l’endpoint di fetch
GET /v1/video/generations/{task_id} sono condivisi con Kling.
Ciò che cambia è il body della richiesta: Kling usa prompt + image + metadata.{mode, aspect_ratio, image_list, ...}, Seedance usa
prompt + metadata.{content[], ratio, duration, generate_audio, watermark, ...}.
Il prefisso su model seleziona quale schema viene onorato.
Modelli
| Modello | T2V | I2V (primo) | I2V (primo+ultimo) | Rif. multimodale¹ | Editing video² | Generazione audio³ | Durata | Disponibile |
|---|
byteplus/dreamina-seedance-2-0-260128 (2.0) | ✓ | ✓ | ✓ | ✓ completo | ✓ | ✓ | 4 – 15 s | ✓ |
byteplus/seedance-2.0-fast | ✓ | ✓ | ✓ | ✓ completo | ✓ | ✓ | 4 – 15 s | pianificato |
byteplus/seedance-1-5-pro | ✓ | ✓ | ✓ | solo immagine | | ✓ | 4 – 12 s | pianificato |
byteplus/seedance-1-0-pro | ✓ | ✓ | ✓ | solo immagine | | | 2 – 12 s | pianificato |
byteplus/seedance-1-0-pro-fast | ✓ | ✓ | | solo immagine | | | 2 – 12 s | pianificato |
byteplus/seedance-1-0-lite-i2v | | ✓ | ✓ | solo immagine | | | 2 – 12 s | pianificato |
byteplus/seedance-1-0-lite-t2v | ✓ | | | solo immagine | | | 2 – 12 s | pianificato |
¹ Riferimento multimodale = l’array metadata.content[] può trasportare
elementi image_url / video_url / audio_url con marker role
(reference_image / reference_video / reference_audio).
“Completo” significa che sono accettate combinazioni di immagine + video + audio.
² Editing video = passa un elemento contenuto video_url per applicare
edit guidati da prompt al video sorgente (sostituzione soggetto,
inpainting regionale, ecc.).
³ Audio nativo = l’upstream auto-genera una colonna sonora abbinata al
video. Si attiva tramite metadata.generate_audio: true.
L’endpoint di submit è lo stesso per ogni modello — POST /v1/video/generations.
Ciò che cambia è quali campi metadata l’upstream onora secondo la
tabella sopra. Vedi la matrice delle capacità Seedance upstream
per l’elenco autoritativo delle funzionalità per modello.
Inviare un task
Invia una POST a /v1/video/generations con model, prompt e
qualsiasi parametro specifico dell’upstream sotto metadata:
curl https://api.orcarouter.ai/v1/video/generations \
-H "Authorization: Bearer sk-orca-..." \
-H "Content-Type: application/json" \
-d '{
"model": "byteplus/dreamina-seedance-2-0-260128",
"prompt": "A girl holding a fox, the girl opens her eyes, looks gently at the camera, the fox hugs affectionately, the camera slowly pulls out, the girl'\''s hair is blown by the wind",
"metadata": {
"content": [
{ "type": "image_url", "image_url": { "url": "https://example.com/foxgirl.png" } }
],
"ratio": "16:9",
"duration": 5,
"generate_audio": true,
"watermark": false
}
}'
La risposta contiene il task ID (stesso envelope di Kling — OrcaRouter
normalizza tra provider):
{
"id": "task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw",
"task_id": "task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw",
"object": "video",
"model": "byteplus/dreamina-seedance-2-0-260128",
"status": "queued",
"progress": 0,
"created_at": 1777975188
}
OrcaRouter incapsula il tuo prompt come elemento di testo all’interno
dell’array content[] di Seedance automaticamente — non devi passare
tu stesso un elemento {type: "text"}. Qualsiasi elemento di testo che
fornisci in metadata.content[] è sostituito dal tuo prompt di
livello superiore. Gli altri elementi di contenuto (image_url,
video_url, audio_url) passano invariati.
Campi del body
Questi campi vanno dentro metadata. Disponili secondo le tabelle delle
varianti qui sotto.
| Campo | Tipo | Note |
|---|
content | array | Elementi di riferimento multimodale. Ogni elemento: {type, image_url? | video_url? | audio_url?, role?}. Salta se è puro text-to-video. |
ratio | string | Rapporto di aspetto. 16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 21:9 / adaptive. adaptive lo inferisce dall’input. |
duration | integer | Secondi. L’intervallo consentito dipende dal modello — vedi la tabella sopra. |
resolution | string | 480p / 720p / 1080p. Default 720p. 1080p solo su seedance-2.0 / seedance-2.0-fast / seedance-1-5-pro / seedance-1-0-pro / seedance-1-0-pro-fast. |
generate_audio | boolean | Auto-genera una colonna sonora sincronizzata. Default false. Solo su seedance-2.0 / 2.0-fast / 1-5-pro. |
watermark | boolean | Imprime il watermark upstream. Default definito upstream. |
seed | integer | Seme casuale per riproducibilità. |
service_tier | string | default (online) o flex (offline / priorità inferiore, quota più alta). Default default. |
return_last_frame | boolean | Restituisce il frame finale come immagine accanto all’MP4. Default false. |
callback_url | string | URL webhook — riceve i cambi di stato invece (o in aggiunta) al polling. |
Forma degli elementi content[]
Ogni elemento in metadata.content è una di quattro forme:
{ "type": "image_url", "image_url": { "url": "https://..." }, "role": "first_frame" }
{ "type": "video_url", "video_url": { "url": "https://..." }, "role": "reference_video" }
{ "type": "audio_url", "audio_url": { "url": "https://..." }, "role": "reference_audio" }
{ "type": "text", "text": "..." } // automatically replaced by top-level prompt
Valori di role:
role | Scopo |
|---|
first_frame | Ancora questa immagine come primo frame del video generato. |
end_frame | Ancora questa immagine come ultimo frame (usa con first_frame per i2v primo+ultimo). |
reference_image | Riferimento di stile / soggetto (variante riferimento multimodale; può passarne multipli). |
reference_video | Riferimento di stile / movimento, o il video sorgente per editing / estensione. |
reference_audio | Musica di sottofondo o riferimento vocale (generazione audio-video). |
Fai riferimento agli elementi all’interno del prompt con la sintassi
[Image 1], [Video 1], [Audio 1]. L’indice corrisponde all’ordine
dell’array (1-based, per tipo).
Polling dei risultati
Usa il task ID restituito al momento del submit:
curl https://api.orcarouter.ai/v1/video/generations/task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw \
-H "Authorization: Bearer sk-orca-..."
La forma della risposta è incapsulata (identica a Kling):
{
"code": "success",
"message": "",
"data": {
"task_id": "task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw",
"status": "SUCCESS",
"progress": "100%",
"result_url": "https://ark-content-generation-ap-southeast-1.tos-ap-southeast-1.volces.com/.../video.mp4",
"submit_time": 1777975188,
"start_time": 1777975241,
"finish_time": 1777975277,
"fail_reason": ""
}
}
I valori di status sono normalizzati in maiuscolo tra i provider:
| Status | Status Seedance upstream | Significato |
|---|
NOT_START | (transitorio) | Riga del task creata, non ancora inviata |
SUBMITTED | queued | Inviato all’upstream, in attesa nella coda |
IN_PROGRESS | running | L’upstream sta renderizzando |
SUCCESS | succeeded | Fatto. data.result_url contiene l’MP4 |
FAILURE | failed | Fallito. data.fail_reason ha la ragione |
Il progresso è una stringa percentuale ("50%", "100%"), non un intero.
Fai polling ogni 5 - 10 secondi. Una clip 720p di 5 secondi tipicamente
si completa in 30 - 60 secondi; 1080p con audio o clip di 15 secondi /
con riferimento multimodale possono richiedere 3 - 5 minuti.
Il result_url è un URL TOS firmato upstream con un TTL breve — scarica
o riospita prontamente se hai bisogno di una retention lunga.
Varianti di endpoint
Tutte le varianti condividono POST /v1/video/generations. Quale percorso
di funzionalità Seedance serve l’upstream è determinato dagli elementi
metadata.content[] e dai marker role — non dall’URL.
Text-to-video
Solo model + prompt + metadata opzionali. Nessun elemento di
contenuto significa puro text-to-video:
curl https://api.orcarouter.ai/v1/video/generations \
-H "Authorization: Bearer sk-orca-..." \
-H "Content-Type: application/json" \
-d '{
"model": "byteplus/dreamina-seedance-2-0-260128",
"prompt": "Photorealistic style: under a clear blue sky, a vast expanse of white daisy fields stretches out. The camera gradually zooms in on a single daisy with glistening dewdrops on its petals.",
"metadata": {
"ratio": "16:9",
"duration": 5,
"watermark": true
}
}'
Image-to-video — primo frame
Passa un elemento immagine con role: "first_frame":
curl https://api.orcarouter.ai/v1/video/generations \
-H "Authorization: Bearer sk-orca-..." \
-H "Content-Type: application/json" \
-d '{
"model": "byteplus/dreamina-seedance-2-0-260128",
"prompt": "the cat starts dancing energetically",
"metadata": {
"content": [
{ "type": "image_url", "image_url": { "url": "https://example.com/cat.png" }, "role": "first_frame" }
],
"ratio": "adaptive",
"duration": 5,
"generate_audio": true
}
}'
Image-to-video — primo e ultimo frame
Due elementi immagine, uno ciascuno per first_frame e end_frame:
curl https://api.orcarouter.ai/v1/video/generations \
-H "Authorization: Bearer sk-orca-..." \
-H "Content-Type: application/json" \
-d '{
"model": "byteplus/dreamina-seedance-2-0-260128",
"prompt": "Create a 360-degree orbiting camera shot from start to end frame.",
"metadata": {
"content": [
{ "type": "image_url", "image_url": { "url": "https://example.com/start.jpg" }, "role": "first_frame" },
{ "type": "image_url", "image_url": { "url": "https://example.com/end.jpg" }, "role": "end_frame" }
],
"ratio": "16:9",
"duration": 6
}
}'
Riferimento multimodale — immagine + video + audio
Combina elementi reference_image / reference_video / reference_audio.
Fai riferimento ad essi nel prompt con indici [Image N] / [Video N] /
[Audio N] (1-based, per tipo):
curl https://api.orcarouter.ai/v1/video/generations \
-H "Authorization: Bearer sk-orca-..." \
-H "Content-Type: application/json" \
-d '{
"model": "byteplus/dreamina-seedance-2-0-260128",
"prompt": "Use the first-person POV framing from [Video 1] throughout, and use [Audio 1] as the background music. First-person POV fruit tea promotional ad: [Image 1] hands pick a dew-covered apple; [Image 2] holds the finished drink up to the camera.",
"metadata": {
"content": [
{ "type": "image_url", "image_url": { "url": "https://example.com/tea_pic1.jpg" }, "role": "reference_image" },
{ "type": "image_url", "image_url": { "url": "https://example.com/tea_pic2.jpg" }, "role": "reference_image" },
{ "type": "video_url", "video_url": { "url": "https://example.com/tea_video1.mp4" }, "role": "reference_video" },
{ "type": "audio_url", "audio_url": { "url": "https://example.com/tea_audio1.mp3" }, "role": "reference_audio" }
],
"ratio": "16:9",
"duration": 11,
"generate_audio": true,
"watermark": false
}
}'
Disponibile su seedance-2.0 e seedance-2.0-fast (combinazioni complete
di immagine + video + audio); seedance-1-5-pro e seedance-1-0-*
accettano solo elementi reference_image.
Editing / estensione video
Passa {type: "video_url", role: "reference_video"} e chiedi al prompt
di modificarlo o estenderlo:
curl https://api.orcarouter.ai/v1/video/generations \
-H "Authorization: Bearer sk-orca-..." \
-H "Content-Type: application/json" \
-d '{
"model": "byteplus/dreamina-seedance-2-0-260128",
"prompt": "Change all the fruits in [Video 1] into fresh fruits.",
"metadata": {
"content": [
{ "type": "video_url", "video_url": { "url": "https://example.com/source.mp4" }, "role": "reference_video" }
],
"ratio": "adaptive",
"duration": 6
}
}'
Disponibile solo su seedance-2.0 e seedance-2.0-fast.
Webhook
Passa metadata.callback_url: "https://your.domain/webhook" per ricevere
una POST quando il task transita a SUCCESS o FAILURE. Il payload
rispecchia la risposta del polling. Se imposti sia polling sia callback,
otterrai entrambi — sono indipendenti.
Fatturazione
OrcaRouter trasferisce l’addebito upstream per task in token senza
ricarico. Il costo finale corrisponde al listino pubblicato da
ByteDance Ark (i completion_tokens / total_tokens upstream dal
risultato del task vengono convertiti in quota al tasso per-token del
modello impostato nella tua configurazione Channel Margin).
Un piccolo pre-consumo viene riservato al momento del submit; la
differenza viene regolata al successo. Vedi
Operazioni / Fatturazione e utilizzo.
Vedi anche