ComfyUI图像合成完整教程(多角色场景一致性)

# ComfyUI 图像合成完整教程

# 多角色场景合成工作流


# 目录

  1. 方法概述
  2. 方法一:Image Composite Masked(推荐)
  3. 方法二:LayerDiffusion 分层生成
  4. 方法三:Blend Mode 混合
  5. 完整工作流 JSON
  6. 常见问题

# 1. 方法概述

# ComfyUI 合成方式对比

方法 难度 效果 适用场景
Image Composite Masked ⭐ 简单 ⭐⭐⭐ 简单叠加
LayerDiffusion ⭐⭐ 中等 ⭐⭐⭐⭐ 透明背景角色
Blend Mode ⭐⭐ 中等 ⭐⭐⭐ 光影融合
ControlNet + Inpaint ⭐⭐⭐ 困难 ⭐⭐⭐⭐⭐ 复杂场景

# 2. 方法一:Image Composite Masked(推荐)

# 原理

使用 ComfyUI 内置的 Image Composite Masked 节点,将前景图叠加到背景图上。

# 所需节点

1
2
3
4
5
[Load Image - 背景] ──────┐
├──→ [Image Composite Masked] ──→ [Save Image]
[Load Image - 前景] ──────┤

[Load Image - Mask] ──────┘

# 节点列表

节点名称 来源 用途
Load Image 内置 加载背景图
Load Image 内置 加载前景图
Load Image 内置 加载 Mask(黑白遮罩)
Image Composite Masked 内置 合成图像
Save Image 内置 保存结果

# 操作步骤

# 步骤 1:准备素材

背景图:场景空镜(如办公室)
前景图:角色(需要透明背景 PNG)
Mask 图:白色 = 保留,黑色 = 透明

# 步骤 2:导入 ComfyUI

  1. 在 ComfyUI 中添加节点:右键 → Add Node → image → Load Image
  2. 加载背景图
  3. 再添加一个 Load Image,加载前景图
  4. 添加 Image Composite Masked 节点

# 步骤 3:连接节点

1
2
3
背景图.destination → Image Composite Masked.destination
前景图.source → Image Composite Masked.source
前景图.mask → Image Composite Masked.mask

# 步骤 4:设置参数

Image Composite Masked 参数

参数 说明 设置
x 前景图水平位置 根据需要调整
y 前景图垂直位置 根据需要调整
resize_source 是否缩放前景 可选

# 步骤 5:运行

点击 Queue Prompt 执行,结果保存在 output 文件夹。


# 无需 Mask 的简化版

如果前景图已经是透明背景 PNG,可以这样:

1
2
3
[Load Image - 背景] ──────┐
├──→ [Image Blend] ──→ [Save Image]
[Load Image - 前景PNG] ───┘

# 3. 方法二:LayerDiffusion 分层生成

# 安装插件

1
ComfyUI Manager → Install Custom Nodes → 搜索 "LayerDiffusion"

重启 ComfyUI。

# 节点列表

节点名称 功能
LayerDiffusion: Apply Layer 应用分层生成
LayerDiffusion: Decode Layer 解码透明背景
LayerDiffusion: Composite 合成多层

# 工作流程

1
2
3
4
5
6
7
8
9
[背景图] ─────────────────────┐
├──→ [LayerDiffusion: Composite]
[前景图A][Decode Layer] ───┤

[前景图B][Decode Layer] ───┤

[前景图C][Decode Layer] ───┘

[Save Image]

# 操作步骤

# 步骤 1:生成背景

使用普通文生图生成场景背景。

# 步骤 2:生成透明前景

使用 LayerDiffusion 生成透明背景角色:

1
2
3
4
提示词:35 year old Asian man, programmer, standing pose, transparent background

节点:LayerDiffusion: Apply Layer
参数:layer_type = "foreground"

# 步骤 3:合成

使用 LayerDiffusion: Composite 节点合成所有层。


# 4. 方法三:Blend Mode 混合

# 节点

使用 Image Blend 节点(需要插件:ComfyUI-Image-Toolkit)

# 安装

1
ComfyUI Manager → 搜索 "Image Toolkit"Install

# 工作流

1
2
3
[Load Image - 背景] ──┐
├──→ [Image Blend] ──→ [Save Image]
[Load Image - 前景] ──┘

# 混合模式

模式 效果 适用场景
normal 正常叠加 一般合成
multiply 正片叠底 阴影融合
screen 滤色 光效叠加
overlay 叠加 对比增强
soft_light 柔光 自然融合

# 参数设置

1
2
blend_mode: "normal""soft_light"
opacity: 1.0 (完全不透明) 到 0.0 (完全透明)

# 5. 完整工作流 JSON

# 工作流 1:Image Composite Masked(简单版)

