S
Guia da API Seedance 2.0

API de Geração de Vídeo Seedance 2.0

Acesse os modelos de geração de vídeo Seedance 2.0 da ByteDance por meio da API unificada do TokenHub. Suporta text-to-video, image-to-video, edição de vídeo, geração guiada por áudio e muito mais. Este guia mostra o processo completo de integração.

Text → VideoImage → VideoVideo → VideoAudio Reference480p / 720p4–15 seg

1Obtenha sua API Key

  1. Visite tokenhub.store para criar uma conta (login com GitHub / Google suportado)
  2. Vá para Dashboard → API Keys, clique em "Create New Key"
  3. Vá para Dashboard → Billing para adicionar Credits (1 Credit = $1 USD)
  4. Copie sua API Key (formato: th-xxxxxxxxxxxx...
⚠️ A API Key é exibida apenas uma vez ao ser criada. Salve-a em segurança. Se for perdida, você precisará criar uma nova.

2Visão geral da API

Base URL

https://tokenhub.store/api/v1

Autenticação

Todas as requisições exigem uma API Key no cabeçalho:

Header
Authorization: Bearer th-your-api-key

Dois Endpoints

POST
/videos/generations

Cria uma tarefa de geração de vídeo e retorna o ID da tarefa

GET
/videos/generations/{task_id}

Consulta o status da tarefa e retorna a URL do vídeo em caso de sucesso

3Modelos e Preços

ID do modelResoluçãoTaxa de saídaDescrição
doubao-seedance-2.0720p$0.20/smodel principal, mais alta qualidade
480p$0.12/sQualidade padrão, custo-benefício
doubao-seedance-2.0-fast720p$0.16/smodel rápido, geração mais ágil
480p$0.10/sOpção mais acessível

Detalhes de cobrança:

  • Vídeo de saída: cobrado pela duração real × taxa
  • Imagem de entrada: grátis (sem cobrança)
  • Vídeo de entrada: cobrado pela duração do vídeo de entrada × taxa
  • Custo total = (duração do vídeo de entrada + duração do vídeo de saída) × taxa

Exemplo: doubao-seedance-2.0 (720p), vídeo de entrada de 5s + saída de 10s → custo = (5+10)×$0.20 = $3.00

4Parâmetros da requisição

ParâmetroTipoObrigatórioDescrição
modelstringObrigatórioID do model, ex.: "doubao-seedance-2.0"
promptstringObrigatórioTexto de descrição do vídeo. Prompts em inglês geralmente geram melhores resultados
durationnumberOpcionalDuração do vídeo (seg), intervalo de 4–15, padrão 5
resolutionstringOpcional"480p" ou "720p" (padrão 720p)
aspect_ratiostringOpcionalProporção: "adaptive" (padrão), "16:9", "9:16", "1:1", etc.
image_urlstringOpcionalURL da imagem de referência (imagem para vídeo)
image_urlsstring[]OpcionalArray com várias URLs de imagens de referência
video_urlstringOpcionalURL do vídeo de referência (edição de vídeo / vídeo para vídeo)
video_urlsstring[]OpcionalArray com várias URLs de vídeos de referência (máx. 3)
video_durationsnumber[]OpcionalArray com as durações de cada vídeo em segundos, ex.: [3, 5]
input_video_durationnumberOpcionalDuração total do vídeo de entrada em segundos (alternativa a video_durations)
audio_urlstringOpcionalURL do áudio de referência (música de fundo / SFX)
audio_urlsstring[]OpcionalArray com várias URLs de áudio de referência (máx. 3)
generate_audiobooleanOpcionalSe deve gerar áudio, padrão true
watermarkbooleanOpcionalSe deve adicionar marca d’água, padrão false
contentarrayOpcionalArray de ativos de mídia. Cada item: { type: "image_url", image_url: { url }, role }. Roles suportadas: first_frame (máx. 1), last_frame (máx. 1), reference_image, reference_video, reference_audio

5Limites de entrada

Você pode combinar livremente texto, imagens, vídeos e áudio como entrada. Observe os seguintes limites:

Imagens: 0–9 por requisição
Vídeos: 0–3 por requisição, cada um de 2–15s, duração total ≤ 15s
Áudios: 0–3 por requisição, cada um de 2–15s, duração total ≤ 15s
❌ Entradas "Text + Audio only" e "Pure Audio" NÃO são suportadas

Formatos suportados

  • Formatos de imagem: JPEG, PNG, WebP, BMP, TIFF, GIF (máx. 30MB cada)
  • Formatos de vídeo: MP4, MOV (H.264/H.265, máx. 50MB cada)
  • Formatos de áudio: WAV, MP3 (máx. 15MB cada)
⚡ Dica: apenas a duração do vídeo afeta a cobrança. Custo total = (duração do vídeo de entrada + duração do vídeo de saída) × taxa. Imagens de entrada são grátis.

6Exemplos completos da API

O uso mais básico — descreva uma cena em texto para gerar um vídeo.

bash
curl -X POST https://tokenhub.store/api/v1/videos/generations \
  -H "Authorization: Bearer th-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2.0",
    "prompt": "A golden retriever running on a sunny beach, waves crashing in the background, cinematic slow motion, 4K quality",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "watermark": false
  }'

