• Stable-diffusion WebUI API调用方法


    写这篇文章的主要原因是工作中需要写一个用训练好的模型批量生图的脚本,开始是想用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://ip:port/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=[
    # index,对应xyz轴每个变量在滚动条中的索引数
    XYZPlotAvailableTxt2ImgScripts.index(XAxisType),
    # 选择的对应坐标轴的变量值
    XAxisValues,
    # 变量值下拉列表,webui库更新的1.16之后,新增的参数,必填,不然无法执行生图操作
    [],
    XYZPlotAvailableTxt2ImgScripts.index(YAxisType),
    YAxisValues,
    ["model_6.safetensors","model_16.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)
  • 相关阅读:
    短视频搭建矩阵源码--短视频矩阵源码搭建
    数据分析-Pandas如何观测数据的中心趋势度
    【无重复字符的最长子串--三种方法】
    DDP、pytorch的分布式 torch.distributed.launch 训练说明
    数据分享 I 各地级市2022年乡村振兴数据
    Hive安装&sql去重的4种方式&Zeppelin安装
    Hadoop3 - MapReduce Join 关联注意点
    VEX —— Intrinsic attribute
    Linux 编程学习书籍
    k8s集群搭建
  • 原文地址:https://www.cnblogs.com/gaojie22/p/17768218.html