切换主题

ComfyUI 区域提示词与多主体构图:Regional、Cutoff、Conditioning Combine 怎么用

Easton editorial illustration: one large rounded ComfyUI-style node canvas with a coordinate grid, two simplified 2.5D character silhouettes isolated in red-left and blue-right regions

"ComfyUI 核心源码定义了 ConditioningSetArea、ConditioningSetAreaPercentage 与 ConditioningCombine 的参数和 latent 区域映射行为。"

一张 1024x768 的图,左边想要红衣短发女孩,右边想要蓝外套男孩。结果画出来,红色跑到右边外套上,蓝色染到左边头发里,两个人衣服和发色互相污染。这不是 seed 问题,也不是模型不够强,而是 CLIP 文本编码器看的是整句上下文——“red hair, blue jacket”里的 red 可能漂移到 jacket,blue 可能跑到 hair。区域条件节点只能限制 prompt 在 latent 上的空间范围,但 embedding 本身仍然带着全局编码的上下文。实际处理时可分三条路线:原生坐标区域(ConditioningSetArea + Combine)、属性绑定(Cutoff)、mask 区域采样(Impact Pack Regional),每条路线适用的场景和边界限制都不同。

问题拆解:为什么多主体 prompt 会串味

CLIP 编码的全局上下文

Stable Diffusion 的 CLIP 文本编码器不是逐词独立编码,而是看整句上下文。“blue hair, yellow eyes”里的 blue 可能影响 eyes,因为 embedding 生成时 token 之间有语义关联。ConditioningSetArea 只是把条件限制在 latent 的某个区域,但 embedding 本身仍然来自全局编码,所以蓝色仍然可能漂移到眼睛。区域 prompt 能降低空间上的串味概率(左边红影响右边),但不能阻止 token 层面的属性漂移(blue 影响 eyes)。

三种串味类型

串味类型典型表现解决方向
空间串味左边红衣影响右边,前景蓝色影响背景区域条件(Set Area / RegionalPrompt)
属性串味”blue hair, yellow eyes”中 blue 影响 eyes属性绑定(Cutoff)
身份不一致同角色在不同 seed 下脸不一样FaceID / LoRA(本篇不展开)

方案选型对照表:问题 → 方案 → 工具 → 不适合场景

问题场景推荐方案工具节点不适合场景
左右角色分区原生坐标区域ConditioningSetArea + ConditioningCombine复杂 mask(需手算坐标)
颜色/服饰串味属性绑定Cutoff BasePrompt + Set Region + Regions To Conditioning坐标分区;SDXL 效果需实测(README 明确 SDXL 0.9 效果不佳)
复杂 mask 区域mask 区域采样Impact Pack:RegionalPrompt + CombineRegionalPrompts + RegionalSampler需安装 Impact Pack;可能缺节点
简化色块 mask简化区域节点Inspire Pack:Regional Conditioning By Color Mask依赖 Impact Pack 或 IPAdapter Plus
姿势错位姿势控制ControlNet(OpenPose / Canny / Depth)不解决属性串味
身份不一致身份固定FaceID / ReActor / LoRA不解决区域 prompt

组合建议:区域 prompt 定位置 → OpenPose 定姿势 → global conditioning 用低权重(0.3-0.5)统一氛围。OpenPose、ControlNet 或 IPAdapter 的位置需要人工和区域对齐,节点不会自动知道”左边这个 OpenPose 人物属于哪个区域 prompt”。

原生路线:ConditioningSetArea + Combine

坐标参数解释

参数含义单位范围说明
x / y区域左上角坐标像素0 - MAX_RESOLUTION坐标系原点在左上角
width / height区域宽高像素64 - MAX_RESOLUTION,步进 8UI 步进 8,因为源码写入 latent 时要除以 8
strength区域条件权重浮点数0 - 10,默认 1.0重叠区域混合权重,采样时归一化

