AI短剧系列 | 第 8 天:ComfyUI 角色一致性——ControlNet、参考图与 LoRA 应用

在 AI 短剧的批量生产中,最大的痛点从来不是「能不能生成一张好看的图」,而是「同一个角色能不能在几十个镜头里始终是同一张脸、同一套衣服、同一种画风」。上一期我们已经搭好了 ComfyUI 的基础工作流,这一期就专门攻克角色一致性这道坎,把 ControlNet、参考图与 LoRA 三件套讲透。它们是短剧能连续拍下去、观众不「出戏」的技术底座。

AI短剧 第8天

为什么短剧必须解决角色一致性

短剧是「连续叙事」,观众对主角脸的记忆一旦建立,后续任何一次换脸都会瞬间打断沉浸感。传统手绘动画靠的是统一的人设图与反复校准,而 AI 生成天生带有随机性:同样的提示词,换一个种子、换一次采样,出来的就是另一个「长得有点像但绝不是同一个人」的角色。

角色一致性本质上是把生成过程的「自由度」约束起来,让它朝我们指定的方向收敛。ComfyUI 提供了三层约束手段,从松到紧分别是:

  • 提示词约束:把角色特征写进 prompt,最弱,只能控制大概风格。
  • 参考图约束:用 IP-Adapter 等节点让模型「看着」参考图来画,中等强度。
  • 结构化约束:用 ControlNet 锁住姿势、线稿、深度等底层结构,最强,保证「骨架」不变。

实际生产中三者是叠加使用的:LoRA 定义「这是谁」,ControlNet 定义「这个人在做什么动作」,参考图定义「这个镜头的构图和光影」。下面逐一展开。

第一层:LoRA 让角色「认脸」

LoRA(Low-Rank Adaptation)是一种轻量微调技术,它不改动底模的大权重,只在模型旁边挂一个小的低秩矩阵补丁。训练一个角色 LoRA,通常只需要十几张到几十张该角色的多角度、多表情、多光线的清晰图,就能让 Stable Diffusion 系列底模「记住」这个人。

训练角色 LoRA 的要点如下:

  1. 素材质量优先:每张图主角清晰、面部不遮挡、分辨率统一(建议 512×512 或 768×768)。
  2. 角度要全:正脸、左右侧脸、半侧、俯仰角都要有,否则生成时脸型会「漂移」。
  3. 触发词固定:训练时给角色起一个独一无二的触发词,例如 @sdqz_sister,生成时必须带上这个词才会激活 LoRA。
  4. 训练步数克制:步数过多会「过拟合」,角色脸记住了但灵活性下降,连动作都学不会了。

一个标准的 ComfyUI LoRA 加载配置如下,把 LoraLoader 节点接入主链路即可:

{
  "type": "LoraLoader",
  "inputs": {
    "model": ["CheckpointLoader", 0],
    "clip": ["CheckpointLoader", 1],
    "lora_name": "sdqz_sister_v1.safetensors",
    "strength_model": 0.85,
    "strength_clip": 0.85
  }
}

strength_modelstrength_clip 通常设为 0.8 左右,低于 1.0 可以给底模留出一定创作空间,避免角色表情僵硬。

第二层:参考图锁定「脸与气质」

LoRA 负责「记住长相」,参考图负责「告诉模型当前镜头要照谁画」。ComfyUI 里最常用的方案是 IP-Adapter(Image Prompt Adapter),它把一张参考图的视觉特征注入到文生图或图生图流程中,让输出图在人物气质、配色、构图上都向参考图靠拢。

IP-Adapter 的典型接入方式是「IPAdapter Apply」,同时给一个权重来控制参考图的影响力。参考权重建议从 0.6 开始试探:

ipadapter:
  weight: 0.65
  weight_type: "linear"
  reference_image: "character_sheet.png"
  combine_embeds: "concat"

这里有几个实战经验值得记下来:

  • 参考图优先用「角色设定图」(character sheet),一张图包含正脸、侧脸和全身造型,比单张正脸图更稳定。
  • 权重过高会导致「整张图照抄参考图」,失去你想要的构图和动作,0.5~0.7 是黄金区间。
  • 如果生成结果肤色、发色漂移,尝试把 weight_type 换成 ease in-out 让影响更平滑。

