ComfyUI InfoComfyUI Info

ComfyUI_ADV_CLIP_emb

该仓库提供4个ComfyUI节点,可对提示词权重进行更多控制。CLIP文本编码(高级)节点有两个设置:“token_normalization”,选项有“none”“mean”等;“weight_interpretation”,选项包括“comfy”“A1111”等。它可视化了上加权方法,并解释了Compel的下加权方式。混合剪辑嵌入节点已弃用。针对SDXL,有BNK_CLIPTextEncodeSDXLAdvanced节点,带有“balance”设置,BNK_AddCLIPSDXLParams节点用于添加SDXL参数,BNK_AddCLIPSDXLRParams节点用于添加精炼器参数。

BlenderNeko

384 stars
GitHub

Description

高级CLIP文本编码

这个仓库包含了4个适用于 ComfyUI 的节点,这些节点能让你对提示词权重的解析方式有更多的控制。它属于 ComfyUI_ADV_CLIP_emb 项目,可增强 ComfyUI 的功能。


BNK_CLIPTextEncodeAdvanced 节点设置

为实现这一目标,引入了一个“CLIP文本编码(高级)”节点,该节点有以下两项设置:

词元归一化

此设置决定了词元权重的归一化方式。目前,它支持以下选项:

  • :不修改权重。
  • 均值:调整权重,使所有有意义词元的均值变为1。
  • 长度:将长单词或嵌入的词元权重分配到所有词元上。其实现方式是,对于不同的词元长度,权重变化的幅度保持恒定。例如,如果一个单词由3个词元表示,权重为1.5,那么每个词元的权重约为1.29,因为 sqrt(3 * pow(0.35, 2)) = 0.5。
  • 长度 + 均值:先分配长单词的词元权重,然后将均值调整为1。

权重解析

此设置决定了如何处理权重的上调或下调。目前,它支持以下选项:

  • Comfy:ComfyUI 的默认方式。CLIP 向量在提示词和完全空的提示词之间进行线性插值(lerped)。
  • A1111:CLIP 向量按其权重进行缩放。
  • Compel:权重的解析方式与 compel 类似。Compel 上调权重的方式与 Comfy 相同,但通过混合掩码嵌入来实现权重下调(稍后会详细介绍)。
  • Comfy++:上调权重时,每个单词在提示词和该单词被掩码的提示词之间进行线性插值。此外,它使用 Compel 风格的权重下调方式。
  • 下调权重:重新调整权重,使最大权重为1。这意味着你只会进行权重下调。它使用 Compel 风格的权重下调方式。
权重解析方法的直观解释

上调权重

下图直观展示了三种不同的上调 CLIP 嵌入的方式:

注意力方法的直观解释

如图所示,在 A1111 中,我们使用权重沿着零向量和对应词元嵌入向量之间的直线移动。这可以看作是调整嵌入的大小,使我们的最终嵌入点更朝着我们上调权重的事物的方向移动(下调权重时则相反),并由于数值更大而在稳定扩散(SD)中产生更强的激活。

Comfy 也从一个单点开始创建一个方向,但使用对应于完全空提示词的向量嵌入。我们现在沿着一条近似于某事物本质的直线移动。虽然向量的大小增长速度不如 A1111 快,但这种方法实际上非常有效,可以使 SD 积极追求上调权重的概念。

Comfy++ 不是从一个单点开始,而是在提示词中概念的存在和不存在之间移动。虽然这个想法与 Comfy 类似,但它的激进程度较低。

不同方法的直观比较

下面是一个提示词为 cinematic wide shot of the ocean, beach, (palmtrees:1.0), at sunset, milkyway 的短视频,其中“palmtrees”的权重从1.0逐渐增加到2.0,共分20步。(使用 SD 1.5 中的 silicon29 制作)

下调权重

使用上述方法进行权重下调时存在一个问题,即与一个词元相关联的嵌入向量不仅包含该词元的“信息”,还引入了整个提示词的大量上下文。它们包含的大部分信息似乎是关于特定词元的,这就是为什么这些上调权重的解析方式有效。然而,给定的词元会渗透到整个 CLIP 嵌入中。在上面的示例提示词中,我们可以在 Comfy 或 A1111 中将 palmtrees 的权重下调到0.1,但由于表示“palmtrees”的词元的存在会影响整个嵌入,我们在输出中仍然会看到很多棕榈树。假设我们有提示词 (pears:.2) and (apples:.5) in a bowl。Compel 为实现权重下调做了以下操作:它创建了嵌入

  • A = pears and apples in a bowl
  • B = _ and apples in a bowl
  • C = _ and _ in a bowl

然后将它们混合成最终嵌入 0.2 * A + 0.3 * B + 0.5 * C。这样,在整个嵌入中,梨的影响只有0.2,苹果的影响只有0.5。


混合 Clip 嵌入节点(已弃用)

此节点的功能现在可以在 ComfyUI 的核心节点中找到。


SDXL 支持

为支持 SDXL,提供了以下设置和节点。请注意,在 ComfyUI_ADV_CLIP_emb 项目中,“CLIP 文本编码(高级)”节点对 SDXL 也适用。


BNK_CLIPTextEncodeSDXLAdvanced

“CLIP 文本编码 SDXL(高级)”节点提供了与非 SDXL 版本相同的设置。此外,它有两个文本字段,用于向两个 CLIP 模型发送不同的文本,还有以下设置:

  • 平衡:在 CLIP 和 openCLIP 模型之间进行权衡。当值为0.0时,嵌入仅包含 CLIP 模型的输出,openCLIP 模型的贡献为零。当值为1.0时,嵌入仅包含 openCLIP 模型的输出,CLIP 模型的贡献为零。

此节点主要用于实验。


BNK_AddCLIPSDXLParams

“添加 CLIP SDXL 参数”节点向条件中添加以下 SDXL 参数:

  • 宽度:图像裁剪的宽度。
  • 高度:图像裁剪的高度。
  • 裁剪宽度:裁剪的左像素位置。
  • 裁剪高度:裁剪的顶部像素位置。
  • 目标宽度:原始图像的宽度。
  • 目标高度:原始图像的高度。

BNK_AddCLIPSDXLRParams

“添加 CLIP SDXL 精炼器参数”节点向条件中添加以下精炼器参数:

  • 宽度:图像的宽度。
  • 高度:图像的高度。
  • 美学分数:图像的美学分数。