自己拼 ComfyUI API 还是装 dsh-comfyui,先看这三处差别
ComfyUI 本身有 HTTP 接口,/prompt排队、/history取结果、/view拉文件,照着文档拼一套调用并不难。所以"要不要装个插件"这个问题,答案从来不是"能不能出图"——两边都能出。真正的差别在于三件事由谁负责:结果怎么回到对话里、工作流和说明文档归谁管、媒体与密钥的暴露面摊在谁头上。这篇就把这三处摆开,也把"其实你自己写更划算"的情形说清楚。
先给一组背景数据,方便你判断成熟度:作者 fandc520,仓库名 dsh-comfyui,141 星,MIT 许可,当前 0.5.5,最近一次提交在两天前,已提供中文文档;本站信任档位「已验证」,L4 级真实安装(在 dsh 0.2.1-rc.2 下装成功)。想横向看看还有哪些同类插件,可以先翻 插件清单。
差别一:谁负责把结果送回对话
自己拼的路子是:脚本提交任务,轮询/history,拿到文件名,再去/view下载,最后你写一段话把路径贴出来。这条链每一环都能写,但每一环都要处理失败——任务排在队列里没动、执行报错但接口照样返回、文件生成在子目录里。
插件把这层收进 Agent 的工具边界:comfyui_workflow提交后,无论sync还是async,最终都由 Agent 把带 Markdown 语法的媒体引用写进回复,视频与音频链接底下还会自动挂一个内嵌播放器。它没有自己的花活,就是让"生成完了"这件事在对话里成立。
异步这件事,自己拼最容易漏
图片等一会儿还能忍,视频和音频不行。插件给了mode: "async":提交即结束本轮,任务跑完由宿主唤醒 Agent 继续。自己实现等价效果,你得在脚本里维护任务表、写回调、处理进程重启后丢失的队列状态。
但自己拼有一个插件给不了的好处
如果你的产物不进对话,而是直接进对象存储、进下游流水线、进一个前端页面,那么"Agent 把引用贴进回复"这一步就是多余的中转。你自己拼,文件从 ComfyUI 出来直接落到目标位置,链路更短,也更好测。
差别二:谁管工作流与技能包
自己拼的时候,工作流就是仓库里几个 JSON 文件。好处很实在:git diff看得见每次改了哪个参数,code review 有据可依,回滚就是一次 checkout。
插件把工作流搬进了面板里的库:能新建、也能编辑、运行、删除,还能导入.json,标签分类配下拉筛选。围绕这个库还有三层东西:
- 预设包。挑若干工作流(默认全选,挂了技能包的那几行有标记),连同参数和技能包导出成
.zip;回执会列清实际打包了哪些、文件名、体积和警告。反方向则是把 zip 丢进输入框,它整包分析再按需导入,技能包原样还原。关键是它永远新建、不覆盖既有库,重名也不会冲掉旧的那一份。 - 图工作流提取。ComfyUI 界面里存的图工作流带画布信息,不能直接执行。面板会检测到它们,并支持提取成可运行工作流;一个画布塞了多条独立流程时,可以选整体、按分量或只取主流程。
- 技能包。目录是
<数据目录>/skills/<工作流>/,下面SKILL.md、references/、assets/。读取走三级披露:list只给一行摘要,action: skill才取正文,正文点名参考文档才读那一篇。Agent 还能用comfyui_skill append把踩到的坑写回去,跨会话复用。勾了"运行前必读"之后,本会话没读过就run会被拒。
这套东西的价值在协作和记忆:参数说明、风格参考、排错记录跟工作流存在一起,换个会话不用重新讲一遍。
代价也要说
库在dataDir里,不是纯文本目录树,评审时你得靠导出的 zip 或面板里的编辑器,而不是对着 diff 看。技能包是给 Agent 读的自然语言,写得好不好直接决定它有用没用——这笔人力成本插件不替你出。
差别三:谁承担媒体与鉴权的暴露面
这是最容易被忽略、出事时最贵的一条。
自己拼的典型形态是:浏览器或前端直连你的服务,你的服务再连 ComfyUI。于是 CORS 要配、HTTPS 页面里嵌 HTTP 图片会被拦(混合内容)、API Key 放在哪一层要自己拍板。全在你手上,也全要你想。
插件换了个走法:生成文件经同源路由/comfyui/media按文件名转发,不依赖 ComfyUI 的内存态历史—— 重启或清空过历史之后,旧结果照样打得开。浏览器全程不接触 ComfyUI,所以没有 CORS、没有混合内容,API Key 也不下发到前端。远程 ComfyUI 若要鉴权,密钥走凭据存储,或者交给apiKeyEnv指的那个环境变量(默认COMFYUI_API_KEY)。
这条路的边界
它把暴露面收窄了,但也引入两个必须配对的项:mediaHost决定生成媒体的外网访问基址,没配对外地址时,外部设备打开链接会是空的;baseUrl指错则一切免谈。另外代理是按文件名转发的,文件被移走或改名,链接就失效——它解决的是"历史丢了",不是"文件删了"。
什么情况下直接自己调 API 更合适
说完三处,该劝退的也要劝:
工作流只有一两个,参数半年不动。这时候库、标签、预设包全是空转的机械,你需要的只是一个能跑的函数。
要批量跑几千张,自己控并发和重试。对话式驱动适合一次一两张、需要人看着调的场景;规模化吞吐要靠队列、限流、失败重投,这些是你自己的调度器该干的事。
产物要嵌进已有后端或对外服务。你的服务不该为了出图去依赖一个桌面/网页宿主的插件生命周期。
团队不愿意多一层运行时依赖。插件要跟着 dsh 版本走:0.5.x 需要宿主介于 0.1.2 与 0.3 之间,0.1.1 的老宿主只能留在 0.3.x 线(@beta)。自己写脚本没有这层耦合。
需要对每次请求做审计、改写或二次加工。中间层在你自己手里,改起来最自由。
反过来,什么时候装更省
工作流越攒越多、开始记不清哪个流程配哪个模型的时候;需要在对话里边聊边出图、还要看内嵌播放器的时候;多台机器之间要搬同一套流程和说明的时候;以及你不打算为"轮询 + 落盘 + 贴链接"这套模板再写一遍的时候。
安全这件事的如实交代
安全扫描给的是「含敏感能力」,并且尚无人工评估。它确实会碰本地文件、连网、驱动外部 ComfyUI,这是工作原理而非附加风险;"尚无人工评估"同样是字面意思,没有人工逐行审过。自己拼 API 的脚本通常扫描面更小,但那是因为功能更少,不代表更安全——密钥怎么存、日志会不会打出请求头,仍然是你自己的责任。
总结
三条轴归一句话:插件买的是"回对话、管资产、收窄暴露面"这三件杂活,自己拼买的是"链路短、可控、无宿主耦合";想再对比几个同类方案,可以看 这份中文清单。
适合与不适合
适合:工作流数量已经超出记忆容量、需要标签和预设包的人;要在对话里直接拿到图片、视频并当场播放的;远程 ComfyUI 挂在鉴权代理后面、又不想让浏览器碰密钥的;多机协作、需要把技能包一起搬走的。
不适合:只有一两个固定流程、写个脚本就够的;要求每秒几张吞吐、需要自建调度与重试的;不打算维护 ComfyUI 服务、只想找托管出图 API 的;宿主停在 0.1.1 又不想换版本的。
标签:dsh-comfyui、DeepSeek Harness、选型对比
本文由 DeepSeek Harness Hub 自动整理,数据来源于插件详情页。