Resposta:

json
{
  "id": "xxxxxx-task-id",
  "object": "video.generation.task",
  "model": "doubao-seedance-2.0",
  "status": "queued",
  "created": 1719900000
}

A geração de vídeo é assíncrona — consulte o status até concluir.

bash
# Poll task status using the task_id from creation response
curl https://tokenhub.store/api/v1/videos/generations/YOUR_TASK_ID \
  -H "Authorization: Bearer th-your-api-key"

Tarefa em andamento:

json
{
  "id": "YOUR_TASK_ID",
  "object": "video.generation.task",
  "model": "doubao-seedance-2.0",
  "status": "running",
  "created": 1719900000
}

Tarefa concluída (URL do vídeo recebida):

json
{
  "id": "YOUR_TASK_ID",
  "object": "video.generation.task",
  "model": "doubao-seedance-2.0",
  "status": "succeeded",
  "created": 1719900000,
  "data": [
    {
      "video_url": "https://xxx.volces.com/output-video.mp4",
      "cover_image_url": "https://xxx.volces.com/cover.jpg"
    }
  ],
  "usage": {
    "video_duration": 5
  }
}
💡 Intervalo de consulta recomendado: a cada 3-5 segundos. Valores de status: queued → waiting, running → generating, succeeded → done, failed → error

7Exemplo completo em Python

python
import requests
import time

API_BASE = "https://tokenhub.store/api/v1"
API_KEY = "th-your-api-key"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# Step 1: Create video generation task
payload = {
    "model": "doubao-seedance-2.0",
    "prompt": "A majestic eagle soaring over snow-capped mountains, golden hour lighting, cinematic aerial shot",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "watermark": False
}

resp = requests.post(f"{API_BASE}/videos/generations", json=payload, headers=headers)
task = resp.json()
task_id = task["id"]
print(f"Task created: {task_id}, status: {task['status']}")

# Step 2: Poll for result
while True:
    resp = requests.get(f"{API_BASE}/videos/generations/{task_id}", headers=headers)
    result = resp.json()
    status = result["status"]
    print(f"Status: {status}")

    if status == "succeeded":
        video_url = result["data"][0]["video_url"]
        duration = result["usage"]["video_duration"]
        print(f"Video ready! Duration: {duration}s")
        print(f"URL: {video_url}")
        break
    elif status == "failed":
        print(f"Failed: {result.get('error', {}).get('message', 'Unknown error')}")
        break

    time.sleep(5)

8Exemplo completo em JavaScript / Node.js

javascript
const API_BASE = "https://tokenhub.store/api/v1";
const API_KEY = "th-your-api-key";

