GPT-6 Astra is now live on CometAPI →
technology/Pesquisa CometAPI

Como automatizar a geração de imagens em escala

Crie um fluxo de trabalho de geração de imagens em lote, pronto para produção, com uma única chave CometAPI, incluindo enfileiramento, roteamento de modelos, limites de concorrência, novas tentativas e armazenamento.

CometAPI
Bobby SpencerEquipe de pesquisa de modelos e API de IA
Atualizado Sep 6, 2026 11 min de leitura
Como automatizar a geração de imagens em escala
Use este padrão

Faça a primeira chamada à API.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_COMETAPI_KEY",
    base_url="https://api.cometapi.com/v1",
)

response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[{"role": "user", "content": "Build this workflow."}],
)

print(response.choices[0].message.content)

A maneira mais fácil de automatizar a geração de imagens em escala sem gerenciar várias APIs diferentes é separar o fluxo de trabalho do provedor de modelos. Coloque cada solicitação de imagem em uma única fila, direcione cada job para um ID de modelo atual e envie solicitações compatíveis por meio de uma única chave CometAPI e da URL base compatível com OpenAI https://api.cometapi.com/v1.

Este tutorial constrói esse pipeline em Python. Ele aceita jobs de produto, publicidade e conteúdo a partir de uma fila em JSON Lines; escolhe um modelo; limita a concorrência; faz novas tentativas para falhas transitórias; armazena resultados baseados em URL ou base64; e registra o uso por job e o custo estimado. O exemplo mantém esses elementos essenciais de produção em um bloco compacto para que você possa testar o fluxo de trabalho sem transformar o artigo em uma referência de código.

Como uma API de Imagem Unificada Simplifica a Geração em Lote

Ao final, o fluxo de trabalho ficará assim:

jobs.jsonl → bounded worker pool → CometAPI /v1/images/generations → object storage → manifest.jsonl

A fila e a camada de armazenamento permanecem sob seu controle. Trocar de modelo de imagem altera o valor de model, não o sistema de autenticação ou a rota principal da solicitação. Essa é a vantagem prática de uma API de imagem unificada: a escolha do modelo se torna uma decisão de roteamento dentro de um único pipeline, em vez de uma integração separada com cada provedor.

Do que Você Precisa para Automatizar a Geração de Imagens?

Você precisa de Python 3.10 ou posterior, do pacote requests, de uma chave CometAPI, de um local de saída gravável e de pelo menos um ID de modelo de imagem atual.

Instale a única dependência:

pip install requests

Defina sua chave no servidor, nunca em código de navegador ou em repositório:

export COMETAPI_KEY="your-key"

A URL base é https://api.cometapi.com/v1, e jobs de texto-para-imagem compatíveis usam POST /images/generations. Antes de uma implantação, verifique cada modelo no catálogo de modelos ao vivo; o catálogo retorna o ID atual, o endpoint compatível, os recursos e os metadados de preços sem exigir um cabeçalho de autorização.

Em 20 de agosto de 2026, o catálogo ao vivo listou estas duas rotas úteis:

Carga de trabalhoID do modeloPor que se encaixa
Imagens de produto com controles de saídagpt-image-2Retorna dados de uso e conteúdo de imagem em base64 na rota compatível com OpenAI documentada
Conceitos de anúncios e conteúdo em alto volumedoubao-seedream-4-5-251128Usa a mesma rota de geração e está listado com precificação por solicitação

A tabela é um ponto de partida, não uma afirmação de que os modelos têm capacidades idênticas. Tamanho, qualidade, formato, suporte a imagens de referência e comportamento de resposta permanecem específicos de cada modelo. Verifique o registro do modelo e sua documentação vinculada antes de passar parâmetros opcionais.

Como Construir um Fluxo de Trabalho de Geração de Imagens em Lote em Python

1. Dê a cada job um ID durável

Use um objeto JSON por linha para que uma fila, uma exportação de banco de dados ou um job de planilha possam alimentar o mesmo worker:

{"id":"sku-1001","kind":"product","prompt":"Studio product photo of a ceramic coffee dripper on a warm neutral background"}
{"id":"campaign-204","kind":"ad","prompt":"Editorial summer travel image, vivid natural light, wide composition, no text"}
{"id":"blog-088","kind":"content","prompt":"Minimal illustration of a developer automating a creative workflow, no text"}

