2.开发带api的SD Webui扩展

上面的教程我们基本知道如何开发一个SD webui的扩展,现在我们来看看如何开发一个api的扩展。

2.开发带api的SD Webui扩展

在真实项目中,我想为 AUTOMATIC1111 的 SD Web UI 创建一个支持 API 的扩展。虽然代码库中有一些关于创建扩展和自定义脚本的信息,以及指向其他包含扩展模板的代码库的链接,但它们都假设该扩展包含 UI 元素。没有支持 API 的扩展的示例。此外,所有示例都没有包含用于添加自定义端点的代码。

最终发现这很简单,所以我想分享一个可以作为模板的最小示例。

目录层次结构如下:

my_extension_dir
|_my_extension_api
|_api.py
|_scripts
|_my_script.py
|_my_extension_lib
|_various Python modules

您可以将 my_extension_dir 放在 Web UI 的扩展目录中。

对目录层次结构没有太多要求,但如果你有自定义脚本 (my_script.py),则需要将其放在 scripts 目录中。

设置端点非常简单,并且有多种方法可以完成。你可以创建一个类,也可以创建一个函数。我决定使用类。以下是我设置 api.py 的方法:

rom Typing import Callable

from FastAPI import FastAPI

from MyExtensionLib.some_module import Cool_Function

class Api:
def __init__(self, app: FastAPI):
self.app = app

self.add_api_route(
path=f'/my_endpoint',
end=self.do_something,
methods=['GET'], # 或 POST
)

def add_api_route(self, path: str, end: Callable, **kwargs):
return self.app.add_api_route(path, end, **kwargs)

async def do_something(self):
output = Cool_Function()
return {"response": output}

# 这会传递给 my_script.py 中的 on_app_started 方法,然后 Web UI 会将 app 传递给它。
# def load_my_extension_api(_, app: FastAPI):
Api(app)
这是 my_script.py 文件,不过从技术上讲,您可以完全跳过此步骤,具体取决于您的设置方式:

from modules import scripts, script_callbacks # pylint: disable=import-error
from my_extension_api.api import load_my_extension_api # pylint: disable=import-error

class Script(scripts.Script):
def __init__(self):
super().__init__()

def title(self):
return "我的扩展程序"

def show(self, is_img2img):
return scripts.AlwaysVisible

# 这是最重要的部分。这会将您的终端注册到 Web UI。
# 如果您没有自定义脚本,也可以在另一个文件中执行此操作。
script_callbacks.on_app_started(load_my_extension_api)

确保端点已加载的最快捷、最简单的方法是检查自动生成的文档,假设您未进行任何更改,该文档的网址为 http://127.0.0.1:7860/docs。您应该会在那里看到您的端点,甚至可以对其进行测试调用,这非常有用。

2.开发带api的SD Webui扩展

请在这个页面上查看api是否存在。

因为webui使用了Gradio框架,一些更多的开发知道也可以参考Gradio对应版本的官方内容。

Happy Coding…

Paragoger衍生者AI训练营。发布者:arnehuo,转载请注明出处:https://www.shxcj.com/archives/9971

(1)
上一篇 17小时前
下一篇 15小时前

相关推荐

发表回复

登录后才能评论
本文授权以下站点有原版访问授权 https://www.shxcj.com https://www.2img.ai https://www.2video.cn