API调用comfyui工作流,做一个自己的app,chatgpt给我写的前端,一键创建自己的卡通形象,附源码

前言

工具介绍

首先 comfyui你是少不了的,这个是工作流的后端支持,用这个去调试工作流和生成API可调用文件

前端我们就用很流行的gradio吧,什么你一时半会没有学gradio的计划,没事,笔者也没系统学过,我干脆直接让chatgpt写前端gradio了,哈哈~

所有的AI设计工具,安装包、模型和插件,都已经整理好了,👇获取~在这里插入图片描述

comfyui

首先你需要打开comfyui的开发者模式,就是这个地方

开启后会主页设置中会多出一个【保存(API格式)】,让后将你要做应用的工作流保存(API格式)

这里我们做一个【 一张图生成人偶的服务】,使用的是 rui的 《Cute you!》By Rui,欢迎大家去b站搜 rui400,我已关注哈哈,工作流如下

前端代码

虽然我会gradio(O(∩_∩)O哈哈~),但是为了简便我让chatgpt给我写了

帮我使用gradio写一个 页面,功能是:上传一张照片,然后提交给后台,``后台保存图片到固定目录,并且图片名字不能能重复,``并返回另一张照片的链接,前端将两张照片同事显示出来

代码如下

import os``import gradio as gr``from datetime import datetime``from PIL import Image``import requests``from io import BytesIO``   ``# 设置图片保存目录``UPLOAD_DIRECTORY = "uploaded_images"``if not os.path.exists(UPLOAD_DIRECTORY):`    `os.makedirs(UPLOAD_DIRECTORY)``   ``# 用于生成唯一图片文件名的函数``def generate_unique_filename(extension):`    `timestamp = datetime.now().strftime("%Y%m%d%H%M%S%f")`    `return f"{timestamp}.{extension}"``   ``# 处理图片上传的函数``def process_image(image):`    `# 保存上传的图片`    `extension = image.name.split('.')[-1]`    `unique_filename = generate_unique_filename(extension)`    `image_path = os.path.join(UPLOAD_DIRECTORY, unique_filename)`    `with open(image_path, "wb") as image_file:`        `image_file.write(image.read())`    `    # 返回另一张图片的链接(此处为示例,实际应用中应替换为真实图片链接)`    `response_image_url = "https://via.placeholder.com/150"  # 示例图片链接`    `response = requests.get(response_image_url)`    `response_image = Image.open(BytesIO(response.content))`    `    # 返回上传的图片和网络上的图片`    `return image_path, response_image``   ``# 创建Gradio接口``iface = gr.Interface(`    `fn=process_image,`    `inputs=gr.inputs.Image(type="file"),`    `outputs=[`        `gr.outputs.Image(type="file", label="Uploaded Image"),`        `gr.outputs.Image(type="pil", label="Response Image")`    `],`    `live=False``)``   ``# 运行应用``iface.launch()

基本就是,上传一张图片,然后保存,给工作流用,工作流处理后返回原图和生成的图,这个代码添加一下我们的方法就可以用了,界面如下

还是很不错的,哈哈~

comfyui API调用代码

1、读取工作流

import json``   ``# 这个地方是你工作流的地址,服务器行写路径``prompt_f = r"人偶-api.json"``   ``with open(prompt_f,"r",encoding="utf-8") as f:`    `prompt = json.loads(f.read())

2、设置上传图片

prompt["331"]["inputs"]["image"] = image_url``prompt["432"]["inputs"]["image"] = image_url

这给地方要注意,看看你的工作流的输入图片的节点是多少,我的是331和432

3、请求工作流

import requests``   ``#comfyui地址``url = "http://127.0.0.1:8188/"``p = {"prompt":prompt}``respone = requests.post(url=url+"prompt",json=p)``respone

4、获取prompt_id

prompt_id = respone.json()["prompt_id"]``prompt_id

这个地方获取prompt_id是为了后边获取处理图片做准备,因为工作流执行需要时间,不用时时等待返回,排队处理就好了,后边使用prompt_id去获取结果

5、获取结果

respone = requests.get(url=url+"history/"+prompt_id)``respone.json()

在执行历史中获取结果,展示,这个地方,做成服务的话,你可以循环探测这个接口直到有结果,没有结果他就一直为{},可以设置5s睡眠再访问

6、解析图片

image_name = respone.json()[prompt_id]['outputs']['456']["images"][0]["filename"]``image_url = url + 'view?filename='+image_name+"&subfolder=&type=output"``image_url

这个地方要注意,返回结果在 prompt_id 下的outputs中,但是你要看看是哪个id下,我的是456

ok,到这 后端就ok了

组装程序

将这个后端处理代码,集成到gradio中

