ERNIE-Image Inpainting + Outpainting 完整指南:局部重绘与画面扩展实战
从瑕疵修复到画面扩展,ERNIE-Image 的 Inpainting 和 Outpainting 能力让你的每一张图片都能二次创作。无论是电商产品图精修、人像背景替换,还是摄影作品的画幅扩展,本文手把手教你掌握这些核心编辑能力。
一、Inpainting vs Outpainting:核心概念
| 能力 | 定义 | 核心场景 |
|---|---|---|
| Inpainting(局部重绘) | 对图像内部指定区域进行重新生成 | 瑕疵修复、物体移除/添加、风格调整 |
| Outpainting(画面扩展) | 在图像边界外扩展现有画面 | 画幅扩展、背景延伸、构图调整 |
技术原理
两者都基于掩码引导的扩散模型(Mask-guided Diffusion):
原图 + Mask(掩码)
↓
VAEEncode → Latent Space
↓
Mask 区域注入噪声
↓
KSampler + Prompt → 生成 Mask 区域
↓
VAEDecode → 输出修复/扩展图
关键区别:Inpainting 的 Mask 在图像内部,Outpainting 的 Mask 在图像边界外。
二、Inpainting 实战:5 个核心场景
场景 1:瑕疵修复
操作:Mask 选中瑕疵区域(如皮肤瑕疵、产品划痕),Prompt 描述理想状态。
Prompt 模板:
{原图描述},
clean skin, smooth texture, professional retouching,
high quality, detailed, natural lighting
典型用例:人像皮肤磨皮、产品表面瑕疵修复、照片污点清理。
场景 2:物体移除
操作:Mask 选中要移除的物体(如路人、电线杆、水印),Prompt 描述背景延续。
Prompt 模板:
{背景描述},
clean background, natural, seamless,
background continuation, no extra objects
技巧:Mask 范围要略大于目标物体,给模型留出"呼吸空间"。
场景 3:物体添加
操作:Mask 选中添加位置,Prompt 描述要添加的物体。
Prompt 模板:
{原图描述},
{要添加的物体},
integrated naturally, consistent lighting, matching style,
professional composition
技巧:添加的物体与原图风格越接近,融合效果越好。
场景 4:风格替换
操作:Mask 选中要改变风格的区域,Prompt 描述新风格。
Prompt 模板:
{原图描述},
{目标风格:watercolor painting / oil painting / anime style},
artistic, creative, detailed
场景 5:文字修正
操作:Mask 选中需要修改的文字区域,Prompt 描述正确文字。
重要:关闭 PE(Prompt Enhancer),因为 PE 可能改写你指定的文字内容。
三、Outpainting 实战:3 个核心场景
场景 1:画幅扩展(16:9 → 21:9 超宽银幕)
操作:在左右两侧扩展,Prompt 描述场景延续。
Prompt 模板:
{原图描述},
wide angle, panoramic view,
continuous background, cinematic composition,
extended scene, ultra wide shot
典型用例:照片转电影宽屏、桌面壁纸扩展、社交媒体封面适配。
场景 2:背景延伸(全身照补全)
操作:在底部/顶部扩展,补充环境。
Prompt 模板:
{原图描述},
extended {environment},
full body shot, ground visible, natural surroundings,
professional photography, consistent lighting
典型用例:半身照→全身照、产品图补全背景。
场景 3:多方向扩展
操作:先扩左/右,再扩上/下,分步进行。
技巧:每次扩展不超过 30%,分步扩展质量更稳定。
四、ComfyUI Inpainting 完整工作流
节点连接
[Load Checkpoint] → ERNIE-Image 8B
↓
[LoadImage] → 原图
↓
[ImageToMask] → 生成 Mask(或手动绘制)
↓
[VAEEncode] → Latent
↓
[LatentComposite] → Mask + Prompt
↓
[KSampler] → inpaint steps
↓
[VAEDecode] → 输出修复图
↓
[SaveImage] → 保存结果
关键参数调优表
| 参数 | 推荐值 | 说明 |
|---|---|---|
| Inpaint Steps | 20-30 | Turbo 模式 8-12 |
| CFG Scale | 5.0-8.0 | 提示词引导强度 |
| Mask Strength | 0.8-1.0 | 修复强度(越高越激进) |
| Denoise | 0.5-0.8 | 重绘程度(越低越保守) |
| Mask Blur | 4-8 | 边缘模糊(平滑过渡) |
| Scheduler | Euler / DPM++ | Euler 速度快,DPM++ 质量高 |
Turbo 模式参数
| 参数 | Turbo 值 | 标准值 |
|---|---|---|
| Steps | 8-12 | 20-30 |
| CFG | 4.0-6.0 | 5.0-8.0 |
| 生成速度 | ~2秒/图 | ~15秒/图 |
五、ComfyUI Outpainting 工作流
节点连接
[LoadImage] → 原图
↓
[ImageScaleByFactor] → 缩放到目标尺寸(可选)
↓
[ImagePadForOutpainting] → 填充空白区域
↓
[ImageToMask] → 生成 Outpainting Mask
↓
[VAEEncode] → Latent
↓
[KSampler] → outpainting steps
↓
[VAEDecode] → 输出扩展图
↓
[SaveImage] → 保存结果
关键参数
| 参数 | 推荐值 | 说明 |
|---|---|---|
| Expand Amount | 50%-100% | 扩展比例(建议 ≤50%) |
| Steps | 20-30 | 生成步数 |
| CFG | 5.0-7.0 | 引导强度 |
| Denoise | 0.6-0.8 | 创新程度 |
| Fallback Pixels | 8-16 | 边缘重叠像素 |
六、实战案例详解
案例 1:电商产品图背景替换
原始:白底产品图(标准电商图)
Inpainting 流程:
- Mask 选中产品主体(反向 Mask)
- Prompt:
product on wooden table, warm natural lighting, lifestyle scene, shallow depth of field, professional product photography - Denoise: 0.7, Mask Blur: 6
- 输出:产品生活场景图,可直接用于社交媒体
价值:无需拍摄,一张白底图生成 10 种场景背景。
案例 2:人像照片全身扩展
原始:4:3 半身人像
Outpainting 流程:
- 底部扩展 50%
- Prompt:
full body portrait, standing in garden, natural sunlight, flowers, professional photography, full body shot, elegant pose - Denoise: 0.6, Steps: 25
- 输出:全身人像,背景自然延伸
案例 3:照片瑕疵修复(水印/路人移除)
原始:风景照片上有路人/水印
Inpainting 流程:
- Mask 精确选中目标区域
- Prompt:
clean landscape, no people, natural scenery, clear sky, professional photography - Denoise: 0.5, Mask Strength: 0.9
- 输出:干净无瑕疵的风景照
七、Diffusers API 调用代码
Inpainting
from diffusers import ErnieImageInpaintPipeline
import torch
pipe = ErnieImageInpaintPipeline.from_pretrained(
"baidu/ERNIE-Image", torch_dtype=torch.float16
)
pipe = pipe.to("cuda")
result = pipe(
prompt="clean, professional, high quality",
image=original_image,
mask_image=mask_image,
num_inference_steps=25,
strength=0.75,
guidance_scale=6.0
)
Outpainting
from diffusers import ErnieImagePipeline
pipe = ErnieImagePipeline.from_pretrained(
"baidu/ERNIE-Image-Turbo", torch_dtype=torch.float16
)
pipe = pipe.to("cuda")
result = pipe(
prompt="extended background, panoramic, seamless",
image=padded_image,
mask_image=outpaint_mask,
num_inference_steps=8, # Turbo mode
guidance_scale=5.0
)
八、常见问题与解决方案
Q1:修复区域与原图不融合
症状:修复区域有明显的边界线或颜色不匹配。
解决方案:
- 提高 Mask Blur(8-12),让过渡更平滑
- 降低 Denoise(0.3-0.5),减少改动幅度
- 缩小 Mask 范围,只覆盖需要修改的区域
- 在 Prompt 中加入
seamless, natural transition, matching colors
Q2:扩展区域风格不一致
症状:扩展部分与原图风格、色调差异明显。
解决方案:
- 详细描述原图 Prompt,给模型足够上下文
- 降低 Denoise(0.5-0.6),保持原风格
- 分步扩展(每次扩展 20%-30%,而非一次 100%)
- 使用 Turbo 模式时增加 CFG(6.0-7.0)
Q3:Mask 边缘出现黑线或白边
症状:修复/扩展区域边缘有异常线条。
解决方案:
- 使用高斯模糊 Mask(Mask Blur: 4-8)
- 在 Prompt 中加入
seamless, no borders, natural edges - 降低 Inpaint Strength(0.7-0.8)
- 确保 Mask 与原图分辨率一致
Q4:文字渲染不准确
解决方案:
- 关闭 PE(最重要!)
- 使用标准模式(非 Turbo),50 步推理
- 精确描述文字内容,用引号标注
- 参考 ERNIE-Image 文字渲染专题文章
九、总结:何时使用 Inpainting vs Outpainting
| 需求 | 推荐方式 | 关键参数 |
|---|---|---|
| 移除路人/水印 | Inpainting | Denoise 0.5, Mask Blur 6 |
| 背景替换 | Inpainting | Denoise 0.7, CFG 6.0 |
| 添加物体 | Inpainting | Denoise 0.8, CFG 7.0 |
| 画幅扩展 | Outpainting | Expand 30%, Denoise 0.6 |
| 全身补全 | Outpainting | Expand 50%, Steps 25 |
| 风格转换 | Inpainting | Denoise 0.9, CFG 8.0 |
ERNIE-Image 的 Inpainting/Outpainting 核心优势:
- 精准控制:Mask 精确指定修复/扩展区域,像素级精度
- 上下文感知:自动理解画面风格、色调、构图
- 无缝融合:修复区域与原图自然衔接,无明显边界
- 灵活应用:从瑕疵修复到创意扩展,覆盖 90% 图片编辑需求
- Turbo 加速:8 步快速出图,适合批量处理
对于摄影师、设计师、电商运营,这是"二次创作"的核心工具。一张原始素材,通过 Inpainting + Outpainting 可以衍生出数十张变体,大幅降低拍摄成本。
本文工作流基于 ComfyUI + ERNIE-Image 8B。代码示例使用 Diffusers API。