当前位置: 首页 > news >正文

stable diffusion comfyui的api使用教程

一、为什么要使用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任务ID
numberint当前任务序号,可用于后续获取需要等待任务数的计算
node_errorsjson错误信息

返回示例

{"prompt_id": "bd2cfa2c-de87-4258-89cc-d8791bc13a61","number": 501,"node_errors": {}
}
使用说明

client_id:任务ID,由客户端生成,用于标记任务是谁发起的,相当于告诉comfyui,该绘图任务是由用户A发起的,后续comfyui就会通过websocket将属于用户A的绘图信息推送给你

prompt:prompt所传的是一个json数据,它是由comfyui浏览器通过保存api生成的json数据,如下图
在这里插入图片描述

至于正反、提示词、模型、vae、图片尺寸、批次、提示词相关性、随机种子、采样器、降噪值等参数,只需替换json中对应的参数为用户上传的参数即可
在这里插入图片描述
比如用户上传的图片尺寸是768*512,那你只需将json数据中的width改为768、height改为512即可,其他的参数也是同样的道理!

2、websocket:/ws?client_id=XXXXXXXX

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在告诉你,你的任务id,prompt_id为“3935f7c3-ec38-4d94-843f-86fe86c6d384”的任务当前正在被执行

(3)当前任务执行的步骤信息:
{"type":"executing","data":{"node":"5","prompt_id":"3935f7c3-ec38-4d94-843f-86fe86c6d384"}
}

当你收到type为executing信息时,这是comfyui在告诉你,你的任务id,prompt_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,也就是当type=executing,且node=null的时候,说明流程已经跑完,此时需要通过接口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?filename=ComfyUI_00702_.png&type=output

该地址实际是使用了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?id=12603
项目体验地址:
https://pcai.wailikeji.com/

需要整个项目源码的联系我v:ai_009966

相关文章:

stable diffusion comfyui的api使用教程

一、为什么要使用comfyui的api?对比webui的api,它有什么好处? 1、自带队列 2、支持websocket 3、无需关心插件是否有开放api接口,只要插件在浏览器中可以正常使用,接口就一定可以使用 4、开发人员只需关心绘图流程的搭建 5、切换…...

Swift中的strong, weak, unowned

在 Swift 中,strong, weak, 和 unowned 关键词用于管理内存中对象的引用。这些关键词与 Swift 的自动引用计数(ARC)系统紧密相关,用于防止内存泄漏和强引用循环。下面是对这三种引用类型的简要说明: 1. Strong 默认行…...

Linux命令——ssh

Linux命令——ssh 背景 SSH(Secure Shell 的缩写)是一种网络协议,用于加密两台计算机之间的通信,并且支持各种身份验证机制。 历史上,网络主机之间的通信是不加密的,属于明文通信。这使得通信很不安全&a…...

在qml中,text如何左对齐,对齐方式有哪些?如何换行?

在Qt Quick(即QML)中,你可以使用Text组件的horizontalAlignment属性来控制文本的对齐方式。以下是一些常用的对齐方式: Align.Left: 文本左对齐。这是默认的对齐方式。 Align.Center: 文本居中对齐。 Align.Right: 文本右对齐。 …...

【Rust 易学教程】第 1 天:Rust 基础,基本语法

上一节:【Rust 易学教程】学前准备:Cargo, 你好 今天,我们正式进入 Rust 基础的学习。在本文的内容中,我会为大家介绍以下内容: 基本 Rust 语法: 变量、标量和复合类型、枚举、结构、引用、函数和方法。控…...

Linux(命令)——结合实际场景的命令 查找Java安装位置命令

前言 在内卷的时代,作为开发的程序员也需要懂一些Linux相关命令。 本篇博客结合实际应用常见,记录Linux命令相关的使用,持续更新,希望对你有帮助。 目录 前言引出一、查找Java安装位置命令1、使用which命令2、使用find命令3、查…...

C语言基础 -- scanf函数的返回值及其应用

前言、scanf函数有返回值 我们在作PTA上的编程作业时,经常在编译窗口会看到如下的信息: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result] 当时老师一定会告诉你,这个一个&qu…...

mac 安装 selenium + chrome driver

前言 使用 selenium 模拟浏览器渲染数据,需要依赖各浏览器的驱动才能完成,因此需要单独安装chrome driver 查看本地 chrome 浏览器的版本 可以看到我这里已经是 arm 架构下最新的版本了 下载对应的 chrome driver 访问下面的地址: Chrome…...

【阿里云】函数计算 X 通义千问快速部署

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…...

el-table本地与线上的样式不一致出现错乱

使用el-table的时候有几个表头是循环出来的,出现在本地运行的时候,表头内el-input输入框样式正常,但是发布以后出现样式错乱问题 线上样式错乱:​ 本地正常: 出现这个问题的原因是我有几个表头是循环出来的&#xff0…...

C语言--从键盘输入当月利润I,求应发奖金总数。

