Files
SillyTavern_replica/COMFYUI_WORKFLOW_IMPLEMENTATION.md

6.2 KiB
Raw Blame History

🎨 ComfyUI 工作流管理功能 - 实现完成

已完成的功能

1. 后端实现

文件结构

backend/
├── data/
│   └── comfyui_workflows/
│       └── default_txt2img.json          # 默认文生图工作流
├── services/
│   └── comfyui_workflow_manager.py       # 工作流管理服务
└── api/routes/
    └── apiConfigRoute.py                  # 添加了4个新端点

API 端点

  1. GET /api/api-config/comfyui/workflows

    • 获取所有可用的工作流列表
    • 返回: [{filename, name, nodes_count, size}, ...]
  2. POST /api/api-config/comfyui/workflows/upload

    • 上传工作流 JSON 文件
    • 验证: JSON格式、包含KSampler节点
    • 自动备份已存在的文件
  3. DELETE /api/api-config/comfyui/workflows/{filename}

    • 删除工作流文件
    • 保护: 不允许删除 default_txt2img.json
  4. GET /api/api-config/comfyui/workflows/{filename}

    • 获取指定工作流的详细内容

核心功能

  • 工作流文件管理(增删查)
  • JSON 格式验证
  • ComfyUI 工作流有效性检查
  • 自动备份机制
  • 路径安全保护(防止遍历攻击)
  • 提示词替换功能(replace_prompt_in_workflow

2. 前端实现

新增组件

frontend/src/components/SideBarLeft/tabs/ApiConfig/
├── ComfyUIWorkflowManager.jsx    # 工作流管理器组件
└── ApiConfig.css                  # 添加了工作流管理器样式

组件功能

ComfyUIWorkflowManager.jsx:

  • 显示工作流列表(文件名、节点数、大小)
  • 上传按钮(导入 JSON 文件)
  • 删除按钮(每个工作流项)
  • 刷新按钮
  • 默认工作流标记
  • 空状态提示
  • 使用说明

UI 特性:

  • 紧凑的卡片式布局
  • 悬停效果
  • 加载状态
  • 错误提示
  • 响应式设计

3. 数据结构更新

前端 formData.imageModel 新结构

imageModel: {
  mode: 'local',  // 'local' | 'cloud'
  
  local: {
    apiUrl: 'http://comfyui:8188',
    websocketEnabled: true,
    queueTimeout: 300,
    defaultWorkflow: 'default_txt2img.json'
  },
  
  cloud: {
    provider: 'dall-e',
    apiUrl: 'https://api.openai.com/v1/images/generations',
    apiKey: '',
    model: 'dall-e-3'
  }
}

📋 待完成的工作

1. 前端 UI 完善 ⚠️

当前 ApiConfig.jsx 中:

  • 已导入 ComfyUIWorkflowManager 组件
  • 已在适当位置插入组件
  • 需要添加模式切换 UI(本地/云端 Radio 卡片)
  • 需要添加本地配置表单apiUrl、websocket、timeout
  • 需要添加云端配置表单provider、apiKey、model
  • 需要修改 handleChange 支持嵌套结构

2. Store 更新 ⚠️

ApiConfigSlice.jsx 需要:

  • 更新 saveProfile 以支持新的 imageModel 结构
  • 添加 testComfyUIConnection 方法
  • 添加 testCloudConnection 方法

3. 后端生图服务 ⚠️

需要创建:

  • backend/services/image_generator.py - 统一的生图服务
    • generate_image(prompt, config) - 主函数
    • call_comfyui(prompt, local_config) - 调用 ComfyUI
    • call_cloud_api(prompt, cloud_config) - 调用云端 API
    • 工作流加载和提示词替换逻辑

4. 聊天集成 ⚠️

需要在聊天接口中:

  • 检测用户想要生图的意图
  • 提取提示词
  • 读取 imageModel 配置
  • 调用生图服务
  • 返回图片 URL 或 base64

🎯 下一步建议

优先级 1: 完善前端 UI

  1. ApiConfig.jsx 中添加模式切换 Radio 卡片
  2. 根据模式动态显示不同的配置表单
  3. 修改 handleChange 支持嵌套路径
  4. 测试上传/删除工作流功能

优先级 2: 创建生图服务

  1. 创建 image_generator.py
  2. 实现 ComfyUI 调用逻辑
  3. 实现云端 API 调用逻辑
  4. 添加错误处理和重试

优先级 3: 集成到聊天

  1. 在聊天路由中添加生图端点
  2. 实现意图识别(可选,或使用命令如 /imagine
  3. 测试完整流程

🔧 测试清单

后端测试

# 1. 测试列出工作流
curl http://localhost:8000/api/api-config/comfyui/workflows

# 2. 测试上传工作流
curl -X POST http://localhost:8000/api/api-config/comfyui/workflows/upload \
  -F "file=@my_workflow.json"

# 3. 测试删除工作流
curl -X DELETE http://localhost:8000/api/api-config/comfyui/workflows/my_workflow.json

# 4. 测试获取工作流详情
curl http://localhost:8000/api/api-config/comfyui/workflows/default_txt2img.json

前端测试

  • 打开 API 配置页面
  • 切换到"🎨 生图"标签
  • 看到工作流管理器
  • 点击"导入工作流"上传 JSON
  • 看到上传的工作流出现在列表中
  • 点击删除按钮删除工作流
  • 确认默认工作流不可删除

📝 使用说明

用户上传工作流

  1. 在 ComfyUI Web UI 中设计工作流
  2. 点击菜单 → "Save (API Format)"
  3. 保存为 .json 文件
  4. 在本项目中点击"+ 导入工作流"
  5. 选择导出的 JSON 文件
  6. 上传成功后可在列表中看到

默认工作流

  • 文件: backend/data/comfyui_workflows/default_txt2img.json
  • 类型: 标准文生图
  • 参数: 512x512, 20 steps, CFG 7, Euler sampler
  • 不可删除

运行时提示词替换

后端会自动:

  1. 加载选定的工作流 JSON
  2. 找到第一个 CLIPTextEncode 节点
  3. 将其 text 字段替换为用户输入的提示词
  4. 发送到 ComfyUI

🎊 总结

已完成

  • 后端工作流管理服务和 API
  • 默认文生图工作流
  • 前端工作流管理器组件
  • 完整的 CRUD 功能
  • 数据结构设计

待完成

  • ⚠️ 前端模式切换 UI
  • ⚠️ 生图服务实现
  • ⚠️ 聊天集成

架构优势

  • 前后端分离清晰
  • 工作流由后端统一管理
  • 前端只需配置连接信息
  • 易于扩展新的工作流
  • 安全性好(验证、备份、路径保护)

当前状态: 🟡 基础框架完成,等待 UI 完善和服务集成