手部崩坏、面部五官漂移、背景出现异常伪影,是局部重绘中最容易翻车的三类区域。习惯性做法是画一张大蒙版然后把重绘幅度拉高,结果往往是脸修好了手又崩了,背景也跟着变脏。局部重绘的关键不在于重绘范围越大越好,而在于根据不同区域的纹理特征和结构约束,分别控制蒙版范围、重绘幅度和辅助模型。本文会在 Stable Diffusion WebUI 的 img2img 局部重绘流程中,拆解手部、面部、背景三类区域的分区修复策略,并给出可直接落地的参数组合。

一、先厘清局部重绘的核心参数与分区修复原则
局部重绘位于图生图标签页,核心参数包括蒙版模糊、蒙版模式、重绘区域、全分辨率重绘和重绘幅度。这些参数并不是固定值,需要根据修复区域的大小和结构复杂度调整。蒙版模糊决定蒙版边缘过渡的柔和程度,数值越大边缘越羽化,适合大范围背景修复;数值越小边缘越锐利,适合面部和手部这些需要保留清晰轮廓的区域。重绘幅度决定模型对蒙版内图像的重画程度,数值越高变化越大,但过高容易丢失原始结构。
分区修复的基本顺序是先修结构性强、细节要求高的区域,再处理大范围纹理。面部优于手部,手部优于背景。因为面部和手部如果先被背景重绘破坏,后面还需要再修一次。蒙版绘制时,面部区域应尽量贴合五官轮廓,只圈住需要修改的部分;手部区域要包含完整手掌甚至手腕,保留足够的上下文;背景区域则可以适当扩大,甚至覆盖部分相邻物体,让模型获得更多环境参考。
全分辨率重绘对于小区域修复非常关键。开启后模型会以原始分辨率重绘蒙版区域再缩放回去,能明显减少模糊和细节丢失。对于面部和手部建议开启;背景大面积重绘若显存不足可以关闭,转而使用较高的采样步数弥补。填充模式方面,建议使用原图填充而不是潜空间噪声,尤其是手部和面部修复,原图填充能保留更多原始色彩和明暗关系。
二、手部修复:结合深度约束和手部模型降低手指变形
手指数量错误、关节粘连、握持物体时穿透,是手部修复的主要难点。单纯提高重绘幅度,模型对手部结构的理解并不会提升,反而可能生成更怪异的姿态。手部修复的第一步是缩小蒙版范围,只覆盖手部及周边少量区域,避免模型重新绘制手臂和衣物。蒙版模糊建议设置在4到8之间,让边缘有适度过渡。重绘幅度控制在0.5到0.65,既能修复纹理,又不会完全破坏手势。
如果手部结构本身有严重问题,比如手指数量不对或方向错误,建议在局部重绘中挂载 ControlNet 的深度模型或手部姿态模型。ControlNet 的 depth 模块可以约束手部的大致轮廓,openpose_hand 模块则能显式给出关键点信息,适合手指姿态明确的画面。下面这段 Python 代码演示了通过 WebUI API 发起带深度 ControlNet 的局部重绘请求,主要参数包括 inpaint_full_res、denoising_strength 和 ControlNet 的 model 名称。
import requests
import base64
url = "http://127.0.0.1:7860/sdapi/v1/img2img"
# 读取原图并编码
with open("input.png", "rb") as f:
img_b64 = base64.b64encode(f.read()).decode("utf-8")
# 读取蒙版,白色为需要重绘区域
with open("mask.png", "rb") as f:
mask_b64 = base64.b64encode(f.read()).decode("utf-8")
payload = {
"init_images": [img_b64],
"mask": mask_b64,
"inpainting_fill": 1, # 原图填充
"inpaint_full_res": True, # 全分辨率重绘
"inpaint_full_res_padding": 32,
"denoising_strength": 0.55,
"steps": 30,
"cfg_scale": 7,
"width": 512,
"height": 768,
"sampler_index": "DPM++ 2M Karras",
"alwayson_scripts": {
"controlnet": {
"args": [
{
"input_image": mask_b64,
"module": "depth",
"model": "control_v11f1p_sd15_depth",
"weight": 0.6,
"resize_mode": "Crop and Resize",
"low_vram": False
}
]
}
}
}
r = requests.post(url, json=payload)
print(r.status_code)
实际 WebUI 界面操作时,可以先在局部重绘上传原图,用画笔把手部区域涂成白色蒙版,然后在 ControlNet 下拉面板中启用深度图,控制权重建议从0.5到0.7起步。如果手部依然出现六指或关节粘连,再降回 img2img 原始图,使用手部修复 LoRA 重跑一次,负面提示词中加入 extra fingers、fused fingers、bad hands 等强化约束。手部修复通常需要多轮迭代,每次只改一个小问题,不要试图一次全部重画。
三、面部修复:用 ADetailer 自动检测配合手动蒙版修正
面部修复与手部不同,五官位置和相似度对整体观感影响极大,手动蒙版很难准确覆盖眼睛、鼻子、嘴巴各自的问题区域。ADetailer 扩展利用人脸检测模型自动定位脸部,并在检测框内单独重绘,重绘幅度通常只需0.3到0.45。模型可以选择 face_yolov8n.pt 或 face_yolov8s.pt,前者速度快,后者检测更稳。ADetailer 的优势在于自动贴合脸部轮廓,避免手动蒙版边缘过硬导致的肤色断层。
如果 ADetailer 重绘后仍然存在五官局部瑕疵,比如一只眼睛无神或嘴巴歪斜,再用手动局部重绘进行二次修补。此时蒙版只需覆盖单个五官,蒙版模糊设为2到4,重绘幅度0.35左右。开启全分辨率重绘,填充模式选择原图填充,采样步数20到25,CFG 值7。这样可以在尽量不改变其他五官的前提下修正局部。注意手动修补面部时不要同时修复多个五官,否则容易出现五官不协调。
当面部角度较大或有遮挡物时,ADetailer 可能检测不到人脸,可以切换到手动局部重绘并联用 ControlNet 线稿或深度模型。线稿模型能固定五官的位置关系,深度模型适合侧面轮廓。面部重绘的负面提示词建议加入 blurry face、deformed face、asymmetric eyes 等。完成面部修复后再进行背景和手部的处理,避免面部被后续重绘干扰。
四、背景修复:大范围蒙版与低幅度重绘保持环境一致性
背景伪影、纹理重复、物体边缘错位,通常由大范围重绘幅度过高或蒙版边界不当引起。背景修复不需要保留清晰轮廓,反而需要更高的蒙版模糊来让重绘区域与周围环境平滑过渡。蒙版模糊可以设置在8到16,重绘幅度0.6到0.75,采样步数25到35。填充模式推荐原图填充,避免潜空间噪声引入不协调的纹理。
如果背景中存在明显物体,如建筑、家具、植物等,蒙版应适当覆盖整个物体及其阴影区域,而不是只圈住异常部分。只圈局部会导致模型生成的新纹理与旧纹理在物体内部产生接缝。对于大范围背景修复,可以关闭全分辨率重绘以降低显存占用,或使用默认的重绘分辨率。提示词中补充背景描述,比如 intricate wallpaper、wooden floor、soft lighting 等,帮助模型理解环境。
下表汇总了手部、面部、背景三类区域在局部重绘中的推荐参数范围,便于快速设置。
| 区域 | 蒙版模糊 | 重绘幅度 | 全分辨率重绘 | 辅助控制 |
|---|---|---|---|---|
| 手部 | 4-8 | 0.5-0.65 | 开启 | ControlNet 深度/姿态 |
| 面部 | 2-4 | 0.3-0.45 | 开启 | ADetailer/线稿 |
| 背景 | 8-16 | 0.6-0.75 | 可选关闭 | 原图填充/提示词约束 |
背景修复完成后,建议回到整体画面上检查边缘过渡,尤其是重绘区域与未重绘区域的交界处。如果出现明显色差,可以降低蒙版模糊后重新小范围重绘边缘,或者使用轻微的全图重绘统一色调。分区修复不是一次性流程,而是先修面部、再修手部、最后修背景的顺序叠加,每一步都只解决一类问题,最终才能稳定输出高质量画面。