comfyUI api 相关

现在,我有一个 comfyui 服务器,有了想要画的prompt,我应该怎么用起来?

如果是 stable diffusion,直接 post /prompt 即可,回传的直接就是图片。如果是图生图,POST /sdapi/v1/img2img 传递图片和文本 prompt,返回也是图片。

stable diffusion 的生成能在一次请求之内完成,很有效也很简单,但当然 comfyUI 多出来的功能也有自己的作用。例如多用户管理,服务器信息监测,不过主要还是由于 comfyUI 等待队列。

(当然我很希望comfyUI能够保留一个像sd这样简单的接口,能配置的不过但能用,不过似乎没有)

comfyUI api 绘图 大体流程

以一个最简的文生图流程为例:

第一步 连接 websocket

连接 /ws

需要传递参数 client_id

响应:

如果安装了一些插件(例如 服务器状态监控),则会有定时的响应。

如果本机(连接时和提交请求时的 client id 一致)画图完成,则会响应,但是不会返回图片,而是返回状态信息和 prompt_id。

第二步 提交任务

post /prompt

需要包含 client_id 和 prompt,注意这个prompt不是文本prompt,而是json表示的工作流。

响应:

1
2
3
4
5
{
"prompt_id": "ee2b584d-175b-4d62-88ce-d6ae4aa4499e",
"number": 1,
"node_errors": {}
}
  • prompt_id:一个任务的唯一 id
  • number:任务序号,从 1 开始
  • node_errors:是否有错误,具体是哪个节点出错了

第三步 请求文件名

GET /history/{prompt_id}

总而言是获得了 prompt_id。请求 /history/{prompt_id},就会得到 prompt(节点内容),status,outputs 等,其中 outputs 是各个节点的输出,大致如下:

1
2
3
4
5
6
7
8
9
10
"outputs": {
"9": {
"images": [
{
"filename": "ComfyUI_00065_.png",
"subfolder": "",
"type": "output"
}
]
}

意思就是 9 节点的 图片 输出包含了图片,图片名为 filename 变量,type 和 subfolder 也比较重要。

如果是一个简单的文生图直出工作流,那确实只有一个输出;但是如果是较为复杂的(分步的,而且有多步都接 output 节点),那就需要明白哪一个输出是需要的。

第四步 获取图片

GET /view

参数:

  1. filename
  2. type
  3. subfolder

也就是上一步获取到的输出。

响应:

直接响应图片。

总结

文生图必须使用的 api 大致如上。也就是:

  1. websocket 连接,为的是获取完成信号和 prompt_id
  2. 提交 prompt,即 post /prompt,获取prompt_id
  3. 等待生成完成
  4. 收到生成完成信号
  5. 通过 prompt_id 请求文件名
  6. 获取文件

除此之外,comfyUI 还有很多用于管理、监控的 api,例如取消任务,获取本机存在的可用节点。

comfyUI api 概览

GET /history

响应格式是:

graph TD;
    {prompt_id} --> prompt;
    {prompt_id} --> outputs;
    {prompt_id} --> status;

GET /history/{prompt_id}

GET /object_info

GET embeddings

GET /extensions

GET /view

GET /prompt

POST /prompt

GET /queue

POST /queue

POST /upload/image

POST /upload/mask

POST /interrupt


comfyUI api 相关
http://blog.wspdwzh.space/2025/03/02/comfyUI-api-相关/
作者
peter?
发布于
2025年3月2日
许可协议