ComfyUI_Cutoff
ComfyUI_Cutoff是cutoff脚本在ComfyUI中的实现。它能让用户将提示词中特定词语的影响范围限制在特定区域。通过屏蔽标记并计算向量差异,可在嵌入中分离颜色等关系。它引入了四个节点:Cutoff BasePrompt、Cutoff Set Region、Cutoff Regions To Conditioning和Cutoff Regions To Conditioning (ADV)。这些节点位于`conditioning>cutoff`下,虽然可用于SDXL,但在0.9版本效果可能不佳。
BlenderNeko
Description
ComfyUI_Cutoff的截断功能
什么是截断功能(Cutoff)?
截断功能(Cutoff) 是适用于 Automatic1111 网页界面的一个脚本或扩展程序。它允许用户限制某些属性对提示词指定部分的影响。例如,当提示词为 一个可爱的女孩,白色衬衫配绿色领带,红色鞋子,蓝色头发,黄色眼睛,粉色裙子
时,截断功能能让你指定 “蓝色” 仅适用于头发而不适用于鞋子,“绿色” 仅适用于领带而不适用于裙子。这是截断功能以 3 个节点的形式在 ComfyUI 中的实现。ComfyUI_Cutoff 将这一实用功能引入了 ComfyUI 环境。
它是如何工作的?
当你向 Stable Diffusion 输入一些文本时,文本会被分词,CLIP 会为文本中的每个词元创建一个向量(嵌入)。例如,如果提示词包含 “蓝色头发,黄色眼睛”,CLIP 生成的一些向量将对应 “蓝色头发”,另一些则对应 “黄色眼睛”。当 CLIP 进行此操作时,它会尝试考虑整个句子的上下文。然而,CLIP 并不总是能够很好地确定 “蓝色头发” 中的 “蓝色” 仅应修饰名词 “头发”,而不应修饰句子后面的名词 “眼睛”。
那么,我们该如何处理这个问题呢?我们可以屏蔽对应 “蓝色” 的词元,并要求 CLIP 创建另一个嵌入。在这个新的嵌入中,“黄色眼睛” 的向量不受 “蓝色” 的影响,因为 “蓝色” 不在这些词元之中。如果我们找出原始向量和这些新向量之间的差异,就会得到一个方向。我们可以利用这个方向让眼睛更多地受 “黄色” 影响,而更少地受 “蓝色” 影响。如果我们对文本中所有与颜色相关的词都进行这样的处理,就可以得到一个使这些关系更加清晰的嵌入。当然,这种效果并不局限于颜色。ComfyUI_Cutoff 利用这一机制提高了 ComfyUI 中提示词的精度。
ComfyUI 节点
为了实现上述所有功能,ComfyUI_Cutoff 中引入了以下 4 个节点:
截断基础提示词(Cutoff BasePrompt)
此节点接收完整的原始提示词。
截断设置区域(Cutoff Set Region)
此节点为特定的目标词设置一个 “影响区域”,并具有以下输入项:
- 区域文本(region_text):定义目标词应影响的词元集合。这应该是原始提示词的一部分。你可以在单个 CLIPSetRegion 节点中通过在新行上编写每个区域来定义多个区域。
- 目标文本(target_text):定义将被屏蔽的词元集合(即我们希望限制在该区域内的词元)。这是一个用空格分隔的单词列表。如果你想匹配一连串的单词,可以使用下划线代替空格,例如 “a_series_of_connected_tokens”。如果你想匹配一个实际包含下划线的单词,可以对下划线进行转义,例如 “the_target_tokens”。你可以使用默认语法来针对文本反转嵌入,但请注意,嵌入名称中的任何下划线在这个输入字段中都必须进行转义。
- 权重(weight):确定在隔离向量的方向上移动的距离。
截断区域转条件(Cutoff Regions To Conditioning)
此节点将基础提示词和区域转换为可在 ComfyUI 其余部分使用的实际条件,并具有以下输入项:
- 屏蔽词元(mask_token):用于屏蔽的词元。如果留空,则默认为
<endoftext>
词元。如果该字符串转换为多个词元,控制台将给出警告,并仅使用列表中的第一个词元。 - 严格屏蔽(strict_mask):设置为 0.0 时,指定的目标词元不会影响其他指定区域,但会影响这些区域之外的任何内容。设置为 1.0 时,指定的目标词元仅会影响其自身所在的区域。
- 从屏蔽开始(start_from_masked):设置为 0.0 时,调整的起点是原始提示词。设置为 1.0 时,起点是完全屏蔽后的提示词。请注意,当所有区域权重都为 1.0 时,这两种设置没有区别。
截断区域转条件(高级版)(Cutoff Regions To Conditioning (ADV))
此节点提供与上述节点相同的功能,但还提供了如何解释提示词权重的选项。有关这些设置的更多信息,请参阅 此处。你可以在 ComfyUI_Cutoff 的 conditioning>cutoff
下找到这些节点。
SDXL
ComfyUI_Cutoff 中的节点在与 SDXL 一起使用时不会导致错误,但至少在 0.9 版本中,效果似乎不太理想。
最后,以下是一些可以使用 ComfyUI_Cutoff 加载到 ComfyUI 中的示例图片: