Vai al contenuto principale
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

ModelloT2VI2V (primo)I2V (primo+ultimo)Rif. multimodale¹Editing video²Generazione audio³DurataDisponibile
byteplus/dreamina-seedance-2-0-260128 (2.0)✓ completo4 – 15 s
byteplus/seedance-2.0-fast✓ completo4 – 15 spianificato
byteplus/seedance-1-5-prosolo immagine4 – 12 spianificato
byteplus/seedance-1-0-prosolo immagine2 – 12 spianificato
byteplus/seedance-1-0-pro-fastsolo immagine2 – 12 spianificato
byteplus/seedance-1-0-lite-i2vsolo immagine2 – 12 spianificato
byteplus/seedance-1-0-lite-t2vsolo immagine2 – 12 spianificato
¹ 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.
CampoTipoNote
contentarrayElementi di riferimento multimodale. Ogni elemento: {type, image_url? | video_url? | audio_url?, role?}. Salta se è puro text-to-video.
ratiostringRapporto di aspetto. 16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 21:9 / adaptive. adaptive lo inferisce dall’input.
durationintegerSecondi. L’intervallo consentito dipende dal modello — vedi la tabella sopra.
resolutionstring480p / 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_audiobooleanAuto-genera una colonna sonora sincronizzata. Default false. Solo su seedance-2.0 / 2.0-fast / 1-5-pro.
watermarkbooleanImprime il watermark upstream. Default definito upstream.
seedintegerSeme casuale per riproducibilità.
service_tierstringdefault (online) o flex (offline / priorità inferiore, quota più alta). Default default.
return_last_framebooleanRestituisce il frame finale come immagine accanto all’MP4. Default false.
callback_urlstringURL 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:
roleScopo
first_frameAncora questa immagine come primo frame del video generato.
end_frameAncora questa immagine come ultimo frame (usa con first_frame per i2v primo+ultimo).
reference_imageRiferimento di stile / soggetto (variante riferimento multimodale; può passarne multipli).
reference_videoRiferimento di stile / movimento, o il video sorgente per editing / estensione.
reference_audioMusica 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:
StatusStatus Seedance upstreamSignificato
NOT_START(transitorio)Riga del task creata, non ancora inviata
SUBMITTEDqueuedInviato all’upstream, in attesa nella coda
IN_PROGRESSrunningL’upstream sta renderizzando
SUCCESSsucceededFatto. data.result_url contiene l’MP4
FAILUREfailedFallito. 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