Pular para o conteúdo principal

O Seedance 2.0 Fast Spicy é o modelo de image-to-video sem censura da ByteDance na faixa Fast e anima uma imagem sua como primeiro quadro. Os clipes têm 4 a 15 segundos em 480p ou 720p com som na mesma passada; só a imagem é obrigatória.

A partir de $0.081/s

Playground

Enviar uma requisição

Início rápido

Os exemplos usam as definições públicas de parâmetros do endpoint selecionado. Troque a chave de API e as mídias de exemplo e envie a requisição a partir do seu servidor.

SDKs e integrações
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Autenticação da API

Guarde a chave de API na variável de ambiente do servidor SPICY_API_KEY. Use autenticação Bearer e Content-Type: application/json nas requisições JSON.

Authorization: Bearer $SPICY_API_KEY
Resultado de exemploUsar este exemplo
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "bytedance/seedance-2.0-fast-spicy/image-to-video",
  "input": {
    "aspect_ratio": "adaptive",
    "duration_seconds": 5,
    "generate_audio": true,
    "image_url": "https://example.com/reference.png",
    "resolution": "720p"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Gerado a partir do schema de entrada deste modelo — o mesmo que a API usa para validar cada requisição.

Parâmetros de entrada

Coloque estes campos no objeto input do corpo da requisição. Nomes e tipos são os mesmos da API. Quando nenhum valor padrão estiver indicado, não presuma que exista um.

image_urlstringObrigatório

Obrigatório, e o único campo obrigatório. Ele vira o primeiro quadro, então composição, semelhança, figurino, tratamento de cor e o teto de qualidade vêm todos dele — um still nítido e bem iluminado vence qualquer remendo de prompt depois. É também por isso que este endpoint dá conta de material sem censura com confiabilidade: conteúdo já presente na imagem nunca precisa ser argumentado em palavras. Cada lado precisa ter entre 300 e 6000 pixels; abaixo disso, a verificação de entrada recusa a imagem antes de qualquer cobrança.

Valor padrão
Não especificado
Restrições
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]
seedintegerOpcional

Seed inteiro; omita e cada execução sorteia o seu. Fixe com todo o resto constante para julgar o que uma edição de prompt realmente mudou. É ferramenta de comparação, não promessa de repetição quadro a quadro.

Valor padrão
Não especificado
Restrições
minimum:0
maximum:2147483647
generate_audiobooleanOpcional

Se uma trilha nativa é renderizada em sincronia com a imagem. Vem ligada; desligar não reduz a tarifa nesta versão. Desligue para loops mudos e para material que você vai musicar na pós.

Valor padrão
true
duration_secondsintegerOpcionalAfeta o preço

Duração do clipe finalizado em segundos inteiros, de 4 a 15, padrão 5, e a quantidade cobrada. Um plano dirigido por um único quadro deriva mais quanto mais longo, então confirme o movimento em 4 ou 5 segundos antes de pagar por 15.

Valor padrão
5
Restrições
minimum:4
maximum:15
resolutionstringOpcionalAfeta o preço

Resolução de saída: 480p ou 720p por padrão. Ela seleciona uma faixa de preço e governa só o formato entregue — não acrescenta detalhe que o primeiro quadro já não tenha. Faixas mais altas significam arquivos maiores e renderizações mais longas.

Valor padrão
"720p"
Valores permitidos
"480p""720p"
aspect_ratiostringOpcional

Enquadramento de saída, adaptive por padrão, que segue a proporção do quadro que você forneceu e poupa um recorte prévio. Escolha uma proporção concreta entre 21:9 e 9:16 só quando o formato de entrega já estiver fixado. Não afeta o que você paga.

Valor padrão
"adaptive"
Valores permitidos
"16:9""9:16""4:3""3:4""1:1""21:9""adaptive"
last_image_urlstringOpcional

Quadro de fechamento opcional. Ele decide a imagem em que o plano aterrissa: uma transição, um par antes/depois ou um loop que abre e fecha no mesmo still. Mantenha câmera e luz estáveis entre os dois e mude um estado claro, ou o miolo do clipe vira um corte. Cada lado precisa ter entre 300 e 6000 pixels; abaixo disso, a verificação de entrada recusa a imagem antes de qualquer cobrança.

Valor padrão
Não especificado
Restrições
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]
promptstringOpcional

Opcional aqui, e é esse o ponto: o quadro de abertura já fixa o que está na tela, então o prompt só precisa dirigir movimento — a ação, para onde vão os olhos, a deriva de câmera, o som do lugar. Briefings não são revisados do nosso lado, mas a camada do próprio Seedance recusa uma faixa estreita de formulações, beijo com mais constância. Ponha essa cena no quadro, não na frase.

Valor padrão
Não especificado

Acompanhar tarefa

HTTP 202 quer dizer que a tarefa foi aceita, não que terminou. Guarde o taskId devolvido e consulte essa tarefa. Não crie outra enquanto espera o resultado.

Requisição aceita
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

A resposta de aceitação já traz a estimativa, para que o seu aplicativo mostre o mesmo valor no histórico de tarefas e na cobrança.

Consultar a tarefa
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Comece consultando a cada 2 segundos, mais ou menos, e vá espaçando. Pare em um estado final. Se a conexão cair, consulte o taskId original. Só recrie a tarefa com a chave de idempotência e o corpo originais.

Ou receba o resultado por callback
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Passe callBackUrl ao criar a tarefa e o registro concluído chega até você via POST — sem nenhum laço de polling. Toda entrega traz X-Webhook-Timestamp, X-Webhook-Signature e X-Webhook-Payload-Version. A assinatura é um HMAC-SHA256 em base64 sobre taskId.timestamp.sha256(body), então confira contra os bytes brutos: se você analisar o JSON e serializar de novo, os bytes mudam e a verificação falha. Entregas com erro são repetidas, ou seja, o mesmo taskId pode chegar duas vezes — deixe seu handler idempotente. Responda 2xx primeiro e faça o trabalho depois; um handler lento conta como entrega falha.

Ler resultado

Só consuma output quando state for succeeded. Em caso de falha, use errorCode, errorMessage e request_id para investigar. Os custos e estados de exemplo não representam uma cobrança real.

Exemplo de resposta concluída
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "bytedance/seedance-2.0-fast-spicy/image-to-video",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp4",
          "mime": "video/mp4",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp4?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

Para cada arquivo disponível, abra ou baixe assets[].url direto, sem o cabeçalho Authorization da API. O link assinado expira em expiresAt: consulte a tarefa de novo para renovar enquanto o arquivo estiver dentro do prazo de retenção. Arquivo pendente ou indisponível não tem URL. Trate os links assinados como dado privado.

SDKs e integrações

Use a SpicyAPI no seu app, terminal, assistente de IA ou fluxo visual. Escolha um guia de configuração.

Use no ComfyUI

Instale os nós da SpicyAPI pelo ComfyUI Manager ou com o comando abaixo e procure por Seedance 2.0 Fast Spicy · Image to Video no canvas. O nó tem as mesmas opções desta página e mostra o preço antes da execução.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi