高级CLIP文本编码
这个仓库包含了4个用于 ComfyUI 的节点,可以更好地控制提示词权重的解释方式。
BNK_CLIPTextEncodeAdvanced 节点设置
为了实现这一目标,引入了一个CLIP文本编码(高级)节点,具有以下2个设置:
token_normalization:
决定如何对词元权重进行归一化。目前支持以下选项:
- none:不改变权重。
- mean:调整权重,使所有有意义词元的平均值为1。
- length:将长词或嵌入的词元权重分配给所有词元。它以一种使不同长度词元之间权重变化幅度保持恒定的方式进行。例如,如果一个词由3个词元表示,权重为1.5,则所有词元的权重约为1.29,因为sqrt(3 * pow(0.35, 2)) = 0.5。
- length+mean:先分配长词的词元权重,然后将平均值调整为1。
weight_interpretation:
决定如何处理权重的上调/下调。目前支持以下选项:
- comfy:ComfyUI的默认设置,CLIP向量在提示词和完全空白提示词之间进行线性插值。
- A1111:CLIP向量按其权重进行缩放。
- compel:以类似于compel的方式解释权重。Compel的上调方式与comfy相同,但使用掩蔽嵌入来实现下调(稍后会详细说明)。
- comfy++:上调时,每个词在原始提示词和该词被掩蔽的提示词之间进行线性插值。此外还使用compel风格的下调。
- down_weight:重新缩放权重,使最大权重为1。这意味着你只能进行下调。使用compel风格的下调。
权重解释方法的直观理解
权重上调
下图直观展示了3种不同的方法如何转换CLIP嵌入以实现权重上调
如图所示,在A1111中,我们使用权重在零向量和对应词元嵌入的向量之间移动。这可以看作是调整嵌入的幅度,既使我们的最终嵌入更指向我们正在上调的事物的方向(或在下调时远离),又因为更大的数值而在SD中产生更强的激活。
Comfy也从一个单一点开始创建方向,但使用对应完全空白提示词的向量嵌入。我们现在在一条近似某个事物本质的线上移动。尽管向量的幅度增长不如A1111快,但这实际上非常有效,可能导致SD相当积极地追求被上调的概念。
Comfy++不是从单一点开始,而是在提示词中概念的存在和缺失之间移动。尽管想法与comfy相似,但它不那么激进。
不同方法的视觉比较
下面是一个简短的视频,展示了提示词cinematic wide shot of the ocean, beach, (palmtrees:1.0), at sunset, milkyway
,其中棕榈树的权重在20步内从1.0缓慢增加到2.0。(使用SD 1.5中的silicon29制作)
权重下调
使用上述方法进行下调的一个问题是,与词元相关的嵌入向量不仅包含该词元的"信息",实际上还包含了整个提示词的大量上下文。它们包含的大部分信息似乎是关于特定词元的,这就是为什么这些不同的上调解释方法有效,但给定的词元渗透到整个CLIP嵌入中。在上面的示例提示词中,我们可以在comfy或A1111中将palmtrees
的权重一直降到0.1,但由于表示棕榈树的词元影响了整个嵌入,我们在输出中仍然能看到很多棕榈树。假设我们有提示词(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的苹果的影响。
Mix Clip Embeddings 节点(已弃用)
此节点的功能现已包含在核心ComfyUI节点中。
SDXL支持
为支持SDXL,提供了以下设置和节点。请注意,CLIP Text Encode(Advanced)节点也同样适用于SDXL:
BNK_CLIPTextEncodeSDXLAdvanced
CLIP Text Encode SDXL(Advanced)节点提供了与其非SDXL版本相同的设置。此外,它还有2个文本字段,用于向两个CLIP模型发送不同的文本,以及以下设置:
- balance:CLIP和openCLIP模型之间的权衡。在0.0时,嵌入仅包含CLIP模型输出,openCLIP模型的贡献被清零。在1.0时,嵌入仅包含openCLIP模型,CLIP模型完全被清零。
此节点主要用于实验目的。
BNK_AddCLIPSDXLParams
Add CLIP SDXL Params节点向条件添加以下SDXL参数:
- width:图像裁剪的宽度。
- height:图像裁剪的高度。
- crop_w:裁剪的左侧像素。
- crop_h:裁剪的顶部像素。
- target_width:原始图像的宽度。
- target_height:原始图像的高度。
BNK_AddCLIPSDXLRParams
Add CLIP SDXL Refiner Params节点向条件添加以下细化器参数:
- width:图像的宽度。
- height:图像的高度。
- ascore:图像的美学得分。