用途:本技能面向 ComfyUI 自定义节点包的作者,讲解如何编写节点包并发布到 Comfy Registry——驱动 ComfyUI-Manager 的公共目录。若需在工作流中使用已有节点,应参考 comfyui-core 技能。
包结构:节点包是放在 ComfyUI/custom_nodes/<name>/ 下的 Python 包。init.py 必须导出 NODE_CLASS_MAPPINGS 和 NODE_DISPLAY_NAME_MAPPINGS;WEB_DIRECTORY 可选,仅在前端 JS 时设置。常见文件包括 nodes.py、pyproject.toml(发布必需)、requirements.txt、.comfyignore、LICENSE、README.md 及可选 web/js/。
节点类约定:INPUT_TYPES 为 @classmethod,返回 required/optional;RETURN_TYPES 为输出类型元组;FUNCTION 指定执行方法名;CATEGORY 决定菜单路径;RETURN_NAMES 可选;OUTPUT_NODE 标记终端节点。执行方法必须返回与 RETURN_TYPES 匹配的元组,即使单输出也要写 (result,)。选项字典可控制控件(如 INT/FLOAT/STRING 的 default、min、max、step),字面量列表生成下拉框。
注册表元数据:pyproject.toml 中 [project] 的 name 唯一且发布后不可改,version 为语义化 X.Y.Z,license、requires-python、dependencies 按规范填写;[project.urls] 的 Repository 必填;[tool.comfy] 的 PublisherId 必填(个人资料 @ 后的 id),另可选 DisplayName、Icon(正方形≤400×400px)、Banner(21:9)、requires-comfyui、includes。.comfyignore 用 gitignore 语法排除文件,includes 反向强制包含文件夹。
发布流程:前往 registry.comfy.org 创建发布者并生成 API 密钥。安装 comfy-cli:pip install comfy-cli(需 Python 3.10+)。用 comfy node init 生成 pyproject.toml,填写字段后用 comfy node publish 校验并上传,成功会打印注册表 URL。版本一旦发布不可修改,需改版本号重新发布;坏版本可在网站弃用。CI 可通过 GitHub Actions 自动化:将密钥存为仓库 secret REGISTRY_ACCESS_TOKEN,并使用 Comfy-Org/publish-node-action@main,在 pyproject.toml 变更时触发。
前端扩展:设置 WEB_DIRECTORY 并附 JS,新扩展宜使用 @comfyorg/extension-api 和 @comfyorg/comfyui-frontend-types,详见同系列前端扩展技能。
常见错误:忘记返回元组、单元素 RETURN_TYPES 缺逗号、INPUT_TYPES 缺装饰器、试图覆盖已发布版本、发布后重命名、缺 Repository、PublisherId 写错、图标过大、改 NODE_CLASS_MAPPINGS 键破坏旧工作流、把 API 密钥提交到仓库。