推理结果回调
设置回调
请求 /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
快速搭建回调服务
- 安装依赖
pip install uvicorn fastapi
- 编写服务代码
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()})
- 启动服务
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)
附:生成图片接口说明
POST /api/v1/comfyui/generate
接口描述
该接口用于异步生成图片,用户可指定一个回调地址,以便在图片生成任务完成后接收通知。
参数
- endpoint (string, 可选): 自助推理服务的 endpoint 地址。
- callback_url (string, 可选): 任务完成后的回调通知地址,必须支持从外网通过 POST 方式调用。