MySkill-PicKit 0.2.0 GitHub
两个 skill 可用 · 全程本地跑

一个能力,一个 skill。
拷走一个目录就能用。

图片处理能力库。说明书、代码、单测、真实素材装在同一个目录里。 不装框架、不跑构建、不注册账号,也不用先把整库装一遍。

2个
已收录 skill
抠图标 · 去水印
2组
真实素材入库
勋章墙 · 证件照
8条
单元测试
每个能力都带判据
0次
联网调用
不传图 · 不调模型

两个能力

01

共同点不是「都能处理图片」,而是都能被一条命令重跑 —— 同一份素材、同样的参数,今天和明年出一样的结果。产物不入库,因为它能重建。

matte-cut 自 v0.1.0 纯色底截图 → 透明图标

把纯色背景截图里等距排列的图标、徽章、卡片,批量抠成带透明通道的 PNG —— 自动识别网格、统一画布、按图上的文字命名。1017 × 12738 的长截图,一条命令出 93 张。

起因:微信读书 93 枚勋章,一张超长截图里 3 列 31 行。手动抠到手废,而且深色款按颜色一刀切会抠出洞。

什么时候用
  • 成就墙、徽章墙、图标墙、奖杯网格这类纯色底长截图
  • 要能直接排版的透明 PNG,不是抠完还剩一圈灰底的 jpg
  • 文件名要能认出是哪个 —— 按截图里的文字自动命名
为什么不像「选个色再删掉」那么简单
  • 背景从画面边缘往里灌,不按颜色阈值一刀切 —— 被描边围住的深色区才不会被咬出洞
  • 边缘做颜色解混,把混进去的背景色减掉,贴白底不挂一圈灰蓝
  • 张数用 --expect 卡死,少一张直接非零退出
skills/matte-cut
./bin/pickit probe fixtures/weread/badge.png --clusters-dir outputs/_clusters
./bin/pickit cut fixtures/weread/badge.png -o outputs/badges \
  --labels-map fixtures/weread/labels.json --expect 93

不适用:照片 / 渐变 / 复杂场景背景(前提就不是纯色)、元素互相重叠粘连、需要放大超分。 分辨率是硬天花板 —— 原图一个图标 240px,抠出来就是 240px,别指望它变清晰。

remove-watermark 自 v0.2.0 只改水印区,框外 0 像素

去掉图片局部的浅色 / 深色文字水印。命令行自己打印「框外改动 N px」, 非 0 直接失败退出 —— "其他都不要改"不是承诺,是机器检查。

起因:2026-07 一张 899 × 1280 证件照,右下角压着浅灰的「豆包AI生成」。 当时的代码嵌在文档里、参数写死;现在它是一条有验收判据的命令。

三条路,按图的脾气选
  • 阈值法 —— 水印和背景灰度分得开时,probe 定阈值 → remove 修补
  • 手绘 mask —— 阈值法判死时,画一张同尺寸黑白图直接指定要擦哪里
  • AI 擦除 + 回贴 —— 低对比水印压在纹理上时,只把模型改过的那块贴回来,区域外仍取原图
为什么值得用
  • 先判能不能做:probe 判死就直说,并给替代路径,不让你反复调参碰运气
  • 零新依赖:numpy + Pillow 就能跑;装了 OpenCV 自动切到 inpaint 拿更好的纹理
  • 可量化验收:框外逐像素相等,mask 内与干净底图 MAE 下降 ≥50%
skills/remove-watermark
# 先侦察:这张图能不能用阈值法?
./bin/remove-watermark probe 待处理.jpg --preview-dir outputs/_probes

# 能用就一条命令擦掉,ROI 是水印所在的矩形
./bin/remove-watermark remove 待处理.jpg -o outputs/clean.png --roi 0.72,0.87

不适用:铺满全图的多处重复水印(得分多次跑)、要求输出文件与源 JPEG 二进制完全一致 —— 这做不到,请输出 PNG(无损)。

先判断这活能不能干

02

两个 skill 的第一步都不是「处理」,是「判断」。抠图质量的天花板由源图决定, 去水印的成败由水印与背景的灰度关系决定 —— 这两个前提改不了,所以不如写在门口。

matte-cut

  • ✓背景纯色 —— probe 报的覆盖率 > 90%
  • ✓元素之间有干净间隙 —— 粘连的会被当成一块乱切
  • ✓四周留了背景 —— 贴边的会被截断,清单里会给警告
  • ✕覆盖率低于 80% ⇒ 背景有渐变或纹理,先跟用图的人确认

remove-watermark

  • ✓两条判据都过 —— 扫描曲线有「平台」且亮脊占比 ≥ 50%
  • ✓水印底下是低频背景 —— 纯色、渐变、衣服布料
  • ✓水印集中在一小块 —— 一个矩形能框住
  • ✕人脸、草地、密集花纹 ⇒ 修补会糊,这是方法上限,不是参数没调对
判死

判死不是失败,是结论。 probe 说不能用阈值法时会退出码 1,并直接给替代路径(手绘 mask / AI 擦除后回贴), 而不是让你在参数里试到天黑。背景里有和水印同亮度的成片区域时,覆盖率曲线会形成假平台 —— 这也是它为什么要多看一项「选中的到底是不是笔画」。

明确不做

03

写进 PRD 第 5 节,连「什么条件下可以重启」一起写。省得每次有人问「为什么不能」。

超分放大

原图分辨率就是天花板,插值只是变糊。真要更大得用模型,那是另一个能力。

抠照片或渐变背景

前提就是纯色底。复杂背景要分割模型,不是调参能解决的。

OCR 认字

同一张截图里相同文字像素级一致,聚类比 OCR 更准,还零依赖。

自动定位水印

水印与背景的关系每张图都不同,自动判断容易误伤正常内容 —— 所以由人给 ROI 或 mask。

开始用

04

没有「安装本库」这一步 —— 源码即产物,clone 下来就能跑。

① 拿下来,装两个包
git clone \
  https://github.com/xiachangjin/MySkill-PicKit.git
cd MySkill-PicKit
pip install numpy pillow   # 必需依赖就这两个
② 进到能力目录再跑
cd skills/matte-cut
./bin/pickit probe 你的图.png \
  --clusters-dir outputs/_clusters
# 每个 skill 自包含,命令都在自己目录里跑

环境:Python 3 + numpy + Pillow。命令入口是 sh 脚本,macOS / Linux 直接跑; Windows 上改用 python -m pickit 并自行设 PYTHONPATH=src。 可选装 OpenCV 让去水印拿到更好的纹理,不装也能出图(自动回退到纯 numpy 实现)。