Conteúdo
Tutorial de API do ComfyUI: automatize a geração de imagens com Python
O próprio ComfyUI é um servidor HTTP. Cada execução pela interface, na prática, chama a API. Você pode enviar fluxos de trabalho por código para:
- Gerar muitas imagens em lote (por exemplo, criar uma imagem para cada um de 100 produtos)
- Integrar o ComfyUI ao seu site, chatbot ou fluxo de automação do n8n
- Gerar conteúdo automaticamente em horários programados
1. Exporte um fluxo de trabalho no formato API
O JSON de um fluxo de trabalho salvo pela interface inclui informações de layout. A API precisa de outro formato, mais enxuto:
- Crie e teste o fluxo de trabalho no ComfyUI.
- No menu no canto superior esquerdo, selecione File → Export (API) e salve como
workflow_api.json.

O formato da API é assim: cada nó é identificado pela sua ID:
{
"3": {
"class_type": "KSampler",
"inputs": {
"seed": 123456,
"steps": 25,
"cfg": 6,
"sampler_name": "dpmpp_2m",
"scheduler": "karras",
"denoise": 1,
"model": ["4", 0],
"positive": ["6", 0],
"negative": ["7", 0],
"latent_image": ["5", 0]
}
},
"6": {
"class_type": "CLIPTextEncode",
"inputs": { "text": "a cat sitting on a windowsill", "clip": ["4", 1] }
}
}
["4", 0] significa “a saída 0 do nó 4”. Anote as IDs dos nós que você quer alterar (por exemplo, o prompt positivo é 6 e o KSampler é 3).
2. Envie uma tarefa
curl -X POST http://127.0.0.1:8188/prompt \
-H "Content-Type: application/json" \
-d "{\"prompt\": $(cat workflow_api.json)}"
Use o prompt_id da resposta para consultar o resultado.
3. Exemplo completo em Python
import json
import random
import time
import urllib.parse
import urllib.request
SERVER = "http://127.0.0.1:8188"
def queue(workflow: dict) -> str:
data = json.dumps({"prompt": workflow}).encode()
req = urllib.request.Request(f"{SERVER}/prompt", data=data, headers={"Content-Type": "application/json"})
return json.load(urllib.request.urlopen(req))["prompt_id"]
def wait_for(prompt_id: str) -> dict:
while True:
history = json.load(urllib.request.urlopen(f"{SERVER}/history/{prompt_id}"))
if prompt_id in history:
return history[prompt_id]
time.sleep(1)
def download_images(result: dict, prefix: str):
for node_output in result["outputs"].values():
for i, img in enumerate(node_output.get("images", [])):
query = urllib.parse.urlencode(
{"filename": img["filename"], "subfolder": img["subfolder"], "type": img["type"]}
)
with urllib.request.urlopen(f"{SERVER}/view?{query}") as r, open(f"{prefix}_{i}.png", "wb") as f:
f.write(r.read())
workflow = json.load(open("workflow_api.json", encoding="utf-8"))
subjects = ["a red bicycle", "a vintage camera", "a cup of bubble tea"]
for n, subject in enumerate(subjects):
workflow["6"]["inputs"]["text"] = f"product photo of {subject}, white background, studio lighting"
workflow["3"]["inputs"]["seed"] = random.randint(0, 2**32 - 1)
pid = queue(workflow)
print("Enviado", subject, pid)
download_images(wait_for(pid), f"product_{n}")
print("Concluído", subject)
Substitua "6" e "3" pelas IDs dos nós correspondentes no seu fluxo de trabalho.
Envie imagens de entrada
Quando a geração de imagem a partir de imagem ou o ControlNet exigir uma imagem de entrada, faça o upload primeiro:
curl -X POST http://127.0.0.1:8188/upload/image -F "image=@./input.jpg"
A resposta informa o nome do arquivo. Preencha esse nome no campo image do nó Load Image.
Progresso em tempo real: WebSocket
Conecte-se a ws://127.0.0.1:8188/ws?clientId=custom-ID (envie o mesmo client_id no JSON ao iniciar a tarefa) para receber em tempo real os nós em execução, a porcentagem de progresso e a notificação de conclusão. Isso é útil para criar uma interface com barra de progresso.
Outros endpoints comuns
| Endpoint | Uso |
|---|---|
GET /queue | Fila atual |
POST /interrupt | Interromper a execução atual |
GET /history | Histórico |
GET /object_info | Definições de todos os nós (entradas, saídas e opções) |
GET /system_stats | Informações do sistema e da placa de vídeo |
Cuidados na implantação
- A API do ComfyUI não tem mecanismo de autenticação. Não a exponha diretamente à internet. Faça chamadas a partir do seu próprio backend e implemente nele autenticação e limites de uso.
- Para fazer chamadas de outros computadores, inicie o ComfyUI com
--listene restrinja as origens pelo firewall. - Ao gerar imagens em lote por muito tempo, lembre-se de limpar a pasta
outputregularmente.
Você também pode integrar o ComfyUI ao n8n: use o nó HTTP Request para enviar o fluxo de trabalho e, em seguida, Wait e um loop para consultar o resultado. Veja como usar o n8n no tutorial do n8n.
Atualizado 12 de outubro de 2026