Stable-diffusion WebUI API调用方法

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

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

相关文档

官方文档:API · AUTOMATIC1111/stable-diffusion-webui Wiki · GitHub

运行方式

复制代码

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

然后使用http://ip:port/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": {} |
| | } |

第三方开源库(推荐)

GitHub - mix1009/sdwebuiapi: Python API client for AUTOMATIC1111/stable-diffusion-webui

这个开源库是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=[ |
| | # index,对应xyz轴每个变量在滚动条中的索引数 |
| | XYZPlotAvailableTxt2ImgScripts.index(XAxisType), |
| | # 选择的对应坐标轴的变量值 |
| | XAxisValues, |
| | # 变量值下拉列表,webui库更新的1.16之后,新增的参数,必填,不然无法执行生图操作 |
| | [], |
| | XYZPlotAvailableTxt2ImgScripts.index(YAxisType), |
| | YAxisValues, |
| | ["model_6.safetensors","model_16.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) |

相关推荐
nan_black4 小时前
在Pycharm配置stable diffusion环境(使用conda虚拟环境)
stable diffusion·pycharm·conda
AI绘画咪酱10 小时前
Stable Diffusion【进阶篇】:如何实现人脸一致
人工智能·深度学习·学习·机器学习·ai作画·stable diffusion
AIGC-Lison1 天前
AI绘画SD中,如何保持生成人物角色脸部一致?Stable Diffusion精准控制AI人像一致性两种实用方法教程!
人工智能·ai作画·stable diffusion·midjourney·sd
AI绘画咪酱2 天前
SD教程|巧用Stable Diffusion,实现不同风格的LOGO设计|实战篇幅,建议收藏!
人工智能·学习·ai作画·stable diffusion·sd
AI绘画咪酱3 天前
【CSDN首发】Stable Diffusion从零到精通学习路线分享
人工智能·学习·macos·ai作画·stable diffusion·aigc
源客z5 天前
Stable Diffusion +双Contronet:从 ControlNet 边缘图到双条件融合:实现服装图像生成的技术演进——项目学习记录
图像处理·人工智能·计算机视觉·stable diffusion
AIGC-Lison6 天前
Stable Diffusion ComfyUI 基础教程(一) ComfyUI安装与常用插件
人工智能·stable diffusion·教程·ai绘画·sd·sd教程
shangyingying_16 天前
关于AIGC stable diffusion 在图像超分上的算法整理
stable diffusion·aigc
XD7429716366 天前
Stable Diffusion:使用ControlNet为黑白照片上色
stable diffusion
未来之窗软件服务11 天前
Stable Diffusion win10 Cpu安装日志
stable diffusion