Skip to Content
六. 高级应用29 · 自定义节点开发入门

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 发布到社区

发布步骤

  1. 在 GitHub 创建仓库
  2. 写好 README(说明依赖和用法)
  3. 提交到 ComfyUI Manager 的节点列表(在他们的仓库提 PR)
  4. 在 Civitai 发帖介绍你的节点

发布检查清单

  • requirements.txt 列出所有 Python 依赖
  • README 有截图和使用说明
  • 节点命名不和已有节点冲突
  • 代码里有注释

💡 一句话总结:ComfyUI 节点 = Python 类 + INPUT_TYPES + RETURN_TYPES + FUNCTION + 注册——学会了就能把任何想法变成节点。