Prompt-to-Prompt

预计阅读时间1 分 88 views

Prompt-to-Prompt是谷歌在2022年推出的一项图像编辑框架,通过提示词进行局部或全局编辑。具体可参考:图像编辑技术Prompt-to-Prompt

近日有开发人员推出Prompt-to-Prompt的ComfyUI插件,让大家可以通过提示词进行生成图像的局部调整,而图片的整体风格不变。

插件安装

目前插件尚未上架ComfyUI-Manager,需要手动安装,可以使用下列命令行;也可直接到插件页面打包下载后解压到ComfyUI\custom_nodes目录下

cd custom_nodes
git clone https://github.com/SadaleNet/ComfyUI-Prompt-To-Prompt.git
重启 ComfyUI

节点注意项:

1、设置模型、分辨率、种子、采样器、调度器等参数。确保将 LocalBlendPresets设置为 sd1.5 或 sdxl,这必须与您使用的模型类型相对应。

2、修改 Prompt 1 和 Prompt 2。如果两个提示词的单词数量相同,则将 CLIPTextEncodeP2P设置为 word swap。如果 Prompt 2 比 Prompt 1 更长,则将其设置为 refinement。Prompt 2 的长度必须不小于 Prompt 1。如果您只想使用重新加权功能,请将其设置为 word swap 模式并使两个提示相同。

3、在KSamplerP2P修改 self_attention_step 和 cross_attention_step,并重新运行,直到修改程度恰到好处。一般来说,self_attention_step 小于 cross_attention_step。

使用教程

开发者在插件的workflows文件夹下提供了4个工作流,将模型拖入ComfyUI界面即可加载工作流。

单词替换/提示优化

为了修改提示,需要指定两个提示词,可以选择单词替换或提示优化模式。

  • Propmt1:原始提示词
  • Propmt2:编辑后的提示词。如果提示内容保持不变(例如用于重新加权),则将其填充为与提示 1 相同的内容。

CLIPTextEncodeP2P:

  • Word swap:进行单词替换操作。由于实现限制,Propmt1中的单词数量必须与Propmt2 中的单词数量相同。例如:Propmt1“城市中的猫”,Propmt 2“城市中的狗”。
  • Refinement:允许对Propmt 1 的概念进行扩展,Propmt 2 必须包含比Propmt 1 更多的单词。例如:Propmt 1“城市中的猫”,Propmt 2“水下城市中的猫”。

KSamplerP2P

在KSamplerP2P修改 self_attention_step 和 cross_attention_step,并重新运行,直到修改程度恰到好处。一般来说,self_attention_step 小于 cross_attention_step。

  • self_attention_step:开始 attn1(self-attention/自注意力)替换的步骤。这意味着采样器将开始使用Propmt 2 替代Propmt 1 进行自注意力计算。
  • cross_attention_step:类似于 self_attention_step,但它是用于 attn2(cross-attention/交叉注意力)替换的。同时,这也是提示重新加权的开始时刻。

局部混合(Local Blend)

为了缩小图像中需要编辑的部分。例如,如果我们希望第一个Prompt 1展示的是城市中的猫,而Prompt 2展示的是城市中的狗,我们可能只希望将变化集中在猫或狗本身,而不希望改变图像的背景部分。

根据经验,此功能在 SD1.5 中的表现优于 SDXL。若不需要此功能,可以将 local_blend 和 local_blend2 设置为空字符串。

  • local_blend / local_blend2:这两个参数用于生成文本/文本2的掩码。如果在文本/文本2中存在多个与这些参数匹配的项,则仅取第一个匹配项。使用的掩码是 local_blend 和 local_blend2 生成的掩码的并集。如果 local_blend 或 local_blend2 为空字符串,则不会生成与相应文本对应的掩码。
  • local_blend_layers:指定用于生成掩码的 U-Net 层。建议使用 local_blend_layers节点来生成所需的层字符串。请注意,SD1.5 和 SDXL 需要使用不同的层。如需确定所需的精确层,可以使用 LocalBlendPresets节点进行分析。
  • local_blend_threshold:此阈值用于控制掩码匹配的内容范围。阈值越高,掩码匹配的内容越少,编辑的焦点就越集中。通常,合理的阈值范围在 0.3 到 0.9 之间。值得注意的是,SDXL 通常需要比 SD1.5 更高的 local_blend_threshold 值。

重新加权(Reweight)

指定的短语进行加强或减弱强调。若不需要此功能,请将 reweight_words 设置为空字符串。重新加权的效果将在 cross_attention_step 之后显现。若希望绕过此功能,请将 reweight_words 设置为空字符串。

  • reweight_words:目标短语,其权重将被调整。此短语将与 text2 进行匹配。如果存在多个匹配项,则仅取第一个匹配项
  • reweight_value:指定对目标短语进行强调的程度。合理的值通常在 -10.0 到 10.0 之间,其中数值越小表示强调越弱。可以使用负值来减弱或去除对短语的强调。

插件不完善的地方

  • 对显存有较高的要求:禁用 KSamplerP2P.preview 可以减少显存 的使用。在 Linux 系统上,关闭预览功能后,对于 1024x1024 分辨率的 SDXL 模型,至少需要 12GB 的显存。
  • 词语替换功能仅支持在两个提示中拥有相同数量词语的情况。这是从谷歌发布的 Prompt-to-Prompt 仓库中继承的限制。不支持长度超过 77 个标记的提示词
  • 对于某些采样器,如 dpmpp_sde,该插件可能无法正常工作。尚未测试所有采样器。
  • 在局部混合时,每个 Prompt 1 和 Prompt 2 仅支持一个目标短语。重新加权功能也仅支持一个目标短语。

评论0

分享此文档

Prompt-to-Prompt

或复制链接

文章目录
没有账号?注册  忘记密码?