写这篇文章的主要原因是工作中需要写一个用训练好的模型批量生图的脚本,开始是想用python直接加载模型,但后来发现webui的界面中有不少好用的插件和参数,所以最终改成调用WebUI接口的方式来批量生图。

Stable-diffusion的webui界面使用比较方便,但是它的api文档比较简陋,很多功能需要去看源码,所以在这里记录下主要的调用方法

相关文档

官方文档:https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/API

运行方式

# 1. 首先需要在webui-user.bat中给COMMANDLINE_ARGS添加--api参数
# 2. 启动命令中需要添加nowebui
python launch.py --nowebui

然后使用http://10.45.128.130:8085/docs即可查看官方文档,需要替换ip:port为自己的地址才能看到,官方文档中有执行按钮可以执行example,能简单的看下返回效果

## -- api调用示例代码 -- ##
import json
import base64
import requests # 发送请求
def submit_post(url: str, data: dict):
return requests.post(url, data=json.dumps(data)) # 解码并保存图片
def save_encoded_image(b64_image: str, output_path: str):
with open(output_path, 'wb') as image_file:
image_file.write(base64.b64decode(b64_image)) if __name__ == '__main__':
txt2img_url = r'http://127.0.0.1:8085/sdapi/v1/txt2img' data = {'prompt': 'a dog wearing a hat',
'negative_prompt': '',
'sampler_index': 'DPM++ SDE',
'seed': 1234,
'steps': 20,
'width': 512,
'height': 512,
'cfg_scale': 8} response = submit_post(txt2img_url, data)
save_image_path = r'./result/tmp.png'
save_encoded_image(response.json()['images'][0], save_image_path)

/sdapi/v1/txt2img接口scripts参数列表,以xyz plot为例

{
"enable_hr": false,
"denoising_strength": 0,
"firstphase_width": 0,
"firstphase_height": 0,
"hr_scale": 2,
"hr_upscaler": "",
"hr_second_pass_steps": 0,
"hr_resize_x": 0,
"hr_resize_y": 0,
"hr_sampler_name": "",
"hr_prompt": "",
"hr_negative_prompt": "",
"prompt": "cute girl with short brown hair in black t-shirt in animation style",
"styles": [
""
],
"seed": -1,
"subseed": -1,
"subseed_strength": 0,
"seed_resize_from_h": -1,
"seed_resize_from_w": -1,
"sampler_name": "Euler a",
"batch_size": 1,
"n_iter": 1,
"steps": 50,
"cfg_scale": 7,
"width": 512,
"height": 512,
"restore_faces": false,
"tiling": false,
"do_not_save_samples": false,
"do_not_save_grid": false,
"negative_prompt": "",
"eta": 0,
"s_min_uncond": 0,
"s_churn": 0,
"s_tmax": 0,
"s_tmin": 0,
"s_noise": 1,
"override_settings": {},
"override_settings_restore_afterwards": true,
"script_args": [4,"20,30",[],9,"Euler a, LMS",[],0,"",[],"True","False","False","False",0], # xyz plot参数
"sampler_index": "Euler",
"script_name": "X/Y/Z Plot",
"send_images": true,
"save_images": false,
"alwayson_scripts": {}
}

第三方开源库(推荐)

https://github.com/mix1009/sdwebuiapi

这个开源库是webui官方推荐的,将大多数api的使用方法都集成到一起了,而且还提供了scripts参数的使用方式。虽然这个库已经很久没有更新了,很多issue也没有解决,但不妨碍我们参考它的函数使用方式。我们在使用的使用可以直接import webuiapi,也可以参照他们的实现方式来直接调用官方接口。

import webuiapi
from PIL import Image # create API client with custom host, port
api = webuiapi.WebUIApi(host='127.0.0.1', port=8085) XYZPlotAvailableTxt2ImgScripts = [...] # 根据脚本参数自行增加调整xyz轴可选择的参数内容 # 省略部分参数定义
... # 参数与官方文档的txt2img完全一致,参照上文参数文档
result = api.txt2img(
prompt="cute girl with short brown hair in black t-shirt in animation style",
seed=1003,
script_name="X/Y/Z Plot",
script_args=[
XYZPlotAvailableTxt2ImgScripts.index(XAxisType), # index,对应xyz轴每个变量在滚动条中的索引数
XAxisValues, # 选择的对应坐标轴的变量值
[], # 变量值下拉列表,webui库更新的1.16之后,新增的参数,必填,不然无法执行生图操作
XYZPlotAvailableTxt2ImgScripts.index(YAxisType),
YAxisValues,
["manikin_model_album6_576_768_20.safetensors","manikin_model_album6_576_768_20-000016.safetensors"],
XYZPlotAvailableTxt2ImgScripts.index(ZAxisType),
ZAxisValues,
[],
drawLegend,
includeLoneImages,
includeSubGrids,
noFixedSeeds,
marginSize,
]
) # save image with jpg format
img = result.image
img.save("./result/output2.jpg", quality=90)

