29 · 自定义节点开发入门
用 Python 写自己的 ComfyUI 节点——从 Hello World 到发布
01 什么时候需要自己写节点
- 现有的 2000+ 节点都满足不了你的需求
- 想把重复操作封装成一个节点
- 想接入外部 API(比如翻译、AI 审核)
- 想和公司内部工具打通
02 节点开发环境
cd ComfyUI/custom_nodes/
mkdir my-first-nodes
cd my-first-nodes
# 创建以下文件:
touch __init__.py # 节点注册
touch nodes.py # 节点逻辑03 第一个节点:Hello World
nodes.py
class HelloWorld:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"text": ("STRING", {"default": "Hello ComfyUI!"}),
}
}
RETURN_TYPES = ("STRING",)
FUNCTION = "say_hello"
CATEGORY = "my_nodes"
def say_hello(self, text):
return (f"[MyNode] {text}",)
NODE_CLASS_MAPPINGS = {
"HelloWorld": HelloWorld,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"HelloWorld": "Hello World Node",
}init.py
from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']重启 ComfyUI,双击空白处搜 Hello World——你的第一个节点出现了!
04 节点开发核心概念
INPUT_TYPES
定义节点的输入参数:
"required":必填参数"optional":可选参数
RETURN_TYPES
定义节点的输出类型——和 ComfyUI 的内置类型对应:
"IMAGE","LATENT","MODEL","CONDITIONING","MASK"等- 返回
()元组,即使只有一个值也要加逗号
FUNCTION
节点执行时调用的方法名。
CATEGORY
节点在右键菜单里的分类名。
05 实用节点示例:批量提示词翻译
import requests
class TranslatePrompt:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"chinese_prompt": ("STRING", {"multiline": True}),
}
}
RETURN_TYPES = ("STRING",)
FUNCTION = "translate"
CATEGORY = "my_nodes"
def translate(self, chinese_prompt):
# 调用翻译 API
# ... 省略 API 调用代码
english_prompt = translated_text
return (english_prompt,)06 发布到社区
发布步骤
- 在 GitHub 创建仓库
- 写好 README(说明依赖和用法)
- 提交到 ComfyUI Manager 的节点列表(在他们的仓库提 PR)
- 在 Civitai 发帖介绍你的节点
发布检查清单
-
requirements.txt列出所有 Python 依赖 - README 有截图和使用说明
- 节点命名不和已有节点冲突
- 代码里有注释
💡 一句话总结:ComfyUI 节点 = Python 类 + INPUT_TYPES + RETURN_TYPES + FUNCTION + 注册——学会了就能把任何想法变成节点。