ComfyUI自定义节点数据类型

LIBRARY Nov 22, 2024

这些是最重要的内置数据类型。你也可以定义自己的数据类型。

数据类型在 INPUT_TYPES 中由 str 指定,但 COMBO 除外,它是 list[str]

数据类型在客户端使用,以防止工作流将错误形式的数据传递到节点 - 有点像强类型。JavaScript 客户端代码通常不允许将节点输出连接到不同数据类型的输入,但下面列出了一些例外。

1、​Comfy的数据类型

1.1 COMBO

  • INPUT_TYPES 中没有其他参数
  • Python 数据类型:定义为 list[str],输出值为 str

表示下拉菜单小部件。与其他数据类型不同, COMBO 不是在 INPUT_TYPES 中由 str 指定,而是通过与下拉列表中的选项相对应的 list[str] 指定,默认选择第一个选项。

COMBO 输入通常在运行时动态生成。例如,在内置的 CheckpointLoaderSimple 节点中,你可以找到:

"ckpt_name": (folder_paths.get_filename_list("checkpoints"), )

或者它们可能只是一个固定的选项列表,

"play_sound": (["no","yes"], {}),

1.2 元节点和重路由

元节点(primitive)和重路由(reroute)节点仅存在于客户端。它们没有内在的数据类型,但连接时它们会采用已连接的输入或输出的数据类型(这就是它们无法连接到 * 输入的原因……)

​2、Python 数据类型

2.1 INT

  • INPUT_TYPES 中的其他参数: default是必需的, minmax 是可选的
  • Python 数据类型 int

2.2 FLOAT

  • INPUT_TYPES 中的其他参数: default是必需的, minmaxstep 是可选的
  • Python 数据类型 float

2.3 STRING

  • INPUT_TYPES 中的其他参数: default是必需的,Python 数据类型 str

3、Tensor 数据类型

MASK、IMAGE 和 LATENT 都使用  torch.Tensor 类型,但它们的形状不同。请参阅“图像、潜在和蒙版”中的讨论。​

3.1 IMAGE

  • INPUT_TYPES 中没有其他参数
  • Python 数据类型 torch.Tensor,形状为 [B,H,W,C]

一批 B 幅图像,高度为 H,宽度为 W,具有 C 个通道(RGB 通常为 C=3)。

​3.2 LATENT

  • INPUT_TYPES 中没有其他参数
  • Python 数据类型字典,包含一个形状为 [B,C,H,W]torch.Tensor

传递的字典包含关键样本,它是一个形状为 [B,C,H,W]torch.Tensor,代表一批 B 幅潜伏图像,具有 C 个通道(对于现有的稳定扩散模型通常为 C=4),高度为 H,宽度为 W。

高度和宽度是相应图像大小的 1/8(这是你在 Empty Latent Image 节点中设置的值)。

字典中的其他条目包含潜伏掩码之类的内容。

​3.3 MASK

  • INPUT_TYPES 中没有其他参数
  • Python 数据类型 torch.Tensor 具有形状 [H,W][B,C,H,W]

4、自定义采样数据类型

4.1 NOISE

NOISE 数据类型表示噪声源(而不是实际噪声本身)。它可以由任何提供生成噪声方法的 Python 对象表示,其签名为 generate_noise(self, input_latent:Tensor) -> Tensor,以及属性 seed:Optional[int]

seed传递到 SamplerCustomAdvanced 中的样本引导器中,但似乎未在任何标准引导器中使用。它是可选的,因此你通常可以将其设置为 None。

当要添加噪声时,潜伏期将传递到此方法中,该方法应返回包含噪声的相同形状的张量。

参见噪声混合示例

4.2 SAMPLER

SAMPLER 数据类型表示采样器,它表示为提供采样方法的 Python 对象。稳定扩散采样超出了本指南的范围;如果你想深入了解代码的这一部分,请参阅 comfy/samplers.py

4.3 SIGMAS

SIGMAS 数据类型表示由调度程序生成的采样过程每个步骤之前和之后的 sigma 值。这表示为长度为 steps+1 的一维张量,其中每个元素表示在相应步骤之前预计存在的噪声,最终值表示最后一步之后存在的噪声。

对于 SDXL 模型,具有 20 个步骤和 1 的降噪的正常调度程序会产生:

tensor([14.6146, 10.7468,  8.0815,  6.2049,  4.8557,  
         3.8654,  3.1238,  2.5572,  2.1157,  1.7648,  
         1.4806,  1.2458,  1.0481,  0.8784,  0.7297,  
         0.5964,  0.4736,  0.3555,  0.2322,  0.0292,  0.0000])
sigma 的起始值取决于模型,这就是调度程序节点需要 MODEL 输入来产生 SIGMAS 的原因输出

4.4 GUIDER

GUIDER 是去噪过程的概括,由提示或任何其他形式的条件“引导”。在 Comfy 中,引导器由可调用的 Python 对象表示,提供由样本调用的 __call__(*args, **kwargs) 方法。

__call__ 方法(​​在 args[0] 中)获取一批噪声潜变量(张量 [B,C,H,W]),并返回噪声的预测(相同形状的张量)。

​5、模型数据类型

稳定扩散模型有许多更技术性的数据类型。最重要的是 MODELCLIPVAECONDITIONING。使用这些数据类型(当前)超出了本指南的范围!

​6、附加参数

下面是官方支持的键列表,这些键可用于输入定义的“额外选项”部分。

你可以将附加键用于自己的自定义小部件,但不应将以下任何键重新用于其他目的。
描述
default 小部件的默认值
min 数字的最小值(FLOAT 或 INT)
max 数字的最大值(FLOAT 或 INT)
step 小部件的增加或减少量
label_on 布尔值为 True 时在 UI 中使用的标签(BOOL)
label_off 布尔值为 False 时在 UI 中使用的标签(BOOL)
defaultInput 默认为输入套接字,而不是受支持的部件
forceInput defaultInput 并且不允许转换为部件
multiline 使用多行文本框(STRING)
placeholder 为空时在 UI 中显示的占位符文本(STRING)
dynamicPrompts 使前端评估动态提示
lazy 声明此输入使用惰性求值
rawLink 当链接存在时,你将收到链接(即 ["nodeId", ]),而不是接收求值。主要在你的节点使用节点扩展时有用。

原文链接:ComfyUI Server Side Datatypes

Tags