将以下 JSON 保存为 composite_simple.json ,导入 ComfyUI:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{
"last_node_id": 5,
"last_link_id": 5,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [100, 100],
"size": [315, 314],
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{"name": "IMAGE", "type": "IMAGE", "links": [1]},
{"name": "MASK", "type": "MASK", "links": null}
],
"properties": {"Node name for S&R": "Load Image (背景)"},
"widgets_values": ["background.png", "image"]
},
{
"id": 2,
"type": "LoadImage",
"pos": [100, 450],
"size": [315, 314],
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{"name": "IMAGE", "type": "IMAGE", "links": [2]},
{"name": "MASK", "type": "MASK", "links": [3]}
],
"properties": {"Node name for S&R": "Load Image (前景)"},
"widgets_values": ["character.png", "image"]
},
{
"id": 3,
"type": "ImageCompositeMasked",
"pos": [500, 200],
"size": [315, 150],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{"name": "destination", "type": "IMAGE", "link": 1},
{"name": "source", "type": "IMAGE", "link": 2},
{"name": "mask", "type": "MASK", "link": 3}
],
"outputs": [
{"name": "IMAGE", "type": "IMAGE", "links": [4]}
],
"properties": {"Node name for S&R": "Image Composite Masked"},
"widgets_values": [256, 128, false]
},
{
"id": 4,
"type": "SaveImage",
"pos": [900, 200],
"size": [315, 270],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{"name": "images", "type": "IMAGE", "link": 4}
],
"properties": {"Node name for S&R": "Save Image"},
"widgets_values": ["composite_result"]
}
],
"links": [
[1, 0, 3, 0, "IMAGE", "IMAGE"],
[2, 0, 3, 1, "IMAGE", "IMAGE"],
[2, 1, 3, 2, "MASK", "MASK"],
[3, 0, 4, 0, "IMAGE", "IMAGE"]
],
"groups": [],
"config": {},
"extra": {}
}

# 工作流 2:多角色合成(家庭晚餐场景)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
{
"last_node_id": 10,
"last_link_id": 15,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [50, 50],
"size": [250, 300],
"flags": {},
"order": 0,
"mode": 0,
"outputs": [
{"name": "IMAGE", "type": "IMAGE", "links": [1]},
{"name": "MASK", "type": "MASK", "links": null}
],
"properties": {"Node name for S&R": "背景-餐厅"},
"widgets_values": ["dining_room_bg.png", "image"]
},
{
"id": 2,
"type": "LoadImage",
"pos": [50, 400],
"size": [250, 300],
"flags": {},
"order": 1,
"mode": 0,
"outputs": [
{"name": "IMAGE", "type": "IMAGE", "links": [2]},
{"name": "MASK", "type": "MASK", "links": [3]}
],
"properties": {"Node name for S&R": "角色A-李柯文"},
"widgets_values": ["likewen_transparent.png", "image"]
},
{
"id": 3,
"type": "LoadImage",
"pos": [50, 750],
"size": [250, 300],
"flags": {},
"order": 2,
"mode": 0,
"outputs": [
{"name": "IMAGE", "type": "IMAGE", "links": [4]},
{"name": "MASK", "type": "MASK", "links": [5]}
],
"properties": {"Node name for S&R": "角色B-张晓云"},
"widgets_values": ["zhangxiaoyun_transparent.png", "image"]
},
{
"id": 4,
"type": "LoadImage",
"pos": [50, 1100],
"size": [250, 300],
"flags": {},
"order": 3,
"mode": 0,
"outputs": [
{"name": "IMAGE", "type": "IMAGE", "links": [6]},
{"name": "MASK", "type": "MASK", "links": [7]}
],
"properties": {"Node name for S&R": "角色C-萌萌"},
"widgets_values": ["mengmeng_transparent.png", "image"]
},
{
"id": 5,
"type": "ImageCompositeMasked",
"pos": [350, 200],
"size": [315, 150],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{"name": "destination", "type": "IMAGE", "link": 1},
{"name": "source", "type": "IMAGE", "link": 2},
{"name": "mask", "type": "MASK", "link": 3}
],
"outputs": [
{"name": "IMAGE", "type": "IMAGE", "links": [8]}
],
"properties": {"Node name for S&R": "合成1-背景+李柯文"},
"widgets_values": [400, 200, false]
},
{
"id": 6,
"type": "ImageCompositeMasked",
"pos": [700, 200],
"size": [315, 150],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{"name": "destination", "type": "IMAGE", "link": 8},
{"name": "source", "type": "IMAGE", "link": 4},
{"name": "mask", "type": "MASK", "link": 5}
],
"outputs": [
{"name": "IMAGE", "type": "IMAGE", "links": [9]}
],
"properties": {"Node name for S&R": "合成2-+张晓云"},
"widgets_values": [500, 200, false]
},
{
"id": 7,
"type": "ImageCompositeMasked",
"pos": [1050, 200],
"size": [315, 150],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{"name": "destination", "type": "IMAGE", "link": 9},
{"name": "source", "type": "IMAGE", "link": 6},
{"name": "mask", "type": "MASK", "link": 7}
],
"outputs": [
{"name": "IMAGE", "type": "IMAGE", "links": [10]}
],
"properties": {"Node name for S&R": "合成3-+萌萌"},
"widgets_values": [300, 350, false]
},
{
"id": 8,
"type": "SaveImage",
"pos": [1400, 200],
"size": [315, 270],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{"name": "images", "type": "IMAGE", "link": 10}
],
"properties": {"Node name for S&R": "保存最终结果"},
"widgets_values": ["family_dinner_composite"]
}
],
"links": [
[1, 0, 5, 0, "IMAGE", "IMAGE"],
[2, 0, 5, 1, "IMAGE", "IMAGE"],
[2, 1, 5, 2, "MASK", "MASK"],
[5, 0, 6, 0, "IMAGE", "IMAGE"],
[3, 0, 6, 1, "IMAGE", "IMAGE"],
[3, 1, 6, 2, "MASK", "MASK"],
[6, 0, 7, 0, "IMAGE", "IMAGE"],
[4, 0, 7, 1, "IMAGE", "IMAGE"],
[4, 1, 7, 2, "MASK", "MASK"],
[7, 0, 8, 0, "IMAGE", "IMAGE"]
],
"groups": [],
"config": {},
"extra": {}
}