Stable-diffusion WebUI API调用方法的更多相关文章

  1. Facebook Oauth2.0 API调用方法

    这些天搞了下Facebook API的东东,在官方网站下弄了一些接口,下面简单的把facebook的调用流程以及常用接口书序一下 :-)  当然在使用facebook api之前要有facebook账 ...

  2. bing翻译API调用方法

    概述 前一段时间,遇到一个需求,需要对文章进行翻译,由于客户公司员工有国内的人员,也有国外的人员,为了照顾国外的同事,客户提出,当用户在手机端发布帖子,需要同时把帖子的内容翻译成英文,方便用户阅读.于 ...

  3. 关于淘宝的数据来源,针对做淘宝客网站的淘宝api调用方法

    上次写了个淘宝返利模式的博客,直接被移除首页,不知道何故啊.可能是真的跟技术不太刮边. 众所周知,能够支撑一个网站运营的最基础不是程序写的多么好.也不是有多么牛X的运营人员,最主要的是数据,如果没有数 ...

  4. html5 自带全屏API调用方法

    function FullScreen(){ var el = $('html')[0];//要全屏的元素,如果要全页面全屏,建议使用html节点而不是body节点 var isFullscreen= ...

  5. LUIS 语义识别API调用方法

    本例使用itchat获取微信文字消息,发送给LUIS返回识别消息,再将返回消息格式化后通过微信发回 关于itchat的使用参考我的另外一篇随笔itchat个人练习 语音与文本图灵测试例程 # -*- ...

  6. REST API 调用 方法

    METHOD      DESCRIPTION GET         Retrieves the specified resource POST        Creates a resource ...

  7. (一)钉钉宜搭低代码应用开发高级认证之远程API调用方法示例

    大家好,我是代号六零一,在此分享近期学习的低代码开发知识~,如有疑问欢迎在评论区下方点评,作者愿与您一道共同探讨: 一.创建数据源 二.请求地址配置 钉钉路径示例:/dingtalk/web/APP_ ...

  8. 新浪网易淘宝等IP地区信息查询开放API接口调用方法

    通过IP地址获取对应的地区信息通常有两种方法:1)自己写程序,解析IP对应的地区信息,需要数据库.2)根据第三方提供的API查询获取地区信息. 第一种方法,参见文本<通过纯真IP数据库获取IP地 ...

  9. 通过Web API调用Action时各种类型输入参数传递值的方法

    本人微信公众号:微软动态CRM专家罗勇 ,回复280或者20180906可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . Dy ...

  10. 开放数据接口 API 简介与使用场景、调用方法

    此文章对开放数据接口 API 进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用. 在给大家分享的一系列软件开发视频课程中,以及在我们的社区微信群聊天中,都积极地鼓励大家开 ...

随机推荐

  1. 【java-Err】 Generating equals/hashCode implementation but without a call to superclass,

    @EqualsAndHashCode  默认不继承父类 修复此问题的方法很简单:  1. 使用@Getter @Setter @ToString代替@Data并且自定义equals(Object ot ...

  2. 统信UOS国产服务器操作系统(UOS Server 20-1060e)安装使用体验

    总体来说,UOS系统的安装还是很简明的.需要注意的是后期的驱动安装和其他各方面的使用细节. 以下是具体安装过程:(感谢统信软件河北团队的大力支持.) 特别感谢统信的郭赞.喵喵喵.Zero等各位大神的帮 ...

  3. 龙芯电脑编译redis (loongarch)

    1.获取源码 源码地址:https://redis.io/download/#redis-downloads 最新版本是7.2,这里用redis5测试,最后一个版本是5.0.14 wget https ...

  4. ObjectInputStream_报错问题

    报错: Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: CE ...

  5. Matlab背景颜色修改

    背景 将修改内容添加到matlab的matlab.prf文件中,文件路径为在matlab中运行prefdir的结果,直接添加这些内容保存就好. github主题制作地址,里面有多种matlab主题配色 ...

  6. 加速LakeHouse ACID Upsert的新写时复制方案

    概述 随着存储表格式 Apache Hudi.Apache Iceberg 和 Delta Lake 的发展,越来越多的公司正在这些格式的基础上构建其 Lakehouse,以用于许多用例,例如增量摄取 ...

  7. C#选择排序(Selection Sort)算法

    选择排序原理介绍 选择排序(Selection Sort)是一种简单的排序算法,其实现原理如下: 遍历待排序数组,从第一个元素开始. 假设当前遍历的元素为最小值,将其索引保存为最小值索引(minInd ...

  8. 可托拉拽的WPF选项卡控件,强大好用!

    推荐一个简单易用的WPF选项卡控件. 项目简介 这是一个基于WPF开发的,可扩展.高度可定制.轻量级的UI组件,支持拖拉拽功能,可以让开发人员快速实现需要选项卡窗口的系统. 特色功能 1.拖拉拽标签: ...

  9. 安装deb包

    输入命令: sudo dpkg  -i  file.deb

  10. ubuntu安装rpm格式包

    首先,我们要安装alien这一软件: $sudo apt-get install alien ##alien默认没有安装,所以首先要安装它 $sudo alien xxxx.rpm ##将rpm转换为 ...