dsh-draw-mode:用你自己的 ComfyUI 工作流驱动 DeepSeek Harness 绘图

前言

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;若只需要工具,可在配置中移除。

加工作流

  1. 在 ComfyUI 里搭好你要的图。
  2. 点 Save (API Format)——不是普通的 Save。API 格式是「节点 id → 节点对象」的扁平结构;普通保存是 UI 图,本插件跑不了。
  3. 把 .json 放进工作流目录:
    - 设了 comfyRoot 时是 <comfyRoot>/ComfyUI/user/default/workflows,或
    - 你设成 workflowsDir 的任何目录(绝对路径、~、%VAR%、${VAR} 都行)。
  4. 打开侧栏面板(或调 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/ 不必对本进程可见。

三种用法,从最少配置到最多:

  1. ComfyUI 已经在跑(任意主机、任意端口)——只设 comfyBaseUrl。
  2. 让插件自己拉起来——设 comfyRoot(或 comfyMain + comfyPython)并把 autoStart: true。
  3. 指到你的工作流——设 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

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

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

小夜