跳到主要内容
Stable Diffusion 老照片修复实战与避坑指南 | 极客日志
Python AI 算法
Stable Diffusion 老照片修复实战与避坑指南 介绍如何使用 Stable Diffusion 进行老照片修复。涵盖环境安装、Inpainting 与 ControlNet 原理、模型选择、掩码绘制、Prompt 编写及参数设置。包含去霉补边角、去水印、电商图加配件三个实战案例,并提供 Python 批量处理脚本及显存优化方案。最后总结常见翻车原因及避坑清单,帮助用户低成本本地化完成图像修复任务。
云间运维 发布于 2026/4/6 更新于 2026/5/22 24 浏览Stable Diffusion 老照片修复实战与避坑指南
先别急着扔!那几张发霉的老照片还能救
前阵子用户翻箱倒柜找出一张 1983 年的结婚照,边角霉得厉害。拍照发到群里,有人建议 AI 修复。虽然环境配置耗时,但折腾后效果显著。成本几乎为零,还顺手修复了破损细节。
如果你也有:
手机拍糊的证件照
游戏截图缺一块 UI
电商产品图背景脏到像锅底
那就继续往下看。我会把'踩过的坑 + 可操作方案'打包给你,全程说人话。
为啥偏偏选 Stable Diffusion?免费、开源、还能本地跑
Photoshop 的「内容识别填充」虽好,但有局限:
正版要钱,盗版有风险。
复杂纹理直接糊成油画,手一抖就穿帮。
SD(Stable Diffusion)的优势:
'它懂画面逻辑,而不是单纯糊一块。'
比如衣服破了个洞,它会看褶皱走向、光照方向,甚至能猜出你里面穿的是格子衬衫还是秋衣。
再直白点:
开源 = 不要钱
本地跑 = 隐私安全
插件多 = 功能扩展性强
先整明白它靠啥吃饭:Inpainting + ControlNet + Prompt
别被黑话吓住,翻译成大白话就是:
Inpainting:告诉 AI'只改这块',别全图放飞。
ControlNet:给 AI 一张'骨架图',让它照猫画虎,别自由发挥。
Prompt:用中文 + 英文混操,告诉 AI 要补成啥样。
三者关系:
Inpainting 是手术刀,ControlNet 是 X 光,Prompt 是麻醉师,缺一个都能把病人(原图)整没了。
安装:30 分钟一条龙
1. 一键包 or 纯手动?
想 30 分钟搞定:直接用 AUTOMATIC1111 WebUI 一键包 ,国内清华源拉代码飞快。
想折腾:自己配 Python 3.10 + CUDA 11.8 + xformers,踩坑套餐。
以下教程默认你选'一键包'。
2. 具体步骤(Win 版)
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
cd stable-diffusion-webui
setHF_ENDPOINT=https://hf-mirror.com
3. 显存警告
4G 显卡:加 --medvram --opt-split-attention 参数,能跑但补大图会糊。
6G:流畅跑 512×512,再大得开 --lowvram。
8G 以上:土豪您随意,直接 2K 图起步。
在 webui-user.bat 里改一行就行:
set COMMANDLINE_ARGS=--medvram --opt-split-attention
模型选错 = 好锅配烂盖 SD 官方模型叫 sd_xl_base_1.0,但修图千万要用 inpainting 专用模型 ,否则补出来的区域跟原图色差大到像拼夕夕买家秀。
sd_xl_inpainting_1.0(官方)
RealisticVisionV51_inpainting(真人写实)
AnythingV5_inpainting(二次元)
下载完扔 models/Stable-diffusion 文件夹,重启 WebUI,左上角模型下拉框就能切。
掩码:别手抖,边缘羽化 5 像素保平安
画太硬:接缝明显,像贴狗皮膏药。
画太软:AI 把隔壁好皮肤也掀了。
WebUI 里点「Inpaint」→ 用笔刷把破损区涂满。
右上角 Mask blur 给 5~8 像素,让边缘羽化。
只勾「Inpaint masked」→ 只动涂黑的地方,保平安。
懒人加速 :
用 Photoshop 魔棒选区 → 羽化 5px → 填充黑色 → 存成 png 蒙版 → WebUI 里「Upload mask」一步到位。
Prompt 到底怎么写?抄模板改关键词就行 别一上来就「a lovely girl with beautiful eyes」——老照片里是我爷,不是二次元老婆!
same style, vintage photograph, 1980s, male, short hair, wearing white shirt, solid color background, high resolution, natural color, no watermark
lowres, blurry, extra limbs, cartoon, anime, watermark, text, frame, duplicate, glitch
先写「same style」锁定画风,再补对象、年代、服装、背景。
负向一定要加「text、watermark」,否则 AI 给你生成一串假中文,像鬼画符。
参数面板:别乱动,这 4 个够用 参数 建议值 说明 Sampling method DPM++ 2M Karras 速度快、质量高 Steps 30~40 步数再高压感提升有限 CFG Scale 7~9 数字越大 AI 越听 prompt,过高会卡死 Denoising strength 0.3~0.6 0.3 轻微修复,0.6 大开大合,>0.7 原图基本没了
实战 1:老照片去霉 + 补边角
Step 1 高清化(可选但强烈建议) 用 SwinIR_4x 先超分到 2048×3072,再修,细节多一堆。
WebUI 里点「Extras」→ 选 SwinIR → Scale 4 → 10 秒搞定。
Step 2 画掩码 把霉斑 + 缺角一起涂了,Mask blur 6。
Step 3 写 Prompt same style, vintage photograph, 1980s, young man, short black hair, wearing dark suit, collar shirt, plain background, film grain, natural color Negative: lowres, blurry, extra limbs, cartoon, text, watermark
Step 4 参数
Model: RealisticVisionV51_inpainting
Denoising: 0.4
Size: 1024×1536(锁定比例)
Step 5 出图 第一次出来领口颜色偏蓝,把 Prompt 里加「olive green tie」再跑 2 次,完事儿。
对比图(文字描述,省流):
霉斑全消,缺角脑补出西装下摆,连底片颗粒都给你还原,用户直接泪目。
实战 2:手机截图去水印
核心思路 水印大多在纯色/渐变区,AI 补纹理压力小,但千万别带文字 !
SD 对文字是智障,补出来永远是「伪中文」,像「木又 氵去」这种。
操作
Photoshop 里矩形选区 → 羽化 3px → 填充黑。
Prompt 只写背景:
plain gray gradient background, smooth, same color, no text
Denoising 0.35,低强度防止把旁边字也抹了。
结果 水印没了,背景颜色过渡自然,不放大 200% 根本看不出。
实战 3:电商产品图'无中生有'加配件 背景:客户发来耳机图,少一只耳塞套,平台审核不过。
骚操作
用「Content-Aware」先补个大概形状,降低 AI 脑补难度。
ControlNet 开 Canny,把耳机边缘锁死,防止 AI 多画一条线。
Prompt:
white silicone earbud tip, matte texture, same lighting, clean background
Denoising 0.45,重绘 3 次选最稳那张。
客户反馈 '这比重新拍省事多了,下次还找你。'
我:其实我就点了三次鼠标,咖啡都没凉。
翻车现场:多长一只手怎么办?
看显存:低于 4G 时把图缩到 512×512 再重绘,显存爆了就放飞。
看模型:通用模型手画得烂,换回 inpainting 专用。
看掩码:是不是把隔壁手臂也涂进去了?局部重绘别贪心。
进阶 :用 latent couple 插件,把'手'单独切块写 Prompt:
hand, five fingers, natural proportion
批量脚本:Python 一键跑 100 张 婚礼跟拍 1000 张图,张张边角霉?手点会抽筋。
import requests
import base64
import os
URL = "http://127.0.0.1:7860"
INPUT_DIR = "d:/old_photos"
MASK_DIR = "d:/masks"
SAVE_DIR = "d:/fixed"
os.makedirs(SAVE_DIR, exist_ok=True )
for img_name in os.listdir(INPUT_DIR):
with open (os.path.join(INPUT_DIR, img_name), "rb" ) as f:
img_b64 = base64.b64encode(f.read()).decode()
mask_path = os.path.join(MASK_DIR, img_name)
if not os.path.exists(mask_path):
continue
with open (mask_path, "rb" ) as f:
mask_b64 = base64.b64encode(f.read()).decode()
payload = {
"init_images" : [img_b64],
"mask" : mask_b64,
"inpainting_fill" : 1 ,
"inpaint_full_res" : True ,
"prompt" : "same style, vintage photograph, natural color, film grain" ,
"negative_prompt" : "lowres, blurry, text, watermark" ,
"steps" : 35 ,
"cfg_scale" : 7 ,
"denoising_strength" : 0.4 ,
"width" : 1024 ,
"height" : 1536 ,
"sampler_index" : "DPM++ 2M Karras"
}
response = requests.post(f"{URL} /sdapi/v1/img2img" , json=payload).json()
result_b64 = response["images" ][0 ].split("," , 1 )[0 ]
with open (os.path.join(SAVE_DIR, img_name), "wb" ) as f:
f.write(base64.b64decode(result_b64))
print (f"✅ {img_name} 完成" )
跑起来后去休息一会儿,回来 100 张齐活,再挑 5 张翻车手工二次微调,效率×10。
显存省着花:–medvram 还不够?
开 xformers:在 webui-user.bat 再加一句 --xformers,显存立减 20%。
关高清预览:Settings → Live previews → None,省 500M。
用 sd-webui-compressed-textual-inversion 插件,把 Embedding 压成 8bit,再省 300M。
实测 6G 卡跑 1024×1024 不闪退,就是生成时间从 30s 涨到 50s,能接受。
终极避坑清单(背下来能救命)
原图先备份!SD 出图直接覆盖,手滑哭都来不及。
别在原图尺寸>2000 时直接 inpaint,先缩 50%,再重绘,完事回 Photoshop 拼回去,显存稳稳的。
Prompt 里写「film grain」却忘加「same style」,AI 直接给你磨皮成塑料人。
多人合影只修一个人?用 Regional Prompter 切块,不然 AI 把隔壁二舅也整容。
文字、对称花纹、手指——目前 SD 的智障三区,能手工就别全指望 AI。
总结 Stable Diffusion 不是万能膏药,但**'免费 + 本地 + 效果 80 分'**这三板斧,足够让普通家庭用户、小电商、甚至影楼学徒省下一大笔银子。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online