← 全部文章

让 WorkBuddy 指挥 ComfyUI 出图

写于 2026-10-28 AI工具

WorkBuddy 能把 Word、Excel、浏览器都当工具使,唯独画不出一张图。ComfyUI 反过来:图能出得很精确,但要你坐到画布前拖节点。

真正省事的状态是让它去调它——你在聊天框里说「给这期周报做一张封面」,后半段没人再动手。

结论先给:装 comfy-mcp,把几行配置写进 WorkBuddy 的 mcp.json,之后用自然语言出图。不想碰 MCP 也行,直接打 ComfyUI 的 HTTP 接口,代价是轮询、取图、错误处理都得自己写。

两条路的分工

MCP 路线裸 HTTP 路线
谁干活WorkBuddy 自己挑工具、自己等任务你的脚本
需要写代码只有 JSON 配置至少几十行,含轮询
知道本机有什么模型知道,能查不知道,写死
适合日常出图、自动化批量流水线、接进自己的系统

两条都能通往同一个地方,区别在于「谁知道上下文」。MCP 那一侧,模型列表、节点列表、任务状态都是 agent 现场查的;HTTP 那一侧全靠你提前写死。

一、先让 ComfyUI 变成可调用的东西

Comfy 官方有个 comfy-mcp,就是干这件事的:本地跑一个 stdio 服务,把你的本地 ComfyUI 暴露成一组工具。

前提四个,缺一个都起不来:

然后:

pip install comfy-mcp     # 装上之后 `comfy-mcp` 这个命令就是服务器本体

装完先别急着配客户端。有个坑几乎所有非默认环境都会踩:MCP 客户端启动服务器时用的是它自己的环境变量,里面通常没有你 shell 的 PATH。comfy 装在虚拟环境里的话,要给它绝对路径:

COMFY_BIN=/Users/you/venv/bin/comfy

这个变量后面还要用到。

二、写进 WorkBuddy

WorkBuddy 的 MCP 是可视化配置,但你填的其实还是 JSON。入口在侧边栏的 插件 → MCP 服务器 → 配置 MCP,可以选用户级(~/.workbuddy/mcp.json,所有项目复用)或项目级(<项目>/.workbuddy/mcp.json)。

出图这种能力建议放项目级——不同项目的模型和节点不一样,混在一起反而容易乱。

{
  "mcpServers": {
    "comfy": {
      "command": "comfy-mcp",
      "env": { "COMFY_BIN": "/Users/you/venv/bin/comfy" }
    }
  }
}

保存之后看状态灯:绿的是通了,红的说明命令路径或者环境有问题,先去看 COMFY_BIN 指的对不对。

连通之后,第一句话别急着要图,先确认它认得出本机环境:

先看本地 ComfyUI 是否在运行,再告诉我装了哪些模型

它背后调的是 server_info 和 search_models。这两个能答上来,说明链路没问题,剩下的只是工作流的事。

三、工作流要导出成 API 格式

这是最容易卡住的一步。你在画布上存下来的工作流,是给人看的、带界面坐标和分组信息的版本;API 调用要的是另一种——每个节点只留 class_type 和 inputs,连线用 ["节点id", 输出序号] 表示。

从菜单里选 Export (API),存成 txt2img.json 之类,放进一个固定目录。之后让它跑:

跑 ~/workflows/cover.json,把出来的图给我

MCP 那边会依次调 run_workflow(提交,可以选同步等或异步拿 prompt_id)、wait_for_job 或 watch_job(等),最后 fetch_outputs 把结果拷到你指定的目录。ComfyUI 自己也会把图写进工作目录的 output/,但拷一份到你方便的位置更省事。

跑之前如果怕白等几分钟,先让它 validate_workflow:这个工具拿你本机的 object_info 去核一遍,缺模型、缺节点、输入类型不对,提交前就能报出来。

四、不想用 MCP 的话

裸接口就三个动作:提交、查状态、取文件。

import json, urllib.request

workflow = json.load(open("cover.json"))          # API 格式
req = urllib.request.Request(
    "http://127.0.0.1:8188/prompt",
    data=json.dumps({"prompt": workflow}).encode("utf-8"),
)
prompt_id = json.loads(urllib.request.urlopen(req).read())["prompt_id"]

拿到 prompt_id 之后,轮询 /history/{prompt_id} 直到出现结果,再从返回的 outputs 里拿文件名,去 /view?filename=...&subfolder=...&type=output 下载。

想省掉轮询就开 WebSocket(/ws?clientId=...),能收到进度事件,代价是多一个 websocket-client 依赖。批量出图值得,单张不值得。

这条路适合放进定时脚本或者已有的流水线。缺点也说清楚:模型换了、节点升级了,脚本不会自己知道,报错得你自己看日志。

五、接起来之后能做什么

单次出图只是热身。WorkBuddy 那边还有个「自动化」功能:给个定时规则、一个工作空间、一段提示词,到点自己跑。

把两件事拼起来,能落地的一版大概长这样:

配一次,之后每天不用管。真觉得这套流程稳定了,还能把它写成一个「技能」,下次直接说「照上周那套做封面」。

几个具体的坑

Mac 别硬跑开源大模型。 Comfy 官方在 MCP 文档里就写了:今天的开源权重模型在本机 GPU 上跑不出可接受的速度,Mac 用户建议用云连接。云连接的地址是 https://cloud.comfy.org/mcp,走 OAuth,新账号送 5 次运行,之后要订阅。

显存档位决定你能干什么。 官方口径:24GB 以上显存基本都能跑,含视频;8–24GB 出图没问题,视频要么慢要么放不下;8GB 以下就别本机跑了。

红灯泡多半不是配置写错。 JSON 括号对不上会红,但更常见的是 command 指向的命令在客户端的 PATH 里不存在。先用绝对路径试一次。

云和本是两套登录。 两个连接可以同时挂,但各签各的,签了一个不等于另一个也通了。

别把画布版本的 JSON 喂给 API。 那个文件里全是界面字段,服务端不认,报错还很难懂。


要不要上这套,判断标准很简单:你出图的动作一周有三次以上,而且每次都在重复同样的流程,那配置这一下的时间能挣回来;一周出一张、每张都要手调半天,那就在画布上老实调,别为了自动化而自动化。

先跑通 comfy launch,再让 WorkBuddy 的 server_info 认出来。认出来了,后面才谈得上自动化。