Stable-diffusion WebUI API调用方法

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

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

相关文档

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

运行方式

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

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

python 复制代码
## -- 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为例

json 复制代码
{
  "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,也可以参照他们的实现方式来直接调用官方接口。

python 复制代码
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)  
相关推荐
懒大王爱吃狼30 分钟前
Python 向量检索库Faiss使用
开发语言·python·自动化·python基础·python教程
StarCap1 小时前
【论文阅读】Reducing Activation Recomputation in Large Transformer Models
论文阅读·深度学习·transformer
好评笔记2 小时前
多模态论文笔记——Coca(副)
论文阅读·人工智能·深度学习·计算机视觉·transformer·coca·dalle2
好评笔记2 小时前
多模态论文笔记——Coca
人工智能·深度学习·计算机视觉·aigc·transformer·多模态·coca
何大春2 小时前
Quo Vadis, Anomaly Detection? LLMs and VLMs in the Spotlight 论文阅读
论文阅读·人工智能·深度学习·论文笔记
Jackilina_Stone2 小时前
【论文阅读笔记】SCI算法与代码 | 低照度图像增强 | 2022.4.21
论文阅读·人工智能·笔记·python·算法·计算机视觉
♢.*2 小时前
攻克 NLP 面试:20 个常见技术问题及答案详解
人工智能·深度学习·自然语言处理
逐星ing3 小时前
【AIGC】使用Java实现Azure语音服务批量转录功能:完整指南
java·人工智能·aigc·语音识别·azure
sysu633 小时前
59.螺旋矩阵Ⅱ python
数据结构·python·算法·leetcode·面试
小码贾3 小时前
OpenCV-Python实战(14)——轮廓拟合
人工智能·python·opencv