首页 > 其他分享 >Stable-diffusion WebUI API调用方法

Stable-diffusion WebUI API调用方法

时间:2023-10-16 19:55:58浏览次数:41  
标签:diffusion prompt hr image API 参数 WebUI save webui

写这篇文章的主要原因是工作中需要写一个用训练好的模型批量生图的脚本,开始是想用python直接加载模型,但后来发现webui的界面中有不少好用的插件和参数,所以最终改成调用WebUI接口的方式来批量生图。

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://10.45.128.130:8085/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=[
        XYZPlotAvailableTxt2ImgScripts.index(XAxisType), # index,对应xyz轴每个变量在滚动条中的索引数
        XAxisValues,																		 # 选择的对应坐标轴的变量值
        [], 																						 # 变量值下拉列表,webui库更新的1.16之后,新增的参数,必填,不然无法执行生图操作
        XYZPlotAvailableTxt2ImgScripts.index(YAxisType),
        YAxisValues,
        ["manikin_model_album6_576_768_20.safetensors","manikin_model_album6_576_768_20-000016.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)  

标签:diffusion,prompt,hr,image,API,参数,WebUI,save,webui
From: https://www.cnblogs.com/gaojie22/p/17768218.html

相关文章

  • WebAPI和MVC的区别
    1.MVC主要用于建站,WebAPI主要用于构建http服务MVC是前端和后端不分离,WebApi是后端写的http服务提供前端,是前后端分离的写法;2.MVC可以返回JsonResult,前端可以直接使用;WebAPI要返回JSON数据,必须JSON.parse()转化为(Maticsoft.Json.dll)3. MVC直接继承system.mvc.cont......
  • 订阅计划推送钉钉消息出现"oapi.dingtalk.com: Name or service not known"
    一、问题描述BI系统需要每天将报表推送给钉钉用户,但是偶尔会出现推送失败的情况,提示oapi.dingtalk.com:Nameorservicenotknown,即钉钉域名解析出现错误,后续重新推送又成功了,该情况具有偶然性。可能的原因是:1、钉钉IP地址是一个地址池,域名oapi.dingtalk.com对应多个IP地址,浏......
  • ASP.NET Core Minimal API之optional route parameter with default value and option
    publicstaticvoidMain(string[]args){varbuilder=WebApplication.CreateBuilder(args);varapp=builder.Build();app.MapGet("/product/{name}",(stringname)=>$"Theproductis{name}").WithName("product&......
  • 华为云发布CodeArts APIMock服务,精准Mock,并行开发零等待!
    本文分享自华为云社区《华为云发布CodeArtsAPIMock服务,精准Mock,并行开发零等待!》,作者:华为云头条。2023年10月10日,华为云正式发布CodeArtsAPIMock服务,这是一款模拟API响应的仿真工具,能够生成开发者所需的API响应数据,帮助开发人员和测试人员在软件研发过程中快速开展调试和验证......
  • Google – Cloud Translation API
    前言通常网站内容翻译,我们都不推荐使用GoogleTranslate。但网站中一些不那么重要的内容确实可以用GoogleTranslate。比如CustomerReviews。这篇是续 GoogleMapsEmbedAPI&JavaScriptAPIGoogle–ReviewsYouTubeDataAPI又一篇关于GoogleCloudAPI的教程。......
  • webapi跨域访问
    1、在webconfig配置文件里面加入<system.webServer><customHeaders><addname="Access-Control-Allow-Origin"value="*"/><addname="Access-Control-Allow-Headers"value="authorization,Authoriz......
  • 02 K8S API资源对象介绍01(Pod)
    一、认识YAML1.1什么是YAML官网:https://yaml.org/YAML是一种用来写配置文件的语言。JSON是YAML的子集,YAML支持整数、浮点数、布尔、字符串、数组和对象等数据类型。任何合法的JSON文档也是YANL文档,YAML语法规则:使用缩进表示层级关系,缩进不允许使用tab,只能使用空格,同一层级......
  • strapi系列-常用操作记录(创建中间件,创建关系型数据库,数据去掉attributes那一层)
    创建全局中间件创建关系型的数据https://docs.strapi.io/dev-docs/api/rest/relations{"product_types":{"connect":[10]},"product_tags":{"connect":[7,3,4]},"name":"TEST","......
  • Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
    在设置Linux服务器各节点间免密时,出现如下问题:原因:SSH服务器的配置文件/etc/ssh/sshd_config,密码验证服务未打开。1、编辑 /etc/ssh/sshd_config文件在目标服务器node2节点中,编辑/etc/ssh/sshd_config文件:sudovi/etc/ssh/sshd_config修改配置文件......
  • Vue3| 组合式 API——provide 和 inject
    作用和场景:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信 跨层传递普通数据步骤:1.顶层组件通过provide函数提供数据provide('key', 顶层组件中的数据) 2.底层组件通过inject函数获取数据const message=inject('key')   //'k......