07-自定义节点与扩展¶
🎯 学习目标¶
- 熟练使用 ComfyUI Manager 管理自定义节点
- 了解热门自定义节点包及其功能
- 入门自定义节点开发(Python 节点编写基础)
- 实现一个简单的自定义图像处理节点
- 了解工作流模板社区资源
7.1 ComfyUI Manager 使用指南¶
7.1.1 安装 Manager¶
如果尚未安装,请参考 02-环境搭建与安装 中的 Manager 安装章节。
7.1.2 Manager 界面功能¶
打开 Manager 后,可以看到以下功能选项:
| 按钮 | 功能 | 说明 |
|---|---|---|
| Install Custom Nodes | 搜索安装节点 | 浏览和安装社区节点 |
| Install Missing Custom Nodes | 安装缺失节点 | 自动检测工作流所需的缺失节点 |
| Install via Git URL | Git URL 安装 | 通过 GitHub URL 安装节点 |
| Update All | 全部更新 | 一键更新所有已安装节点 |
| Fetch Updates | 获取更新信息 | 检查可用更新 |
| Alternatives of A1111 | WebUI 替代方案 | 查找 WebUI 扩展的 ComfyUI 替代品 |
7.1.3 搜索和安装节点¶
- 点击 Install Custom Nodes
- 在搜索框输入关键词(如 "controlnet"、"face"、"video")
- 浏览搜索结果,点击 Install 按钮
- 等待安装完成,重启 ComfyUI
示例:安装 ComfyUI Impact Pack
1. Manager → Install Custom Nodes
2. 搜索 "Impact Pack"
3. 找到 "ComfyUI-Impact-Pack" → Install
4. 重启 ComfyUI
7.1.4 更新节点¶
方法一:Manager → Update All(更新所有节点)
方法二:Manager → Install Custom Nodes → 找到节点 → Update
方法三:手动更新
cd custom_nodes/节点目录
git pull
7.1.5 禁用和卸载节点¶
- 禁用:Manager → Install Custom Nodes → 已安装列表 → Disable(节点代码保留但不加载)
- 卸载:Manager → Install Custom Nodes → 已安装列表 → Uninstall(删除节点代码)
💡 提示:如果某个节点导致 ComfyUI 启动失败,可以在启动前手动将
custom_nodes/中对应的文件夹重命名(如加_disabled后缀),阻止其加载。
7.1.6 安装缺失节点¶
当你导入一个工作流但缺少部分自定义节点时:
- 加载工作流(节点会显示为红色/缺失状态)
- 点击 Manager → Install Missing Custom Nodes
- Manager 会列出所有缺失节点及对应的节点包
- 一键安装所有缺失节点
- 重启 ComfyUI
⚠️ 注意:并非所有缺失节点都能在 Manager 数据库中找到。某些私人或过时的节点可能需要手动安装。
7.2 热门自定义节点推荐(Top 20)¶
7.2.1 必装节点¶
| 排名 | 节点包 | 功能说明 | 推荐度 |
|---|---|---|---|
| 1 | ComfyUI Manager | 节点管理器 | ⭐⭐⭐⭐⭐ |
| 2 | ComfyUI-Impact-Pack | 面部检测/修复/增强、SAM 分割 | ⭐⭐⭐⭐⭐ |
| 3 | ComfyUI Controlnet Aux | ControlNet 预处理器集合 | ⭐⭐⭐⭐⭐ |
| 4 | WAS Node Suite | 300+ 图像处理/工具节点 | ⭐⭐⭐⭐⭐ |
| 5 | rgthree-comfy | 工作流增强(Seed、Mute等) | ⭐⭐⭐⭐⭐ |
7.2.2 效率与工具类¶
| 排名 | 节点包 | 功能说明 | 推荐度 |
|---|---|---|---|
| 6 | efficiency-nodes-comfyui | 合并常用操作、XY Plot | ⭐⭐⭐⭐ |
| 7 | Comfyroll Studio | 大量实用工具节点 | ⭐⭐⭐⭐ |
| 8 | ComfyUI-Custom-Scripts | 自动完成、图像浏览等增强 | ⭐⭐⭐⭐ |
| 9 | ComfyUI-KJNodes | 条件控制、遮罩操作增强 | ⭐⭐⭐⭐ |
| 10 | cg-use-everywhere | 简化连线(无线传输数据) | ⭐⭐⭐⭐ |
7.2.3 图像处理与生成增强¶
| 排名 | 节点包 | 功能说明 | 推荐度 |
|---|---|---|---|
| 11 | ComfyUI-IPAdapter-Plus | IP-Adapter 完整实现 | ⭐⭐⭐⭐⭐ |
| 12 | ComfyUI-AnimateDiff-Evolved | AnimateDiff 视频生成 | ⭐⭐⭐⭐ |
| 13 | ComfyUI_InstantID | 面部一致性生成 | ⭐⭐⭐⭐ |
| 14 | ComfyUI_FaceAnalysis | 面部分析与交换 | ⭐⭐⭐⭐ |
| 15 | ComfyUI-GGUF | GGUF 量化模型支持 | ⭐⭐⭐⭐ |
7.2.4 视频与特效¶
| 排名 | 节点包 | 功能说明 | 推荐度 |
|---|---|---|---|
| 16 | ComfyUI-VideoHelperSuite | 视频加载/保存/处理 | ⭐⭐⭐⭐ |
| 17 | ComfyUI-Frame-Interpolation | 帧插值(RIFE等) | ⭐⭐⭐ |
| 18 | ComfyUI-Advanced-ControlNet | ControlNet 高级功能 | ⭐⭐⭐⭐ |
| 19 | ComfyUI Segment Anything | SAM 图像分割 | ⭐⭐⭐⭐ |
| 20 | ComfyUI-Prompt-Control | 高级提示词控制 | ⭐⭐⭐ |
7.2.5 各节点详细介绍¶
WAS Node Suite
300+ 节点的超级工具包,涵盖图像处理的方方面面:
- 图像混合、裁剪、旋转、翻转
- 色彩调整(亮度、对比度、色调)
- 文本渲染与叠加
- 数学运算与逻辑控制
- 文件系统操作
ComfyUI Impact Pack
专注于面部和细节处理:
- FaceDetailer:自动检测面部并精修细节
- SAM Detector:Segment Anything 分割
- BBOX Detector:物体检测
- Detailer:局部细节增强
# FaceDetailer 典型用法
原始图像 → FaceDetailer
├── model: [Checkpoint MODEL]
├── clip: [CLIP]
├── vae: [VAE]
├── positive: [正向条件]
├── negative: [反向条件]
├── bbox_detector: [UltraDetailer 检测器]
└── IMAGE (面部精修后的图像)
rgthree-comfy
工作流管理和开发效率增强:
- Seed:更好的种子管理节点
- Mute/Unmute:批量静音控制
- Fast Groups Muter:快速切换节点组
- Power Lora Loader:增强的 LoRA 加载器
- Node Bookmark:节点书签导航
efficiency-nodes-comfyui
提高工作效率的合并节点:
- Efficient Loader:合并加载模型+编码提示词
- KSampler (Efficient):合并采样+预览
- XY Plot:参数对比网格图
7.3 自定义节点开发入门¶
7.3.1 节点开发基础¶
ComfyUI 的自定义节点使用 Python 编写,核心是一个 Python 类,通过特定的类属性和方法与 ComfyUI 框架交互。
文件结构:
ComfyUI/custom_nodes/
└── my_custom_nodes/
├── __init__.py # 节点注册入口
├── nodes.py # 节点实现
└── requirements.txt # 额外依赖(可选)
7.3.2 节点类结构¶
class MyCustomNode:
"""
一个自定义节点的基本结构
"""
# 节点在菜单中的分类
CATEGORY = "my_nodes"
# 返回类型(输出的数据类型)
RETURN_TYPES = ("IMAGE",)
# 返回名称
RETURN_NAMES = ("image",)
# 执行函数名
FUNCTION = "execute"
@classmethod
def INPUT_TYPES(cls):
"""定义节点的输入接口"""
return {
"required": {
"image": ("IMAGE",), # 图像输入
"brightness": ("FLOAT", { # 浮点数参数
"default": 1.0,
"min": 0.0,
"max": 3.0,
"step": 0.1,
"display": "slider"
}),
},
"optional": {
"mask": ("MASK",), # 可选的遮罩输入
}
}
def execute(self, image, brightness, mask=None):
"""
节点的执行逻辑
输入参数与 INPUT_TYPES 中定义的一致
返回元组,与 RETURN_TYPES 对应
"""
result = image * brightness
return (result,)
7.3.3 注册节点¶
在 __init__.py 中注册节点:
from .nodes import MyCustomNode
# 节点类映射(内部名称 → 类)
NODE_CLASS_MAPPINGS = {
"MyCustomNode": MyCustomNode,
}
# 节点显示名称映射(内部名称 → 界面显示名称)
NODE_DISPLAY_NAME_MAPPINGS = {
"MyCustomNode": "My Custom Node ✨",
}
7.3.4 数据类型参考¶
| 类型 | Python 格式 | 说明 |
|---|---|---|
IMAGE | torch.Tensor (B,H,W,C) float32 0~1 | 图像批次 |
MASK | torch.Tensor (H,W) 或 (B,H,W) float32 0~1 | 遮罩 |
LATENT | dict | 潜空间数据 |
MODEL | ModelPatcher 对象 | SD 模型 |
CLIP | CLIP 对象 | 文本编码器 |
VAE | VAE 对象 | VAE 模型 |
CONDITIONING | list[tuple] | 条件编码 |
INT | int | 整数 |
FLOAT | float | 浮点数 |
STRING | str | 字符串 |
BOOLEAN | bool | 布尔值 |
💡 提示:ComfyUI 中的 IMAGE 类型是
(Batch, Height, Width, Channels)格式(BHWC),且值范围是 0~1 的 float32。这与 PyTorch 常用的 BCHW 格式不同,需要注意转换。
7.4 节点开发示例:创建一个简单的图像处理节点¶
7.4.1 项目:亮度/对比度调节节点¶
我们来创建一个同时调节亮度和对比度的节点。
创建目录和文件:
7.4.2 实现节点(nodes.py)¶
# ComfyUI/custom_nodes/comfy_brightness_contrast/nodes.py
import torch
class BrightnessContrastNode:
"""
调节图像的亮度和对比度
用法:
- brightness > 1.0 增加亮度,< 1.0 降低亮度
- contrast > 1.0 增加对比度,< 1.0 降低对比度
"""
CATEGORY = "image/adjustments"
RETURN_TYPES = ("IMAGE",)
RETURN_NAMES = ("image",)
FUNCTION = "adjust"
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"image": ("IMAGE",),
"brightness": ("FLOAT", {
"default": 1.0,
"min": 0.0,
"max": 3.0,
"step": 0.05,
"display": "slider"
}),
"contrast": ("FLOAT", {
"default": 1.0,
"min": 0.0,
"max": 3.0,
"step": 0.05,
"display": "slider"
}),
}
}
def adjust(self, image: torch.Tensor, brightness: float, contrast: float):
"""
image: Tensor (B, H, W, C) 范围 [0, 1]
brightness: 亮度系数
contrast: 对比度系数
"""
# 亮度调节
result = image * brightness
# 对比度调节(以 0.5 为中心)
mean = 0.5
result = (result - mean) * contrast + mean
# 限制范围到 [0, 1]
result = torch.clamp(result, 0.0, 1.0)
return (result,)
class ImageInvertNode:
"""
反转图像颜色(负片效果)
"""
CATEGORY = "image/adjustments"
RETURN_TYPES = ("IMAGE",)
RETURN_NAMES = ("image",)
FUNCTION = "invert"
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"image": ("IMAGE",),
"strength": ("FLOAT", {
"default": 1.0,
"min": 0.0,
"max": 1.0,
"step": 0.1,
"display": "slider"
}),
}
}
def invert(self, image: torch.Tensor, strength: float):
"""
将图像颜色反转,strength 控制反转强度
strength = 1.0 完全反转,0.0 不变
"""
inverted = 1.0 - image
result = image * (1 - strength) + inverted * strength
return (result,)
7.4.3 注册入口(init.py)¶
# ComfyUI/custom_nodes/comfy_brightness_contrast/__init__.py
from .nodes import BrightnessContrastNode, ImageInvertNode
NODE_CLASS_MAPPINGS = {
"BrightnessContrast": BrightnessContrastNode,
"ImageInvert": ImageInvertNode,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"BrightnessContrast": "Brightness & Contrast 🔆",
"ImageInvert": "Image Invert 🔄",
}
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"]
7.4.4 测试节点¶
- 重启 ComfyUI
- 在画布右键 → Add Node → image/adjustments → 找到 "Brightness & Contrast 🔆"
- 连接一个图像源到输入,输出连接 PreviewImage
- 调节滑块观察效果
7.4.5 进阶:添加交互式控件¶
ComfyUI 支持多种参数控件类型:
@classmethod # @classmethod类方法,第一个参数为类本身
def INPUT_TYPES(cls):
return {
"required": {
# 下拉选择
"mode": (["normal", "multiply", "screen", "overlay"],),
# 整数输入
"size": ("INT", {
"default": 512, "min": 64, "max": 4096, "step": 64
}),
# 多行文本
"text": ("STRING", {
"multiline": True,
"default": "hello world"
}),
# 布尔开关
"enabled": ("BOOLEAN", {"default": True}),
}
}
⚠️ 注意:自定义节点开发中,请确保所有 tensor 操作使用 PyTorch 方法,避免将大型 tensor 转换为 NumPy(会占用额外内存)。如果必须使用 NumPy,处理完后及时转回 tensor。
7.5 工作流模板社区资源¶
7.5.1 官方资源¶
| 资源 | 地址 | 说明 |
|---|---|---|
| ComfyUI Examples | https://comfyanonymous.github.io/ComfyUI_examples/ | 官方示例工作流 |
| ComfyUI Docs | https://docs.comfy.org/ | 官方文档 |
7.5.2 社区平台¶
| 平台 | 地址 | 特点 |
|---|---|---|
| OpenArt | https://openart.ai/workflows | 最大的工作流分享平台 |
| Civitai | https://civitai.com/ | 模型+工作流一体化社区 |
| ComfyWorkflows | https://comfyworkflows.com/ | 专注工作流分享 |
| GitHub | 搜索 "comfyui workflow" | 开源工作流项目 |
7.5.3 使用社区工作流的流程¶
1. 在社区平台浏览并下载工作流 JSON
2. 在 ComfyUI 中导入(Ctrl+O 或拖入)
3. 如果有红色(缺失)节点:
→ Manager → Install Missing Custom Nodes
→ 安装所有缺失节点
→ 重启 ComfyUI
4. 检查工作流所需的模型:
→ 查看加载器节点中指定的模型名称
→ 下载缺失的模型到对应目录
5. 调整参数并运行
7.5.4 创建可分享的工作流¶
为了让你的工作流更容易被他人使用:
- 使用通用模型名称(如官方模型名,而非个人重命名)
- 添加 Note 节点说明工作流用途和参数含义
- 使用分组(Group)组织节点
- 标注所需的自定义节点包名称
- 提供示例输出图像作为参考
- 注明推荐的硬件配置
练习¶
- 通过 Manager 安装以下节点包:Impact Pack、WAS Node Suite、rgthree-comfy
- 使用 Impact Pack 的 FaceDetailer 节点改善一张人像图片的面部细节
- 从 OpenArt 下载一个社区工作流,安装所有缺失节点并成功运行
- 按照示例代码创建 BrightnessContrast 自定义节点并测试
- 尝试修改示例代码,添加一个"饱和度调节"功能
延伸阅读¶
- ComfyUI 节点开发文档
- ComfyUI Manager GitHub
- WAS Node Suite GitHub
- ComfyUI Impact Pack GitHub
- PyTorch Tensor 操作文档
📌 下一章:08-实战项目 —— 综合运用所学知识完成完整的 ComfyUI 项目
最后更新日期:2026-02-12 适用版本:ComfyUI实战教程 v2026