DeepSeek Harness 中嵌入真正的 ComfyUI 编辑器

前言

DeepSeek Harness(DSH)通过插件化架构扩展功能,但现有的 ComfyUI 集成方案往往只提供简单的 iframe 嵌入,无法让智能体直接读写工作流。开发者需要一种既能保持 ComfyUI 完整编辑能力,又能让模型通过工具调用操作工作流的方式。

dsh-comfyui-panel 插件在 DSH Web UI 的右侧边栏嵌入真正的 ComfyUI 编辑器,并建立编辑器与 Host 之间的双向桥接,使智能体可以通过工具对工作流进行读写和执行。

插件定位

该插件由 Natsubrei 维护,是一个 DSH 客户端插件。它通过认证反向代理在 DSH 域名下提供 ComfyUI 前端服务,并在会话作用域内为智能体注册七个 ComfyUI 工具,支持工作流的读写、截图和进程管理。

核心功能

插件提供以下能力:

  • 反向代理与嵌入:在 DSH origin 下通过 /comfyui/ 路径提供 ComfyUI 前端,通过认证反向代理(HTTP + WebSocket)访问。在右侧边栏添加 ComfyUI 标签页,该标签页与会话绑定,可全屏使用,加载同源 iframe,第三方节点保持独立 UI。

  • 编辑器与 Host 桥接:编辑器加载完成后,面板定期序列化 UI 工作流,构建语义投影(节点 ID、类型、标题、模式、控件值、输入源、选择状态),调用 app.graphToPrompt() 生成 API 提示,并通过 POST 请求发送到 /api/comfyui/state。同时订阅编辑器的事件总线,将队列状态、执行开始、执行中、进度、执行完成/失败/中断等事件转发到 /api/comfyui/events。

  • 工具集:为拥有同步工作流的会话注册七个工具:

  • comfyui_status:上游连通性、面板连接、工作流摘要、持久化存储后端、监督者状态和最新运行记录。
  • comfyui_graph_read:语义投影,返回节点 ID、类型、标题、模式、控件名值映射和输入源映射。layout=true 返回画布框和重叠判断,full=true 返回原始 UI 工作流和 API 提示。
  • comfyui_run:提交同步的 API 提示并返回 prompt_id,可选等待历史记录。
  • comfyui_progress:面板事件(当前节点、步进进度、错误)、运行记录和实时队列快照。
  • comfyui_edit:通过 Host → 面板命令通道在打开的面板内添加、删除、移动节点和重连节点,设置控件值。批量应用并返回保留的节点和链接数量。
  • comfyui_screenshot:将面板编辑器画布序列化为磁盘 PNG 文件并返回路径,可配合 read_image 查看。
  • comfyui_node_info:缓存 /object_info 查询结果,用于类类型和输入名称。

  • 运行时上下文:为会话添加一行运行时上下文摘要,例如 ComfyUI: rev 14 · 9 nodes · 9 links · selected 7 · panel open.

  • 持久化:将每个会话的工作流、API 提示和投影存储在 ctx.storageDomain 的 dsh_comfyui 域中,Host 重启不会丢失工作流。存储失败时降级为内存存储,不阻塞桥接。

  • 进程管理:在面板的 Server 部分启动、停止和重启 ComfyUI,记住检出目录,可与 DSH 同时启动。插件会检测已运行的服务器并复用,而非启动副本。不需要配置文件即可管理进程。

安装与启用

从插件市场安装(推荐)

在 DSH 中打开 Settings → Plugins → Discover → Add index source,粘贴:

https://raw.githubusercontent.com/Natsubrei/dsh-comfyui-panel/main/market/index.json

在发现列表中找到 ComfyUI Panel 卡片进行安装。索引为每个版本固定一个提交,因此安装总是匹配已测试的版本。

使用 CLI 安装

dsh plugin --profile <name> add 'git+https://github.com/Natsubrei/dsh-comfyui-panel.git'

dsh plugin 会链接或安装包并将其添加到配置文件的包列表中。如果配置文件正在运行,需要重启 DSH;客户端在包变更后需要硬刷新。

