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 |
|
- prompt_id:一个任务的唯一 id
- number:任务序号,从 1 开始
- node_errors:是否有错误,具体是哪个节点出错了
第三步 请求文件名
GET /history/{prompt_id}
总而言是获得了 prompt_id。请求 /history/{prompt_id},就会得到 prompt(节点内容),status,outputs 等,其中 outputs 是各个节点的输出,大致如下:
1 |
|
意思就是 9 节点的 图片 输出包含了图片,图片名为 filename 变量,type 和 subfolder 也比较重要。
如果是一个简单的文生图直出工作流,那确实只有一个输出;但是如果是较为复杂的(分步的,而且有多步都接 output 节点),那就需要明白哪一个输出是需要的。
第四步 获取图片
GET /view
参数:
- filename
- type
- subfolder
也就是上一步获取到的输出。
响应:
直接响应图片。
总结
文生图必须使用的 api 大致如上。也就是:
- websocket 连接,为的是获取完成信号和 prompt_id
- 提交 prompt,即 post /prompt,获取prompt_id
- 等待生成完成
- 收到生成完成信号
- 通过 prompt_id 请求文件名
- 获取文件
除此之外,comfyUI 还有很多用于管理、监控的 api,例如取消任务,获取本机存在的可用节点。
comfyUI api 概览
GET /history
响应格式是:
graph TD;
{prompt_id} --> prompt;
{prompt_id} --> outputs;
{prompt_id} --> status;