186 lines
4.6 KiB
Markdown
186 lines
4.6 KiB
Markdown
# ComfyUI 工作流管理
|
|
|
|

|
|
|
|
## 功能
|
|
|
|
- 工作流上传
|
|
- 工作流版本控制
|
|
- 工作流加载
|
|
- ComfyUI 服务器管理(支持持久化)
|
|
- 需配置工作流服务器 (详见**WAAS(工作流即服务) Demo API 服务器**)
|
|
|
|
# WAAS(工作流即服务) Demo API 服务器
|
|
|
|

|
|
|
|
- 路径: ./workflow_service
|
|
- 部署: `modal deploy modal_deploy.py --name waas-demo -e dev`
|
|
- 配置: 参考`.env`文件
|
|
- 必须按照指定规则命名
|
|
- **输入节点名**: 前缀 **INPUT\_**
|
|
- **除生成文件节点外输出节点名**: 前缀 **OUTPUT\_**
|
|
- 支持输入节点:
|
|
- comfyui-core
|
|
- 加载图像
|
|
- ComfyUI-VideoHelperSuite
|
|
- Load Video(Upload)
|
|
- comfyui-easy-use
|
|
- 整数
|
|
- 字符串
|
|
- 浮点数
|
|
- 支持输出节点:
|
|
- 所有在 output 文件夹中生成文件(图片/视频)的节点
|
|
- comfyui-easy-use
|
|
- 展示任何
|
|
- 数据库
|
|
- 类型: **SQLite** (workflows_service.sqlite)
|
|
- 数据库结构
|
|
```
|
|
CREATE TABLE IF NOT EXISTS workflows (
|
|
name TEXT PRIMARY KEY,
|
|
base_name TEXT NOT NULL,
|
|
version TEXT NOT NULL,
|
|
workflow_json TEXT NOT NULL
|
|
)
|
|
|
|
CREATE TABLE IF NOT EXISTS comfyui_servers (
|
|
name TEXT PRIMARY KEY,
|
|
http_url TEXT NOT NULL,
|
|
ws_url TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'offline',
|
|
last_health_check DATETIME,
|
|
current_tasks INTEGER DEFAULT 0,
|
|
max_concurrent_tasks INTEGER DEFAULT 1,
|
|
capabilities TEXT,
|
|
server_metadata TEXT,
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
)
|
|
```
|
|
- 路由
|
|
|
|
- GET /api/workflow: 列出工作流
|
|
- POST /api/workflow: 添加工作流
|
|
- DELETE /api/workflow: 删除工作流
|
|
- GET /api/run/{base_name}: 获取工作流输入输出元数据
|
|
|
|
```
|
|
输入:
|
|
*base_name: 工作流名称
|
|
version: 工作流版本
|
|
|
|
输出:
|
|
Json
|
|
{
|
|
"inputs": {
|
|
"image_image": {
|
|
"node_id": "13",
|
|
"type": "UploadFile",
|
|
"widget_name": "image"
|
|
},
|
|
"prefix_value": {
|
|
"node_id": "22",
|
|
"type": "int",
|
|
"widget_name": "value"
|
|
}
|
|
},
|
|
"outputs": {
|
|
"text_output": {
|
|
"node_id": "21",
|
|
"class_type": "easy showAnything",
|
|
"output_name": "output",
|
|
"output_index": 0
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
- POST /api/run/{base_name}: 执行工作流
|
|
|
|
```
|
|
输入:
|
|
*base_name: 工作流名称
|
|
version: 工作流版本
|
|
|
|
输出:
|
|
Json
|
|
{
|
|
"output_files": [
|
|
"https://cdn.roasmax.cn/outputs/测试/4e91e429-c848-4f66-885c-98a83c745872_111_00001_.png"
|
|
],
|
|
"text_output": [
|
|
"output\\111_00001_.png"
|
|
]
|
|
}
|
|
```
|
|
|
|
# ComfyUI 服务器持久化功能
|
|
|
|
## 概述
|
|
|
|
ComfyUI 服务器管理器现在支持持久化功能,这意味着即使管理服务重启,也能从数据库中恢复已注册的服务器及其状态信息。
|
|
|
|
## 主要特性
|
|
|
|
- **自动持久化**: 服务器注册、状态变化、注销时自动保存到数据库
|
|
- **自动恢复**: 服务启动时自动从数据库加载已注册的服务器
|
|
- **健康检查**: 定期检查服务器健康状态并更新数据库
|
|
|
|
## 使用方法
|
|
|
|
### 1. 数据库迁移
|
|
|
|
首次使用需要运行迁移脚本:
|
|
|
|
```bash
|
|
python migrate_database.py
|
|
```
|
|
|
|
### 2. 测试功能
|
|
|
|
运行测试脚本验证功能:
|
|
|
|
```bash
|
|
python test_persistence.py
|
|
```
|
|
|
|
### 3. API 使用
|
|
|
|
```python
|
|
from workflow_service.comfy.comfy_server import server_manager
|
|
|
|
# 注册服务器
|
|
await server_manager.register_server(
|
|
name="my_server",
|
|
http_url="http://localhost:8188",
|
|
ws_url="ws://localhost:8188",
|
|
max_concurrent_tasks=2
|
|
)
|
|
|
|
# 获取服务器状态
|
|
servers = await server_manager.get_all_servers()
|
|
```
|
|
|
|
详细文档请参考 [PERSISTENCE_README.md](PERSISTENCE_README.md)
|
|
|
|
---
|
|
|
|
# JS 脚本使用指南
|
|
|
|
### MacOS
|
|
|
|
将这个脚本直接放在该目录下,重启 ComfyUI 即可
|
|
/Applications/ComfyUI.app/Contents/Resources/ComfyUI/custom_nodes/ComfyUI-Manager/js
|
|
|
|
### Windows
|
|
|
|
将这个脚本直接放在该目录下,重启 ComfyUI 即可
|
|
{Comfy 的安装目录}\comfy\ComfyUI\custom_nodes\ComfyUI-Manager\js
|
|
|
|
### Q&A
|
|
|
|
主要是找到 `custom_nodes/ComfyUI-Manager` 的位置,这个目录下有一个 js 目录,把 `publisher.js` 脚本直接扔到这个 js 目录下即可。
|
|
|
|
一些版本安装的时候,用户额外装的的 custom_nodes 和系统自带的可能还不在一个位置,比如 MacOS 装客户端版本。用户额外装的是在 Documents 下,但 ComfyUI-Manager 是在对应的安装包目录里,得去 `/Applications` 里找。Windows 可能也会有类似的逻辑
|