dsh-comfyui 0.3.0-beta.5 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +65 -168
- package/README.md +63 -166
- package/client/client.js +831 -33
- package/client/client.js.map +1 -1
- package/lib/config.d.ts +14 -0
- package/lib/config.js +6 -0
- package/lib/index.js +30 -10
- package/lib/routes.js +259 -0
- package/lib/skill.js +50 -3
- package/lib/skillpack.d.ts +262 -0
- package/lib/skillpack.js +774 -0
- package/lib/store.d.ts +13 -0
- package/lib/store.js +36 -0
- package/lib/tools.d.ts +3 -0
- package/lib/tools.js +289 -3
- package/package.json +4 -9
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
<h1 align="center">dsh-comfyui</h1>
|
|
10
10
|
|
|
11
|
-
<p align="center">让 DeepSeek Harness 的 Agent
|
|
11
|
+
<p align="center">让 DeepSeek Harness 的 Agent 智能驱动本地或远程 ComfyUI 生成任何内容。附带工作流、资产管理面板与技能包管理挂载。配套 skill 与同源媒体代理。</p>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
14
14
|
<a href="https://www.npmjs.com/package/dsh-comfyui"><img src="https://img.shields.io/npm/v/dsh-comfyui" alt="npm version" /></a>
|
|
@@ -16,210 +16,107 @@
|
|
|
16
16
|
<img src="https://img.shields.io/npm/l/dsh-comfyui" alt="license" />
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
|
+
> **版本配对(选对 dsh 版本再装,否则 dshmarket 会报风险提示)**:
|
|
20
|
+
>
|
|
21
|
+
> | dsh-comfyui | 配对的 DeepSeek Harness | 说明 |
|
|
22
|
+
> | --- | --- | --- |
|
|
23
|
+
> | **0.4.0(最新,`latest` tag)** | **≥ 0.1.2** | 0.4.0 起使用新版 settings 服务 API |
|
|
24
|
+
> | **0.3.x(beta 线,`beta` tag)** | **0.1.1** | 老版本 dsh 请留在 0.3.x 线 |
|
|
25
|
+
>
|
|
26
|
+
> 安装:`dsh plugin --profile web add dsh-comfyui`(装最新 0.4.0)/ `dsh plugin --profile web add dsh-comfyui@beta`(老宿主装 0.3.x)。
|
|
27
|
+
|
|
19
28
|
## 功能
|
|
20
29
|
|
|
21
30
|
### Agent 工具
|
|
22
31
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- `
|
|
32
|
+
Agent 直接驱动 ComfyUI,无需手动操作画布:
|
|
33
|
+
|
|
34
|
+
- `comfyui_run` —— 提交 API 格式工作流或内置模板(txt2img / img2img / video),返回生成媒体;`mode: "sync"` 等待结果,`mode: "async"` 后台任务(视频生成强烈建议)。
|
|
35
|
+
- `comfyui_object_info` —— 列出服务器支持的节点定义,让 Agent 现场构造合法工作流。
|
|
36
|
+
- `comfyui_workflow` —— 管理插件工作流库:`list`(含服务器地址、本机 ComfyUI 目录、加载区素材、每个工作流的参数清单)、`run`(按 id 运行 + 参数覆盖)、`skill`(按需读取某工作流的技能包)、`refresh`(重算参数快照)。
|
|
37
|
+
- `comfyui_skill` —— 读写工作流技能包(`list` / `read` / `write` / `append` / `mkdir` / `rename` / `delete` / `enable` / `require`),Agent 可把踩坑经验写回技能包,跨会话复用。
|
|
26
38
|
|
|
27
39
|
### UI 面板
|
|
28
40
|
|
|
29
|
-
|
|
41
|
+
右侧停靠面板,三个页签:
|
|
30
42
|
|
|
31
|
-
- **工作流** ——
|
|
32
|
-
- **资产** ——
|
|
33
|
-
- **队列** ——
|
|
43
|
+
- **工作流** —— 可运行工作流库(新建 / 编辑 / 运行 / 删除 / 导入 `.json`,标签分类 + 下拉筛选);自动检测 ComfyUI 端保存的图工作流,支持**提取**为可运行工作流(画布含多个独立流程时可选整体 / 按分量 / 主流程)。
|
|
44
|
+
- **资产** —— 所有生成结果,预览、下载、悬停可删除(同步清理 ComfyUI 输出目录里的文件)。
|
|
45
|
+
- **队列** —— 实时队列 + 历史任务五态展示,支持删除 / 中断 / 重跑 / 清空 / 释放内存,插件提交的任务带进度条与预览。
|
|
34
46
|
|
|
35
47
|
<p align="center"><img src="images/panel.png" width="70%" alt="插件主面板:工作流 / 资产 / 队列" title="插件主面板:工作流 / 资产 / 队列" /></p>
|
|
36
48
|
|
|
37
|
-
###
|
|
38
|
-
|
|
39
|
-
仿 ComfyUI LoadImage 节点的媒体加载器,位于工作流页顶部:除图片外,选择窗口也会列出 ComfyUI 加载节点(LoadVideo / LoadAudio)可用的视频与音频文件。
|
|
40
|
-
|
|
41
|
-
- **多加载位**:加载区由若干加载位组成——只有一个时横向铺满面板,两个及以上时等宽排列并自动换行。底部"+ 添加加载区"新增加载位;空加载位显示"加载位 N / 添加素材",点击即可放入;鼠标悬停在任一加载位右上角会出现 **×**,点击删除该加载位;在选择窗口第一格选"空"则只清空该位、保留加载位。已放入的素材按顺序填进工作流里未显式指定的加载参数——两张参考图的工作流放两个加载位即可,Agent 无需点名文件。
|
|
42
|
-
- 点击任一加载位打开加载窗口:上方导航条(全部 / 已导入 / 已生成)、类型筛选、右侧粘贴/上传区、下方瀑布流网格展示 ComfyUI `input` 目录里图像 / 视频 / 音频的全部可加载文件 + 插件生成的全部结果。**视频与音频可就地播放试听**(卡片内自带播放器,点播放器只播放、不会误选);点卡片下方的文件名即选定并关闭窗口。加载文件的类型按扩展名判定,加载节点的输入键从 ComfyUI 节点定义读取(`LoadImage.image` / `LoadVideo.file` / `LoadAudio.audio`),不会漏掉某一类媒体。
|
|
43
|
-
- 加载区素材即**默认输入**:工作流运行中未显式指定的加载参数按加载位顺序自动填入(第 1 位 → 第 1 个图片参数,第 2 位 → 第 2 个;视频/音频参数各取同类型加载位)——无需指定文件名。没有对应加载位的参数保持工作流原值。
|
|
44
|
-
- **Agent 可见**:`comfyui_workflow action: list` 的输出带 `loadArea`(加载位数量、已放入素材数、文件清单),Agent 能直接知道用户加载了几个素材、分别是什么。
|
|
45
|
-
- **分辨率自动匹配**:上传时记录像素尺寸;运行时不传 `width`/`height` 则自动用源图实际分辨率。
|
|
46
|
-
- **哈希命名 + 去重**:上传重命名为 `原名_短哈希.ext`(SHA-256 前 10 位十六进制);重复上传相同文件直接复用已有文件名,不产生重复存储。上传后列表实时刷新。
|
|
47
|
-
- 选中**已生成**的图时会自动从输出目录复制到 `input`,图像加载节点即可使用。
|
|
48
|
-
|
|
49
|
-
<p align="center"><img src="images/loadarea.png" width="70%" alt="加载区:图像选择与上传" title="加载区:图像选择与上传" /></p>
|
|
50
|
-
|
|
51
|
-
### 工作流标签
|
|
52
|
-
|
|
53
|
-
用预设分类(图生图 / 文生图 / 文生视频 / 图生视频 / 参考生视频 / 文生音频 / 参考生音频)+ 自定义标签给可运行工作流分类。标签在编辑工作流时勾选/添加,显示在卡片右上角,列表顶部有带计数的标签筛选条。
|
|
54
|
-
|
|
55
|
-
### 内置模板
|
|
56
|
-
|
|
57
|
-
`txt2img`(SDXL 文生图)、`img2img`(SDXL 图生图)、`video`(Wan 2.1 文生视频,需要 ComfyUI-WanVideoWrapper)。模板节点 id 写在工具描述里,Agent 会覆盖正确的输入。
|
|
58
|
-
|
|
59
|
-
### 媒体代理
|
|
60
|
-
|
|
61
|
-
生成文件按 `文件名 + 子目录 + 类型` 经同源路由(`/comfyui/media`)转发,不依赖 ComfyUI 的内存态历史记录——重启 ComfyUI 或清空历史后,资产面板里的旧结果照样能打开(只要文件还在输出目录)。浏览器不直接接触 ComfyUI:没有 CORS、没有混合内容、页面里不出现 API Key,远程 ComfyUI 部署也可直接使用。媒体 URL 的访问地址自动检测:页面加载时浏览器经 `/comfyui/ping` 自报实际访问的 origin(局域网 IP / 域名 / 反向代理都能拼出正确的链接),也可用配置键 `mediaHost` 显式指定基址。
|
|
62
|
-
|
|
63
|
-
### 工具卡片
|
|
64
|
-
|
|
65
|
-
结果在对话里渲染成媒体墙(图片/视频带下载链接),后台任务也有状态提示。
|
|
66
|
-
|
|
67
|
-
### 设置页
|
|
68
|
-
|
|
69
|
-
DH 设置里新增 "ComfyUI" 分区:改服务器地址(`baseUrl`)、API Key 环境变量名(`apiKeyEnv`)、媒体访问地址(`mediaHost`)、本机 ComfyUI 安装目录(`comfyuiDirs`,可多条——目录映射 / 多实例;Agent 据此直接定位你的 ComfyUI 文件与 TTS 音色库,无需再询问)、测试连接,并可切换插件界面语言(中文 / English——存于浏览器,作用于整个插件 UI),无需改动 `cordis.yml`。数据目录与资产上限只通过 `cordis.yml` 配置,不在设置页暴露。
|
|
70
|
-
|
|
71
|
-
<p align="center"><img src="images/settings.png" width="70%" alt="ComfyUI 设置页(含界面语言切换)" title="ComfyUI 设置页(含界面语言切换)" /></p>
|
|
72
|
-
|
|
73
|
-
### 配套 skill
|
|
74
|
-
|
|
75
|
-
通过 `ctx.skills.register` 注册的运行时 skill(`dsh-comfyui-workflows`):让 Agent 掌握图工作流 vs 执行流的概念、画布分析规则(连通分量、绕过组、悬空节点)、何时该询问你提取方式,以及图→API 提取的技术规则。skill 还附带了**本机环境**说明(从 `comfyui_workflow list` 的 `env` 读你的 ComfyUI 目录)与**TTS-Audio-Suite 音色库查询**(统一流程:先刷新快照再查询——刷新用 ComfyUI 的 `/api/tts-audio-suite/voice-library?refresh=1` + `action: refresh` 重算写回快照,查询优先走 HTTP 接口、其次直接列 `{comfyuiDir}/models/voices` 等目录;新音色运行被拒 = 快照过期),Agent 不必反复翻插件源码。
|
|
76
|
-
|
|
77
|
-
### 图工作流 vs 可运行工作流(提取执行流)
|
|
49
|
+
### 加载区(媒体加载器)
|
|
78
50
|
|
|
79
|
-
ComfyUI
|
|
51
|
+
工作流页顶部的媒体加载器,仿 ComfyUI LoadImage 节点:图片 / 视频 / 音频可视化选择(可就地试听)、粘贴上传、多加载位。已放入的素材按顺序自动填进工作流里未显式指定的加载参数——**Agent 不需要猜文件名**;未传 `width`/`height` 时自动匹配源图分辨率。上传按内容哈希去重命名。
|
|
80
52
|
|
|
81
|
-
|
|
82
|
-
- **可运行工作流(运行主题)** —— API 格式的 prompt,真正的执行单元。从图里**提取**出来(1 图 → N 个执行流),或直接粘贴/导入 API `.json`。
|
|
53
|
+
`comfyui_workflow list` 的 `loadArea` 字段会把加载位数与内容暴露给 Agent。
|
|
83
54
|
|
|
84
|
-
|
|
55
|
+
### 工作流技能包(给 Agent 的说明书)
|
|
85
56
|
|
|
86
|
-
|
|
87
|
-
- **按分量提取**(推荐)—— 每个独立流程一个执行流。
|
|
88
|
-
- **只提取主流程** —— 只取最大分量(通常是当前测试区块)。
|
|
57
|
+
参数清单只能告诉 Agent"有哪些旋钮",说不出"这个工作流适合什么、哪一步会翻车"。复杂工作流可以挂一个**技能包**(面板工作流卡片上点「技能包」按钮启用):
|
|
89
58
|
|
|
90
|
-
|
|
59
|
+
```
|
|
60
|
+
<数据目录>/skills/<工作流>/
|
|
61
|
+
SKILL.md # 主文档:适用场景 / 关键参数 / 注意事项
|
|
62
|
+
references/ # 参考文档:风格合集、排错记录
|
|
63
|
+
assets/ # 参考图等素材(可在面板预览)
|
|
64
|
+
```
|
|
91
65
|
|
|
92
|
-
|
|
66
|
+
- **按需三级披露,不占常驻上下文**:`comfyui_workflow list` 只有一行摘要 → 选中工作流后 `action: skill` 取正文 → 正文点名某份参考文档时才读那一篇。几十个工作流各带整套文档,平时对话成本也只是一行摘要。
|
|
67
|
+
- **面板编辑**:左栏文件列表 + 右栏编辑器,支持导入(按扩展名自动分目录)、自定义子目录、图片预览、把整个技能包目录挪到别的盘或同步盘(设置页 `技能包目录`)。
|
|
68
|
+
- **Agent 也能写**:`comfyui_skill` 工具让 Agent 查看/编写技能包——踩到坑就 `append` 进 SKILL.md,下次(换个会话也一样)直接复用经验。
|
|
69
|
+
- **运行前必读**:可勾选「运行前必读」,勾上后 Agent 本会话没读过该技能包就调 `run` 会被拒绝并提示先读。
|
|
93
70
|
|
|
94
|
-
|
|
71
|
+
### 媒体代理与设置
|
|
95
72
|
|
|
96
|
-
|
|
97
|
-
- **高级参数**:面板"编辑工作流"里可手动暴露任意节点的任意输入为参数(选节点 → 选输入 → 命名),并调整每个参数的名称、显示名、默认值、是否随机。输入列表列出该节点全部 widget 值(含加载节点的 `upload` 项),当前由连线驱动的输入不列出——它们没有可编辑的值,暴露出来只会和连线打架。
|
|
98
|
-
- **布尔参数用勾选框编辑**:`true` / `false` 直接点选;运行时也接受 `"true"` / `"false"` / `0` / `1` 这些写法(旧版本存成字符串的默认值会自动归一,不再被静默忽略)。
|
|
99
|
-
- **数字参数区分整数/小数**:从 ComfyUI 节点定义读取输入的声明类型(`INT` / `FLOAT`),`cfg`、`denoise` 这类 FLOAT 参数可直接填小数,`steps`、`seed` 这类 INT 参数在运行时四舍五入;类型未知时按小数处理。参数行会标出 `number/int`、`number/float`,鼠标悬停显示取值范围与步长。
|
|
100
|
-
- **Agent 感知**:参数清单自动写入工作流的"参数说明"(`inputs` 字段),`comfyui_workflow` 工具的 `action: list` 会展示;`action: run` 接受 `parameters: {"prompt": "...", "seed": 42}` 覆盖——显式传值优先于随机/默认,未传参数用默认值。
|
|
101
|
-
- **参数快照与刷新**:每个参数的选项/数值声明(`options`、`numberKind` 等)在**保存工作流那一刻**从 ComfyUI 节点定义拷贝,之后不会自动更新(音色库、上传文件这类会长大的列表尤其明显)。刷新手段:Agent 用 `comfyui_workflow action: refresh { id }`;其他程序可调同源路由 `POST /comfyui/workflows/refresh-params`(body `{ "id": ... }`)。刷新只更新派生字段,**不会**动你手动加的高级参数与默认值;不刷新时,`action: list` 的选项可能缺新音色、`action: run` 传新音色会被拒绝。
|
|
102
|
-
- **加载区联动**:未显式指定的加载参数按加载位顺序自动填入(同类型匹配);未传的 `width`/`height` 自动匹配源图记录的像素尺寸。显式传值始终优先,Agent 仍可覆盖两者,并能从 `action: list` 的 `loadArea` 字段看到用户加载了什么。
|
|
73
|
+
生成文件经同源路由(`/comfyui/media`)按文件名转发,不依赖 ComfyUI 内存态历史——重启或清空历史后旧结果照样能打开。浏览器不直接接触 ComfyUI:无 CORS、无混合内容、API Key 不下发。
|
|
103
74
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
- DeepSeek Harness(web / desktop profile)—— 本插件面向 `web` 与 `desktop` profile(web 端要求 `@deepseek-ai/dsh-web-app` ≥ 0.1.0-rc.6)。
|
|
107
|
-
- 一个运行中的 [ComfyUI](https://github.com/comfystack/ComfyUI) 服务器(默认 `http://127.0.0.1:8188`)。
|
|
108
|
-
- 使用 `video` 模板需要 [ComfyUI-WanVideoWrapper](https://github.com/kijai/ComfyUI-WanVideoWrapper) 自定义节点和 Wan 2.1 模型文件。
|
|
75
|
+
DH 设置页新增 "ComfyUI" 分区:服务器地址、API Key 环境变量名、本机 ComfyUI 目录、媒体访问地址、测试连接、界面语言切换,改完即生效,无需改 `cordis.yml`。
|
|
109
76
|
|
|
110
77
|
## 安装
|
|
111
78
|
|
|
112
|
-
Web 端(web profile):
|
|
113
|
-
|
|
114
79
|
```sh
|
|
80
|
+
# web profile
|
|
115
81
|
dsh plugin --profile web add dsh-comfyui
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
桌面端(desktop profile):
|
|
119
|
-
|
|
120
|
-
```sh
|
|
82
|
+
# desktop profile
|
|
121
83
|
dsh plugin --profile desktop add dsh-comfyui
|
|
122
84
|
```
|
|
123
85
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
### API Key(远程服务器)
|
|
127
|
-
|
|
128
|
-
远程 ComfyUI 若位于需要鉴权的代理之后,通过凭据存储或 `apiKeyEnv` 指定的环境变量(默认 `COMFYUI_API_KEY`)提供密钥。密钥在 Host 端按请求解析,绝不发给浏览器。
|
|
86
|
+
重启应用后:侧边栏出现面板入口,设置页出现 "ComfyUI" 分区,Agent 立即获得全部工具与配套 skill。
|
|
129
87
|
|
|
130
88
|
## 使用
|
|
131
89
|
|
|
132
90
|
直接告诉 Agent,例如:
|
|
133
91
|
|
|
134
92
|
- "用 ComfyUI 画一张红猫的图"
|
|
135
|
-
- "把这幅图转成赛博朋克风格"
|
|
136
|
-
- "把加载区这张动漫图转成真人照片,分辨率跟原图一致"
|
|
137
|
-
- "生成一段 5 秒的短视频:日落下的城市"
|
|
138
|
-
- "用我之前在 ComfyUI 里保存的 Krea-Afterlight 跑一下"
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
```yaml
|
|
147
|
-
# cordis.yml
|
|
148
|
-
- id: comfyui
|
|
149
|
-
name: dsh-comfyui
|
|
150
|
-
config:
|
|
151
|
-
baseUrl: http://127.0.0.1:8188
|
|
152
|
-
apiKeyEnv: COMFYUI_API_KEY
|
|
153
|
-
timeoutMs: 900000
|
|
154
|
-
maxMediaItems: 12
|
|
155
|
-
dataDir: ''
|
|
156
|
-
maxAssets: 200
|
|
157
|
-
mediaHost: ''
|
|
158
|
-
outputDir: ''
|
|
159
|
-
comfyuiDirs:
|
|
160
|
-
- 'D:\ComfyUI'
|
|
161
|
-
```
|
|
93
|
+
- "把这幅图转成赛博朋克风格"
|
|
94
|
+
- "把加载区这张动漫图转成真人照片,分辨率跟原图一致"
|
|
95
|
+
- "生成一段 5 秒的短视频:日落下的城市"
|
|
96
|
+
- "用我之前在 ComfyUI 里保存的 Krea-Afterlight 跑一下"(若该图还没提取,Agent 会转告你先去面板点**提取**)
|
|
97
|
+
|
|
98
|
+
远程 ComfyUI 若位于需鉴权的代理之后,通过凭据存储或 `apiKeyEnv` 指定的环境变量(默认 `COMFYUI_API_KEY`)提供密钥,绝不发给浏览器。
|
|
99
|
+
|
|
100
|
+
## 配置
|
|
101
|
+
|
|
102
|
+
`cordis.yml` 的 `comfyui` 段(多数可在设置页改):
|
|
162
103
|
|
|
163
104
|
| 键 | 默认值 | 说明 |
|
|
164
105
|
| --- | --- | --- |
|
|
165
|
-
| `baseUrl` | `http://127.0.0.1:8188` | ComfyUI
|
|
166
|
-
| `apiKeyEnv` | `COMFYUI_API_KEY` | 可选 API Key
|
|
167
|
-
| `
|
|
168
|
-
| `
|
|
169
|
-
| `
|
|
170
|
-
| `
|
|
171
|
-
| `
|
|
172
|
-
| `dataDir` | *(DSH 数据目录)* | 工作流库与资产索引存放位置(默认 `$DSH_HOME/data/dsh-comfyui`) |
|
|
173
|
-
| `maxAssets` | `200` | 资产索引最多保留的条数 |
|
|
174
|
-
| `mediaHost` | `''`(自动检测) | 生成媒体的外网访问基址(如 `http://192.168.1.5:3080`);留空自动使用浏览器实际访问本服务器的地址 |
|
|
175
|
-
| `outputDir` | `''`(自动推断) | ComfyUI 在本机的输出目录,删除资产时用它定位文件;留空则从 ComfyUI 返回的文件路径自动推断,推断不出(如远程部署)时只删索引记录 |
|
|
176
|
-
| `comfyuiDirs` | `[]` | 本机 ComfyUI 安装目录列表(可多条:目录映射 / 多实例)。Agent 通过 `comfyui_workflow list` 的 `env.comfyuiDirs` 读取,据此定位 models、自定义节点与 TTS-Audio-Suite 音色库等文件 |
|
|
177
|
-
|
|
178
|
-
## Roadmap 与设计边界
|
|
179
|
-
|
|
180
|
-
本阶段确认的范围决策:
|
|
181
|
-
|
|
182
|
-
- **图生视频 / 参考生视频 / 音视频变体**不是插件侧功能:它们与图生图共用同一个上传节点,任何这类工作流(提取或导入)开箱即用。缺的是工作流本身,不是插件代码。
|
|
183
|
-
- **不做前端参数预设/收藏**。高级定制在工作流编辑里完成(修改参数默认值,或把任意节点输入添加为高级参数)。保持唯一事实来源。
|
|
184
|
-
- **模型强度类参数**(如 `ref_boost`)走高级参数机制:暴露节点输入、标注作用,Agent 即可按次调节。
|
|
185
|
-
- **规划中**:运行参数自动回写——运行成功后把本次使用的参数值保存为该工作流的新默认值,下次打开就是上一次会话用的值,而不是作者初始值。
|
|
186
|
-
|
|
187
|
-
## 安全
|
|
188
|
-
|
|
189
|
-
- 工具只会连接**配置好的** `baseUrl` —— Agent 无法指定任意目标(SSRF 遏制)。
|
|
190
|
-
- API Key 只存在于 Host(凭据存储/环境变量),按请求解析;`/comfyui/config` 只回传 `hasApiKey`。
|
|
191
|
-
- 媒体有大小上限;配置写入要求同源请求。
|
|
192
|
-
- 从 ComfyUI 提取的执行流会先校验(非空 `class_type`、对象型 inputs、服务器 `node_errors` 为空)再入库。
|
|
193
|
-
- 无 Web 服务器的 headless profile 只保留工具,路由静默跳过。
|
|
194
|
-
|
|
195
|
-
## 架构
|
|
196
|
-
|
|
197
|
-
一个 npm 包、双端实现,遵循 DH 插件约定:
|
|
198
|
-
|
|
199
|
-
- `src/index.ts` —— Host 入口:`inject: ['tools']`;注册工具与配套 skill(`ctx.skills.register`,可选服务),并把路由与媒体代理挂到 `webServer` 子 fiber(`ctx.inject`)上,避免并发 settle 导致挂载被静默跳过。
|
|
200
|
-
- `src/comfyui.ts` —— 精简的 ComfyUI HTTP 客户端(排队、轮询历史、object_info、system_stats、interrupt、view 下载、userdata 列表/读取)。
|
|
201
|
-
- `src/analyze.ts` —— 画布分析:激活节点的连通分量、组归属、悬空/孤立节点、绕过计数。
|
|
202
|
-
- `src/convert.ts` —— 图 → API 提取:重排连线(Reroute / bypass 直通)、按图自身输入顺序 + object_info 推导 widget 顺序(含 `control_after_generate` 与动态子 widget)、内联 Primitive 值、丢弃失效的输出槽位引用并警告、必需输入缺失时明确报错。
|
|
203
|
-
- `src/skill.ts` —— `dsh-comfyui-workflows` 配套 skill 正文。
|
|
204
|
-
- `src/params.ts` —— 参数应用:未指定的图片参数填入加载区源图、`width`/`height` 自动匹配源图记录尺寸、DynamicCombo 父子联动同步。
|
|
205
|
-
- `src/store.ts` —— 工作流库与资产索引落盘(`workflows.json` + `assets.json`),以及加载区记录(`current-image.json`、`media-sizes.json`、`media-hashes.json`)。
|
|
206
|
-
- `src/queue.ts` —— 追踪插件提交的 prompt,完成后移入资产索引(读时清扫,无定时器)。
|
|
207
|
-
- `src/tools.ts` —— 通过 `ctx.tools.register` 注册的 `ToolDefinition`;结果携带 `presentationMeta`,客户端卡片从会话日志渲染。
|
|
208
|
-
- `src/routes.ts` —— 面板用的同源 HTTP 路由(配置、工作流、ComfyUI 端图 + 分析/提取、资产、队列、运行、加载区、带哈希去重与尺寸记录的上传)。
|
|
209
|
-
- `src/client/` —— 浏览器端:`shell.overlay` 右侧停靠面板 + `sidebar.footer.action` 触发器、`tool.call.toolview` 卡片(key `comfyui_run`)、`settings.section` 设置页(id `comfyui`)。
|
|
210
|
-
- `cordis.patch.yml` —— `dsh.bundle.patch` 补丁层,把 `comfyui` 行插入 profile。
|
|
211
|
-
|
|
212
|
-
## 开发
|
|
106
|
+
| `baseUrl` | `http://127.0.0.1:8188` | ComfyUI 服务器地址 |
|
|
107
|
+
| `apiKeyEnv` | `COMFYUI_API_KEY` | 可选 API Key 的环境变量 / 凭据名 |
|
|
108
|
+
| `dataDir` | *(DSH 数据目录)* | 工作流库与资产索引存放位置 |
|
|
109
|
+
| `comfyuiDirs` | `[]` | 本机 ComfyUI 安装目录列表(可多条),Agent 据此定位 models、自定义节点、TTS 音色库 |
|
|
110
|
+
| `outputDir` | `''`(自动推断) | ComfyUI 输出目录(删除资产时定位文件用) |
|
|
111
|
+
| `mediaHost` | `''`(自动检测) | 生成媒体的外网访问基址 |
|
|
112
|
+
| `skillsDir` | `''`(默认 `dataDir/skills`) | 技能包根目录(绝对路径,可放同步盘 / 版本库) |
|
|
213
113
|
|
|
214
|
-
|
|
215
|
-
pnpm install
|
|
216
|
-
npm run typecheck # host + client
|
|
217
|
-
npm run build # tsc(host lib/)+ tsdown(client bundle)
|
|
218
|
-
npm pack --dry-run # 检查发布内容
|
|
219
|
-
```
|
|
114
|
+
## 环境要求
|
|
220
115
|
|
|
221
|
-
|
|
116
|
+
- DeepSeek Harness(`web` / `desktop` profile)
|
|
117
|
+
- 一个运行中的 [ComfyUI](https://github.com/comfystack/ComfyUI) 服务器(默认 `http://127.0.0.1:8188`)
|
|
118
|
+
- `video` 模板需要 [ComfyUI-WanVideoWrapper](https://github.com/kijai/ComfyUI-WanVideoWrapper) 与 Wan 2.1 模型
|
|
222
119
|
|
|
223
120
|
## License
|
|
224
121
|
|
|
225
|
-
MIT
|
|
122
|
+
MIT
|