跳到主要内容

推理结果回调

设置回调

请求 /comfyui/v1/generate 接口时填写 callback_url 参数,开启异步任务结束后回调通知,用户不再需要轮询回调接口。

回调接口发送的 body 内容和 /comfyui/v1/result 保持一致(如下 ComfyuiResultResponse

回调接口必须能够接受 POST 请求方式,并且能够解析下述 body 内容。

回调请求字段说明(ComfyuiResultResponse)

  • request_id (string): 此次请求的唯一标识 ID。
  • status (int64): 表示任务的当前状态。其中: 0 - 运行中, 1 - 已完成, 2 - 失败
  • message (string, 可选): 如果任务失败,此字段会包含失败的具体原因。
  • results ([]ImageResult): 包含一个或多个任务结果的数组。

ComfyuiResult 说明

描述单个任务的结果。

字段说明

  • status (int64): 任务的状态,其中: 0 - 运行中, 1 - 已完成, 2 - 失败
  • url (string): 成功生成的图片

回调服务代码示例

通过 FastAPI 快速搭建回调服务

  1. 安装依赖
pip install uvicorn fastapi
  1. 编写服务代码 main.py
from fastapi import FastAPI
from pydantic import BaseModel, Field
from typing import List, Optional
from fastapi.responses import JSONResponse

app = FastAPI()


class ImageResult(BaseModel):
# 假设每个结果包括一个图片URL和一些其他详细信息
url: str = Field(alias="url")
status: int = Field(default=0, alias="status")


class ImageResultResponse(BaseModel):
request_id: str = Field(alias="request_id")
status: int = Field(default=0, alias="status") # 0 - 运行中, 1 - 已完成, 2 - 失败
message: Optional[str] = Field(default=None, alias="message")
results: List[ImageResult] = Field(default=[], alias="results")


@ app.post("/task_completed")
async def handle_task_completed(response: ImageResultResponse):
# 打印基本信息
print(f"Request ID: {response.request_id}")
print(f"Status: {response.status}")
if response.status == 2:
print(f"Error Message: {response.message}")

# 打印结果详情
if response.results:
print("Results:")
for index, result in enumerate(response.results, start=1):
print(f" Result {index}:")
print(f" Image URL: {result.url}")
print(f" Status: {result.status}")
else:
print("No results available.")

# 返回JSON响应
return JSONResponse(status_code=200, content={"message": "Task processed successfully", "data": response.dict()})
  1. 启动服务
uvicorn main:app --reload --host 0.0.0.0 --port 10001

注意:回调服务必须支持外网访问,如有需求,可以使用工作空间进行调试。

请求示例

回调方法 /task_completed

具体请求如下


import requests
import json

url = "https://api.lanrui.co/api/v1/comfyui/generate?endpoint={填入所启动的推理服务的endpoint,如下图红框所示,删除花括号}&callback_url={填入用于回调的callback地址,删除花括号}"

payload = json.dumps({
"prompt": {
"3": {
"class_type": "KSampler",
"inputs": {
"cfg": 8,
"denoise": 1,
"latent_image": ["5", 0],
"model": ["4", 0],
"negative": ["7", 0],
"positive": ["6", 0],
"sampler_name": "euler",
"scheduler": "normal",
"seed": 6578,
"steps": 20
}
},
"4": {
"class_type": "CheckpointLoaderSimple",
"inputs": {"ckpt_name": "dreamshaper_8.safetensors"}
},
"5": {
"class_type": "EmptyLatentImage",
"inputs": {"batch_size": 1, "height": 512, "width": 512}
},
"6": {
"class_type": "CLIPTextEncode",
"inputs": {"clip": ["4", 1], "text": "masterpiecesa2fs best 3 man"}
},
"7": {
"class_type": "CLIPTextEncode",
"inputs": {"clip": ["4", 1], "text": "bad hands"}
},
"8": {
"class_type": "VAEDecode",
"inputs": {"samples": ["3", 0], "vae": ["4", 2]}
},
"9": {
"class_type": "SaveImage",
"inputs": {"filename_prefix": "ComfyUI", "images": ["8", 0]}
}
}
})

headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {填入API Key,删除花括号}',
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

image

附:生成图片接口说明

POST /api/v1/comfyui/generate

接口描述

该接口用于异步生成图片,用户可指定一个回调地址,以便在图片生成任务完成后接收通知。

参数

  • endpoint (string, 可选): 自助推理服务的 endpoint 地址。
  • callback_url (string, 可选): 任务完成后的回调通知地址,必须支持从外网通过 POST 方式调用。