小白也能上手:用Stable Diffusion搞定老照片修复(附避坑指南)

小白也能上手:用Stable Diffusion搞定老照片修复(附避坑指南)

小白也能上手:用Stable Diffusion搞定老照片修复(附避坑指南)

小白也能上手:用Stable Diffusion搞定老照片修复(附避坑指南)

友情提示:本文 1.2 万字,代码 30+ 段,阅读时建议左手奶茶右手 GPU,显卡低于 8G 的童鞋先点个外卖,显存和肚子一起满上。

先别急着扔!那几张发霉的老照片还能救

前阵子我奶翻箱倒柜找出一张 1983 年的结婚照,边角霉得跟蘑菇培养皿似的。我拍照发到群里,本来只想卖个惨,结果底下一水儿“AI 修复啊,三分钟搞定”。
我当场翻白眼:三分钟?我装环境就装了三小时!
但骂归骂,真香定律谁也逃不掉。折腾一晚上后,照片居然——能——看——了!我奶以为我偷偷拿去影楼花 500 块,其实成本 0 元,电费 0.3 元,还顺手给爷 P 了条新领带(他原本领带被虫蛀没了)。

如果你也有:

  • 手机拍糊的证件照
  • 游戏截图缺一块 UI
  • 电商产品图背景脏到像锅底

那就继续往下看。我会把“我踩过的坑 + 我奶都能看懂的操作”打包给你,保证不整那些“open the terminal and type…”的鸟语,全程说人话。


为啥偏偏选 Stable Diffusion?免费、开源、还能本地跑

Photoshop 的「内容识别填充」不香吗?香,但:

  1. 正版要钱,盗版得先学会装系统。
  2. 复杂纹理直接糊成油画,手一抖就穿帮。

SD(Stable Diffusion 简称,后文都这么叫)的优势一句话:
“它懂画面逻辑,而不是单纯糊一块。”
比如衣服破了个洞,它会看褶皱走向、光照方向,甚至能猜出你里面穿的是格子衬衫还是秋衣。

再直白点:

  • 开源 = 不要钱
  • 本地跑 = 不怕照片传网上被人拿去训练“网红脸”
  • 插件多到像 360 全家桶,但都能卸载,不耍流氓

先整明白它靠啥吃饭:Inpainting + ControlNet + Prompt

别被黑话吓住,翻译成大白话就是:

  1. Inpainting:告诉 AI“只改这块”,别全图放飞。
  2. ControlNet:给 AI 一张“骨架图”,让它照猫画虎,别自由发挥。
  3. Prompt:用中文 + 英文混操,告诉 AI 要补成啥样,别补个三头六臂。

三者关系像:
Inpainting 是手术刀,ControlNet 是 X 光,Prompt 是麻醉师,缺一个都能把病人(原图)整没了。


安装:30 分钟一条龙,中间还能刷两条抖音

1. 一键包 or 纯手动?

  • 想 30 分钟搞定:直接用 AUTOMATIC1111 WebUI 一键包,国内清华源拉代码飞快。
  • 想折腾:自己配 Python 3.10 + CUDA 11.8 + xformers,踩坑套餐,送白头发三根。

以下教程默认你选“一键包”,懒人光荣。

2. 具体步骤(Win 版,Mac 见文末彩蛋)

# 1. 先装 Git,官网下或者 scoop install git# 2. 找个磁盘剩余 30G+ 的地方,右键 Git Bash Heregit clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git cd stable-diffusion-webui # 3. 国内选手加代理,不然模型下到地老天荒setHF_ENDPOINT=https://hf-mirror.com # 4. 双击 webui-user.bat,喝杯奶茶,脚本会自动拉依赖# 5. 看到 http://127.0.0.1:7860 就搞定

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 专用模型,否则补出来的区域跟原图色差大到像拼夕夕买家秀。

推荐三连:

  1. sd_xl_inpainting_1.0(官方)
  2. RealisticVisionV51_inpainting(真人写实)
  3. AnythingV5_inpainting(二次元)

下载完扔 models/Stable-diffusion 文件夹,重启 WebUI,左上角模型下拉框就能切。


掩码:别手抖,边缘羽化 5 像素保平安

掩码 = 告诉 AI 哪块要重绘。

  • 画太硬:接缝明显,像贴狗皮膏药。
  • 画太软:AI 把隔壁好皮肤也掀了。

最佳实践:

  1. WebUI 里点「Inpaint」→ 用笔刷把破损区涂满。
  2. 右上角 Mask blur 给 5~8 像素,让边缘羽化。
  3. 只勾「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 

负向模板(告诉 AI 别干啥):

lowres, blurry, extra limbs, cartoon, anime, watermark, text, frame, duplicate, glitch 

口诀

  • 先写「same style」锁定画风,再补对象、年代、服装、背景。
  • 负向一定要加「text、watermark」,否则 AI 给你生成一串假中文,像鬼画符。

参数面板:别乱动,这 4 个够用

参数建议值说明
Sampling methodDPM++ 2M Karras速度快、质量高
Steps30~40步数再高压感提升有限
CFG Scale7~9数字越大 AI 越听 prompt,过高会卡死
Denoising strength0.3~0.60.3 轻微修复,0.6 大开大合,>0.7 原图基本没了

实战 1:老照片去霉 + 补边角

原图 512×768,边角缺一块,霉斑像地图。

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 对文字是智障,补出来永远是「伪中文」,像「木又 氵去」这种。

操作

  1. Photoshop 里矩形选区 → 羽化 3px → 填充黑。
  2. Prompt 只写背景:
plain gray gradient background, smooth, same color, no text 
  1. Denoising 0.35,低强度防止把旁边字也抹了。

结果

