Início rápido de Imagem e Vídeo
Início rápido de Imagem e Vídeo
Aprenda a gerar imagens e vídeos a partir de prompts de texto e mídias de referência.
A API de Imagem e Vídeo é assíncrona. Você envia uma geração e, quando ela termina, baixa o resultado por uma URL assinada. Imagens e vídeos têm endpoints separados, mas os formatos de solicitação e resposta são os mesmos para ambos.
Há duas formas de coletar o resultado. A entrega por webhook é a recomendada e é usada pelos exemplos abaixo: a ElevenLabs chama seu endpoint no momento em que uma geração atinge um status terminal, para que não haja espera. O polling é a alternativa quando você não tem um endpoint para receber um callback, e cada exemplo mostra como usá-lo.
A API de Imagem e Vídeo exige um plano Pro ou superior. Chamadas de um workspace abaixo desse nível são
rejeitadas com o erro 402 paid_plan_required. Sua chave de API também precisa ter a permissão de Imagem e Vídeo ou
Flows para o workspace.
Gere uma imagem
Crie uma chave de API
Crie uma chave de API no painel aqui, que você usará para acessar a API com segurança.
Armazene a chave como um segredo gerenciado e passe-a aos SDKs como uma variável de ambiente por meio de um arquivo .env ou diretamente na configuração do seu app, conforme sua preferência.
Instale o SDK
SDK
CLI
Também usaremos a biblioteca dotenv para carregar nossa chave de API de uma variável de ambiente.
Envie a geração
Cada modelo tem sua própria classe de solicitação, e os campos dela são os parâmetros aceitos pelo modelo. Portanto, trocar de modelo pode mudar quais campos estão disponíveis. Campos desconhecidos são rejeitados em vez de ignorados.
webhook solicita que o resultado concluído seja entregue aos webhooks do seu workspace, portanto, a chamada
retorna assim que a geração é colocada na fila. Isso exige um webhook inscrito em eventos de geração; consulte webhooks de
Imagem e Vídeo para configurar um ou omita o
campo e use polling.
SDK
CLI
A resposta contém o ID da geração e nada mais. Uma geração recém-criada sempre fica como
pending:
Colete o resultado
Como a solicitação incluiu webhook, a ElevenLabs envia um evento flows_generation ao seu
endpoint quando a geração atinge completed ou failed. O data do evento é idêntico ao que
o endpoint GET retorna, e os webhooks de Imagem e Vídeo explicam
o handler que o recebe.
Sem um endpoint para receber callbacks, remova webhook da solicitação acima e use polling.
Busque a geração até que o status seja completed ou failed, deixando pelo menos dois segundos
entre as solicitações para uma imagem — consulte as diretrizes de polling para saber os intervalos
de cada modalidade.
De qualquer forma, uma geração concluída contém os mesmos campos:
Gere um vídeo
As gerações de vídeo usam flows.video e seguem o mesmo padrão de envio e coleta. Um vídeo pode levar
vários minutos, portanto, este exemplo usa a entrega por webhook com webhook, em vez de esperar pelo
resultado.
A chamada retorna assim que a geração é colocada na fila, e o resultado concluído é entregue a todos os
webhooks do seu workspace inscritos em eventos de geração. A saída de vídeo é MP4, portanto, o payload concluído informa um
content_mime_type de video/mp4. Consulte os webhooks de Imagem e Vídeo para configurar um
webhook e criar o handler que recebe isso.
webhook exige pelo menos um webhook do workspace inscrito em eventos de geração. Sem um,
a chamada de criação é rejeitada, em vez de iniciar uma geração cujo resultado não tem para onde ir. Remova
o campo para usar polling com flows.video.get e faça polling no máximo uma vez a cada 10
segundos.
Coletando resultados
Webhooks e polling retornam a mesma carga, então a escolha é sobre como você espera por ela, e não sobre o que recebe.
Use webhooks sempre que puder. Use polling quando não houver onde receber um callback e, nesse caso, siga os intervalos abaixo.
Escolhendo destinos de webhook
webhook aceita duas formas. WebhookTarget_All alcança todos os webhooks inscritos em eventos de
geração, que é o padrão ideal porque continua funcionando mesmo que os webhooks sejam alternados ou
substituídos. WebhookTarget_Ids limita a entrega a webhooks específicos, para quando um workspace
distribui para vários consumidores e um determinado trabalho deve chegar a apenas um deles:
Cada ID já precisa estar inscrito em eventos de geração; informar um webhook não inscrito é rejeitado, em vez de ser ignorado silenciosamente. A carga entregue é idêntica à retornada pelo endpoint GET, então um manipulador criado para um funciona para o outro. O guia de webhooks explica como configurar um webhook, verificar a assinatura e processar o evento.
Diretrizes de polling
O tempo de execução de uma geração depende do modelo, da resolução e, no caso de vídeo, da duração. Portanto, faça polling em um intervalo adequado ao que você solicitou, em vez de usar um loop fixo:
- Imagens: faça polling no máximo uma vez a cada 2 segundos. A maioria termina em poucos segundos.
- Vídeos: faça polling no máximo uma vez a cada 10 segundos. Espere minutos, não segundos, e ajuste
o intervalo de acordo com
duration_secseresolution.
Duas regras valem para ambos. Reduza a frequência quando uma geração demorar — dobrar o intervalo até cerca de um minuto evita que uma geração lenta se transforme em centenas de solicitações. E defina um limite para o loop, para que uma geração travada termine em timeout no seu próprio código, em vez de em um loop sem fim.
Fazer polling mais rápido que isso não traz benefício: o status de uma geração não muda antes só porque você perguntou duas vezes. Um polling agressivo e contínuo pode retornar respostas 429, que você deve tratar com recuo exponencial.
Ciclo de vida da geração
Uma geração passa por quatro status. Os dois status finais contêm campos diferentes, então use
status para definir o fluxo antes de ler o restante da resposta.
content_url é uma URL assinada que expira aproximadamente uma hora após o retorno da resposta.
Busque a geração novamente para obter uma URL atualizada, em vez de armazenar a própria URL assinada.
Lidando com falhas
Uma geração com falha informa uma categoria em failure_reason junto com uma error_message legível:
Gerações com falha não são cobradas. Problemas de parâmetros que podem ser detectados antecipadamente — um campo não compatível, um valor fora do intervalo permitido pelo modelo ou uma combinação inválida de entradas de referência — são rejeitados pela solicitação de criação antes de qualquer geração começar.
Preços
As gerações são cobradas em créditos. O custo depende do modelo, dos parâmetros que você escolhe, como resolução e duração, e das entradas fornecidas. Uma geração custa o mesmo pela API e pelo app da ElevenLabs, onde o custo é exibido antes do envio. Consulte Imagem e Vídeo no playground para saber como o custo de uma combinação específica de modelo e configurações é apresentado.
Liste suas gerações
Cada endpoint lista as gerações criadas por ele, das mais recentes para as mais antigas. Os resultados são limitados ao seu workspace e a esta API, portanto, as gerações criadas no app da ElevenLabs não aparecem.
page_size aceita valores de 1 a 100 e o padrão é 30. Passe status para retornar apenas gerações em
um estado do ciclo de vida e model_id para retornar apenas gerações de um único modelo. Trate
next_cursor como opaco: passe de volta o valor exato e pare quando has_more for false.
Modelos disponíveis
A API disponibiliza um subconjunto dos modelos disponíveis no app da ElevenLabs. Cada modelo aceita apenas os parâmetros listados para ele — enviar um campo aceito por outro modelo retorna um erro de validação.
Os modelos da ByteDance ficam desativados por padrão e exigem aprovação explícita antes do uso. Até
que o acesso seja concedido, uma solicitação que informe um deles será rejeitada com um erro
model_access_denied. Clientes Enterprise podem entrar em contato com o suporte para solicitar acesso.
Modelos de imagem
Os modelos GPT Image 2.5 aceitam valores de quality como low, medium, high, xhigh e max, e
o padrão é high. O GPT Image 2 vai até high e o padrão é medium.
Modelos de vídeo
Para recursos, disponibilidade e preços dos modelos, consulte a visão geral de Imagem e Vídeo.