题目描述: 企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提成10%; 利润高于100000 元,低于200000元(1000001000000时,超过1000000元的部分按 1%提成。从键盘输入当月利润I,求应发奖金总数。 int main() {int m…...

记忆科技携手中国电信,一站式存储打造坚实数字底座

11月10日,以“数字科技 焕新启航”为主题的2023数字科技生态大会在广州盛大开幕,本次大会由中国电信、广东省人民政府联合举办,是一场数字科技领域的年度盛会。忆联母公司记忆科技作为中国电信的合作伙伴之一受邀参会,深度参与了大…...

基于ssm的学生档案管理系统(有报告)。Javaee项目,ssm项目。

演示视频: 基于ssm的学生档案管理系统(有报告)。Javaee项目,ssm项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍&#xff…...

阿里云服务中断事件:原因、影响与解决方案

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰 如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊 文章目录 阿里云服务中断事件:原因、影…...

搜维尔科技:「体育类」Movella Xsens极限运动捕捉测试

搜维尔科技:「体育类」Movella Xsens极限运动捕捉测试...

CSS常用示例100+ 【目录】

目前已有文章 11 篇 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS相关…...

Shopee买家通系统之注册虾皮买家号大概需要多少成本

想要注册大量的虾皮买家号,可以使用shopee买家通系统进行注册,这款软件可以全自动化的注册虾皮买家号,不过想要自动化更方便,对于账号资料有一定的要求。 1、现在注册虾皮买家号基本上都是需要用手机号注册了的,而虾皮…...

华为层层“能力外溢”,让数智世界一触即达——选择华为,让您的企业轻松数智化

作者 | 曾响铃 文 | 响铃说 7万多人现场观赛,手机信号不掉链子,能发图片视频、能分享朋友圈; 消防、闸机等多个安防系统联动,风险事件自动报告,观赛、办赛安心; 运营数据全面打通、实时更新&#xff0c…...

MHA实验和架构

什么是MHA? masterhight availabulity:基于主库的高可用环境下可以实现主从复制、故障切换 MHA的主从架构最少要一主两从 MHA的出现是为了解决MySQL的单点故障问题。一旦主库崩溃,MHA可以在0-30秒内自动完成故障切换。 MHA的数据流向和工…...

C语言——函数

导读 : 这篇文章主要讲解一下C语言函数的一些基本知识。 前言:函数的概念 C语言中的函数又常常被称为子程序,是用来完成某项特定的工作的一段代码。就像我们生活中的模块化建造技术,类比模块化建房子的过程:整个程序…...

DeepSeek基准测试避坑手册:92%开发者忽略的4大陷阱——硬件配置偏差、tokenizer不一致、batch size幻觉、温度值污染

更多请点击: https://codechina.net 第一章:DeepSeek基准测试避坑手册:92%开发者忽略的4大陷阱——硬件配置偏差、tokenizer不一致、batch size幻觉、温度值污染 硬件配置偏差:GPU显存与计算精度的隐性干扰 在A100(8…...

SAP-ABAP:变量、常量、结构与内表声明(10篇博客合集) 第五篇:声明时的键值设计技巧:结构与内表的主键、非主键配置指南

变量、常量、结构与内表声明(10篇博客合集) 第五篇:声明时的键值设计技巧:结构与内表的主键、非主键配置指南如果把内表比作一张内存中的“数据库表”,那么键就是这张表的索引甚至主键。键的设计直接决定了数据的唯一性…...

告别元素变动导致的报错:探索自动化测试脚本的 AI“自愈”能力

前言:一个所有测试人都经历过的噩梦 周三晚上十一点,CI/CD流水线再次亮起红灯。 你打开日志,满屏的NoSuchElementException扑面而来。仔细一看——前端团队在昨天的版本中重构了登录页面的DOM结构,原本的#login-btn变成了#signin-button-v2,30个测试用例因此全军覆没。 …...

Taotoken如何帮助教育科技产品实现个性化学习辅导

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken如何帮助教育科技产品实现个性化学习辅导 1. 场景与挑战 教育科技公司在开发个性化学习助手时,常常面临一个核…...

Postgresql基础实践教程(九)

⭐️⭐️⭐️⭐️⭐️ 完整数据详见 练习数据免费 ⭐️⭐️⭐️⭐️⭐️ 七十二、WITH查询(公用表表达式CTE) 1. SELECT 中的 WITH 2. 递归查询 3. 公用表表达式的物化 4. WITH中的数据修改语句 WITH提供了一种在主查询中写辅助语句的方法。这些语…...

3分钟开启PC游戏分屏派对:NucleusCoop让单机游戏秒变多人同屏神器

3分钟开启PC游戏分屏派对:NucleusCoop让单机游戏秒变多人同屏神器 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为热门PC游戏不支…...

如何快速定制Office界面:终极开源工具使用指南

如何快速定制Office界面:终极开源工具使用指南 【免费下载链接】office-ribbonx-editor An overhauled fork of the original Custom UI Editor for Microsoft Office, built with WPF 项目地址: https://gitcode.com/gh_mirrors/of/office-ribbonx-editor O…...

DLA功耗优化验证:tegrastats实战指南

重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

抖音批量下载助手:一键构建你的专属视频素材库

抖音批量下载助手:一键构建你的专属视频素材库 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 还在为手动保存抖音视频而烦恼吗?想要批量获取心仪创作者的精彩内容却无从下手&#x…...

计算机视觉的实战项目:从0到1搭建属于自己的图像识别系统

作为软件测试从业者,我们每天都在和各类功能验证、兼容性测试、自动化测试框架打交道,对AI领域的实战项目往往觉得“门槛高”“和日常工作不沾边”。但随着AI技术在互联网产品中的落地越来越深入,图像识别功能已经成为很多APP、智能硬件的核心…...