第三层:ControlNet 锁住「姿势与结构」

前两层解决「像谁」,ControlNet 解决「在干嘛、站哪、什么姿势」。它通过额外条件图(如 OpenPose 骨架、Canny 线稿、深度图)直接约束生成过程中的空间结构,是短剧分镜里最硬的约束。

短剧场景里最实用的是 OpenPose 控制。你可以在上一个镜头里把角色的动作骨架提取出来,套用到下一个镜头,保证「同一个动作的不同景别」不会变形。控制流程如下:

# 从已有帧提取 OpenPose 骨架图
python preprocess.py 
  --model-type openpose 
  --input frame_0012.png 
  --output pose_0012.png

# 用骨架图作为 ControlNet 条件重新生成
python main.py 
  --prompt "same girl raising her hand, cinematic light" 
  --controlnet-condition pose_0012.png 
  --controlnet-mode controlnet

ControlNet 在 ComfyUI 里的接线思路是:LoadImage 加载条件图 → ControlNetApply 设置强度和起止步 → 接入采样器。其中 strength 是核心参数:

{
  "type": "ControlNetApply",
  "inputs": {
    "conditioning": ["CLIPTextEncode", 0],
    "control_net": ["ControlNetLoader", 0],
    "image": ["LoadImage", 0],
    "strength": 0.9,
    "start_percent": 0.0,
    "end_percent": 0.8
  }
}

end_percent 设为 0.8 意味着在采样最后 20% 阶段释放约束,让模型补细节,既保住了骨架又不会产生生硬的「贴图感」。

三件套组合:一套可复用的角色一致性工作流

真正生产时,三者不是选择题而是叠加题。下面给出一个「角色一致性出图」的节点链路,从模型加载到出图一气呵成:

workflow:
  - CheckpointLoader:
      ckpt_name: "realisticVisionV51.safetensors"
  - LoraLoader:
      lora_name: "sdqz_sister_v1.safetensors"
      strength_model: 0.85
  - IPAdapterApply:
      reference_image: "character_sheet.png"
      weight: 0.6
  - ControlNetLoader:
      control_net: "control_v11p_sd15_openpose"
  - ControlNetApply:
      strength: 0.9
      end_percent: 0.8
  - KSampler:
      steps: 28
      cfg: 6.5
      sampler_name: "dpmpp_2m"
      scheduler: "karras"

把这套链路存成模板,每个镜头只需替换 reference_image 的条件骨架和 prompt 里的动作描述,就能批量产出「同一个人」的连续镜头。建议固定 seed 做小幅微调(seed 相邻变化),而不是完全随机,这样相邻镜头之间的光影和背景也更连贯。

常见问题与排查

  • 角色脸型漂移:先检查 LoRA 是否用触发词正确激活,再确认 strength_model 没有低到失效(低于 0.5 基本等于没加载)。
  • 姿势不对:ControlNet 强度不足或 end_percent 过小,试着把 strength 提到 1.0、end_percent 提到 0.9。
  • 整张图像参考图:IP-Adapter 权重过高,降到 0.5 以下再试。
  • 背景乱、人物融进背景:提高 CFG(如 8~9),或在 prompt 里明确「clean background, subject isolation」。
  • 多角色场景认错人:需要给每个角色分别训练 LoRA 并分别指定触发词,参考图最好用各自的单人设定图。

总结

角色一致性是 AI 短剧从「能看」到「能追」的分水岭。今天的核心可以浓缩成一句话:LoRA 认脸、参考图定气质、ControlNet 锁姿势,三者按「脸 → 气质 → 结构」的优先级叠加,就能稳定地产出连续镜头。掌握这一套之后,你已经具备了批量生产分镜的基础能力,下一期我们正式进入 ComfyUI 的视频生成,用 AnimateDiff 让这些静态角色「动起来」。

下期预告:第 9 天《ComfyUI 视频生成——AnimateDiff 等视频节点实战》,教你如何把一致性角色从单帧变成连贯短片。

微信二维码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容