O ID se torna o nome do arquivo de saída e a chave do manifesto. Em produção, use-o como a chave de idempotência e ignore IDs já marcados como bem-sucedidos antes de reprocessar uma fila.

2. Roteie por tipo de job e valide no catálogo ao vivo

O exemplo mapeia trabalho de produto para gpt-image-2 e trabalho de anúncio ou conteúdo para doubao-seedream-4-5-251128. Um job pode substituir essa escolha com seu próprio campo model. Na inicialização, o worker baixa o catálogo público e rejeita um ID que não esteja mais listado.

Isso é mais seguro do que codificar um SDK específico de provedor em todo o aplicativo. Você pode alterar uma rota em um único mapeamento após avaliar qualidade, latência e preço para seus próprios prompts.

3. Limite a concorrência em vez de lançar o lote inteiro

O worker começa com quatro solicitações concorrentes. Esse número é uma configuração conservadora do aplicativo, não um limite universal do serviço. Meça a latência e as respostas 429 da sua conta e, em seguida, aumente ou diminua MAX_WORKERS deliberadamente.

Apenas respostas 408, 429 e 5xx são repetidas com backoff exponencial e jitter. Erros de autenticação, IDs de modelo inválidos e parâmetros não suportados falham imediatamente, porque repetir a mesma solicitação incorreta apenas adiciona atraso.

4. Normalize o resultado antes do armazenamento

Os modelos de imagem nem sempre retornam o mesmo contêiner. A resposta documentada do GPT Image contém data[0].b64_json; outros modelos compatíveis podem retornar data[0].url. O worker lida com ambos, grava a imagem em um arquivo temporário e renomeia apenas após o download ou a decodificação serem bem-sucedidos.

Para produção, substitua o diretório local output/ por S3, R2, GCS ou outro armazenamento de objetos. Não trate uma URL hospedada por provedor como armazenamento permanente, a menos que sua política de retenção indique isso explicitamente.

5. Registre uso, tentativas e custo estimado

Cada resultado se torna uma linha compacta de manifesto com o ID do job, o modelo, o caminho salvo, o status e o custo estimado em USD quando o catálogo ao vivo fornece dados de preços suficientes. Jobs com falha mantêm o erro em vez de desaparecerem do lote.

Script Python Completo para Geração de Imagens em Lote

Salve o seguinte como batch_image_pipeline.py, coloque a fila ao lado como jobs.jsonl e execute python3 batch_image_pipeline.py.

import base64, json, os, random, time
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
import requests

BASE_URL = "https://api.cometapi.com/v1"
KEY = os.environ["COMETAPI_KEY"]
WORKERS = int(os.getenv("MAX_WORKERS", "4"))
OUT = Path("output")
ROUTES = {
    "product": "gpt-image-2",
    "ad": "doubao-seedream-4-5-251128",
    "content": "doubao-seedream-4-5-251128",
}

catalog = requests.get("https://api.cometapi.com/api/models", timeout=30)
catalog.raise_for_status()
CATALOG = {model["id"]: model for model in catalog.json()["data"]}

def generate(job):
    model = job.get("model", ROUTES[job["kind"]])
    if model not in CATALOG:
        raise ValueError(f"Unknown model: {model}")
    payload = {"model": model, "prompt": job["prompt"], "n": 1}
    if model == "gpt-image-2":
        payload.update(quality="low", size="1024x1024", output_format="jpeg")

    for attempt in range(4):
        response = requests.post(
            f"{BASE_URL}/images/generations",
            headers={"Authorization": f"Bearer {KEY}"},
            json=payload,
            timeout=180,
        )
        if response.status_code not in {408, 429} and response.status_code < 500:
            break
        time.sleep(2**attempt + random.random())
    response.raise_for_status()
    body = response.json()
    item = body["data"][0]

    if item.get("b64_json"):
        data = base64.b64decode(item["b64_json"])
        extension = body.get("output_format", "png")
    else:
        download = requests.get(item["url"], timeout=120)
        download.raise_for_status()
        data = download.content
        extension = {"image/png": "png", "image/webp": "webp"}.get(
            download.headers.get("content-type"), "jpg"
        )
    path = OUT / f"{job['id']}.{extension}"
    path.write_bytes(data)

    price, usage = CATALOG[model].get("pricing") or {}, body.get("usage", {})
    cost = price.get("per_request")
    if cost is None and price.get("input") is not None:
        cost = (usage.get("input_tokens", 0) * price["input"] +
                usage.get("output_tokens", 0) * price["output"]) / 1_000_000
    return {"id": job["id"], "model": model, "path": str(path),
            "estimated_usd": cost * price.get("ratio", 1) if cost is not None else None}

