【ComfyUI】python调用生图API,实现批量出图

官方给的示例:

https://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.pyhttps://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.pyhttps://github.com/comfyanonymous/ComfyUI/blob/master/script_examples/websockets_api_example.py

一、环境准备

1.1 comfyui环境安装参考

【本地运行AI绘画】ComfyUI的安装与使用(一)(windows+1660ti 6G显存)

1.2  调用可能需要安装的python包 

对应  import websocket

pip install websocket-client 
pip install json 

1.3 comfyui打开开发者模式,可以直接下载任意工作流 api文件

1.3.1 在英文最新界面打开

1.3.2  中文老界面打开

1.4 加载默认工作流,下载api,看看

保存结果是基本json 与工作流相似 不要弄混了

二、 代码

2.1  指定任意模型进行生图(找到名字和在api中的位置)

局部代码

def text_to_image(prompt_text,model_name="SD1.X/dreamshaper_8.safetensors",seed=6,steps=20,width=512,height=256,batch_size=2,local_save_dir='./output',api_file='api_demo.json'):prompt = read_json(api_file)prompt["3"]["inputs"]["seed"] = seed  # 换一个数字不一样的图prompt["3"]["inputs"]["steps"] =steps   # 换一个数字不一样的图prompt["4"]["inputs"]["ckpt_name"] = model_nameprompt["5"]["inputs"]["width"] = widthprompt["5"]["inputs"]["height"] = heightprompt["5"]["inputs"]["batch_size"]=batch_sizeprompt["6"]["inputs"]["text"] = prompt_text  

2.1.1  运行结果

2.1.2 参数解析

在comfyui的界面里确认有的模型名免得传错

打开保存的  api_demo.json,找到相应的代码改写

2.1.3 完整代码

#This is an example that uses the websockets api to know when a prompt execution is done
#Once the prompt execution is done it downloads the images using the /history endpointimport websocket #NOTE: websocket-client (https://github.com/websocket-client/websocket-client) #  pip install websocket-client
import uuid
import json
import urllib.request
import urllib.parse
import osserver_address = "127.0.0.1:8188"
client_id = str(uuid.uuid4())def queue_prompt(prompt):p = {"prompt": prompt, "client_id": client_id}data = json.dumps(p).encode('utf-8')req =  urllib.request.Request("http://{}/prompt".format(server_address), data=data)return json.loads(urllib.request.urlopen(req).read())def get_image(filename, subfolder, folder_type):data = {"filename": filename, "subfolder": subfolder, "type": folder_type}url_values = urllib.parse.urlencode(data)with urllib.request.urlopen("http://{}/view?{}".format(server_address, url_values)) as response:return response.read()def get_history(prompt_id):with urllib.request.urlopen("http://{}/history/{}".format(server_address, prompt_id)) as response:return json.loads(response.read())def get_images(ws, prompt):prompt_id = queue_prompt(prompt)['prompt_id']output_images = {}while True:out = ws.recv()if isinstance(out, str):message = json.loads(out)if message['type'] == 'executing':data = message['data']if data['node'] is None and data['prompt_id'] == prompt_id:break #Execution is doneelse:# If you want to be able to decode the binary stream for latent previews, here is how you can do it:# bytesIO = BytesIO(out[8:])# preview_image = Image.open(bytesIO) # This is your preview in PIL image format, store it in a globalcontinue #previews are binary datahistory = get_history(prompt_id)[prompt_id]for node_id in history['outputs']:node_output = history['outputs'][node_id]images_output = []if 'images' in node_output:for image in node_output['images']:image_data = get_image(image['filename'], image['subfolder'], image['type'])images_output.append(image_data)output_images[node_id] = images_outputreturn output_imagesdef read_json(api_file="controlnet_api.json"):# print('api_file',api_file)with open (api_file,"r",encoding="utf-8") as file_json:prompt_text=json.load(file_json)return prompt_textdef text_to_image(prompt_text,model_name="SD1.X/dreamshaper_8.safetensors",seed=6,steps=20,width=512,height=256,batch_size=2,local_save_dir='./output',api_file='api_demo.json'):prompt = read_json(api_file)prompt["3"]["inputs"]["seed"] = seed  # 换一个数字不一样的图prompt["3"]["inputs"]["steps"] =steps   # 换一个数字不一样的图prompt["4"]["inputs"]["ckpt_name"] = model_nameprompt["5"]["inputs"]["width"] = widthprompt["5"]["inputs"]["height"] = heightprompt["5"]["inputs"]["batch_size"]=batch_sizeprompt["6"]["inputs"]["text"] = prompt_text  ws = websocket.WebSocket()ws.connect("ws://{}/ws?clientId={}".format(server_address, client_id))images = get_images(ws, prompt)os.makedirs(local_save_dir, exist_ok=True)for node_id in images:for i,image_data in enumerate(images[node_id]):from PIL import Imageimport ioimage = Image.open(io.BytesIO(image_data))# image.show()save_path=f"{local_save_dir}/{prompt_text[:20]}_{i}.png"image.save(save_path)print(f"Saved image to {save_path}")ws.close()if __name__ == "__main__":text_to_image(prompt_text="a boy",api_file=r'D:\deploy2\api_demo.json')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6652.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Docker 容器中安装 Oracle 19c

在 Docker 容器中安装 Oracle 19c 是可行的,但它相较于其他数据库(如 MySQL、PostgreSQL 等)会复杂一些,因为 Oracle 数据库有一些特定的要求,如操作系统和库的依赖,以及许可证问题。 不过,Ora…