水印没了,背景颜色过渡自然,不放大 200% 根本看不出。


实战 3:电商产品图“无中生有”加配件

背景:客户发来耳机图,少一只耳塞套,平台审核不过。

骚操作

  1. 用「Content-Aware」先补个大概形状,降低 AI 脑补难度。
  2. ControlNet 开 Canny,把耳机边缘锁死,防止 AI 多画一条线。
  3. Prompt:
white silicone earbud tip, matte texture, same lighting, clean background 
  1. Denoising 0.45,重绘 3 次选最稳那张。

客户反馈

“这比重新拍省事多了,下次还找你。”
我:其实我就点了三次鼠标,咖啡都没凉。


翻车现场:多长一只手怎么办?

症状:AI 把肩膀补成第三条胳膊,还是反关节。

排错三板斧

  1. 看显存:低于 4G 时把图缩到 512×512 再重绘,显存爆了就放飞。
  2. 看模型:通用模型手画得烂,换回 inpainting 专用。
  3. 看掩码:是不是把隔壁手臂也涂进去了?局部重绘别贪心。

进阶:用 latent couple 插件,把“手”单独切块写 Prompt:

hand, five fingers, natural proportion 

再合并,基本稳。


批量脚本:Python 一键跑 100 张

婚礼跟拍 1000 张图,张张边角霉?手点会抽筋。

# pip install requestsimport 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):# 读取原图并转 base64withopen(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)ifnot os.path.exists(mask_path):continuewithopen(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]withopen(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,能接受。


终极避坑清单(背下来能救命)

  1. 原图先备份!SD 出图直接覆盖,手滑哭都来不及。
  2. 别在原图尺寸>2000 时直接 inpaint,先缩 50%,再重绘,完事回 Photoshop 拼回去,显存稳稳的。
  3. Prompt 里写「film grain」却忘加「same style」,AI 直接给你磨皮成塑料人。
  4. 多人合影只修一个人?用 Regional Prompter 切块,不然 AI 把隔壁二舅也整容。
  5. 文字、对称花纹、手指——目前 SD 的智障三区,能手工就别全指望 AI。

写到这儿,显卡也快冒烟了

Stable Diffusion 不是万能膏药,但**“免费 + 本地 + 效果 80 分”**这三板斧,足够让普通家庭用户、小电商、甚至影楼学徒省下一大笔银子。

下次谁再跟你说“AI 修图是智商税”,把这篇文章甩过去,并附赠一句:
“兄弟,不是工具拉胯,是你没看说明书。”

我去给显卡喂点冰可乐,你趁热把旧照片翻出来练练。
要是还翻车,群里 @ 我,一起吐槽——反正夜还长,显存还热,咱们慢慢整。

在这里插入图片描述

Read more

在 OpenClaw 中安装 baidu-web-search skill(百度网页搜索技能)

在 OpenClaw 中安装 baidu-web-search skill(百度网页搜索技能),最推荐用 ClawHub CLI 一键安装,再配置百度千帆 API Key 即可使用。 一、前置准备 1. 安装 Node.js(v20+)与 npm/pnpm 验证安装 clawhub --version 全局安装 ClawHub CLI(OpenClaw 官方技能管理器) npminstall-g clawhub # 或国内加速pnpmadd-g clawhub 二、一键安装百度搜索技能 # 安装 baidu-search(百度网页搜索) clawhub install baidu-search --no-input * 安装路径:~/.openclaw/workspace/skills/baidu-search/

javascript能又干后端又干前端吗

javascript能又干后端又干前端吗

想知道 JavaScript 是否能同时胜任前端和后端开发工作,答案是完全可以——JavaScript 是少数能 “通吃” 前后端的语言,前端是它的原生主场,后端则通过 Node.js 实现,这也是 “全栈 JavaScript 开发” 的核心基础。我会从 “能做什么”“怎么做”“优势 / 注意事项” 三个维度讲清楚,帮你理解这种开发模式的实际应用 ym.miaoshou.net/hospital/528.html。 一、为什么 JavaScript 能同时做前后端? 1. 前端:JavaScript 的原生领域 浏览器是 JavaScript 的 “发源地”,它是前端开发的唯一核心语言,负责: * 操作 DOM(页面元素增删改查、交互效果); * 处理前端逻辑(

基于 Spring Boot 的 Web 三大核心交互案例精讲

基于 Spring Boot 的 Web 三大核心交互案例精讲

—知识点专栏——JavaEE专栏— 作为 Spring Boot 初学者,理解后端接口的编写和前端页面的交互至关重要。本文将通过三个经典的 Web 案例——表单提交、AJAX 登录与状态管理、以及 JSON 数据交互——带您掌握前后端联调的核心技巧和 Spring Boot 的关键注解。 1. 案例一:表单提交与参数绑定(计算求和) 本案例展示最基础、最传统的 Web 交互方式:HTML 表单提交。 1.1 后端代码:CalcController.java 使用 @RestController 简化接口编写,并通过方法参数接收表单数据。 packagecn.overthinker.springboot;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.

当 AI 开始「剧透」功能创意:初级开发者的反压制生存手册 —— 老码农的 Debug 式开导

当 AI 开始「剧透」功能创意:初级开发者的反压制生存手册 —— 老码农的 Debug 式开导

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 * 当 AI 开始「剧透」功能创意:初级开发者的反压制生存手册 —— 老码农的 Debug 式开导 * 📚 一、先别急着 Ctrl+C 焦虑:AI 的「创意」本质是啥? * 📘 1.1 AI 的功能模块生成:本质是「数据拟合」而非「创造」 * 📘 1.2 初级开发者的创意优势:带着「人类 bug」的独特性 * 📚 二、为什么你的创意会被「压制」?可能是参数没调对 * 📘 2.1