def safe_generate(job):
    try:
        return {"status": "success", **generate(job)}
    except Exception as error:
        return {"id": job["id"], "status": "failed", "error": str(error)}

OUT.mkdir(exist_ok=True)
jobs = [json.loads(line) for line in Path("jobs.jsonl").read_text().splitlines() if line]
with ThreadPoolExecutor(max_workers=WORKERS) as pool:
    results = list(pool.map(safe_generate, jobs))
with (OUT / "manifest.jsonl").open("w") as manifest:
    manifest.writelines(json.dumps(result) + "\n" for result in results)

O script usa o catálogo atual em tempo de execução, enquanto os dois mapeamentos de fallback são exemplos verificados em 20 de agosto de 2026. Verifique-os novamente antes de publicar ou implantar o código em outra data.

Como Testar o Fluxo de Trabalho de Geração de Imagens em Lote

Comece com um job e um worker:

MAX_WORKERS=1 python3 batch_image_pipeline.py

Uma resposta GPT Image bem-sucedida segue esta estrutura:

{
  "created": 1776841943,
  "output_format": "jpeg",
  "quality": "low",
  "size": "1024x1024",
  "usage": {
    "input_tokens": 16,
    "output_tokens": 208,
    "total_tokens": 224
  },
  "data": [{"b64_json": "<base64-image-data>"}]
}

O worker decodifica a imagem, grava output/<job-id>.jpeg e adiciona uma linha de sucesso a output/manifest.jsonl. Se um modelo retornar uma URL em vez disso, o worker faz o download e armazena o caminho local no mesmo formato de manifesto.

O código foi verificado quanto à sintaxe localmente. Uma chamada de geração ao vivo ainda requer sua chave CometAPI, portanto execute o teste de fumaça com um job antes de aumentar a concorrência.

Quanto Custa a Geração de Imagens em Lote?

A precificação deve ser carimbada com data porque as tarifas dos modelos mudam. Em 20 de agosto de 2026, o catálogo de modelos ao vivo da CometAPI retornou os seguintes campos de preço base e uma razão de cobrança de 0.8:

  • gpt-image-2: $5 por 1M tokens de entrada e $30 por 1M tokens de saída; aplicando a razão listada, obtêm-se tarifas efetivas de $4 e $24 por 1M de tokens.
  • doubao-seedream-4-5-251128: $0.04 por solicitação; aplicando a razão listada, obtêm-se $0.032 por solicitação.

O guia de preços da CometAPI explica a cobrança baseada em tokens para modelos com precificação oficial e a cobrança por chamada para modelos com preço por solicitação. O script lê o catálogo quando é executado e usa a mesma regra:

token cost = ratio × (input tokens × input rate + output tokens × output rate) / 1,000,000

request cost = ratio × per-request price

Por exemplo, a resposta documentada do GPT Image acima relata 16 tokens de entrada e 208 tokens de saída. Usando os valores do catálogo de 20 de agosto, esse resultado ilustrativo é estimado em cerca de $0.005056. O total real muda com o modelo, a qualidade, o tamanho, o prompt, as novas tentativas e o uso na resposta. Considere a resposta da API e o painel de uso da conta como o registro de cobrança, não uma suposição fixa por imagem.

Reserve orçamento também para trabalho malsucedido. Uma nova tentativa após um tempo limite não confirmado pode produzir um segundo resultado faturável, e uma imagem tecnicamente bem-sucedida que falhar na revisão ainda consome orçamento. Acompanhe tanto o custo da API quanto a taxa de aceitação:

effective cost per accepted image = total batch spend / approved images

Erros Comuns da API de Geração de Imagens e Como Corrigi-los

