一、问题从哪来?
7-3 / 7-4 默认:同一张图 既做人脸 embedding,又做 关键点(kps)。
结果:生成人物 脸像参考,头/身体角度也倾向参考图。
需求:脸 = 图 A,姿势 = 图 B(如 OpenPose 提取的他人站姿)。
二、image 与 image_kps
|
输入 |
提供什么 |
典型来源 |
|---|---|---|
|
image |
人脸身份(InstantID / InsightFace) |
清晰 正脸照 A |
|
image_kps |
面部/身体 关键点结构 |
姿势参考 B(可全身) |
ApplyInstantID 节点上 image_kps 为 可选;留空则用 image 的 kps。
脸来自 A,姿势来自 B → image=A, image_kps=B
三、原理简述
InstantID ControlNet 根据 kps 图 控制生成时的 头部朝向、五官相对位置;
IP-Adapter 分支根据 image 控制 身份特征。
二者解耦 → 换姿势不换脸 的核心。
四、参考图选择
图 A(身份)
-
正脸或微侧,光照清晰;
-
可与姿势无关(甚至证件照)。
图 B(姿势)
-
全身或半身,目标姿势明确;
-
脸是谁无所谓(会被 A 的脸替换);
-
可从 OpenPose 骨架图 或 他人照片 提取 kps(工作流内自动从 B 算 kps)。
注意:B 的 极端透视 可能导致脸融合 artifact,需试 seed / weight。
五、搭建步骤
5.1 基于 7-3 文生图
-
复制 InstantID txt2id 工作流;
-
添加 第二个 Load Image(姿势图 B);
-
ApplyInstantID:-
image ← Load Image A
-
image_kps ← Load Image B
-
-
仍用 Empty Latent,denoise 1.0;
-
Prompt 描述 服装、场景(不必描述 B 的脸)。
5.2 基于 cubiq InstantID_posed.json
官方示例路径:
ComfyUI_InstantID/examples/InstantID_posed.json
导入后对照 双 Load Image 与 image_kps 连线,改 Prompt 与参考图。
5.3 与 OpenPose 组合(进阶)
若 B 图 kps 提取差:
-
B → OpenPose 预处理 → 骨架可视化再作 kps 输入(视节点是否支持);
-
或直接用 他人 OpenPose 骨架图 作 B。
六、参数建议
|
参数 |
建议 |
|---|---|
|
weight |
0.82–0.88(姿势难时略高保脸) |
|
cfg |
4–5 |
|
Prompt |
写 B 的姿势文字辅助: |
|
负向 |
wrong face, different person |
Advanced 节点:
-
脸「烧」→ 降 ip_weight 或加 noise;
-
姿势不像 B → 略升 cn_strength 或换更清晰 B。
七、文生图 vs 图生图 + kps
|
模式 |
latent |
kps |
适用 |
|---|---|---|---|
|
txt2id + kps |
Empty |
A+B 分离 |
全新背景 + 指定姿势 |
|
img2id + kps |
Encode(某底图) |
A+B |
在底图构图上改脸/姿势 |
7-4 图生图 + image_kps=B 可 脸来自 A、姿势来自 B、构图来自底图,较复杂,建议分步掌握。
八、故障排查
|
现象 |
处理 |
|---|---|
|
姿势仍像 A |
image_kps 未接或接错 |
|
脸不像 A |
image 是否误接 B;weight↑ |
|
脸与身体接缝怪 |
换 B 角度;降 cn_strength |
|
B 无人脸导致 kps 差 |
用含头+肩的 B;或 OpenPose 图 |
九、应用场景
-
虚拟偶像 同一脸 + 舞蹈/站姿库;
-
写真 模特脸 + 动作参考;
-
分镜:固定主角脸,每格不同动作。