An open API service indexing awesome lists of open source software.

https://github.com/lts8989/comfyui-go-api

an example program for comfyui-go-sdk.
https://github.com/lts8989/comfyui-go-api

api comfyui example golang sdk websocket

Last synced: 5 months ago
JSON representation

an example program for comfyui-go-sdk.

Awesome Lists containing this project

README

          

# ComfyUI API

ComfyUI API 是 [ComfyUI SDK](https://github.com/lts8989/comfyui-go-sdk) 项目的示例应用。项目使用 `gin` 框架,提供了 RESTful API 接口,同时启动一个 `websocket` 连接到 `ComfyUI` 接收绘图任务进度推送。

## 安装与运行

### 安装

go get github.com/lts8989/comfyui-go-api

### 运行前准备

1. 可访问的 `ComfyUI` 服务,记下域名,后面要用到。
2. 可用的 `mysql` 数据库。使用 [init.sql](utils/migrations/init.sql) 初始化数据表。
3. 数据库用户名密码等信息和 `ComfyUI` 的域名写到配置文件中 [config.json](conf/config.yaml)。

### 运行

go run main.go

## 详细功能

api 访问示例参考[api.http](test/api.http)

### 绘图任务下发

ComfyUI 服务的绘图任务为json字符串。我们将任务以模板的形式存储在txt文件中,使用json参数填充到模板并发送到 ComfyUI 服务。例如参数为
```json
{
"seed": "4259488860108327",
"steps": "2"
}
```
程序会将 `<%seed%>` 替换为 `4259488860108327`。模板可在 `ComfyUI` 的 web 界面中调试完成后导出,如下图。

![](asdfasdf)

模板文件保存在 [prompt_temp](prompt_temp)文件夹。

模板数据保存在 templates 表。

### 接收任务进度推送

绘图任务的状态变更以 websocket 的形式实时推送到当前程序。请定义 `model.ReceivedMsgFun` 类型的方法以接收推送消息。当前项目中会将任务状态实时更新到任务表。如果任务执行结束,则下载执行结果中的图片到本地 [img](img) 文件夹。

`websocket` 连接每30s会 `ping` 一次 `ComfyUI` 服务,如果断开连接,每 5s 尝试重连。如果因为 `websocket`
断开连接导致错过了任务的执行结果的推送,可以手动调用查询任务执行结果接口获取任务执行状态以及结果。

### 查询任务执行结果

使用任务下发接口的任务id,查询执行结果,如果没有下载过图片,则再次下载图片。

### ComfyUI 服务探活

返回 ComfyUI 服务的服务器信息以及 ComfyUI 版本信息等。

## 遗留的问题

- 因为任务下发后,还没有等到 `ComfyUI` 服务返回任务id,`websocket` 就已经接收到新任务进度推送。导致在数据库中查不到任务数据,可能造成当前项目中任务状态与 `ComfyUI` 服务任务状态不一致。
- 目前没有实现用户认证和权限控制。

## ps

* 项目大部分代码使用 `LLM` 生成