Seedance 2.5
Gere, edite e estenda vídeo com o Seedance 2.5 pela API de tarefas oficial do ModelArk: até 30 segundos em 1080p, com até 30 referências de imagem, 10 de vídeo e 10 de áudio.
O Seedance 2.5 é o modelo de geração de vídeo mais recente da ByteDance (Dreamina Seedance 2.5). Envie o corpo de tarefa oficial do ModelArk, guarde o identificador de tarefa retornado e leia o vídeo pronto na tarefa. Imagens, vídeos e áudio vão em content como URLs.
IDs de modelo
| ID de modelo | Resoluções | Duração |
|---|---|---|
dreamina-seedance-2-5 | 480p, 720p, 1080p | De 4 a 30 segundos, ou automática |
Veja os preços atuais na página do modelo.
Exemplo rápido
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| Cabeçalho | Valor |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
O corpo é a requisição oficial "criar uma tarefa de geração de vídeo" do ModelArk. Se você já chama o ModelArk, altere apenas a URL base para https://api.seedrouter.ai/v1 e a chave de API. A resposta é {"id": "task_..."}, não o vídeo pronto. Mantenha as chaves de API em código do servidor.
Parâmetros
| Nome | Tipo | Obrigatório | Padrão | Observações |
|---|---|---|---|---|
model | string | Sim | — | dreamina-seedance-2-5. |
content | object[] | Sim | — | O prompt e as mídias; veja abaixo. |
resolution | enum | Não | 720p | 480p, 720p, 1080p. |
ratio | enum | Não | adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive. Precisa ser adaptive (ou omitido) com um primeiro quadro e para edit e extend. |
duration | integer | Não | -1 | De 4 a 30 segundos, ou -1 para deixar o modelo escolher. Precisa ser -1 para edit. |
generate_audio | boolean | Não | true | Gera som junto com o vídeo. |
watermark | boolean | Não | false | Adiciona uma marca d'água. |
return_last_frame | boolean | Não | false | Também retorna o quadro final como URL de imagem. |
output_format | enum | Não | mp4 | mp4 ou mov. |
omni_reference_task_type | enum | Não | auto | auto, reference, edit, extend. edit e extend exigem um vídeo de referência. |
execution_expires_after | integer | Não | 172800 | De 3600 a 259200 segundos. Uma tarefa ainda não concluída após esse prazo passa a expired e não é cobrada. |
priority | integer | Não | 0 | De 0 a 9. |
safety_identifier | string | Não | — | De 1 a 64 caracteres que identificam o seu usuário final. Um hash serve. |
service_tier | enum | Não | default | Apenas default. |
content_filter | boolean | Não | true | Extensão do SeedRouter. false desativa a filtragem de conteúdo nesta requisição. |
Itens de content
| Item | Formato | Papel | Limite |
|---|---|---|---|
| Texto | {"type": "text", "text": "..."} | — | Um. |
| Imagem | {"type": "image_url", "image_url": {"url": "https://..."}, "role": "..."} | first_frame, last_frame, reference_image | Até 30 imagens de referência. |
| Vídeo | {"type": "video_url", "video_url": {"url": "https://..."}, "role": "reference_video"} | reference_video | Até 10. |
| Áudio | {"type": "audio_url", "audio_url": {"url": "https://..."}, "role": "reference_audio"} | reference_audio | Até 10. |
Campos desconhecidos são recusados. Não são suportados: seed, callback_url (consulte a tarefa em vez disso), draft e draft_task, tools, e frames e camera_fixed, exclusivos da versão 1.x. Não é possível cancelar nem excluir tarefas.
Modos
O modo decorre dos itens de content; não há parâmetro de modo.
| Modo | content |
|---|---|
| Texto para vídeo | um item de texto |
| Primeiro quadro | texto (opcional) + uma imagem com o papel first_frame, ou uma imagem sem papel |
| Primeiro e último quadro | texto (opcional) + uma imagem first_frame + uma imagem last_frame |
| Referência multimodal | texto + qualquer combinação de itens reference_image, reference_video e reference_audio |
| Editar um vídeo | texto + um reference_video, com omni_reference_task_type: "edit" |
| Estender um vídeo | texto + um reference_video, com omni_reference_task_type: "extend" |
Os modos com primeiro quadro não podem ser combinados com itens de referência. Com várias imagens ou qualquer outra mídia, toda imagem precisa de um role.
Exemplo com referências
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
}'Substitua as URLs de exemplo por arquivos seus acessíveis.
Entradas de mídia
Esta API aceita apenas referências por URL. Base64, URLs data:, IDs asset:// e envios multipart não são aceitos. O Playground envia os arquivos selecionados para o armazenamento antes de submeter as URLs deles.
As mídias precisam ser URLs HTTP(S) públicas e atender aos limites oficiais do modelo:
| Mídia | Formatos | Limites |
|---|---|---|
| Imagem | JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIF | Menos de 30 MB; largura e altura de 300 a 6000 px; proporção (largura / altura) de 0,4 a 2,5; de 1 a 30 imagens de referência |
| Vídeo | MP4, MOV (H.264 ou H.265) | De 2 a 30 segundos cada (de 4 a 30 segundos para edit), até 10, no máximo 30 segundos no total; no máximo 200 MB; de 24 a 60 FPS; largura e altura de 300 a 6000 px; proporção de 0,4 a 2,5; de 407.696 a 8.295.044 pixels (largura × altura) |
| Áudio | WAV, MP3 | De 2 a 30 segundos cada, até 10, no máximo 30 segundos no total; no máximo 15 MB |
O modelo não suporta imagens e vídeos de referência que contenham rostos humanos reais.
As mídias são verificadas quando a tarefa começa, antes de qualquer geração. Uma tarefa cuja mídia viole um desses limites termina como failed com invalid_request_error e uma mensagem que indica a regra, por exemplo The request was rejected: content reference videos must total at most 15 seconds., e não é cobrada. Um arquivo que não possa ser lido nesse momento é repassado ao modelo, que o aceita ou recusa; em qualquer dos casos, uma tarefa que falha não é cobrada.
Fatores de custo
Consulte a seção de preços do modelo para as tarifas atuais. O Seedance 2.5 cobra por tokens de vídeo, a unidade oficial:
video tokens = (output seconds + reference video seconds) × width × height × 24 / 1024A tarifa por milhão de tokens depende da resolução de saída e de a requisição incluir ou não um vídeo de referência; uma requisição com vídeo de referência usa uma tarifa mais baixa para todos os seus tokens. Entradas de texto, imagem e áudio não são cobradas. Em 16:9, um segundo equivale a 9.607,5 tokens em 480p (854×480), 21.600 em 720p e 48.600 em 1080p.
A cobrança segue os tokens que o vídeo pronto informa (usage.completion_tokens), então duration: -1 é cobrado pela duração efetivamente gerada. Os clipes renderizados ficam um pouco mais longos que a duração pedida: uma requisição de 5 segundos em 720p e 16:9 renderiza 121 quadros e informa 108.900 tokens em vez de 108.000. Consulte as cobranças finais no histórico de uso da sua conta. Tarefas que falham ou expiram não são cobradas.
Esquema de saída
O envio retorna o identificador da tarefa:
{"id": "task_..."}Consultar a tarefa
curl https://api.seedrouter.ai/v1/contents/generations/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Consulte a cada 10–20 segundos até que status seja succeeded, failed ou expired. Um tempo limite de rede durante a consulta não significa que a geração falhou: guarde o identificador da tarefa e retome a verificação. Não crie outra tarefa para acompanhar o progresso.
Exemplo completo de consulta
Execute isto após o exemplo de envio em Python acima.
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}.")Tarefa bem-sucedida
{
"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 | Significado |
|---|---|
id | Guarde este identificador para consultas posteriores. |
status | queued, running, succeeded, failed ou expired. |
content.video_url | O vídeo gerado. |
content.last_frame_url | O quadro final, quando return_last_frame é true. |
usage.completion_tokens | Tokens de vídeo do vídeo pronto; a quantidade cobrada. |
duration, resolution, ratio, framespersecond, seed | O que foi efetivamente renderizado; seed é o valor escolhido pelo modelo. |
created_at, updated_at | Marcas de tempo Unix em segundos. |
error | {"code", "message"} em uma tarefa que falhou ou expirou. |
As URLs de vídeo ficam hospedadas no nosso armazenamento. Salve o arquivo no seu próprio armazenamento quando precisar de uma cópia duradoura.
Listar tarefas
curl "https://api.seedrouter.ai/v1/contents/generations/tasks?page_num=1&page_size=20&filter.status=succeeded" \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Retorna {"total": N, "items": [...]} com objetos de tarefa dos últimos 7 dias, dos mais recentes para os mais antigos. page_num e page_size vão de 1 a 500 (valores padrão 1 e 20). Filtros: filter.status, filter.model, filter.task_ids (repetível) e filter.service_tier.
Erros
Requisições recusadas antes de a tarefa ser criada retornam um erro HTTP com um objeto error e não são cobradas. Uma tarefa que falha após ser aceita retorna HTTP 200 na consulta, com status: "failed" (ou "expired") e um objeto error. Uma saída retida pela filtragem de conteúdo falha com content_policy_violation; uma tarefa que ultrapassa execution_expires_after termina como expired com task_expired.
Veja o catálogo de erros comum para códigos, status HTTP e orientações de nova tentativa.
{
"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 o próprio envio atingir o tempo limite, verifique sua lista de tarefas antes de enviar de novo: a primeira requisição pode já ter sido aceita.
Dicas
- Descreva o tema, a ação, o movimento de câmera e a iluminação em frases completas.
- Faça o rascunho em 480p com uma
durationcurta e depois renderize a versão escolhida em uma resolução mais alta. - Encadeie cenas com
return_last_frame: use o quadro retornado comofirst_frameda próxima tarefa. - Para editar um vídeo, defina
omni_reference_task_typecomoedite descreva apenas o que deve mudar.