# 6. 常见问题

# Q1: 前景图没有透明背景怎么办?

解决方案:使用 Rembg 自动去背景

方法 A:在线工具

方法 B:Python 命令行

1
2
pip install rembg
rembg i input.png output.png

方法 C:ComfyUI 插件

  • 安装 ComfyUI-Rembg 插件
  • 添加 Image Rembg (Remove Background) 节点

# Q2: 合成后边缘有白边怎么办?

解决方案:添加羽化效果

使用 Mask Feather 节点:

1
[Load Image - 前景][Create Mask][Mask Feather][Image Composite Masked]

参数

1
feather_radius: 5-20 (根据图片大小调整)

# Q3: 如何调整角色位置?

解决方案:修改 Image Composite Masked 的 x, y 参数

坐标说明

1
2
x = 0, y = 0 → 左上角
x = 256, y = 128 → 向右256像素,向下128像素

快速定位技巧

  1. 先用小图测试位置
  2. 记录正确的 x, y 值
  3. 应用到高清图

# Q4: 合成后光影不自然怎么办?

解决方案:添加光影调整节点

节点Image Color AdjustImage Sharpen

1
[合成结果][Image Color Adjust][Save Image]

参数

1
2
3
4
brightness: 1.0 (亮度)
contrast: 1.1 (对比度,略微增强)
saturation: 1.0 (饱和度)
gamma: 1.0 (伽马值)

# Q5: 如何批量合成多个场景?

解决方案:使用批处理脚本

创建 Python 脚本 batch_composite.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import os
from PIL import Image

# 设置路径
background_dir = "backgrounds/"
character_dir = "characters/"
output_dir = "composites/"

# 获取文件列表
backgrounds = sorted(os.listdir(background_dir))
characters = sorted(os.listdir(character_dir))

# 批量合成
for bg_file in backgrounds:
bg = Image.open(os.path.join(background_dir, bg_file))

for char_file in characters:
char = Image.open(os.path.join(character_dir, char_file))

# 合成
result = Image.alpha_composite(bg.convert('RGBA'), char.convert('RGBA'))

# 保存
output_name = f"{bg_file[:-4]}_{char_file[:-4]}.png"
result.save(os.path.join(output_dir, output_name))
print(f"Saved: {output_name}")

运行:

1
python batch_composite.py

# 7. 进阶技巧

# 技巧 1:使用参考图定位

1
2
[Load Image - 参考图] → [Image Analyze] → 记录坐标
[Load Image - 背景] → [Image Composite Masked] (使用记录的坐标)

# 技巧 2:自动遮罩生成

使用 SAM Segment 节点自动生成遮罩:

1
[Load Image][SAM Segment][Mask][Image Composite Masked]

# 技巧 3:多图层叠加顺序

1
背景 → 远景角色 → 中景角色 → 近景角色

# 8. 视频教程建议

# 推荐学习资源

资源 内容 链接
ComfyUI 官方文档 基础操作 github.com/comfyanonymous/ComfyUI
LayerDiffusion 教程 分层生成 github.com/huchenlei/ComfyUI-LayerDiffusion
B 站搜索 ComfyUI 合成 搜索 "ComfyUI 图像合成"

教程完成!


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付


ComfyUI图像合成完整教程(多角色场景一致性)
https://blog.quen.us.kg/2026/04/06/ComfyUI图像合成完整教程/
作者
Quen
发布于
2026年4月6日
许可协议