const headers = {
  "Authorization": `Bearer ${API_KEY}`,
  "Content-Type": "application/json"
};

// Step 1: Create task
const createResp = await fetch(`${API_BASE}/videos/generations`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    model: "doubao-seedance-2.0",
    prompt: "A majestic eagle soaring over snow-capped mountains, cinematic aerial shot",
    duration: 5,
    resolution: "720p",
    aspect_ratio: "16:9",
    watermark: false,
  }),
});
const task = await createResp.json();
console.log("Task created:", task.id);

// Step 2: Poll for result
const poll = async () => {
  while (true) {
    const resp = await fetch(`${API_BASE}/videos/generations/${task.id}`, { headers });
    const result = await resp.json();
    console.log("Status:", result.status);

    if (result.status === "succeeded") {
      console.log("Video URL:", result.data[0].video_url);
      console.log("Duration:", result.usage.video_duration, "seconds");
      return result;
    }
    if (result.status === "failed") {
      console.error("Failed:", result.error?.message);
      return result;
    }
    await new Promise(r => setTimeout(r, 5000));
  }
};

await poll();

9Exemplo de imagem para vídeo em Python

python
import requests, time

API_BASE = "https://tokenhub.store/api/v1"
headers = {
    "Authorization": "Bearer th-your-api-key",
    "Content-Type": "application/json"
}

# Image-to-Video with a single reference image
payload = {
    "model": "doubao-seedance-2.0",
    "prompt": "The woman in the photo turns to face the camera and smiles warmly, her hair gently blowing in the wind",
    "duration": 5,
    "resolution": "720p",
    "image_url": "https://your-bucket.com/portrait.jpg",
    "watermark": False
}

resp = requests.post(f"{API_BASE}/videos/generations", json=payload, headers=headers)
task_id = resp.json()["id"]
print(f"Task: {task_id}")

# Poll for result
while True:
    r = requests.get(f"{API_BASE}/videos/generations/{task_id}", headers=headers).json()
    if r["status"] == "succeeded":
        print(f"Done: {r['data'][0]['video_url']}")
        break
    elif r["status"] == "failed":
        print(f"Error: {r.get('error', {}).get('message')}")
        break
    time.sleep(5)

10Dicas de prompt

Estrutura básica

Formato recomendado: [Assunto] + [Ação] + [Ambiente/Fundo] + [Câmera/Estilo]

Exemplos de prompts bons

  • "A young woman walking through a cherry blossom garden, petals falling in slow motion, soft natural lighting, cinematic 35mm film look"
  • "Close-up of hands pouring latte art into a ceramic cup, steam rising, warm cafe ambiance, shallow depth of field"
  • "Aerial drone shot of a winding river through autumn forest, golden and red leaves, morning mist, 4K cinematic"

Dicas para imagens/vídeos de referência

  • Use "image 1", "image 2", "video 1", "audio 1" no prompt para referenciar seus ativos
  • Especifique o conteúdo da cena por segmento de tempo (ex.: "0-2s: xxx, 2-4s: xxx")
  • Especifique os frames inicial/final (ex.: "o primeiro frame é image 1", "o frame final congela em image 2")
  • Especifique a origem da composição de câmera (ex.: "use POV de video 1 durante todo o vídeo")
  • Especifique o uso do áudio (ex.: "use audio 1 como música de fundo durante todo o vídeo")

Dicas

  • Prompts em inglês geralmente geram melhores resultados; chinês também é suportado
  • Descrições mais específicas e vívidas levam a melhores resultados
  • Evite descrições muito abstratas (ex.: "um vídeo legal")
  • A linguagem de câmera melhora bastante a qualidade (slow motion, close-up, aerial shot, tracking shot...)

11FAQ

Pronto para começar?

Crie sua conta no TokenHub e comece a usar a API de Geração de Vídeo Seedance 2.0 agora

© 2026 TokenHub · Powered by ByteDance Seedance 2.0 · support@tokenhub.store