# 处理图片上传的函数``def process_image(image):`    `# 保存上传的图片`    `# print(image)`    `# extension = image.split('.')[-1]`    `# unique_filename = generate_unique_filename(extension)`    `# image_path = os.path.join(UPLOAD_DIRECTORY, unique_filename)`    `# with open(image_path, "wb") as image_file:`    `#     image_file.write(image.read())`    `prompt["331"]["inputs"]["image"] = image`    `prompt["432"]["inputs"]["image"] = image``   `    `url = "http://127.0.0.1:8188/"`    `p = {"prompt":prompt}`    `respone = requests.post(url=url+"prompt",json=p)`    `prompt_id = respone.json()["prompt_id"]`    `while True:`        `respone = requests.get(url=url+"history/"+prompt_id)`        `if respone.json() == {}:`            `time.sleep(5)`            `continue`        `image_name = respone.json()[prompt_id]['outputs']['456']["images"][0]["filename"]`        `response_image_url = url + 'view?filename='+image_name+"&subfolder=&type=output"`        `break``   `    `# 返回另一张图片的链接(此处为示例,实际应用中应替换为真实图片链接)`    `# response_image_url = "https://img2.baidu.com/it/u=1814561676,2470063876&fm=253&fmt=auto&app=138&f=JPEG?w=750&h=500"  # 示例图片链接`    `response = requests.get(response_image_url)`    `response_image = Image.open(BytesIO(response.content))`    `    # 返回上传的图片和网络上的图片`    `return image, response_image

测试

需要等待一会。。。。。。。。。

哈哈,还不错吧,赶紧试试吧

为了帮助大家更好地掌握 ComfyUI,我在去年花了几个月的时间,撰写并录制了一套ComfyUI的基础教程,共六篇。这套教程详细介绍了选择ComfyUI的理由、其优缺点、下载安装方法、模型与插件的安装、工作流节点和底层逻辑详解、遮罩修改重绘/Inpenting模块以及SDXL工作流手把手搭建。

由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取

在这里插入图片描述

一、ComfyUI配置指南

  • 报错指南
  • 环境配置
  • 脚本更新
  • 后记

img

二、ComfyUI基础入门

  • 软件安装篇
  • 插件安装篇

img

三、 ComfyUI工作流节点/底层逻辑详解

  • ComfyUI 基础概念理解
  • Stable diffusion 工作原理
  • 工作流底层逻辑
  • 必备插件补全

img

四、ComfyUI节点技巧进阶/多模型串联

  • 节点进阶详解
  • 提词技巧精通
  • 多模型节点串联

img

五、ComfyUI遮罩修改重绘/Inpenting模块详解

  • 图像分辨率
  • 姿势

img

六、ComfyUI超实用SDXL工作流手把手搭建

  • Refined模型
  • SDXL风格化提示词
  • SDXL工作流搭建

img

由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取

在这里插入图片描述

img

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

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

相关文章

【网络】数据流(Data Workflow)Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件)

在图片中,数据流(Data Workflow)描述了应用程序中数据的流动过程,涉及 Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件&…

【通义千问】蓝耘智算 | 智启未来:蓝耘MaaS×通义QwQ-32B引领AI开发生产力

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT&…

Scratch 3.0安装包,支持Win7/10/11、Mac电脑手机平板、少儿便编程的启蒙软件。

Scratch是一款由麻省理工学院(MIT) 设计开发的少儿编程工具。其特点是:使用者可以不认识英文单词,也可以不使用键盘,就可以进行编程。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动指令模块到脚本区就可以…

Deepseek学习--工具篇之Ollama

Deepseek学习--工具篇之Ollama 用途特点简化部署‌轻量级与可扩展性‌API支持‌预构建模型库‌模型导入与定制‌跨平台支持‌命令行工具与环境变量‌ 来源缘起诞生爆发持续 安装使用方法下载安装安装模型调用API 用途 我们在进行Deepseek本地部署的时候,通常会用到…

Flask多参数模版使用

需要建立目录templates; 把建好的html文件放到templates目录里面; 约定好参数名字,单个名字可以直接使用;多参数使用字典传递; 样例: from flask import render_template # 模板 (Templates) #Flask 使用…

LabVIEW旋转设备状态在线监测系统

为了提高大型旋转设备如电机和水泵的监控效率和故障诊断能力,用LabVIEW软件开发了一套实时监测与故障诊断系统。该系统集成了趋势分析、振动数据处理等多项功能,可实时分析电机电流、压力、温度及振动数据,以早期识别和预报故障。 ​ 项目背…

汽车PKE无钥匙进入系统一键启动系统定义与原理

汽车智能钥匙(PKE无钥匙进入系统)一键启动介绍 系统定义与原理 汽车无钥匙进入系统,简称PKE(Passive Keyless Entry),该系统采用了RFID无线射频技术和车辆身份编码识别系统,率先应用小型化、小…

【Idea】 xml 文本粘贴保持原有文本的缩进格式

