网站建设需要注意哪些细节,购物网站设计开题报告,做网站怎么选择上市公司,重庆制作网站首页一、为什么要使用comfyui的api?对比webui的api#xff0c;它有什么好处#xff1f;
1、自带队列 2、支持websocket 3、无需关心插件是否有开放api接口#xff0c;只要插件在浏览器中可以正常使用#xff0c;接口就一定可以使用 4、开发人员只需关心绘图流程的搭建 5、切换…一、为什么要使用comfyui的api?对比webui的api它有什么好处
1、自带队列 2、支持websocket 3、无需关心插件是否有开放api接口只要插件在浏览器中可以正常使用接口就一定可以使用 4、开发人员只需关心绘图流程的搭建 5、切换模型、进度查询soeasy 6、轻松实现图片生成时的渐变效果 7、支持中断绘图任务 8、无需繁琐的base64图片转换
其实我们之前一直都是用web-ui的api,最近web-ui被我们给废弃掉了主要是因为comfyui基本上解决了webui做开发所有的弊端首先列队的问题不用去管它自己有列队插件这块是最方便的用上comfyui以后就不要去管插件是怎么调用的只要你在工作流里面用了什么插件保存为api之后他直接下发后台就会自动去运行也不用去管插件具体怎么调用。如果是webui,有些比较良心的插件直接把接口写好然后暴露出来 如果没写的话你用起来就会非常的麻烦还得去研究它是怎么去调用的。所以 小伙伴们别再执着用webui的api了,那个确实反人类假如做开发的话问题会很多比较烦人就像获取任务进度还有这个线程锁切换模型这块都非常繁琐。我为了研究那东西 看代码看得头都大了 整整研究了一个月才把代码改好。
二、接口详解
本文主要介绍 stable diffusion API 调用准确来说是对 stable diffusion comfyui 的 API 调用。需要apifox接口文件的可以查看 https://gitee.com/BTYY/wailikeji-chatgpt/blob/master/comfyui-api.md
1、绘图接口POST /prompt
注意该接口只做绘图任务的下发然后返回任务ID信息。并不会直接返回最终的结果图
与webui的api不同的是comfyui的api并没有单独区分文生图、图生图的接口而是所有的绘图任务的下发全部都使用POST /prompt。那具体是文生图、图生图、又或者是换脸、倒推关键词等取决于你的参数
需要上传的参数只有两个
请求参数
名称类型必选说明client_idstring是任务ID,由客户端生成用于标记任务是谁发起的promptjson是任务参数
返回参数
名称类型说明prompt_idstring任务IDnumberint当前任务序号可用于后续获取需要等待任务数的计算node_errorsjson错误信息 返回示例 {prompt_id: bd2cfa2c-de87-4258-89cc-d8791bc13a61,number: 501,node_errors: {}
}使用说明
client_id任务ID,由客户端生成用于标记任务是谁发起的,相当于告诉comfyui该绘图任务是由用户A发起的后续comfyui就会通过websocket将属于用户A的绘图信息推送给你
promptprompt所传的是一个json数据它是由comfyui浏览器通过保存api生成的json数据如下图
至于正反、提示词、模型、vae、图片尺寸、批次、提示词相关性、随机种子、采样器、降噪值等参数只需替换json中对应的参数为用户上传的参数即可 比如用户上传的图片尺寸是768*512那你只需将json数据中的width改为768、height改为512即可其他的参数也是同样的道理
2、websocket/ws?client_idXXXXXXXX
client_id后面的参数即为上面/prompt接口中上传给comfyui的client_id假如没有上传client_id那comfyui就不知道连上该websocket的用户是谁也就无法进行信息推送comfyui拿到client_id后即可知道当前是哪个用户后续就会通过websocket将属于该用户的绘图信息精准推送给他
注意websocket只需做监听处理无需通过websocket向comfyui发送任何消息
websocket数据解析 主要有两种数据格式 1、文本数据文本数据主要通知以下几个绘图信息 通知任务变更、当前执行的步骤、进度 2、二进制数据即图片预览信息
一文本数据详解
1任务变更通知
{type:status,data:{status:{exec_info:{queue_remaining:7}}}
}当你收到type为status信息时这是comfyui在告诉你当前任务数发生变更queue_remaining是指当前还有多少个任务需要处理。
注意此处的queue_remaining并不是告诉你在你的任务之前还有多少个任务需要处理而是总的 所以如果你也想像我一样见下图当还没轮到你的绘图任务时显示还需等待多少个任务你就需要借助comfyui的另一个接口GET /queue获取详细任务队列信息正在运行的以及挂起的。该接口会返回挂起的任务信息其中有prompt_id信息和number信息你可以根据这number信息获取到当前任务排在第几位。具体如何调用这里就不进行展开 2当前任务开始执行
{type:execution_start,data:{prompt_id:3935f7c3-ec38-4d94-843f-86fe86c6d384}
}当你收到type为execution_start信息时这是comfyui在告诉你你的任务idprompt_id为“3935f7c3-ec38-4d94-843f-86fe86c6d384”的任务当前正在被执行
3当前任务执行的步骤信息
{type:executing,data:{node:5,prompt_id:3935f7c3-ec38-4d94-843f-86fe86c6d384}
}当你收到type为executing信息时这是comfyui在告诉你你的任务idprompt_id为“3935f7c3-ec38-4d94-843f-86fe86c6d384”的任务当前正在执行节点5的步骤此处你可以解析到前端显示当前执行的步骤名称如下图所示
4当前进度信息
{type:progress,data:{value:1,max:10}
}当你收到type为progress信息时这是comfyui在告诉你当前步骤执行的进度value是当前的步数max是总的步数如下图所示
5绘图结束
{type:executing,data:{node:null,prompt_id:37099310-a790-44f4-8d13-4f4d5f69c891}
}绘图结束时type类型仍然是executing和前面的3是一样的区别主要在于node为null,也就是当typeexecuting,且nodenull的时候说明流程已经跑完此时需要通过接口GET /history/{prompt_id}获取输出的图片信息。底下是通过history获取到的图片信息
{37099310-a790-44f4-8d13-4f4d5f69c891: {略。。。。。。。。。。outputs: {18: {images: [{filename: ComfyUI_temp_slqio_00001_.png,subfolder: ,type: temp},{filename: ComfyUI_temp_slqio_00002_.png,subfolder: ,type: temp},{filename: ComfyUI_temp_slqio_00003_.png,subfolder: ,type: temp},{filename: ComfyUI_temp_slqio_00004_.png,subfolder: ,type: temp}]},22: {images: [{filename: ComfyUI_temp_rfvdr_00001_.png,subfolder: ,type: temp},{filename: ComfyUI_temp_rfvdr_00002_.png,subfolder: ,type: temp},{filename: ComfyUI_temp_rfvdr_00003_.png,subfolder: ,type: temp},{filename: ComfyUI_temp_rfvdr_00004_.png,subfolder: ,type: temp}]},24: {images: [{filename: ComfyUI_00702_.png,subfolder: ,type: output},{filename: ComfyUI_00703_.png,subfolder: ,type: output},{filename: ComfyUI_00704_.png,subfolder: ,type: output},{filename: ComfyUI_00705_.png,subfolder: ,type: output}]}}}
}outputs中的内容就是最终生成的图片信息我们通过将图片信息进行拼接即可获取到图片的url访问地址 例如ComfyUI_00702_.png这张图片其拼接后的访问地址就是 http://127.0.0.1:8188/view?filenameComfyUI_00702_.pngtypeoutput
该地址实际是使用了comfyui的view接口
3、图片的在线预览接口GET /view
图片的在线预览接口上传图像生图图像蒙蔽图像均通过该接口预览
请求参数
名称位置类型必选说明filenamequerystring是图片名称typequerystring否图片存放位置的文件夹input为长传图片output为生成的图片subfolderquerystring否子文件夹(没有可不填)previewquerystring否预览channelquerystring否无
在前面的websocket中我们通过history获取最终的图片信息我们将图片信息进行拼接即可获取到图片的url访问地址就是通过该接口获取到图片
二二进制数据详解
二进制数据就是在绘图过程中如果在采样器中有开启图片预览则comfyui会以二进制数据的方式推送给你如果没有开启则没有如下
总结
至此stable diffusion comfyui的api的整个调用逻辑已经走完无论是文生图、图生图、换脸、倒推关键词等都是走相同的流程。你们在实际开发过程中也可以参考我的项目来实现需要我的comfyui的workflow.json工作流的可以联系我获取v:ai_009966
源码地址 https://ext.dcloud.net.cn/plugin?id12603 项目体验地址 https://pcai.wailikeji.com/
需要整个项目源码的联系我v:ai_009966