项目
ComfyUI 内容生产平台后端
把 ComfyUI 工作流封装成受权限、计费、节点白名单和 DAG 生产流治理的多租户 SaaS 后端。
ComfyUI 内容生产平台后端,是一个把 ComfyUI 从节点图工具封装成多租户 SaaS 能力层的后端项目。它面向个人创作者、MCN / 工作室和企业内部内容团队。
这个项目目前没有公开仓库或在线 demo。这里记录的是脱敏后的工程结构、模块边界和实现取舍。
问题定义
ComfyUI 原生解决的是「工程师如何编辑和运行节点图」。内容生产平台要解决的是另一组问题:
- 如何把一张节点图变成普通用户能使用的能力。
- 如何限制可用节点,避免未申报依赖和危险自定义节点。
- 如何在组织、角色和订阅计划之间做权限与预算隔离。
- 如何在生成前判断积分和并发,而不是等算力消耗后再处理。
- 如何把本地输出迁移到对象存储,并避免路径逃逸。
- 如何把多个能力、文本变换和人工审核串成生产流。
技术栈
后端以 Python 3.11+ 为主,Web 框架使用 FastAPI,数据库访问使用 SQLAlchemy 2.0,数据模型使用 Pydantic 2。ComfyUI 通过 httpx 调用,产物迁移到 MinIO,对外持久化使用 Postgres,订阅和计费相关能力预留 Stripe。
架构
用户 / 组织 / 角色
-> 能力目录
-> 权限与节点白名单
-> 任务创建
-> 积分预扣账本
-> 参数注入 workflow JSON
-> ComfyUI runtime
-> history 刷新
-> 对象存储迁移
-> 生产流 DAG 状态推进
ComfyUI 只作为 runtime 存在。平台侧保存能力契约、权限、账本、任务状态和生产流状态。
核心模块
1. ComfyUI 薄客户端
ComfyClient 只做三件事:提交 prompt、查询 history、抽取输出引用。耦合面保持很小,便于把平台状态和 ComfyUI 执行状态分开。
2. 能力契约
能力发布前必须声明:
parameter_schemaoutput_schemaresource_profilenode_dependencies
工作流实际节点必须全部出现在 node_dependencies 内。参数注入支持 string、integer、number、boolean、image、object、array、json 8 种类型。
3. 权限和节点白名单
节点约束分两层。能力层确认工作流声明了哪些节点,角色层再确认当前用户是否允许使用这些节点。这样可以把「能力是什么」和「谁能用」分开。
4. 任务与积分账本
任务创建时先检查并发和余额,再预扣积分。余额由事件账本求和,不直接存成可变字段。提交失败或执行失败时,退款通过幂等事件处理。
5. 对象存储迁移
ComfyUI 返回的 filename 和 subfolder 会先经过路径安全检查。系统拒绝绝对路径,解析真实路径,并确认它仍在输出目录内。通过后才上传 MinIO。
6. 生产流 DAG
生产流用 DAG 表达 capability、transform、manual_review 等节点。节点输入来自 static、run_input、preference 或上游 node_output。运行时使用拓扑顺序推进。
我负责的部分
我主要负责后端核心实现:能力契约、任务执行、积分账本、权限边界、对象迁移、路径逃逸防护和生产流 DAG。
产品定位和用户方向是我和朋友一起确认的。ComfyUI 本体没有改写,平台侧只做治理和集成。
难点与处理
第一个难点是自由度收敛。ComfyUI 的自由正是它好用的原因,但 SaaS 平台不能把全部自由交给普通用户。我把自由度放在管理员封装能力这一层,把用户入口收敛到参数契约。
第二个难点是计费边界。任务执行前必须知道用户能不能跑、能跑多少、失败怎么退。事件账本比余额字段麻烦一些,但更容易追踪每次扣减和退款。
第三个难点是文件安全。路径逃逸不是理论问题,测试里直接覆盖了 ../secret.png、/tmp/secret.png、subfolder="../" 这类输入。系统必须在对象上传前拒绝。
如何运行
当前没有公开仓库和演示地址,因此不提供可复现运行命令。公开版本只保留架构和模块说明。
如果后续开放仓库,项目页会补上环境变量、依赖安装、数据库迁移、ComfyUI 地址配置和本地任务运行示例。
后续计划
- 补一条可脱敏展示的典型生产流 DAG。
- 在真实试点后补充可公开的运行量级和成本口径。
- 扩展
transform节点,但继续保持白名单和权限边界。 - 给能力契约增加更清晰的后台配置体验。
相关链接
如果你正在做企业 RAG、知识库、AI 客服或 Agent 工作流,可以通过页面下方微信二维码或邮件沟通,邮箱:contact@aildnc.com。