在 ComfyUI 中,节点是我们执行任务的单元,他们是构建好的一个个独立的模块,无论是 Comfy Core 还是 自定义节点 ,每个节点都是一个独立的模块,有着自己独特的功能,节点之间通过连线连接,我们可以像搭乐高积木一样搭建起来复杂的功能。 可以说,不同的节点组合构建出了 ComfyUI 的无限可能。

例如在 K-Sampler 节点中,你可以看到它有多个输入和输出,也同时包含多个参数设置,这些参数决定了节点执行的逻辑,它的背后是对应编写好的 Python 逻辑,从而可以让你不用去接触代码就可以实现对应的功能。

由于 ComfyUI 仍旧在快速迭代和开发中,我们每天都在持续迭代,所以本文中相关操作的部分,可能会有一定变动或者遗漏,请以实际为准,如果你遇到实际的操作有变动,可能是因为我们进行了迭代更新,你也可以 fork 这个 repo 的和我们一起完善这个文档。

节点的的不同状态

在 ComfyUI 中,节点有多种状态,下面是一些常见的节点状态:

  1. 正常(Normal)状态: 正常状态
  2. 运行(Running)状态: 运行中状态,通常在你开始运行工作流后,正在执行的节点会显示这个状态
  3. 错误(Error)状态: 节点错误,通常在运行工作流后,如果对应的节点输入存在问题,导致了错误会显示这个状态,并用红色标识对应出错的输入节点,你需要解决对应出错的输入来保证工作流正常运行
  4. 丢失(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 四种模式,但实际上只有 AlwaysNever 是有效的,On EventOn Trigger 实际上是无效的,目前我们尚未完全实现这个功能,另外你可以把 绕过(Bypass) 也理解为一种模式,下面是对于几种可用模式的解释

  • Always: 节点默认模式,当节点首次运行或者自上一次执行后,对应输入有变化对应节点都会执行
  • Never: 节点在任何情况下都不会执行,就像节点被删除了,后续节点无法读取接收到任何来自它的数据
  • 绕过(Bypass): 节点在任何情况下都不会执行,但是后续的节点仍旧可以试着获取到未经这个节点的处理的数据

下面是对于 NeverBypass 模式的对比:

在这个对比的例子中,你可以看到,两个工作流都是同时应用了两个 LoRA 模型,差异在于其中一个Load LoRA 节点被设置为 Never 模式而另一个被设置为Bypass 模式。

  • 被设置为 Never 模式的节点,后续的节点由于接收不到任何的输入数据而出现了报错
  • 被设置为 Bypass 模式的节点,后续的节点仍旧可以获取到未经这个节点处理的数据,从而加载了第一个Load LoRA 节点的输出数据,所以后续的工作流依旧可以正常运行

切换节点输入的控件(Widget)和 输入模式

在有些情况下,我们需要使用来自其它节点的输出结果作为输入,此时我们就可以通过切换节点输入的控件(Widget)和 输入模式来实现。

下面是一个非常简单的例子:

通过将 K-Sampler 的 Seed 从输入控件(Widget)切换为输入模式,从而统一多个节点的 seed ,实现多个采样间的变量统一。 对比第一个节点和后续的两个节点,你可以看到后两个节点的 seed 是输入模式了,同样你还可以把它再转换回控件模式:

前端 v1.16.0 版本后,我们改进了这一功能,现在你只需要直接将输入端的连线直接连接到对应组件,即可完成这一过程

输入 / 输出的上下文菜单

这里上下文菜单主要和对应输入输出的数据类型相关

在拖动节点的输入 / 输出的时候,当有连线出现,但你未连接到其它节点的输入或输出的时候,此时释放鼠标则会弹出针对输入 / 输出的上下文菜单,用于快速添加相关类型的节点。 你可以在设置中调整对应的节点建议的数量

节点选择工具箱

节点选择工具箱(Selection tool box) 是一个为节点提供快速操作的一个浮层工具,当你选中一个节点的时候,它会悬浮在选中的节点上方,通过这个节点你可以:

  • 修改节点的颜色
  • 快速设置节点为 Bypass 模式(在运行时候不执行)
  • 固定节点
  • 删除节点

当然,这些功能在对应节点的右键菜单中也可以找到,节点选择工具箱只是提供了一个快捷操作,如果你想要关闭这个功能,可以在设置中关闭。

节点组

在 ComfyUI 中,你可以将一个工具流的部分,同时选用,再使用右键菜单将它们合并成一个节点组,使得对应的部分可以成为一个可复用的模块,从而在你的 ComfyUI 中进行重复调用