关于【SD-WEBUI】的API:开发代码示例和帮助文档

文章目录

  • (零)前言
  • (一)启用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文件大概如下:
关于【SD-WEBUI】的API:开发代码示例和帮助文档_第1张图片

上面只是一个文生图的例子。
参数很多,还可以暂时覆盖WEBUI的设置。
也可以选择先修改WEBUI的设置,再进行其它操作。

具体参数可以查看帮助文档,参考来自:官网WIKI关于API部分。

(三)帮助文档

官网WIKI提到可以通过你启动的地址加/doc的路径来查看帮助文档:

http://127.0.0.1:7860/docs

帮助文档如果能出来的话,大概就是下面这个样子。
包括各种方法/参数写得很清楚(为啥不多举点例子)。

问题是目前正常情况下:⚠️根本看不到这个页面,啊啊啊!!!
关于【SD-WEBUI】的API:开发代码示例和帮助文档_第2张图片

(3.1)问题:无法显示API帮助

如果你也是目前最新版本,也按照WIKI添加了--api,但还是看不到帮助而是如下画面。
那么先不要着急,我这里也一样的 。
关于【SD-WEBUI】的API:开发代码示例和帮助文档_第3张图片

(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。
就既可以看到帮助(没关的页面),又可以通过浏览器操作了(苦笑)。

PS:如果用启动器,可以不自己加--nowebui参数而是打开这个:
在这里插入图片描述

(四)开发扩展

因为是WEB的API,所以即便是Python,和其它环境也分离得很好。
可以把服务部署在专门的服务器上,用任意语言调用。

于是我把它嵌入到产品的任务流程中……虽然不知道有啥用(生成用户的卡通头像?)
看上去也挺好的。

只是文档有点对应不上,容错需要处理,返回图片信息得自己保存。。。
需要稍微研究一下。
关于【SD-WEBUI】的API:开发代码示例和帮助文档_第4张图片


Happy Coding……

你可能感兴趣的:(Python,人工智能/机器学习,General,Coding,python,Gradio,swagger,docs,API,SD,WEB,UI)