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://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": {} }
第三方开源库(推荐)
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=[ # 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)