O OrcaRouter fala os modelos de vídeo Seedance no mesmo endpoint de
submit-e-polling que o Kling. Você envia
model: byteplus/dreamina-seedance-2-0-260128, o OrcaRouter encaminha
a requisição para a API upstream Ark /contents/generations/tasks, e
você faz polling do mesmo ID de tarefa de volta pelo OrcaRouter
quando estiver pronto (tipicamente 30 segundos a 4 minutos, dependendo
de duração / resolução / generate_audio).
Modelo atualmente disponível. Apenas Seedance 2.0 está
provisionado no momento, sob o nome de backend
byteplus/dreamina-seedance-2-0-260128. A tabela de capacidades
abaixo lista o resto da família Seedance para referência, mas eles
ainda não são selecionáveis no playground nem roteáveis pelo
OrcaRouter — use byteplus/dreamina-seedance-2-0-260128 para toda
requisição por enquanto.
O endpoint de submit POST /v1/video/generations e o endpoint de
fetch GET /v1/video/generations/{task_id} são compartilhados com
Kling. O que muda é o corpo da requisição:
Kling usa prompt + image + metadata.{mode, aspect_ratio, image_list, ...},
Seedance usa prompt + metadata.{content[], ratio, duration, generate_audio, watermark, ...}. O prefixo em model seleciona qual
esquema é honrado.
Modelos
| Modelo | T2V | I2V (primeiro) | I2V (primeiro+último) | Ref. multimodal¹ | Edição de vídeo² | Gerar áudio³ | Duração | Disponível |
|---|
byteplus/dreamina-seedance-2-0-260128 (2.0) | ✓ | ✓ | ✓ | ✓ completa | ✓ | ✓ | 4 – 15 s | ✓ |
byteplus/seedance-2.0-fast | ✓ | ✓ | ✓ | ✓ completa | ✓ | ✓ | 4 – 15 s | planejado |
byteplus/seedance-1-5-pro | ✓ | ✓ | ✓ | apenas imagem | | ✓ | 4 – 12 s | planejado |
byteplus/seedance-1-0-pro | ✓ | ✓ | ✓ | apenas imagem | | | 2 – 12 s | planejado |
byteplus/seedance-1-0-pro-fast | ✓ | ✓ | | apenas imagem | | | 2 – 12 s | planejado |
byteplus/seedance-1-0-lite-i2v | | ✓ | ✓ | apenas imagem | | | 2 – 12 s | planejado |
byteplus/seedance-1-0-lite-t2v | ✓ | | | apenas imagem | | | 2 – 12 s | planejado |
¹ Referência multimodal = o array metadata.content[] pode carregar
itens image_url / video_url / audio_url com marcadores role
(reference_image / reference_video / reference_audio).
“Completa” significa que combinações de imagem + vídeo + áudio são
aceitas.
² Edição de vídeo = passe um item de conteúdo video_url para
aplicar edições orientadas por prompt ao vídeo fonte (troca de
sujeito, inpainting de região, etc.).
³ Áudio nativo = o upstream auto-gera uma trilha sonora correspondente
ao vídeo. Alternar via metadata.generate_audio: true.
O endpoint de submit é o mesmo para todos os modelos —
POST /v1/video/generations. O que muda é quais campos metadata
o upstream honra, conforme a tabela acima. Veja a
matriz de capacidades do Seedance
upstream para a lista autoritativa de recursos por modelo.
Submeter uma tarefa
Envie um POST para /v1/video/generations com model, prompt e
quaisquer parâmetros específicos do upstream sob 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
}
}'
A resposta carrega o ID da tarefa (mesmo envelope que o Kling — o
OrcaRouter normaliza entre provedores):
{
"id": "task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw",
"task_id": "task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw",
"object": "video",
"model": "byteplus/dreamina-seedance-2-0-260128",
"status": "queued",
"progress": 0,
"created_at": 1777975188
}
O OrcaRouter envolve seu prompt como o item de texto dentro do
array content[] do Seedance automaticamente — você não precisa
passar um item {type: "text"} por conta própria. Qualquer item de
texto que você fornecer em metadata.content[] é substituído pelo
seu prompt de nível superior. Outros itens de conteúdo
(image_url, video_url, audio_url) passam inalterados.
Campos do corpo
Estes campos vão dentro de metadata. Organize-os conforme as tabelas
de variantes abaixo.
| Campo | Tipo | Notas |
|---|
content | array | Itens de referência multimodal. Cada item: {type, image_url? | video_url? | audio_url?, role?}. Omita se for puramente text-to-video. |
ratio | string | Proporção. 16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 21:9 / adaptive. adaptive infere a partir do input. |
duration | integer | Segundos. Faixa permitida depende do modelo — veja a tabela acima. |
resolution | string | 480p / 720p / 1080p. Padrão 720p. 1080p apenas em seedance-2.0 / seedance-2.0-fast / seedance-1-5-pro / seedance-1-0-pro / seedance-1-0-pro-fast. |
generate_audio | boolean | Auto-gera uma trilha sonora sincronizada. Padrão false. Apenas em seedance-2.0 / 2.0-fast / 1-5-pro. |
watermark | boolean | Imprime a marca d’água do upstream. Padrão definido pelo upstream. |
seed | integer | Seed aleatório para reprodutibilidade. |
service_tier | string | default (online) ou flex (offline / prioridade menor, cota maior). Padrão é default. |
return_last_frame | boolean | Retorna o frame final como imagem ao lado do MP4. Padrão false. |
callback_url | string | URL de webhook — recebe mudanças de status em vez de (ou junto com) o polling. |
Formato do item content[]
Cada item em metadata.content é um de quatro formatos:
{ "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": "..." } // automaticamente substituído pelo prompt de nível superior
Valores de role:
role | Propósito |
|---|
first_frame | Ancorar esta imagem como o primeiro frame do vídeo gerado. |
end_frame | Ancorar esta imagem como o último frame (use com first_frame para i2v primeiro+último frame). |
reference_image | Referência de estilo / sujeito (variante de referência multimodal; pode passar múltiplas). |
reference_video | Referência de estilo / movimento, ou o vídeo fonte para edição / extensão. |
reference_audio | Música de fundo ou referência de voz (geração áudio-vídeo). |
Referencie itens dentro do prompt com sintaxe [Image 1],
[Video 1], [Audio 1]. O índice combina com a ordem do array
(1-based, com escopo por tipo).
Fazer polling pelos resultados
Use o ID da tarefa retornado no momento do submit:
curl https://api.orcarouter.ai/v1/video/generations/task_9q9oz6tjtgABYWC1QIqoz3sscgVz7ycw \
-H "Authorization: Bearer sk-orca-..."
O formato da resposta é envelopado (idêntico ao 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": ""
}
}
Valores de status são normalizados para maiúsculas entre provedores:
| Status | Status do upstream Seedance | Significado |
|---|
NOT_START | (transitório) | Linha da tarefa criada, ainda não despachada |
SUBMITTED | queued | Enviada para o upstream, aguardando na fila |
IN_PROGRESS | running | Upstream está renderizando |
SUCCESS | succeeded | Concluído. data.result_url carrega o MP4 |
FAILURE | failed | Falhou. data.fail_reason tem o motivo |
O progresso é uma string percentual ("50%", "100%"), não um
inteiro.
Faça polling a cada 5 - 10 segundos. Um clipe 720p de 5 segundos
tipicamente completa em 30 - 60 segundos; 1080p com áudio ou clipes
de 15 segundos / referência multimodal podem levar 3 - 5 minutos.
O result_url é uma URL TOS assinada pelo upstream com TTL curto —
baixe ou rehospede prontamente se precisar de retenção longa.
Variantes de endpoint
Todas as variantes compartilham POST /v1/video/generations. Qual
caminho de recurso Seedance o upstream serve é determinado pelos
itens metadata.content[] e marcadores role — não pela URL.
Text-to-video
Apenas model + prompt + metadata opcional. Sem itens de conteúdo
significa text-to-video puro:
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 — primeiro frame
Passe um item de imagem com 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 — primeiro e último frame
Dois itens de imagem, um para first_frame e outro para 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
}
}'
Referência multimodal — imagem + vídeo + áudio
Combine itens reference_image / reference_video / reference_audio.
Referencie-os no prompt com índices [Image N] / [Video N] /
[Audio N] (1-based, por 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
}
}'
Disponível em seedance-2.0 e seedance-2.0-fast (combinações
completas de imagem + vídeo + áudio); seedance-1-5-pro e
seedance-1-0-* aceitam apenas itens reference_image.
Edição / extensão de vídeo
Passe {type: "video_url", role: "reference_video"} e peça ao prompt
para modificá-lo ou estendê-lo:
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
}
}'
Disponível apenas em seedance-2.0 e seedance-2.0-fast.
Webhooks
Passe metadata.callback_url: "https://your.domain/webhook" para
receber um POST quando a tarefa transitar para SUCCESS ou
FAILURE. A carga útil espelha a resposta de polling. Se você
definir tanto polling quanto um callback, você recebe os dois — eles
são independentes.
Faturamento
O OrcaRouter repassa a cobrança de tokens por tarefa do upstream sem
margem. O custo final corresponde ao tarifário publicado pelo
ByteDance Ark (completion_tokens / total_tokens do upstream a
partir do resultado da tarefa são convertidos em cota pela taxa por
token do modelo definida na sua configuração de Channel Margin).
Uma pequena reserva de pré-consumo é feita no momento do submit; a
diferença é liquidada no sucesso. Veja
Operações / Faturamento e uso.
Veja também