stable-diffusion-webui 部署 ,启用 api 服务
stable-diffusion-webui 部署 ,启用 api 服务
api 文档参考 https://profaneservitor.github.io/sdwui-docs/api/
api 源码路径是 stable-diffusion-webui/modules/api/api.py
我系统是 ubuntu22.04
conda 环境torchpgu , python 是 3.11.7
安装 stable-diffusion-webui
原始地址
https://github.com/AUTOMATIC1111/stable-diffusion-webui
国内镜像
https://gitee.com/kejiing/stable-diffusion-webui
- 1 clone 源码
搭建环境
官方推荐 python3.10 或者 python3.11
我这里是conda 环境 torchpgu ,python3.11.7 ,不是系统默认的 python3 命令
- 2 所以激活 conda 环境torchGgu
conda activate torchGpu
- 3 然后修改 webui-user.sh
python_cmd="python3.11"
- 4 执行安装
./webui.sh
安装完成之后,首次运行自动下载模型权重,可以手动下载
启用 api
修改 webui-user.sh :
添加下面信息
# https://profaneservitor.github.io/sdwui-docs/api/
#export COMMANDLINE_ARGS=""
# enable web api for web client
export COMMANDLINE_ARGS=--api
启动 api 服务
./webui.sh
输出:
Launching Web UI with arguments: --api
Running on local URL: http://127.0.0.1:7860
看到服务地址是 http://127.0.0.1:7860
代码测试
test.py
import json
import requests
import io
import base64
from PIL import Image, PngImagePlugin
import os
# 获取当前文件的绝对路径
current_file_path = os.path.abspath(__file__)
print("Current file path:", current_file_path)
current_directory = os.path.dirname(current_file_path)
print("Current directory:", current_directory)
out_dir = os.path.join(current_directory, 'api_out')
out_dir_t2i = os.path.join(out_dir, 'txt2img')
out_dir_i2i = os.path.join(out_dir, 'img2img')
os.makedirs(out_dir_t2i, exist_ok=True)
os.makedirs(out_dir_i2i, exist_ok=True)
url = "http://127.0.0.1:7860"
payload = {
"prompt": "puppy dog",
"steps": 5
}
response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
r = response.json()
for i in r['images']:
image = Image.open(io.BytesIO(base64.b64decode(i.split(",",1)[0])))
png_payload = {
"image": "data:image/png;base64," + i
}
response2 = requests.post(url=f'{url}/sdapi/v1/png-info', json=png_payload)
pnginfo = PngImagePlugin.PngInfo()
pnginfo.add_text("parameters", response2.json().get("info"))
img_path = os.path.join(out_dir_t2i,'output.png')
image.save(img_path, pnginfo=pnginfo)
运行之后输出 api_out/txt2img/output.png
文件