ComfiUI API调用随记

来进行知识接力了:

首先了解下ComfiUI的API
stable diffusion comfyui的api使用教程-CSDN博客

对于ComfiUI,接口比较简单。查询接口比较容易看明白。
对于发起prompt的请求,如果需要图片的,则需预先上传图片给ComfiUI,获取返回的文件名进行调用。
 

发起调用后,实际上是加入队列,获得一个任务ID,通过ws实时获取对应的执行状态,进度等数据。当未执行时,则查询任务获得图片。

AI的解释
 

这段代码是一个使用websockets API的Python示例,用于检测提示执行何时完成。一旦提示执行完成,它将使用/history端点下载图像。

首先,导入所需的库,如websocket(需要安装websocket-client),uuid,json,urllib.request和urllib.parse。设置服务器地址和客户端ID。

定义几个函数:

  1. queue_prompt(prompt):向服务器发送一个提示,并返回包含prompt_id的响应。
  2. get_image(filename, subfolder, folder_type):从服务器下载指定的图像数据。
  3. get_history(prompt_id):获取与给定prompt_id关联的历史记录。
  4. get_images(ws, prompt):通过websocket接收消息,直到提示执行完成。然后获取历史记录并下载所有相关图像。

在主程序中,首先定义了一个JSON字符串prompt_text,表示要使用的提示。然后解析这个字符串为Python字典,并根据需要修改其中的文本提示和种子值。

接下来,创建一个WebSocket连接到服务器,并调用get_images()函数来获取图像。最后,显示输出图像(这部分已注释掉)。

简而言之,这段代码的主要目的是使用websockets API与服务器通信,以执行提示并在提示完成后下载生成的图像。

AI加上注释的代码

# 导入所需库
import websocket # NOTE: 需要安装websocket-client (https://github.com/websocket-client/websocket-client)
import uuid
import json
import urllib.request
import urllib.parse# 设置服务器地址和客户端ID
server_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())# 定义通过WebSocket接收消息并下载图像的函数
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 # 执行完成else:continue # 预览是二进制数据history = get_history(prompt_id)[prompt_id]for o in history['outputs']:for node_id in history['outputs']:node_output = history['outputs'][node_id]if 'images' in node_output:images_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_images# 示例JSON字符串,表示要使用的提示
prompt_text = """
{"3": {"class_type": "KSampler","inputs": {"cfg": 8,"denoise": 1,"latent_image": ["5",0],"model": ["4",0],"negative": ["7",0],"positive": ["6",0],"sampler_name": "euler","scheduler": "normal","seed": 8566257,"steps": 20}},"4": {"class_type": "CheckpointLoaderSimple","inputs": {"ckpt_name": "v1-5-pruned-emaonly.ckpt"}},"5": {"class_type": "EmptyLatentImage","inputs": {"batch_size": 1,"height": 512,"width": 512}},"6": {"class_type": "CLIPTextEncode","inputs": {"clip": ["4",1],"text": "masterpiece best quality girl"}},"7": {"class_type": "CLIPTextEncode","inputs": {"clip": ["4",1],"text": "bad hands"}},"8": {"class_type": "VAEDecode","inputs": {"samples": ["3",0],"vae": ["4",2]}},"9": {"class_type": "SaveImage","inputs": {"filename_prefix": "ComfyUI","images": ["8",0]}}
}
"""# 将示例JSON字符串解析为Python字典,并根据需要修改其中的文本提示和种子值
prompt = json.loads(prompt_text)
prompt["6"]["inputs"]["text"] = "masterpiece best quality man"
prompt["3"]["inputs"]["seed"] = 5# 创建一个WebSocket连接到服务器
ws = websocket.WebSocket()
ws.connect("ws://{}/ws?clientId={}".format(server_address, client_id))# 调用get_images()函数来获取图像
images = get_images(ws, prompt)# 显示输出图像(这部分已注释掉)
#Commented out code to display the output images:# for node_id in images:
#     for image_data in images[node_id]:
#         from PIL import Image
#         import io
#         image = Image.open(io.BytesIO(image_data))
#         image.show()

代码尚未深入,就目前的知识进度做一下记录和分享

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

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

相关文章

基于深度学习的驾驶员状态监测预警系统(正文)

摘 要 近年来驾驶员因疲劳驾驶而造成的交通事故逐年增多,驾驶员的驾驶状态对道路和人身安全产生重大影响,因此做好驾驶员驾驶状态的管理及预警是非常有必要的。 随着深度学习在目标检测算法应用的不断深入,YOLOv5等目标检测算法也相继具有了广…

11.30固定成本,完全竞争市场,无差异曲线,帕累托最优

固定成本 固定成本是指不随生产量变化而变化的成本,它是企业在生产过程中无论产量高低都必须支付的成本。计算固定成本的方法如下: 确定固定成本的项目:首先需要确定固定成本的项目,例如租金、折旧费、固定人工费用等。 收集相关…

暗物质:揭秘宇宙的隐形奥秘

暗物质:揭秘宇宙的隐形奥秘 一、引言 在浩瀚的宇宙中,有一种神秘的存在,它虽然看不见、摸不着,但却对宇宙的结构和演化起着至关重要的作用。这种存在就是暗物质。暗物质的研究是天文学和物理学领域的热点之一,科学家们正在利用各种手段来揭示它的奥秘。在本文中,我们将一…