从 npm 安装(包发布后)

dsh plugin --profile <name> add dsh-comfyui-panel

配置

插件使用 cordis.patch.yml 进行自身补丁:

- insert:
    - id: dsh-comfyui-panel
      name: dsh-comfyui-panel
      config:
        upstream: http://127.0.0.1:8188
        prefix: /comfyui

通过在配置文件的 cordis.patch.yml 中用相同的 id 覆盖该行来修改 upstream 或 prefix。补丁会替换整行配置,因此保留的键需要重复。

prefix 是面板服务的同源路径,upstream 是 ComfyUI 服务器地址。两者必须与面板硬编码的 /comfyui/ 一致。

进程管理无需配置:打开面板的 Server 部分,指向 ComfyUI 目录(包含 main.py 的文件夹,通常自动检测),点击 Start。命令根据目录推导(<dir>/.venv/bin/python,否则 python3),参数来自配置的上游端口。目录和 Start with DSH 标志存储在插件的 dsh_comfyui 域中,而非 DSH 配置文件。

对于高级设置,插件行仍接受 supervise 块,启动时优先级更高:

        supervise:
          enabled: true
          command: /opt/ComfyUI/.venv/bin/python
          args: [main.py, --listen, 127.0.0.1, --port, '8188']
          cwd: /opt/ComfyUI
          restartDelayMs: 5000
          maxRestarts: 5
          probeIntervalMs: 20000
          startTimeoutMs: 120000
          logPath: /var/log/comfyui/comfyui.log

启用 supervise 时 cwd 是必需的,缺失会导致插件加载失败而非静默不启动。command 默认为 python3,args 默认为 main.py --listen 127.0.0.1。如果上游已响应 /system_stats,插件会采用该服务器(state: external)而非启动副本。卸载插件只会停止它启动的进程。

依赖要求

  • 运行中的 ComfyUI,其前端为标准 comfyui-frontend-package 构建(相对路径 ./assets/...,api_base 从路径推导)。
  • DSH Web 配置文件挂载 storage、storage-json、storage-domain(默认配置文件包含这些挂载)。不挂载这些域则工作流仅保留在内存中。
  • 面板依赖同源 iframe 和 window.comfyAPI.app.app,这是 ComfyUI 前端提供的兼容性适配,不是稳定公共 API。建议为里程碑版本之外的使用固定前端版本。插件最后验证的前端版本为 1.57.1。

典型用法

打开 ComfyUI 标签页后,面板会显示连接状态。点击 Server 部分并启动 ComfyUI。面板加载完成后,智能体即可调用 comfyui_status 查看连接和工作流摘要,使用 comfyui_graph_read 获取语义投影,通过 comfyui_run 提交提示并返回 prompt_id,利用 comfyui_progress 获取执行进度,使用 comfyui_edit 在面板内修改工作流,通过 comfyui_screenshot 获取当前画布快照。

测试环境可运行内置的模拟上游:

node test/mock-comfyui.mjs

在会话中打开 ComfyUI 标签页并等待 Connected。模拟页面暴露一个单节点工作流,comfyui_run 应返回 p1。在真实 ComfyUI 运行在 8188 端口之前停止模拟。

适用场景与注意

该插件适合需要在 DSH 中直接读写 ComfyUI 工作流的智能体开发场景,特别是需要通过工具调用管理图像生成流程的开发者。

注意插件以当前 DSH 进程权限运行,安装前应检查源码与许可证(MIT)。插件依赖 ComfyUI 前端的特定内部接口,升级前端版本可能需要更新适配逻辑。

总结

dsh-comfyui-panel 将真正的 ComfyUI 编辑器集成到 DSH Web UI 中,通过会话作用域的工具集和持久化存储,使智能体能够直接操作工作流并管理 ComfyUI 进程。它解决了现有方案中编辑器与 Host 之间缺乏深度集成的问题,为在 DSH 生态中构建可编程的图像生成工作流提供了基础。

目录页:https://www.skillhub.cn/plugins/Natsubrei/dsh-comfyui-panel
GitHub:https://github.com/Natsubrei/dsh-comfyui-panel

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