本篇主要将到不通过WEB浏览器,而是程序调用API的方式访问
WEBUI
的服务(开发相关)。
更多不断丰富的内容参考:《继续Stable-Diffusion WEBUI方方面面研究(内容索引)》
当使用--api
参数来启动WEBUI时,API就开启了:
启用API后,就可以通过HTTP的发送请求+得到返回的方式来调用API,生成结果。
所以适合各种语言开发的程序,也可以嵌入任何系统中。
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)
代码存为SDWEBAPI.py
文件后直接执行。
如果缺少python的模块请pip自行安装。
PS D:\xxx> python .\SDWEBAPI.py
PS D:\xxx>
等一小会儿,如果程序返回了没有报错,则在当前目录下成功生成了output.png
。
结果和我们通过浏览器操作WEBUI并没有什么不同。
生成的output.png
文件大概如下:
上面只是一个文生图的例子。
参数很多,还可以暂时覆盖WEBUI的设置。
也可以选择先修改WEBUI的设置,再进行其它操作。
具体参数可以查看帮助文档,参考来自:官网WIKI关于API部分。
官网WIKI提到可以通过你启动的地址加/doc
的路径来查看帮助文档:
http://127.0.0.1:7860/docs
帮助文档如果能出来的话,大概就是下面这个样子。
包括各种方法/参数写得很清楚(为啥不多举点例子)。
如果你也是目前最新版本,也按照WIKI添加了--api
,但还是看不到帮助而是如下画面。
那么先不要着急,我这里也一样的 。
swagger /docs/
,只使用新的gradio_client
文档。Gradio相关issue在要求恢复。总之是基础框架和帮助框架的神仙打架,凡人遭殃。
目前Gradio没有重新引入Swagger API文档,但可以上述issue讨论的帖子给出的例子,通过修改源码,或自己代码方式来绕过。而不改别人的代码,也有个相对简单的办法。
就是添加--nowebui
参数来启动WEBUI(用不启动WEBUI的方式启动WEBUI:所以这是绕口令么)。
添加这个参数之后,就不会再有浏览器界面了,但是暂时可以通过http://127.0.0.1:7860/docs
看见API的帮助。
我们可以先这样打开帮助页面(不要关)。然后去掉此参数,重启WEBUI。
就既可以看到帮助(没关的页面),又可以通过浏览器操作了(苦笑)。
PS:如果用启动器,可以不自己加--nowebui
参数而是打开这个:
因为是WEB的API,所以即便是Python,和其它环境也分离得很好。
可以把服务部署在专门的服务器上,用任意语言调用。
于是我把它嵌入到产品的任务流程中……虽然不知道有啥用(生成用户的卡通头像?)
看上去也挺好的。
只是文档有点对应不上,容错需要处理,返回图片信息得自己保存。。。
需要稍微研究一下。
Happy Coding……