SintomaCausa provávelCorreção
401Chave ausente ou inválidaVerifique a COMETAPI_KEY no lado do servidor
400Modelo inválido ou opção não suportadaReconfira o catálogo ao vivo e remova campos específicos do modelo
429Concorrência excessivaReduza MAX_WORKERS e mantenha o backoff exponencial
5xx repetidosFalha temporária upstreamRepita com limite, depois mova o job para uma fila de dead-letter
Sem imagem salvaA resposta usou um contêiner diferenteInspecione data[0] e dê suporte a b64_json ou url
Gasto duplicadoJob foi reproduzido após falha parcialUse IDs duráveis e confirme apenas após o armazenamento bem-sucedido

Não repita todas as falhas. Uma solicitação 400 permanente continuará inválida, enquanto um loop ilimitado de repetição 429 pode transformar um pico de tráfego em um backlog.

Boas Práticas para Geração de Imagens em Produção em Escala

Migre de JSON Lines para uma fila durável quando vários workers estiverem envolvidos. Defina um tempo de visibilidade maior do que o tempo máximo de geração, confirme um job apenas após a imagem e o manifesto serem armazenados e envie jobs exaustos para uma fila de dead-letter para revisão.

Mantenha controles opcionais em configuração específica do modelo. Um payload compartilhado deve conter apenas campos comuns como model, prompt e n: 1; adicione quality, size ou output_format apenas depois que a documentação do modelo selecionado os confirmar. Se adicionar roteamento de fallback, escolha um modelo que suporte a mesma tarefa e reconstrua o payload para esse modelo em vez de repetir cegamente opções específicas de provedor.

Armazene a chave da API em um gerenciador de segredos, restrinja a entrada de prompt, verifique os ativos gerados conforme sua política e mantenha URLs de provedor fora de registros de produtos de longo prazo. Registre ID do job, ID do modelo, latência, tentativas, uso, caminho de armazenamento, resultado da revisão e a data do snapshot do catálogo. Esses campos permitem comparar modelos pelo custo por imagem aprovada em vez de apenas pelo preço anunciado.

Por fim, defina limites orçamentários: tamanho máximo do lote, limite de novas tentativas por job, alerta de gasto diário e uma condição de parada quando a taxa de aprovação cair. Escalar um prompt ruim mais rápido não é uma otimização.

FAQs sobre Automação de Geração de Imagens em Escala

Qual é a maneira mais fácil de automatizar a geração de imagens em escala sem gerenciar várias APIs?

Use um único fluxo de fila e armazenamento, depois envie solicitações de imagem compatíveis por meio de uma única chave CometAPI e https://api.cometapi.com/v1/images/generations. Altere o ID do modelo na sua camada de roteamento em vez de manter autenticação separada e SDKs de provedores.

Posso enviar uma única solicitação e pedir que vários modelos de imagem gerem ao mesmo tempo?

O exemplo envia um modelo por job. Fan-out é um fluxo de trabalho de aplicativo: duplique um job com IDs distintos e valores de modelo distintos e compare as saídas armazenadas. Isso mantém o custo e o status de revisão atribuíveis a cada modelo.

Qual concorrência devo usar?

Não existe um número universal para todas as contas e modelos. Comece com um pool limitado pequeno, como quatro workers, monitore a latência e as respostas 429 e ajuste com base em evidências.

Devo armazenar a URL retornada ou a própria imagem?

Armazene a imagem no seu próprio armazenamento de objetos. Uma URL retornada pode ser temporária, enquanto modelos GPT Image podem retornar conteúdo base64 em vez de uma URL.

Como escolho o modelo mais barato?

Calcule o custo por imagem aceita, não apenas o preço por chamada. Inclua cobranças por tokens ou solicitações, novas tentativas, downloads com falha, ativos rejeitados, pós-processamento e revisão humana. Reconfira o catálogo ao vivo de modelos no dia em que publicar ou implantar.

Onde devo verificar o endpoint e o formato da resposta?

Use o CometAPI Quick Start, a documentação do catálogo de modelos, a referência de geração de imagem e o guia de preços.

Continuar aprendendo

Conecte este artigo à próxima decisão.

Ver todos os tópicos
Publicado em Sep 6, 2026
Última atualização Sep 6, 2026
3 visualizações
Revisado para maior clareza, atribuição de fontes e terminologia de API atual.

Pronto para reduzir os custos de desenvolvimento de IA em 20%?

Comece gratuitamente em minutos. Créditos de avaliação gratuita incluídos. Não é necessário cartão de crédito.

Leia Mais