macos的图标过大,这是因为有自己的设计规范

苹果官方链接:App 图标 | Apple Developer Documentation 这个在官方文档里有说明,并且提供了sketch 和 ps 的模板。 figma还提供了模板: Figma

告别手动编辑:如何用Python快速创建Ansible hosts文件?

在自动化运维领域,Ansible是一款非常强大的工具,它可以帮助我们管理和配置大量的服务器。为了让Ansible能够有效地管理这些服务器,我们需要一个hosts清单文件,该文件定义了Ansible要管理的目标主机。在实际应用中,我们…

macOS安装Gradle环境

文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21,如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新(截止2024.9.13)Oracle JDK操作记录 安装Gradle 下载Gradle,解压将其存放到资源java/env目录…

【嵌入式】总结——Linux驱动开发(三)

鸽了半年,几乎全忘了,幸亏前面还有两篇总结。出于快速体验嵌入式linux的目的,本篇与前两篇一样,重点在于使用、快速体验,uboot、linux、根文件系统不作深入理解,能用就行。 重新梳理一下脉络,本…

【29】Word:李楠-学术期刊❗

目录 题目​ NO1.2.3.4.5 NO6.7.8 NO9.10.11 NO12.13.14.15 NO16 题目 NO1.2.3.4.5 另存为手动/F12Fn光标来到开头位置处→插入→封面→选择花丝→根据样例图片,对应位置填入对应文字 (手动调整即可)复制样式:开始→样式对话框→管理…

ThinkPHP 8请求处理-获取请求对象与请求上下文

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用Composer初始化ThinkPHP 8应用_thinkphp8 compos…

某书x-s 、x-t 算法 python纯算56版本

文章目录 声明iv的获取key的获取python 算法还原声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! xhs xs自从2023年5月31号更新之后直到2024年7月之前好像就没有再怎么更新了 但是7月之…

【记录自开发的SQL工具】工具字符拼接、Excel转sql、生成编码、生成测试数据

记录自己开发的一个SQL聚合工具 功能介绍: 文本加引号 给多行文本前后添加引号,并用逗号连接,直接复制到 sql 中的 in 条件中 Excel转SQL 适用于将Excel表格的数据,批量导入到数据库的场景 此工具能快速将excel表格转换为i…

Linux安装mysql5.7

CentOS7安装MySQL(完整版) - oldmonk - 博客园 下载|安装 下载并安装MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm使用上面的命令就直接下载了安装用的Yum Repository,大…

汽车定速巡航

配备定速巡航功能的车型,一般在方向盘附近设有4~6个按键(可能共用键位)。 要设置定速巡航,不仅需要方向盘上的按键,还要油门配合。 设置的一般流程: 开关:类似步枪上的“保险”,按…

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析

Python 轻松扫描,快速检测:高效IP网段扫描工具全解析 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着…

软件测试 —— jmeter(2)

软件测试 —— jmeter(2) HTTP默认请求头(元件)元件作用域和取样器作用域HTTP Cookie管理器同步定时器jmeter插件梯度压测线程组(Stepping Thread Group)参数解析总结 Response Times over TimeActive Thre…

利用 SAM2 模型探测卫星图像中的农田边界

将 Segment Anything Model Version 2 应用于卫星图像以检测和导出农业地区田地边界的分步教程 🌟 简介 手动绘制田地边界是最耗时的任务之一,其准确性取决于绘制者的表现。然而,精确的边界检测在很多领域都有应用。例如,假设您…

初步搭建并使用Scrapy框架

目录 目标 版本 实战 搭建框架 获取图片链接、书名、价格 通过管道下载数据 通过多条管道下载数据 下载多页数据 目标 掌握Scrapy框架的搭建及使用,本文以爬取当当网魔幻小说为案例做演示。 版本 Scrapy 2.12.0 实战 搭建框架 第一步:在D:\pyt…

人脸识别打卡系统--基于QT(附源码)

逃离舒适区 项目源代码放在我的仓库中,有需要自取 项目地址 https://gitcode.com/hujiahangdewa/Face_recognition.git 文章目录 一、项目结构分析二、服务器的搭建三、客户端的搭建四、人脸识别库的申请五、基于人脸识别库的识别判断六、QT人脸识别----调用百度ai…

微信小程序中常见的 跳转方式 及其特点的表格总结(wx.navigateTo 适合需要返回上一页的场景)

文章目录 详细说明总结wx.navigateTo 的特点为什么 wx.navigateTo 最常用?其他跳转方式的使用频率总结 以下是微信小程序中常见的跳转方式及其特点的表格总结: 跳转方式API 方法特点适用场景wx.navigateTowx.navigateTo({ url: 路径 })保留当前页面&…

设计模式的艺术-享元模式

结构性模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解享元模式 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。 在享元模式中,存储这些共享实例对象的地方称为享元池&…

20250122-正则表达式

1. 正则标记 表示一位字符:\\ 表示指定的一位字符:x 表示任意的一位字符:. 表示任意一位数字:\d 表示任意一位非数字:\D 表示任意一个字母:[a-zA-Z](大写或小写) 表示任意一个…

OpenEuler学习笔记(八):安装OpenEuler

在VMware Workstation中安装OpenEuler 准备工作 下载并安装VMware Workstation虚拟机软件。前往OpenEuler官网下载OpenEuler系统镜像文件。 创建虚拟机 打开VMware Workstation,点击“创建新的虚拟机”,选择“自定义”,点击“下一步”。选择…