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

"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,步进 8 | UI 步进 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 BasePrompt、Cutoff Set Region、Cutoff Regions To Conditioning、Cutoff 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_Cutoff到custom_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 节点清单
| 节点 | 输入 | 输出 | 说明 |
|---|---|---|---|
| RegionalPrompt | mask + advanced_sampler + variation_seed/strength/method | REGIONAL_PROMPTS | 把 mask 与 sampler 绑定,创建区域 prompt |
| CombineRegionalPrompts | 多个 REGIONAL_PROMPTS | REGIONAL_PROMPTS | 合并多个区域 prompt |
| RegionalSampler | base_sampler + REGIONAL_PROMPTS + overlap_factor + restore_latent | latent | 每一步对区域应用采样 |
| RegionalSamplerAdvanced | 同 RegionalSampler + step 控制 | latent | 可用 step 而非 denoise 控制 |
参数语义:
overlap_factor:控制区域外的过渡范围restore_latent:在区域采样时恢复 mask 外的 base latent,减少外部额外噪声
关键区分:RegionalSampler 在每一步对区域应用采样,而 TwoSamplersForMask 是全局采样后再 mask 合并。前者能更细致地控制每个区域的采样过程。
安装与排障
安装步骤:
- ComfyUI-Manager 搜索
ComfyUI Impact Pack - 安装后重启 ComfyUI 并刷新浏览器
常见排障:
- 节点是红的或缺节点 → 参考 工作流导入与缺失节点安装
- Python 依赖问题 → 参考 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 只是多主体构图的一个环节,姿势控制、身份固定、参考图引导和高清修复需要其他工具配合。
已发布:
- 工作流导入与缺失节点安装:解决 custom nodes 安装和缺节点问题
- Stable Diffusion prompt 模板指南:单 prompt 写法基础,承接”单 prompt 写不清多主体”的痛点
- ComfyUI ControlNet 完全指南:控姿势和结构,互补区域 prompt 的位置控制
- ComfyUI LoRA 完全指南:固定角色或风格,多 LoRA 串味与区域 prompt 串味区分处理
后续会单独写:IPAdapter 完全指南、FaceID 与人脸一致性、LoRA 训练指南、高清修复与 Inpainting。这些工具与区域 prompt 组合使用,能进一步降低多主体场景的不确定性。
如何用 Set Area 创建左右双主体区域
以 1024×768 画布为例,把两个角色的 positive conditioning 分配到左右区域,再用低权重全局条件统一氛围。
⏱️ 预计耗时: 20 分钟
- 1
步骤 1: 设定最终画布
先把 latent 或 Empty Latent Image 设为 1024×768,后续所有区域坐标都以这个最终尺寸计算。 - 2
步骤 2: 编写左侧角色 prompt
为左侧角色使用独立 CLIP Text Encode,颜色、服饰和发型只写在这个局部分支中。 - 3
步骤 3: 设置左侧区域
把左侧 conditioning 接到 ConditioningSetArea,填写 x=0、y=0、width=512、height=768、strength=1.0。 - 4
步骤 4: 设置右侧区域
为右侧角色建立第二个 CLIP Text Encode 和 ConditioningSetArea,填写 x=512、y=0、width=512、height=768、strength=1.0。 - 5
步骤 5: 合并局部条件
用 ConditioningCombine 合并左右两个带区域标记的 conditioning,并把输出接到 KSampler 的 positive。 - 6
步骤 6: 添加低权重全局条件
如需统一光线或背景,可添加覆盖全画布的 conditioning,strength 从 0.3-0.5 起步,避免盖过局部分支。 - 7
步骤 7: 对齐姿势控制
需要双人站位或手势时再叠加 OpenPose、Depth 或 Canny,并人工让 pose 与左右区域对应。 - 8
步骤 8: 检查后续采样
进行 upscale、二次 pass 或 inpaint 前确认是否继续保留区域条件,避免颜色和属性重新串回去。
常见问题
x、y、width、height 是像素还是百分比?
为什么 Set Area 坐标要按 8 的倍数?
Cutoff 是区域提示词吗?
RegionalPrompt 和 Set Area 怎么选?
多个区域重叠时 strength 怎么调?
OpenPose 有两个人,为什么 prompt 还是分不清谁是谁?
节点是红的或缺节点怎么办?
10 分钟阅读 · 发布于: 2026年8月28日 · 修改于: 2026年8月28日
ComfyUI 与 Stable Diffusion 专题:入门、工作流、模型选择与提示词
如果你是从搜索进入这篇文章,建议顺手补上上一篇或继续下一篇,这样更容易把同一主题读完整。



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