前言¶
DeepSeek Harness(DSH)是「一切皆插件」的智能体开发框架。当智能体需要生成图片时,最直接的方式是接入一个本地绘图服务。ComfyUI 是流行的本地绘图工作流平台,但现有的集成方式要么依赖社区工作流库,要么需要手动维护清单。DSH 插件 dsh-draw-mode 提供了一个空框架:不附带任何工作流或模型,由你从 ComfyUI 导出的工作流驱动,自动识别输入位置、提供五个绘图工具与侧栏面板,让智能体在 DSH 里获得一个可配置的绘图模式。
插件定位与维护者¶
- 插件名称:dsh-draw-mode
- 维护者:suyunxing
- 分类:客户端
- GitHub:https://github.com/suyunxing/dsh-draw-mode
- 简介:把本地 ComfyUI 接进 DeepSeek Harness,提供五个绘图工具、侧栏面板与配置表单,全部由你导出的 ComfyUI 工作流驱动。
插件不自带工作流与模型,依赖你本地运行的 ComfyUI 实例与自定义节点。
核心功能¶
空框架,用你自己的图¶
插件不包含内置工作流库、硬编码检查点或模型清单。你从 ComfyUI 导出的工作流是什么,智能体就能跑什么。插件只负责识别输入位置、注入 LoRA 并回传 seed,不修改你导出的 JSON。
自动识别输入位置¶
插件会逐个分析工作流,自动找出提示词、负向提示词、宽、高、步数、CFG、seed、denoise、输入图与 LoRA 的位置。识别规则基于字面量(如 text、seed、width、height),不依赖节点名称或连线,避免断链。识别失败的节点不会影响整体解析。
五个工具¶
draw_status:检查 ComfyUI 是否连通、显卡与显存占用、当前插件配置、已识别的工作流与缺失的模型文件。可选无头启动 ComfyUI。draw_workflows:列出识别到的工作流,包含任务类型(t2i/img2img/edit/reverse)、默认参数与可替换输入。draw_models:从 ComfyUI 的/object_info读取实际已安装的模型文件,包括 checkpoint、扩散模型、文本编码器、VAE、LoRA。draw_generate:运行工作流,支持文生图、图生图或改图,可注入 LoRA,回传本次使用的 seed。draw_reverse:对一张图运行打标/反推工作流,返回文本。
侧栏设置面板¶
侧栏「画图」面板提供:
- 连通性、显卡名与空闲/总显存、空闲倒计时;
- 解析后的配置摘要,「编辑」按钮将摘要转为表单,保存后写入
~/.dsh/draw-mode/settings.json,立即生效; - 测试连接按钮,用当前配置检查 ComfyUI,但不保存;
- 工作流目录、识别到的工作流与解析失败的文件;
- 最近出图缩略图,支持灯箱查看。
保存时文本框留空表示「不覆盖」,该项回落到插件配置。勾选框与数字框无法留空,保存即钉死当前值。点击「清除覆盖」可一次性还原到插件默认。
可选自动启停¶
两项默认关闭:工具需要时拉起 ComfyUI,队列空闲一段时间后关闭释放显存。空闲关闭默认只结束本插件拉起的进程;idleShutdownScope: port 会关闭该端口上的任何进程,包括你手动启动的 ComfyUI。
环境要求¶
- 一个本地(或局域网)ComfyUI 实例。插件不依赖特定 ComfyUI 版本,需要哪些节点和模型,由你导出的工作流决定。
- Node >= 22。不 import 任何
@deepseek-ai/*包,只引用宿主提供的服务。 - 工作流所需的自定义节点与模型文件。
安装与启用¶
插件通过 DSH 插件管理安装:
dsh plugin --profile <你的 profile> add dsh-draw-mode
安装后,插件会插入一个 agent preset;若只需要工具,可在配置中移除。
加工作流¶
- 在 ComfyUI 里搭好你要的图。
- 点 Save (API Format)——不是普通的 Save。API 格式是「节点 id → 节点对象」的扁平结构;普通保存是 UI 图,本插件跑不了。
- 把
.json放进工作流目录:
- 设了comfyRoot时是<comfyRoot>/ComfyUI/user/default/workflows,或
- 你设成workflowsDir的任何目录(绝对路径、~、%VAR%、${VAR}都行)。 - 打开侧栏面板(或调
draw_workflows)确认已被识别。
插件不会扫描子目录,JSON 直接放在该目录下。
自动识别规则¶
| 输入位置 | 怎么找 |
|---|---|
prompt / negative |
带字面量 text 输入的文本编码节点。标题为 pos/neg 的优先,否则按 id 顺序取前两个。 |
seed |
采样器的字面量 seed 或 noise_seed。 |
steps、cfg、denoise |
采样器上同名的字面量输入。 |
width、height |
同时带字面量 width 和 height 的节点(如 EmptyLatentImage)。 |
image |
LoadImage.image;第二个 LoadImage 变成 image2。 |
lora |
图里已有 LoraLoader 时取它的 lora_name。 |
只有字面量才算输入位置——连到别的节点的值一律不动,改了会断链。
覆盖识别结果:sidecar 文件¶
在工作流同目录放一个 <工作流名>.draw.json(即 my-flow.json → my-flow.draw.json):
{
"label": "我的肖像流程",
"task": "img2img",
"slots": {
"prompt": { "node": "6", "input": "text" },
"negative": { "node": "7", "input": "text" },
"image": { "node": "10", "input": "image" },
"seed": { "node": "3", "input": "seed" }
},
"defaults": { "steps": 8, "cfg": 1 },
"notes": "两段放大,第二遍可选"
}
每个键都是可选的,没写的回落到自动识别。task 取值 t2i、img2img、edit、reverse,只影响过滤和展示。
扫描时会跳过 sidecar 本身,不会被当成工作流。
指向你的 ComfyUI¶
路径全部是配置项。当 ComfyUI 已经在别处运行时,插件完全不需要本地路径:图通过 POST /upload/image 传进去、通过 GET /view 取回来,input/ 和 output/ 不必对本进程可见。
三种用法,从最少配置到最多:
- ComfyUI 已经在跑(任意主机、任意端口)——只设
comfyBaseUrl。 - 让插件自己拉起来——设
comfyRoot(或comfyMain+comfyPython)并把autoStart: true。 - 指到你的工作流——设
workflowsDir;想要离线的「文件在不在」检查再加modelsRoot。
配置项¶
| 配置项 | 默认值 | 说明 |
|---|---|---|
comfyBaseUrl |
http://127.0.0.1:8188 |
ComfyUI 监听地址;远程、局域网、非默认端口都改这里。 |
comfyRoot |
'' |
ComfyUI 安装目录,只用于无头启动和路径推导。 |
comfyPython |
'' |
python 可执行文件,覆盖 comfyRoot 的推导;只写命令名(如 python3)则从 PATH 找。 |
comfyMain |
'' |
ComfyUI 的 main.py,覆盖推导。 |
comfyWorkdir |
'' |
启动进程的工作目录,默认 main.py 所在目录。 |
comfyArgs |
[] |
额外命令行参数,如 ['--lowvram']。 |
autoStart |
false |
工具连不上时无头拉起 ComfyUI,需要上面那几个路径。 |
startTimeoutMs |
240000 |
等拉起的 ComfyUI 响应的最长时间。 |
timeoutMs |
900000 |
单次生成超时。 |
modelsRoot |
'' |
ComfyUI/models;用于本地检查「工作流要的模型在不在」,留空按 comfyRoot 推导。 |
workflowsDir |
'' |
放你导出的 API 格式工作流的目录,留空按 comfyRoot 推导。 |
modelMap |
{} |
{ 'JSON 里的名字.gguf': '你本机的名字.gguf' },加载时改名,不必改 JSON。 |
outputDir |
'' |
固定出图目录;配了就一定存这里。 |
saveToWorkspace |
true |
否则存进会话工作区的 workspaceFolder。 |
workspaceFolder |
'draw-mode' |
会话工作区内的子目录(绝对路径则原样使用)。 |
idleShutdown |
(未设) | 显式开关:false 永不关,true 按 idleShutdownMs(未设时长则 15 分钟)。 |
idleShutdownMs |
0 |
空闲多久后关闭 ComfyUI;0 = 关闭该功能。 |
idlePollMs |
30000 |
空闲检查的间隔。 |
idleShutdownScope |
'spawned' |
spawned 只关本插件拉起的;port 连你手动启动的也一起关。 |
settingsPath |
'' |
面板保存的位置,'' = ~/.dsh/draw-mode/settings.json;只能由插件配置指定,设置文件改不了自己。 |
所有路径值都接受 ~、%VAR%、${VAR} 和相对路径(按 comfyRoot 解析)。
适用场景与注意¶
适合需要从 ComfyUI 导出工作流、并在 DSH 中统一管理绘图能力的智能体开发者。插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。
结尾¶
dsh-draw-mode 提供了一个空框架,将你从 ComfyUI 导出的工作流接入 DSH,让智能体获得可配置的绘图模式。无需维护清单,只需导出 JSON 并配置目录。更多细节与源码见:
- GitHub:https://github.com/suyunxing/dsh-draw-mode