在 ComfyUI 里折腾久了,总免不了要把工作流发给别人——发教程、卖工作流、让同事复现。工作流本质是一段 JSON(导出 PNG 时还会把这段 JSON 塞进图片元数据里),里面除了节点和连线,经常混着不该出去的东西:
api_key/sk-...这类密钥- 带
token、signature、expires的签名 URL /Users/xxx/...这类暴露你本机账号名的绝对路径- 没锁版本的自定义节点、没哈希的模型引用
这些一旦发出去,轻则暴露隐私,重则密钥被人拿去刷。
我做了个小工具 ComfyHandoff,专门在分享前做一次本地检查 + 生成一份「能给别人看」的干净副本。
用法
git clone github.com/Closer2Vyz/… cd comfyhandoff npm ci && npm run build
只读检查:列出风险,用指纹/长度代替原文
node dist/cli.js check workflow.json
生成交接包:脱敏工作流 + 清单 + SARIF + 报告 + 校验和
node dist/cli.js pack workflow.json --out handoff
check 的输出不会打印密钥原文:
COMFY001 [error] .nodes[0].inputs.endpoint: Signed or private URL may expose access credentials. (host=example.invalid, protectedParameters=expires,token)
COMFY002 [warning] $.nodes[0].inputs.input_path: Absolute local path may disclose local account information. (pathClass=posix-absolute)
pack 会在一个全新目录里生成 5 个文件:
handoff/
workflow.public.json # 只替换策略选中的字段,其余原样保留
handoff.manifest.json # 指纹、节点/模型清单、版本
findings.sarif # 机器可读的扫描结果
REPORT.md # 给人看的审查摘要
checksums.sha256 # 产物校验和
几个设计点
- 全程本地:不上传媒体、不执行工作流、不发网络请求、不覆盖已有目录,也不动你的源文件。
- 策略驱动脱敏:默认只替换密钥和签名链接,路径、提示词是否脱敏由 YAML 策略显式决定;未识别的字段保留并标注,不假装安全。
- 报告不放原文:只放路径、规则号、掩码指纹、长度、主机名、文件名。
边界也直说:它不能证明一个工作流「绝对没有隐私」,也不能帮你解析/安装自定义节点或下载模型——它只做能确定性检测的那些事。
仓库:github.com/Closer2Vyz/… (TypeScript / Node 22 / MIT,CI 已过)
如果你经常分享或卖 ComfyUI 工作流,欢迎拿一个真实的跑一下,告诉我还有哪些泄露模式它漏掉了。