Idea xml 文本粘贴保持原有文本的缩进格式 在使用 IntelliJ IDEA 2018 版本中的 MyBatis 时,粘贴 SQL 语句会自动对齐,此时需要进行相关设置来禁用此功能。 setting——>Editor——>Code Style——>XML 勾选“Keep white spaces”

Unity 和 Python 的连接(通过SocketIO)附源码

在游戏或者项目开发中,Unity 通常用于创建前端,而 Python 则因其强大的数据处理能力常被用作后端。通过 Socket.IO,我们可以轻松地实现 Unity 和 Python 的实时通信。本文将介绍如何通过 Socket.IO 连接 Unity 和 Python,并附上完…

[IP]UART

UART 是一个简易串口ip,用户及配置接口简单。 波特率从9600至2000000。 该 IP 支持以下特性: 异步串行通信:标准 UART 协议(1 起始位,8 数据位,1 停止位,无奇偶校验)。 参数化配置…

vue2实现可拖拽菜单栏,及根据菜单内容自动扩展宽度

分为两个功能 基本的html: <el-scrollbarid"leftmenu"v-resize"MuneResize"wrap-class"scrollbar-wrapper"><el-menu:default-active"activeMenu":collapse"isCollapse":background-color"variables.menuBg&…

【软件工程】03_软件需求分析

3.1 系统分析 1. 系统分析概述 系统分析是一组统称为计算机系统工程的活动。它着眼于所有的系统元素,而非仅仅局限于软件。系统分析主要探索软件项目的目标、市场预期、主要的技术指标等,其目的在于帮助决策者做出是否进行软件项目立项的决定。 2. 可行性分析(Feasibility …

父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法

提示&#xff1a;父组件中循环生成多个子组件时&#xff0c;有且只有最后一个子组件的watch对象生效问题及解决办法 文章目录 [TOC](文章目录) 前言一、问题二、解决方法——使用function函数代替箭头函数()>{}总结 前言 ‌‌‌‌‌问题&#xff1a;子组件用that解决watch无…

SpringMVC(八)Knife4j 接口文档

目录 一 基础使用 1 配置pom.xml相关依赖 2 项目配置 3 输入指定路径&#xff08;http://localhost:8080/doc.html&#xff09; 二 一些使用方法 1 Tag 2 Operation 3 Schema 4 Parameter 5 可以根据需求来设置 补充&#xff1a;日期的格式化 Knife4j 是基于 Swag…

二分算法--整数二分

二分算法–整数二分 假如给定一个整数序列&#xff0c;{ a 1 a_1 a1​, a 2 a_2 a2​, a 3 a_3 a3​, …, a n a_n an​} 我们将整个数列根据某个元素 a x a_x ax​将数列分成左右两个部分&#xff08;某一部分可以包含 a x a_x ax​&#xff09; 首先我们定义一个mid 如…

有效的括号 力扣20

一、题目 二、思路 这题算是栈的经典应用。 主要有三种情况&#xff1a; 第一种情况&#xff1a;已经遍历完了字符串&#xff0c;但是栈不为空&#xff0c;说明有相应的左括号没有右括号来匹配&#xff0c;所以return false 第二种情况&#xff1a;遍历字符串匹配的过程中&…

Nuxt3 使用 ElementUI Plus报错问题

本地正常&#xff0c;打包上线异常 解决方式&#xff1a;官方组件需要被包裹一层&#xff0c;如以下示例&#xff1a; <ClientOnly> </ClientOnly>

uniapp vue3项目定义全局变量,切换底部babar时根据条件刷新页面

前言 uniapp项目中&#xff0c;每个tabbar页面来回点时候&#xff0c;不会触发页面更新。但是有时页面上有数据发生改变需要更新模版时&#xff0c;就得能及时的通知到页面。如果在onshow生命周期里每次都调用异步请求更新数据&#xff0c;有些不合理&#xff0c;况且页面有时…

vulnhub-Hackme-隧道建立、SQL注入、详细解题、思路清晰。

vulnhub-Hackme-隧道建立、SQL注入、详细解题、思路清晰。 一、信息收集 2025.3.14 PM 12&#xff1a;18 1、主机发现 arp-scan -l nmap -sn 192.168.66.0/24 2、端口扫描 1、nmap --min-rate 10000 -p- 192.168.66.182 -oA port 查看所有开放端口2、map -sS -sV 192.168.6…

20250317笔记本电脑在ubuntu22.04下使用acpi命令查看电池电量

20250317笔记本电脑在ubuntu22.04下使用acpi命令查看电池电量 2025/3/17 18:05 百度&#xff1a;ubuntu查看电池电量 百度为您找到以下结果 ubuntu查看电池电量 在Ubuntu操作系统中&#xff0c;查看电池电量通常可以通过命令行或者图形界面来完成。下面是一些常见的方法&…