HiAPI
Blogue

Guia de uso

Guia de produção de vídeos curtos com seedance-2-0: receitas práticas com a API hiapi

Crie vídeos verticais para TikTok/Reels/Shorts com a API de tarefas seedance-2-0 no hiapi — texto para vídeo e imagem para vídeo, preços verificados e scripts de envio/polling/download prontos para copiar e colar.

Jul 1, 2026
Guia de produção de vídeos curtos com seedance-2-0: receitas práticas com a API hiapi

Visão geral rápida

  • O que é isto: uma receita pronta para executar e reproduzível que ensina a criar vídeos curtos verticais (TikTok / Reels / Shorts) com o seedance-2.0 no hiapi. O vídeo curto incorporado abaixo foi gerado exatamente com o prompt impresso logo acima dele — nada de demonstrações de terceiros.
  • Dois modos, um modelo: o seedance-2.0 suporta texto para vídeo e imagem para vídeo no mesmo endpoint — você pode começar a partir de um prompt ou animar uma imagem estática já existente.
  • Fatos da API (verificados na plataforma): o seedance-2.0 roda em um endpoint de tarefas assíncrono (/v1/tasks). O objeto input requer prompt, aspect_ratio (obrigatório — use 9:16 para vídeos curtos), resolution (480p / 720p / 1080p) e duration em segundos. O resultado é retornado como MP4 em output[0].url.
  • Preços (por segundo de saída): 480p a $0.136/seg, 720p a $0.293/seg, 1080p a $0.729/seg. Um clipe de 4 segundos em 480p custa $0.54. Consulte os preços em tempo real na página de preços.
  • Como executar: envie um POST para a API de tarefas, faça polling até o status ser success e baixe o MP4 de output[0].url — essa URL é temporária e expira, então salve os bytes imediatamente. Os scripts completos e copiáveis (ambos os modos + loop em lote) estão no final.

Por que escolher seedance-2.0 para vídeos curtos

As plataformas de vídeo curto têm uma gramática fixa: vertical 9:16, poucos segundos de duração, um único momento de ação claro. É exatamente a forma para a qual o seedance-2.0 foi criado. Ele renderiza movimento cinematográfico apenas com uma flag de proporção, então você não precisa brigar com o modelo para obter o enquadramento vertical — basta solicitar 9:16 e ele compõe nesse formato.

Outro motivo é o fluxo de trabalho: cada clipe é uma única tarefa assíncrona. Você envia o job, consulta o ID da tarefa e recebe de volta um MP4 finalizado. Não há socket de streaming para acompanhar nem timeout de 100 segundos para evitar — é exatamente o mesmo protocolo de tarefas usado por todos os outros modelos de geração do hiapi, então, se você já chamou um modelo de imagem, o fluxo de controle aqui é idêntico.

Modo 1 — Texto para vídeo

Este é o caminho mais rápido para obter um clipe: descreva a cena, escolha o formato e a duração, envie.

O prompt abaixo é o que eu realmente executei. Escreva como um diretor — sujeito, iluminação, movimento de câmera — e não como uma lista de palavras-chave.

Prompt: Um barista extrai um café expresso em uma cafeteria iluminada pelo sol, close na crema girando dentro da xícara, luz matinal quente, vapor suave subindo, profundidade de campo rasa, movimento suave de câmera na mão avançando.

Configurações: aspect_ratio: 9:16, resolution: 480p, duration: 4

O clipe está em formato 9:16 nativo e pode entrar direto na linha do tempo do Reels/Shorts. A renderização levou cerca de dois minutos e, pela tarifa atual de 480p, custou aproximadamente $0.54 — barato o suficiente para gerar várias variantes e ficar com a melhor.

O corpo da requisição é pequeno. Um campo que as pessoas costumam esquecer é aspect_ratio: ele é obrigatório e, se faltar, a API rejeita a tarefa com missing required field "aspect_ratio".

import os, json, requests

TOKEN = os.environ["HIAPI_TOKEN"]
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

payload = {
    "model": "seedance-2.0",
    "input": {
        "prompt": (
            "A barista pulls a shot of espresso in a sunlit cafe, close-up on the "
            "crema swirling into the cup, warm morning light, gentle steam rising, "
            "shallow depth of field, smooth handheld camera push-in."
        ),
        "aspect_ratio": "9:16",   # required — 9:16 for short-form
        "resolution": "480p",     # 480p | 720p | 1080p
        "duration": 4,            # seconds
    },
}

r = requests.post(BASE, headers=HEADERS, data=json.dumps(payload), timeout=60)
task_id = r.json()["data"]["taskId"]
print("submitted:", task_id)

Modo 2 — Imagem para vídeo

O segundo modo anima uma imagem estática que você fornece, em vez de criar a cena do zero. É exatamente o que trabalhos de marca exigem: capture (ou gere) uma imagem estática limpa do produto e deixe o seedance-2.0 adicionar o momento de ação, para que o enquadramento e o produto permaneçam fiéis à marca.

