节点
了解 ComfyUI 中节点的概念。
在 ComfyUI 中,节点是我们执行任务的单元,他们是构建好的一个个独立的模块,无论是 Comfy Core 还是 自定义节点 ,每个节点都是一个独立的模块,有着自己独特的功能,节点之间通过连线连接,我们可以像搭乐高积木一样搭建起来复杂的功能。 可以说,不同的节点组合构建出了 ComfyUI 的无限可能。
例如在 K-Sampler 节点中,你可以看到它有多个输入和输出,也同时包含多个参数设置,这些参数决定了节点执行的逻辑,它的背后是对应编写好的 Python 逻辑,从而可以让你不用去接触代码就可以实现对应的功能。
由于 ComfyUI 仍旧在快速迭代和开发中,我们每天都在持续迭代,所以本文中相关操作的部分,可能会有一定变动或者遗漏,请以实际为准,如果你遇到实际的操作有变动,可能是因为我们进行了迭代更新,你也可以 fork 这个 repo 的和我们一起完善这个文档。
节点的的不同状态
在 ComfyUI 中,节点有多种状态,下面是一些常见的节点状态:
- 正常(Normal)状态: 正常状态
- 运行(Running)状态: 运行中状态,通常在你开始运行工作流后,正在执行的节点会显示这个状态
- 错误(Error)状态: 节点错误,通常在运行工作流后,如果对应的节点输入存在问题,导致了错误会显示这个状态,并用红色标识对应出错的输入节点,你需要解决对应出错的输入来保证工作流正常运行
- 丢失(Missing)状态: 这个状态通常在你导入了一些工作流后会出现,存在两种可能
- ComfyCore 原生节点丢失: 这通常是因为 ComfyUI 的版本更新了,而你当前使用的 ComfyUI 版本较旧,你需要更新 ComfyUI 来解决这个问题
- 自定义节点丢失: 工作流中是用了第三方作者开发的自定义节点,而你的本地的 ComfyUI 版本没有安装对应的自定义节点,你可以使用 ComfyUI-Manager 来查找丢失的自定义节点
节点之间的连接
在 ComfyUI 中,节点通过连线连接,从而让相同的数据类型在不同的处理单元之间进行流转处理,从而获得最终的结果。
每个节点都会接收一些输入内容,然后经过模块处理将他们转换为对应的输出,不同的节点链接之间,必须符合数据类型规定的要求,在 ComfyUI 中,我们使用不同的颜色来区分节点的数据类型,下面是一些基础的数据类型。
数据类型 | 颜色 |
---|---|
扩散模型 | 薰衣草色 |
CLIP 模型 | 黄色 |
VAE 模型 | 玫瑰色 |
条件化 | 橙色 |
潜在图像 | 粉色 |
像素图像 | 蓝色 |
蒙版 | 绿色 |
数字 (整数或浮点数) | 浅绿色 |
网格(Mesh) | 亮绿色 |
随着 ComfyUI 的迭代,我们可能会拓展更多的数据类型,以符合更多场景的需求。
节点之间的连接和取消连接
连接: 在上一个节点的输出点中拖拽到下一个节点相同颜色的输入中,即可连接 取消连接: 在被输入的端点,点击后鼠标左键拖拽输入,即可取消连接,或者通过连线的中点菜单来取消连接。
节点的外观
我们为提供了多种样式设置,你可以根据你的需求来设置节点的外观:
- 修改样式
- 双击节点标题修改节点名称
- 通过上下文才当将节点输入在 input 和 组件(widget)之间进行切换
- 通过节点右下角来缩放节点尺寸
节点标签 Badges
我们提供了多个节点标签(Badges)的显示功能,比如:
- 节点ID
- 节点来源
目前 Comfy Core 节点 采用小狐狸的图标来展示,自定义节点则采用其名称,这样你可以快速了解到对应节点是来自哪个节点包。
你可以在菜单中设置对应的显示:
节点上下文菜单
节点的上下文菜单主要分为两种
- 针对节点本身的上下文菜单
- 针对输入 / 输出的上下文菜单
节点的上下文菜单
通过在节点上点击鼠标右键,你可以展开对应的节点上下文菜单,下面是对应的菜单截图:
在节点的右键上下文菜单中你可以
- 调整节点的颜色样式
- 修改标题
- 克隆、复制、删除节点
- 设置节点的模式
在这个菜单中,除了外观相关的设置比较重要的是下面的菜单操作
- 模式(Mode): 设置节点的模式,Always、Never、绕过(Bypass)
- 切换节点输入的控件(Widget)和 输入模式: 切换节点输入的控件(Widget)和 输入模式
模式(Mode)
对于模式,你可能注意到目前我们提供了:Always、Never、On Event、On Trigger 四种模式,但实际上只有 Always 和 Never 是有效的,On Event 和 On Trigger 实际上是无效的,目前我们尚未完全实现这个功能,另外你可以把 绕过(Bypass) 也理解为一种模式,下面是对于几种可用模式的解释
- Always: 节点默认模式,当节点首次运行或者自上一次执行后,对应输入有变化对应节点都会执行
- Never: 节点在任何情况下都不会执行,就像节点被删除了,后续节点无法读取接收到任何来自它的数据
- 绕过(Bypass): 节点在任何情况下都不会执行,但是后续的节点仍旧可以试着获取到未经这个节点的处理的数据
下面是对于 Never
和 Bypass
模式的对比:
在这个对比的例子中,你可以看到,两个工作流都是同时应用了两个 LoRA 模型,差异在于其中一个Load LoRA
节点被设置为 Never
模式而另一个被设置为Bypass
模式。
- 被设置为
Never
模式的节点,后续的节点由于接收不到任何的输入数据而出现了报错 - 被设置为
Bypass
模式的节点,后续的节点仍旧可以获取到未经这个节点处理的数据,从而加载了第一个Load LoRA
节点的输出数据,所以后续的工作流依旧可以正常运行
切换节点输入的控件(Widget)和 输入模式
在有些情况下,我们需要使用来自其它节点的输出结果作为输入,此时我们就可以通过切换节点输入的控件(Widget)和 输入模式来实现。
下面是一个非常简单的例子:
通过将 K-Sampler 的 Seed 从输入控件(Widget)切换为输入模式,从而统一多个节点的 seed ,实现多个采样间的变量统一。 对比第一个节点和后续的两个节点,你可以看到后两个节点的 seed 是输入模式了,同样你还可以把它再转换回控件模式:
前端 v1.16.0 版本后,我们改进了这一功能,现在你只需要直接将输入端的连线直接连接到对应组件,即可完成这一过程
Say goodbye to annoying widget <> socket conversion starting from frontend version v1.16.0! Now each widget just always have an associated input socket by default #ComfyUI pic.twitter.com/sP9HHKyGYW
— Chenlei Hu (@HclHno3) April 7, 2025
输入 / 输出的上下文菜单
这里上下文菜单主要和对应输入输出的数据类型相关
在拖动节点的输入 / 输出的时候,当有连线出现,但你未连接到其它节点的输入或输出的时候,此时释放鼠标则会弹出针对输入 / 输出的上下文菜单,用于快速添加相关类型的节点。 你可以在设置中调整对应的节点建议的数量
节点选择工具箱
节点选择工具箱(Selection tool box) 是一个为节点提供快速操作的一个浮层工具,当你选中一个节点的时候,它会悬浮在选中的节点上方,通过这个节点你可以:
- 修改节点的颜色
- 快速设置节点为 Bypass 模式(在运行时候不执行)
- 固定节点
- 删除节点
当然,这些功能在对应节点的右键菜单中也可以找到,节点选择工具箱只是提供了一个快捷操作,如果你想要关闭这个功能,可以在设置中关闭。
节点组
在 ComfyUI 中,你可以将一个工具流的部分,同时选用,再使用右键菜单将它们合并成一个节点组,使得对应的部分可以成为一个可复用的模块,从而在你的 ComfyUI 中进行重复调用