dsh-comfyui-panel
The real ComfyUI editor as a sidebar tab in DeepSeek Harness, with per-session tools that read and edit the graph on screen and a panel that can start, stop and restart ComfyUI without installing anything into it.
Install
dsh plugin --profile web add dsh-comfyui-panel
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-comfyui-panel


[English](README.md) · [简体中文](README.zh-CN.md)
在 DeepSeek Harness Web UI 里使用 ComfyUI:右侧面板中是真实的编辑器,工作流可被模型读取和编辑,模型也能发起运行。
目录
- [安装](#安装)
- [使用](#使用)
- [能力](#能力)
- [配置](#配置)
- [要求](#要求)
- [限制](#限制)
安装
在 DSH 中打开 设置 → 插件 → 发现 → 添加索引源,粘贴:
https://raw.githubusercontent.com/Natsubrei/dsh-comfyui-panel/main/market/index.json
安装 ComfyUI Panel 卡片。索引为每个版本钉住一个 commit,所以安装的一定是测试过的发布。plugin_market 工具读取同一个索引。
其他方式 · 命令 · 适用情况
命令行 · dsh plugin --profile <name> add 'git+https://github.com/Natsubrei/dsh-comfyui-panel.git#<commit>' · 从市场卡片复制 <commit>。不钉 commit 的 URL 会跟随默认分支,可能领先于该发布。
npm · dsh plugin --profile <name> add dsh-comfyui-panel · 不关心版本时。npm 并不包含每一个已索引的发布。
如果 DSH 已经在运行,重启它。bundle 变化后,浏览器需要强制刷新。
使用
1. 打开右侧边栏的 ComfyUI 标签。标签属于当前会话,可以全屏。
2. 服务地址保持 http://127.0.0.1:8188,或在[配置](#配置)中改成别的地址。
3. 如果还没有服务,打开面板里的 Server,选中含 main.py 的目录,按 Start。常见位置会自动识别。Start with DSH 会被记住。已经在运行的服务会被接管,不会再启动一个。
4. 等标签显示已连接。这个会话随后获得下表中的工具,其他会话没有。
还没有 ComfyUI:运行 node test/mock-comfyui.mjs,打开标签,等待 Connected。mock 是单节点图,comfyui_run 返回 p1。在真正的 ComfyUI 使用 8188 端口前,先停掉 mock。
贡献者运行 npm test 和 npm run typecheck。覆盖范围见 [CONTRIBUTING.md](CONTRIBUTING.md)。
能力
工具只出现在已经同步过工作流的会话上。Host 重启后,已持久化的会话会重新获得工具。新会话在第一次同步时获得。
Panel 列的 需打开 表示该会话必须打开面板,可关闭 表示面板可以关着。
面板
能力 · 你得到什么
编辑器 · 在 /comfyui/ 提供真实的 ComfyUI 前端,走已认证的 HTTP 和 WebSocket。同源 iframe 保留第三方节点的界面。面板不使用 DSH 主题变量。自定义节点界面以 DSH 页面的身份运行,见 [SECURITY.md](SECURITY.md)。
桥接 · window.comfyAPI.app.app 出现后,标签可见时大约每秒同步一次:UI 工作流、只读投影,以及 graphToPrompt() 给出的 API 提示。UI 工作流是权威图。编辑器事件(execution_start、executing、progress、executed、成功、错误、中断和队列状态)经编辑器自己的 socket 转发,运行就发往这个 socket。面板不再单独开一个 ComfyUI socket。
摘要行 · 一行,例如 ComfyUI: rev 14 · "deepseek-chan-emoji" · 9 nodes · 9 links · selected 7 · panel open.。只有图有名字时才出现名称。打开多个标签时附加数量和当前标签。缩放、平移和改变面板大小不会增加 rev。
名称 · 保存或加载具名工作流会给会话和顶栏命名。当 ComfyUI 用户数据中存在 <name>.json 时,编辑器标签也改成同名。
存储 · 域 dsh_comfyui。Host 重启不丢图。记录为 sessionId -> { workflow, prompt, semantic, revision, name, nameSource },保留最近更新的 20 个会话。nameSource 是 file 或 tool。模型看到的是投影和它自己的编辑结果。存储失败时退回内存,不阻塞桥接。具名工作流放在 workflows 表。
进程 · Server 启动、停止和重启 ComfyUI。命令由检出目录推导(Unix 上是 .venv/bin/python,Windows 上是 .venv/Scripts/python.exe,否则用 python3 或 python),参数来自上游端口,不接受任意命令。目录和 Start with DSH 存在 dsh_comfyui 中,不写入 DSH profile。
模型工具
工具 · 作用 · 面板
comfyui_status · 上游、面板、工作流摘要、存储、进程管理和最近一次运行。diagnostics 每层一行(upstream、frontend、panel、commandChannel、storage、supervisor、workflow),带 ok、一句话 detail,需要下一步时带 action。warn: true 且 ok: true 表示能用但降级,例如前端版本未上报。 · 可关闭
comfyui_graph_read · 每个节点给出 id、type、title、mode、widgets(name -> value)和 inputs(name -> "<sourceNodeId>:<slot>")。layout=true 附加画布框和重叠判定。full=true 附加原始 UI 工作流和 API 提示。 · 可关闭
comfyui_run · 提交已同步的 API 提示并返回 prompt_id。调用返回后 Host 继续跟踪这次运行,无论面板开不开。输出的 PNG 带 UI 工作流,拖回 ComfyUI 可恢复图。wait=true 返回最多四张 type: 'output' 图片,每张 20 MB。没有附件服务,或模型路由不接受图片时,结果改为列出文件名。 · 可关闭
comfyui_cancel · 移除排队中的提示(action: "deleted")或中断正在运行的提示(action: "interrupted")。已经结束的提示是空操作。把输出文件复制到指定路径还不是工具。 · 可关闭
comfyui_progress · 面板事件(当前节点、步骤进度、错误)、运行记录、实时 /queue,以及 hostRun(终态和输出文件名)。面板关闭后 hostRun 继续,步骤进度不继续。 · 可关闭
comfyui_edit · 在一个有序批次里增删、移动、重连节点并设置控件值。结果带回剩下的节点和连线数,所以只应用了一半的编辑看得见。它不校验图的语义,由 ComfyUI 在转成提示时拒绝错误编辑。 · 需打开
comfyui_screenshot · 把编辑器画布写成 PNG 并返回路径。用 read_image 打开。 · 需打开
comfyui_node_info · 缓存的 /object_info 查询,用于类类型和输入名。 · 可关闭
comfyui_workflow_save · 按名称保存已同步的工作流。同名会覆盖该槽位。没有合并、撤销或逐槽位历史。 · 可关闭
comfyui_workflow_list · 已保存的槽位(节点和连线数、写入时间),加上 ComfyUI 用户 workflows/ 目录里的 .json 文件(大小、修改时间)。source 为 slot 或 comfyui。当前会话正在编辑的槽位会被标出。ComfyUI 读取失败时保留槽位并给出 warning。 · 可关闭
comfyui_workflow_load · 用已保存的槽位或 ComfyUI 用户工作流替换打开的图,然后同步。同名时槽位优先,除非 source 指明用哪个。 · 需打开
comfyui_workflow_export · 从已保存的槽位或会话的图写出一份 UI 工作流 JSON。路径必须在会话工作区内。 · 可关闭
comfyui_workflow_import · 把 UI 工作流 JSON 读入一个槽位。路径必须在会话工作区内。 · 可关闭
comfyui_workflow_switch · 按 name 切换到另一个已打开的标签;两个标签同名时用 path。该标签未保存的编辑会保留。 · 需打开
comfyui_workflow_close · 关闭一个已打开的标签。要求 confirm: true,并假定用户已经要求关闭。有未保存内容的文件标签会打开 ComfyUI 自己的保存对话框。有未保存内容的临时标签会被拒绝关闭。 · 需打开
comfyui_workflow_save、comfyui_workflow_list、comfyui_workflow_export 和 comfyui_workflow_import 只在该会话已经同步或恢复过工作流之后,才能在面板关闭时使用。
配置
默认上游是 http://127.0.0.1:8188。优先使用回环地址。要改地址,在 profile 的 cordis.patch.yml 里按同一个 id 覆盖本插件的行。补丁会替换整个 config,所以要重复写 prefix。prefix 固定为 /comfyui,其他值会让插件加载失败。
- insert:
- id: dsh-comfyui-panel
name: dsh-comfyui-panel
config:
upstream: http://127.0.0.1:8188
prefix: /comfyui
代理会去掉 DSH 会话 cookie(dsh-auth-…),其他 cookie 和 Authorization 仍会转发。upstream 只指向你信任的服务。见 [SECURITY.md](SECURITY.md)。
从面板启动 ComfyUI 不需要 profile 配置。插件行上的 supervise 块会在启动时覆盖面板的设置。字段、必填的 cwd 和默认值见 [docs/supervise.md](docs/supervise.md)。
要求
- ComfyUI 的前端是标准
comfyui-frontend-package构建(相对路径./assets/...,api_base由路径推导)。面板最后在 1.57.1 上验证。上报其他版本时显示提示,仍然加载。不上报版本的服务不做处理。 - 面板使用
window.comfyAPI.app.app,这是兼容层,不是稳定 API。实际用到的成员和升级后如何复查见 [docs/comfyui-bridge.md](docs/comfyui-bridge.md)。 - DSH Web profile 挂载了
storage、storage-json和storage-domain。默认 profile 有。缺少时工作流只存在内存中。 - 接管已在运行的 ComfyUI(这样刷新后 Stop 和 Restart 仍可用)需要 Linux 的
/proc或lsof。两者都没有时,该服务保持 external。从面板启动一个不需要这两者。面板或comfyui_status看到健康的上游时会重试接管。工作目录不是所配置检出目录的监听者保持 external,会报告 pid,且没有 Stop/Restart。Windows 可以从面板启动检出,那里已在运行的服务保持 external。
限制
- ComfyUI 用户工作流通过
/userdata从workflows/读取,每次加载一个 JSON 文件。名称是workflows/下的路径去掉 `.js
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::8,最后更新 2026-11-04