A forma da chamada é a mesma da tarefa — mantenha aspect_ratio, resolution e duration, e seu prompt agora descreve o movimento a aplicar sobre a imagem ("avanço lento", "modelo vira para a câmera", "o vapor começa a subir"), e não a cena inteira. Combine isso com uma imagem estática de um modelo de imagem e você tem um pipeline de duas etapas: gerar o visual principal e então animá-lo.

Dica: clipes de imagem para vídeo ficam melhores curtos (4 segundos), com movimento sutil. Vídeos curtos recompensam um único momento limpo, não uma cena movimentada.

Cálculo de custo para lotes de vídeos curtos

Como a cobrança é por segundo de saída, seu custo é extremamente previsível — escolha a resolução e multiplique pela duração do clipe:

Resolução Preço / seg Clipe de 4 seg Clipe de 8 seg
480p $0.136 $0.54 $1.09
720p $0.293 $1.17 $2.34
1080p $0.729 $2.92 $5.83

Para iterar repetidamente no gancho, comece em 480p — custa um quarto do preço de 720p e já basta para avaliar enquadramento e movimento. Só re-renderize a versão vencedora em 720p ou 1080p para a publicação final. Consulte as tarifas atuais de cada modelo na página de preços.

Script completo — enviar, consultar, baixar

Esta é a versão de ponta a ponta: enviar um job de texto para vídeo, consultar a tarefa até a conclusão e salvar o MP4. A etapa de download é importante — output[0].url é um link temporário que expira, então grave os bytes em disco assim que a tarefa tiver sucesso.

import os, json, time, requests

TOKEN = os.environ["HIAPI_TOKEN"]
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}


def submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4):
    payload = {
        "model": "seedance-2.0",
        "input": {
            "prompt": prompt,
            "aspect_ratio": aspect_ratio,  # required
            "resolution": resolution,      # 480p | 720p | 1080p
            "duration": duration,          # seconds
        },
    }
    r = requests.post(BASE, headers=HEADERS, data=json.dumps(payload), timeout=60)
    r.raise_for_status()
    return r.json()["data"]["taskId"]


def wait(task_id, timeout_s=600, poll=8):
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        r = requests.get(f"{BASE}/{task_id}", headers=HEADERS, timeout=30)
        data = r.json().get("data", {})
        status = data.get("status")
        if status == "success":
            return data
        if status == "fail":
            raise RuntimeError(f"task failed: {data.get('error')}")
        time.sleep(poll)
    raise TimeoutError(f"task {task_id} did not finish in {timeout_s}s")


def download(task, path):
    out = task["output"][0]
    assert out["type"] == "video", f"unexpected output type: {out['type']}"
    # output[0].url is temporary (see expireAt) — save immediately.
    resp = requests.get(out["url"], timeout=120)
    resp.raise_for_status()
    with open(path, "wb") as f:
        f.write(resp.content)
    return path


if __name__ == "__main__":
    prompt = (
        "A barista pulls a shot of espresso in a sunlit cafe, close-up on the crema "
        "swirling into the cup, warm morning light, gentle steam rising, shallow "
        "depth of field, smooth handheld camera push-in."
    )
    tid = submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4)
    print("submitted:", tid)
    task = wait(tid)
    print("saved:", download(task, "espresso_9x16.mp4"))

Para transformar um gancho em um lote inteiro, envolva submit / wait / download em um loop sobre os prompts:

HOOKS = {
    "espresso":  "A barista pulls a shot of espresso in a sunlit cafe, close-up on the crema, gentle steam, handheld push-in.",
    "matcha":    "A whisk froths bright green matcha in a ceramic bowl, top-down light, slow spiral motion, calm morning mood.",
    "pour-over": "Hot water spirals over fresh coffee grounds in a dripper, close macro, steam rising, warm backlight.",
}

for name, prompt in HOOKS.items():
    tid = submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4)
    task = wait(tid)
    download(task, f"{name}_9x16.mp4")
    print("done:", name)

Rascunhe esse lote em 480p, escolha os vencedores, re-renderize em 1080p e publique. Esse é o ciclo completo de vídeos curtos com um único modelo e um único endpoint.

Principais conclusões

  • O seedance-2.0 é uma única tarefa assíncrona em /v1/tasks que retorna um MP4 — mesmo fluxo de controle dos modelos de imagem do hiapi.
  • aspect_ratio é obrigatório; use 9:16 para TikTok / Reels / Shorts.
  • A cobrança é por segundo de saída: 480p $0.136/seg, 720p $0.293/seg, 1080p $0.729/seg — então rascunhe barato em 480p e só finalize os vencedores em alta resolução.
  • A URL de saída é temporária — assim que a tarefa reportar success, baixe os bytes imediatamente.
  • A mesma chamada faz texto para vídeo e imagem para vídeo; combine imagem para vídeo com imagens estáticas geradas para obter movimento de produto fiel à marca.

Artigos relacionados

Ver todos os artigos →

Comece a criar com artefactos de IA persistentes

Obtenha a sua chave de API e chame modelos de imagem, vídeo e áudio através de uma única API baseada em tasks.

Ler a documentação da API