步进 8 的原因:源码中 ConditioningSetArea.append() 写入 latent area 时使用 (height // 8, width // 8, y // 8, x // 8)。512x512 图像在 latent 空间是 64x64,所以坐标要按 8 的倍数对齐。百分比版本可用 ConditioningSetAreaPercentage,输入 0-1 的百分比,适合不想手算像素的场景。

连线流程:从 prompt 到 sampler

以下步骤块以 1024x768 左右角色分区为例:

步骤 1:左角色 prompt 分区

  • 左角色 prompt → CLIP Text Encode(输出 conditioning)
  • Conditioning → ConditioningSetArea(设置参数:x=0, y=0, width=512, height=768, strength=1.0)
  • 输出带区域标记的 conditioning

步骤 2:右角色 prompt 分区

  • 右角色 prompt → CLIP Text Encode(输出 conditioning)
  • Conditioning → ConditioningSetArea(设置参数:x=512, y=0, width=512, height=768, strength=1.0)
  • 输出带区域标记的 conditioning

步骤 3:合并 conditioning

  • 左角色 Set Area 输出 → ConditioningCombine(输入端 1)
  • 右角色 Set Area 输出 → ConditioningCombine(输入端 2)
  • Combine 输出 → KSampler 的 positive 条件

可选步骤:背景 global conditioning

  • 背景场景 prompt → CLIP Text Encode
  • Conditioning → ConditioningSetArea(x=0, y=0, width=1024, height=768, strength=0.3-0.5)
  • Combine 时与其他区域 conditioning 合并,strength 调低统一氛围

关键提醒:strength 不是”透明度”,而是”噪声预测的权重”。重叠区域时,多个 conditioning 的权重会在采样前归一化,不需要手动计算总权重。

重叠区域与 strength 调整

多个区域重叠时,strength 用于混合不同区域的 conditioning。采样时会自动归一化权重,所以不需要手动计算。建议:前景角色 strength=1.0,背景 global conditioning strength=0.3-0.5。strength 调低可以减少背景对主体的干扰,但不能完全消除串味——如果两个角色的 prompt 里有颜色冲突,仍可能因为 CLIP embedding 的全局上下文而互相影响。

属性绑定路线:Cutoff

适用场景与原理

典型问题:“blue hair, yellow eyes”中 blue 影响 eyes,因为 CLIP 编码看整句上下文。Cutoff 的目标是让属性只影响 prompt 指定的子集,而不是整句。工作原理:屏蔽 target tokens 重新生成 embedding,再取方向让属性关系更隔离。

关键区分:Cutoff 不是区域提示词,不关心坐标,只关心 token 之间的绑定关系。节点清单:Cutoff BasePromptCutoff Set RegionCutoff Regions To ConditioningCutoff Regions To Conditioning (ADV)。节点位置:conditioning > cutoff

SDXL warning:README 明确 SDXL 0.9 效果不佳。当前 SDXL/FLUX 版本效果需实测,不能当作稳定万能方案。

安装与使用

安装步骤:

  • ComfyUI-Manager 搜索 ComfyUI_Cutoff
  • 或手动克隆:git clone https://github.com/BlenderNeko/ComfyUI_Cutoffcustom_nodes 目录
  • 安装后重启 ComfyUI

基本流程:

  • BasePrompt 输入完整 prompt(如 “blue hair, yellow eyes”)
  • Set Region 定义属性绑定(如 “blue” 绑定到 “hair”)
  • Regions To Conditioning 输出 conditioning
  • 输出的 conditioning 可继续用 Set Area 限制区域

局限与注意

不适合坐标分区:Cutoff 只解决 token 属性绑定,不负责”左边红衣、右边蓝衣”的空间分区。如果想同时解决属性串味和空间分区,可以用 Cutoff 先绑定属性,再用 Set Area 限制区域。

SDXL 效果不确定:README 明确 SDXL 0.9 效果不佳,当前版本需要实测。如果主要用 SDXL 模型,建议先测试 Cutoff 在自己工作流中的效果,再决定是否依赖它。

mask 区域采样路线:Impact Pack Regional

RegionalPrompt/RegionalSampler 节点清单

节点输入输出说明
RegionalPromptmask + advanced_sampler + variation_seed/strength/methodREGIONAL_PROMPTS把 mask 与 sampler 绑定,创建区域 prompt
CombineRegionalPrompts多个 REGIONAL_PROMPTSREGIONAL_PROMPTS合并多个区域 prompt
RegionalSamplerbase_sampler + REGIONAL_PROMPTS + overlap_factor + restore_latentlatent每一步对区域应用采样
RegionalSamplerAdvanced同 RegionalSampler + step 控制latent可用 step 而非 denoise 控制

参数语义:

  • overlap_factor:控制区域外的过渡范围
  • restore_latent:在区域采样时恢复 mask 外的 base latent,减少外部额外噪声

关键区分:RegionalSampler 在每一步对区域应用采样,而 TwoSamplersForMask 是全局采样后再 mask 合并。前者能更细致地控制每个区域的采样过程。

安装与排障

安装步骤:

  • ComfyUI-Manager 搜索 ComfyUI Impact Pack
  • 安装后重启 ComfyUI 并刷新浏览器

常见排障:

简化路线:Inspire Pack Regional Conditioning(可选)

不想手算 Set Area 坐标时,可以用色块 mask 简化流程。Inspire Pack 提供以下节点:

节点说明
Regional Prompt Simple (Inspire)简化区域 prompt 输入
Regional Prompt By Color Mask (Inspire)用色块 mask 定义区域
Regional Conditioning Simple (Inspire)简化区域 conditioning
Regional Conditioning By Color Mask (Inspire)用色块 mask 定义 conditioning 区域
Regional IPAdapter Mask / By Color Mask / Encoded Mask与 IPAdapter 相关的区域节点

依赖提醒:部分节点依赖 Impact Pack 或 IPAdapter Plus,使用前检查 README 中的依赖说明。

适用场景:已有色块 mask 图(如左半边红色、右半边蓝色),不想手动计算像素坐标。

组合边界与二次 pass 提醒

与 ControlNet/IPAdapter/LoRA 组合判断表

工具控制目标不解决的问题
区域 prompt(Set Area / Regional)控制位置和 prompt 归属身份一致性;属性串味(Set Area 不解决)
ControlNet(OpenPose / Canny / Depth)控姿势和结构属性串味;位置归属
IPAdapter用参考图影响风格/构图区域隔离;身份固定(IPAdapter 影响整体风格)
FaceID / LoRA固定身份或风格区域 prompt;属性串味

组合建议:区域 prompt 定位置 → OpenPose 定姿势 → global conditioning 低权重统一氛围。OpenPose、ControlNet 或 IPAdapter 的位置要人工和区域对齐,不能自动绑定”左边这个人”。

二次 pass / upscale / inpaint 串色提醒

二次 pass、放大、修脸阶段如果没有区域条件,模型可能再次追求整体一致性,把第一阶段分好的发色或服饰混回去。官方示例页提醒:二次 pass 没有区域 prompt 时,发色可能被整体一致性合并。

建议:后续 pass 是否继续带区域条件,或者用 Inpaint 局部修复。如果第一阶段用 Set Area 分区,第二阶段放大时考虑是否需要重新设置区域条件,避免模型重新追求整体一致性。

下一步与延伸阅读

区域 prompt 只是多主体构图的一个环节,姿势控制、身份固定、参考图引导和高清修复需要其他工具配合。

已发布:

后续会单独写:IPAdapter 完全指南、FaceID 与人脸一致性、LoRA 训练指南、高清修复与 Inpainting。这些工具与区域 prompt 组合使用,能进一步降低多主体场景的不确定性。

如何用 Set Area 创建左右双主体区域

以 1024×768 画布为例,把两个角色的 positive conditioning 分配到左右区域,再用低权重全局条件统一氛围。

⏱️ 预计耗时: 20 分钟

  1. 1

    步骤 1: 设定最终画布

    先把 latent 或 Empty Latent Image 设为 1024×768,后续所有区域坐标都以这个最终尺寸计算。
  2. 2

    步骤 2: 编写左侧角色 prompt

    为左侧角色使用独立 CLIP Text Encode,颜色、服饰和发型只写在这个局部分支中。
  3. 3

    步骤 3: 设置左侧区域

    把左侧 conditioning 接到 ConditioningSetArea,填写 x=0、y=0、width=512、height=768、strength=1.0。
  4. 4

    步骤 4: 设置右侧区域

    为右侧角色建立第二个 CLIP Text Encode 和 ConditioningSetArea,填写 x=512、y=0、width=512、height=768、strength=1.0。
  5. 5

    步骤 5: 合并局部条件

    用 ConditioningCombine 合并左右两个带区域标记的 conditioning,并把输出接到 KSampler 的 positive。
  6. 6

    步骤 6: 添加低权重全局条件

    如需统一光线或背景,可添加覆盖全画布的 conditioning,strength 从 0.3-0.5 起步,避免盖过局部分支。
  7. 7

    步骤 7: 对齐姿势控制

    需要双人站位或手势时再叠加 OpenPose、Depth 或 Canny,并人工让 pose 与左右区域对应。
  8. 8

    步骤 8: 检查后续采样

    进行 upscale、二次 pass 或 inpaint 前确认是否继续保留区域条件,避免颜色和属性重新串回去。

常见问题

x、y、width、height 是像素还是百分比?
原生 ConditioningSetArea 使用最终画布的像素坐标,ConditioningSetAreaPercentage 才使用 0-1 的百分比。
为什么 Set Area 坐标要按 8 的倍数?
ComfyUI 源码把 height、width、y、x 分别除以 8 后写入 latent area。使用 8 的倍数能让区域边界与 latent 网格对齐。
Cutoff 是区域提示词吗?
不是。Cutoff 主要隔离颜色、服饰等 token 属性关系,不处理空间坐标;左右分区应使用 Set Area 或 RegionalPrompt。
RegionalPrompt 和 Set Area 怎么选?
简单左右或上下矩形分区先用原生 Set Area;区域形状复杂、已有 mask 或需要逐步区域采样时再用 Impact Pack 的 RegionalPrompt 与 RegionalSampler。
多个区域重叠时 strength 怎么调?
局部主体可从 1.0 起步,全局背景可从 0.3-0.5 起步。重叠越多越应降低次要分支权重,并通过固定 seed 对比结果。
OpenPose 有两个人,为什么 prompt 还是分不清谁是谁?
OpenPose 控制姿势,区域 prompt 控制位置归属,二者需要人工对齐;节点不会自动知道每个骨架属于哪个 prompt 区域。
节点是红的或缺节点怎么办?
先用 ComfyUI-Manager 安装或更新对应的 Impact Pack、Inspire Pack 或 Cutoff,重启并刷新浏览器;仍缺失时再检查工作流版本和 Python 依赖。

10 分钟阅读 · 发布于: 2026年8月28日 · 修改于: 2026年8月28日

评论

使用 GitHub 账号登录后即可评论

Easton BlogEaston Blog