学习k8s的介绍(一)

一、kubernetes及Docker相关介绍 1、kubernetes是什么 1-1、简称为k8s或kube,是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 声明式配置语法: kubectl create/apply/delete -f xx…

11-30 SpringBoot2

热部署 开发过程中,修改代码,不需要重启,自动更新 项目上线,一定要关闭 SpringBoot热部署的实现?? ideal默认阻止class类更新 2.需要手动构建项目,可以使用快捷键激活此功能ctrl F9 / build project 自动构建项目 允许程序运行…

劲爆:Sam Altman 回归CEO专访确认Q*的存在

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

链表高频面试题

1. 两个链表第一个公共子节点 LeetCode160 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: listA [4,1,8,4,5], listB [5…

currently the ‘ssl’ module is compiled with ‘LibreSSL 2.8.3’

/Users/xxx/Library/Python/3.9/lib/python/site-packages/urllib3/init.py:34: NotOpenSSLWarning: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ‘ssl’ module is compiled with ‘LibreSSL 2.8.3’. See: https://github.com/urllib3/urllib3/issues/3020 根…

CompletableFuture使用

一、核心API public static CompletableFuture<Void> runAsync(Runnable runnable)public static CompletableFuture<Void> runAsync(Runnable runnable,Executor executor)public static <U> CompletableFuture<U> supplyAsync(Supplier<U> su…

【智能家居】二、添加火灾检测模块(烟雾报警功能点)

可燃气体传感器 MQ-2 和 蜂鸣器 代码段 controlDevice.h&#xff08;设备控制&#xff09;smokeAlarm.c&#xff08;烟雾报警器&#xff09;buzzer.c&#xff08;蜂鸣器&#xff09;mainPro.c&#xff08;主函数&#xff09;运行结果 可燃气体传感器 MQ-2 和 蜂鸣器 代码段 …

Pycharm配置jupyter使用notebook详细指南(可换行conda环节)

本教程为事后记录&#xff0c;部分图片非实操图片。 详细记录了pycharm配置jupyter的方法&#xff0c;jupyter添加其他conda环境的方法&#xff0c;远程密码调用jupyter的方法&#xff0c;修改jupyter工作目录的方法。 文章目录 一、入门级配置1. Pycharm配置Conda自带的jupyt…

华为云cce负载配置时间同步

华为云cce将负载配置好之后&#xff0c;发现里面的时间与真实时间不同步&#xff0c;差了12小时&#xff0c;怎么办&#xff1f; 这时候就需要配置时间同步了。 华为云cce里面通过配置数据存储的路径来解决这个问题的&#xff0c;配置后&#xff0c;需要重启负载。 新建负载…

三、shell - 变量

目录 1、简介 1.1 变量的定义语法: 1.2 变量的定义需遵循的规则 1.3 变量的作用域 2、用户变量 2.1 定义变量 2.2 访问变量 2.3 变量的其他赋值方式 2.4 只读变量 2.5 删除变量 ​​​​​​​3、环境变量 ​​​​​​​3.1 常见的环境变量 ​​​​​​​3.2 自…

030 - STM32学习笔记 - ADC(四) 独立模式多通道DMA采集

030 - STM32学习笔记 - ADC&#xff08;四&#xff09; 独立模式多通道DMA采集 中断模式和DMA模式进行单通道模拟量采集&#xff0c;这节继续学习独立模式多通道DMA采集&#xff0c;使用到的引脚有之前使用的PC3&#xff08;电位器&#xff09;&#xff0c;PA4&#xff08;光敏…

【刷题笔记】串联所有单词的子串||暴力通过||滑动窗口

串联所有单词的子串 1 题目描述 https://leetcode.cn/problems/substring-with-concatenation-of-all-words/ 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 …

arXiv学术速递笔记11.29

文章目录 一、自动驾驶/目标检测Improving Lane Detection Generalization: A Novel Framework using HD Maps for Boosting DiversityTowards Full-scene Domain Generalization in Multi-agent Collaborative Birds Eye View Segmentation for Connected and Autonomous Driv…

Linux 磁盘管理详细指南

目录 前言 显示文件系统的磁盘空间 显示文件或目录的磁盘空间 lsblk 列出块设备信息 fdisk 磁盘分区 mkfs 格式化分区 Swap mount 挂载 前言 可以使用图形界面工具来进行分盘、挂载等操作&#xff0c;这会更直观和易于操作。 显示文件系统的磁盘空间 "df"命…

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示整数、小数应用

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示整数、小数应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍IIC通信简单介绍…

【每日一题】1657. 确定两个字符串是否接近-2023.11.30

题目&#xff1a; 1657. 确定两个字符串是否接近 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。 例如&#xff0c;abcde -> aecdb操作 2&#xff1a;将一个 现有 字符的…

RSA实现中弱密钥漏洞分析(Analyzing Weak Key Vulnerabilities in RSA Implementation)

点我完整下载&#xff1a;《RSA实现中弱密钥漏洞分析》本科毕业论文一万字.doc RSA实现中弱密钥漏洞分析 "Analyzing Weak Key Vulnerabilities in RSA Implementation" 目录 目录 2 摘要 3 关键词 4 第一章 引言 4 1.1 研究背景 4 1.2 研究目的 5 1.3 研究意义 6 第…