sd-webui-go
Go 语言 SDK,通过对象调用方式无缝集成 stable-diffusion-webui 的 AI 绘画 API 能力
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Go 语言 SDK,通过对象调用方式无缝集成 stable-diffusion-webui 的 AI 绘画 API 能力
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你是一个后端开发者,手头有一个 Go 项目,想集成 AI 绘画能力。你的选择是什么?去研究 stable-diffusion-webui 那一堆 JSON API 文档,然后自己写 HTTP 请求、拼 JSON、处理 base64 编码?太累了。sd-webui-go 就是来解决这个问题的——它把 AUTOMATIC1111 的 stable-diffusion-webui API 用 Go 语言封装成了对象调用的形式,让你像调用本地函数一样调用 AI 绘画功能。
stable-diffusion-webui(俗称"WebUI")是 AI 绘画领域最流行的本地部署工具,由 AUTOMATIC1111 开发维护。它不仅提供了强大的图形界面,还暴露了一套完整的 HTTP REST API,理论上任何语言都可以调用。但问题在于,API 文档只描述请求参数,不描述响应结构,开发者需要反复试错才能搞清楚返回的 JSON 里每个字段的含义。
GitHub 用户 SpenserCai 在 2023 年 8 月发布了 sd-webui-go,初衷很简单:自己写 Go 项目需要对接 AI 绘画,与其每次都折腾 HTTP 请求,不如把整个 API 封装成 Go SDK,用起来和调用本地函数一样自然。项目采用 GPL-3.0 开源协议,Discord 社区目前有活跃的开发者讨论频道。
sd-webui-go 的架构设计非常清晰,分为两层封装,满足不同层次的开发需求:
第一层:go-swagger(完整覆盖)
这是项目的主干,通过 go-swagger 工具从 stable-diffusion-webui 的 OpenAPI 规范自动生成代码。stablediffusion/client/operations/ 目录下有大量 *_parameters.go 和 *_responses.go 文件,总计 200+ 个,自动覆盖了 sd-webui 几乎所有 API 端点。这种方式的优点是全面,缺点是使用起来还是需要了解底层 API 的参数结构,对开发者有一定门槛。
以文生图(txt2img)为例,go-swagger 方式的调用需要构造 StableDiffusionProcessingTxt2Img 结构体,设置 prompt、negative_prompt、sampler 等参数,然后用 Text2imgapiSdapiV1Txt2imgPost 发起请求,最后解析 TextToImageResponse 获取 base64 编码的图片数据。
第二层:intersvc(高级封装,逐步完善)
这是更人性化的封装层,在 intersvc/ 目录下为常用 API 写了高级封装类。每个 API 有三个固定组成部分:***_inter.go 定义 Action() 方法处理请求/响应流程,***_model.go 定义请求/响应结构体,utils.go 提供通用的 ConvertResponse() 工具函数。开发者只需要构造请求对象、调用 Action()、取回结果,不需要关心 HTTP 请求和 JSON 解析的细节。
以 Deoldify(老照片修复)为例,代码只有十几行:创建客户端 → 构造请求(含 URL、渲染因子等)→ 调用 Action() → 从 Response 获取 base64 图片数据 → 解码保存。整个过程不需要了解任何 HTTP 细节。
支持的 API 能力(按类别):
从源码来看,项目的核心依赖只有 go-openapi 全家桶:runtime(HTTP 客户端)、swag(Swagger 工具链)、validate(参数校验)。客户端通过 NewStableDiffInterface(host) 工厂函数创建,默认超时 600 秒,超长时间的生图任务也不怕。
intersvc 层大量使用 Go 反射(reflect 包):ConvertResponse() 函数通过反射动态创建目标类型实例,将 API 返回的通用结构体转换为业务层特定的 Response 结构体。这种设计让新增 API 支持变得极其简单——只需在 _model.go 中定义新类型,Action() 方法会自动处理转换逻辑。
项目没有 Dockerfile 和 Web UI,纯 SDK 定位。部署需要两件事:Go 1.19+ 环境和一台运行 stable-diffusion-webui 的机器(需要用 --api 参数启动 API 服务)。对 GPU 有要求——sd-webui 本身是 GPU 密集型应用,建议 8GB+ 显存显卡。
sd-webui-go 本质上是一个 API 适配层,不是 AI 模型本身。它不包含任何图像生成逻辑,所有计算都在后端的 stable-diffusion-webui 上完成。这意味着:SDK 的能力上限就是 WebUI API 的能力上限,WebUI 没有的它也没有。另外,intersvc 层目前还在逐步完善中,部分新 API 可能只有 go-swagger 层支持。
sd-webui-go 是 stable-diffusion-webui 生态中唯一的 Go 语言 SDK,用 517 个源文件覆盖了 WebUI 几乎全部 API。对于需要在 Go 后端项目中集成 AI 绘画能力的开发者来说,它几乎是唯一的选择。目前已获得 337 颗 GitHub stars,在同类项目中具有稀缺性价值。
图1:sd-webui-go 项目 Logo

图2:stable-diffusion-webui 官方界面

本报告基于 GitHub 仓库源码(v1.0+)生成。