文章目录
- (零)前言
- (一)启用API
- (二)编写调用程序
- (2.1)Python例子代码
- (2.2)执行
- (2.3)结果
- (三)帮助文档
- (3.1)问题:无法显示API帮助
- (3.2)原因:Gradio版本
- (3.3)简单办法
(零)前言
本篇主要将到不通过WEB浏览器,而是程序调用API的方式访问
WEBUI
的服务(开发相关)。
更多不断丰富的内容参考:🔗《继续Stable-Diffusion WEBUI方方面面研究(内容索引)》
(一)启用API
当使用--api
参数来启动WEBUI时,API就开启了:
- 方法一:直接启动的,修改
webui-user.bat
中的set COMMANDLINE_ARGS=--api
。 - 方法二:通过启动器启动,打开其中的
启用API
选项:
(二)编写调用程序
启用API后,就可以通过HTTP的发送请求+得到返回的方式来调用API,生成结果。
所以适合各种语言开发的程序,也可以嵌入任何系统中。
(2.1)Python例子代码
import json
import requests
import io
import base64
from PIL import Image, PngImagePlugin
url = "http://127.0.0.1:7860"
payload = {
"prompt": "1girl, upper body, looking at viewer, overcoat, ..., (photorealistic:1.4), best quality, masterpiece",
"negative_prompt":"EasyNegative, bad-hands-5, paintings, sketches, (worst quality:2), ..., NSFW, child, childish",
"steps": 20,
"sampler_name": "DPM++ SDE Karras",
"width": 480,
"height": 640,
"restore_faces": True
}
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)
PI = PngImagePlugin.PngInfo()
PI.add_text("parameters", response2.json().get("info"))
image.save('output.png', pnginfo=PI)
(2.2)执行
代码存为SDWEBAPI.py
文件后直接执行。
如果缺少python的模块请pip自行安装。
PS D:\xxx> python .\SDWEBAPI.py
PS D:\xxx>
等一小会儿,如果程序返回了没有报错,则在当前目录下成功生成了output.png
。
(2.3)结果
结果和我们通过浏览器操作WEBUI并没有什么不同。
生成的output.png
文件大概如下:
上面只是一个文生图的例子。
参数很多,还可以暂时覆盖WEBUI的设置。
也可以选择先修改WEBUI的设置,再进行其它操作。
具体参数可以查看帮助文档,参考来自:官网WIKI关于API部分。
(三)帮助文档
官网WIKI提到可以通过你启动的地址加/doc
的路径来查看帮助文档:
http://127.0.0.1:7860/docs
帮助文档如果能出来的话,大概就是下面这个样子。
包括各种方法/参数写得很清楚(为啥不多举点例子)。
问题是目前正常情况下:⚠️根本看不到这个页面,啊啊啊!!!
(3.1)问题:无法显示API帮助
如果你也是目前最新版本,也按照WIKI添加了--api
,但还是看不到帮助而是如下画面。
那么先不要着急,我这里也一样的 😢 。
(3.2)原因:Gradio版本
- 从WEBUI的commit 101a18f(bump gradio to 3.27) 开始出现的问题,有很多issue在讨论。
- 而新版Gradio删除了
swagger /docs/
,只使用新的gradio_client
文档。Gradio相关issue在要求恢复。
总之是基础框架和帮助框架的神仙打架,凡人遭殃。
目前Gradio没有重新引入Swagger API文档,但可以上述issue讨论的帖子给出的例子,通过修改源码,或自己代码方式来绕过。而不改别人的代码,也有个相对简单的办法。
(3.3)简单办法
就是添加--nowebui
参数来启动WEBUI(用不启动WEBUI的方式启动WEBUI:所以这是绕口令么)。
添加这个参数之后,就不会再有浏览器界面了,但是暂时可以通过http://127.0.0.1:7860/docs
看见API的帮助。
我们可以先这样打开帮助页面(不要关)。然后去掉此参数,重启WEBUI。
就既可以看到帮助(没关的页面),又可以通过浏览器操作了(苦笑)。
😜Happy Coding……