
免费
黑白棚拍
把获得授权的人物照片变成安静的黑白棚拍半身照,全程不重绘人脸。
安装
把“黑白棚拍”技能安装到 ~/.claude/skills/mono-portrait。 下载下面每个文件,保存到这个文件夹: https://skilllift.pages.dev/packs/mono-portrait/SKILL.zh.md → SKILL.md https://skilllift.pages.dev/packs/mono-portrait/references/style.md → references/style.md https://skilllift.pages.dev/packs/mono-portrait/assets/look.json → assets/look.json https://skilllift.pages.dev/packs/mono-portrait/scripts/mono-portrait.mjs → scripts/mono-portrait.mjs https://skilllift.pages.dev/packs/mono-portrait/scripts/vision.swift → scripts/vision.swift https://skilllift.pages.dev/packs/mono-portrait/scripts/check.mjs → scripts/check.mjs https://skilllift.pages.dev/packs/mono-portrait/scripts/lib/png.mjs → scripts/lib/png.mjs https://skilllift.pages.dev/packs/mono-portrait/scripts/lib/jpeg.mjs → scripts/lib/jpeg.mjs https://skilllift.pages.dev/packs/mono-portrait/scripts/lib/img.mjs → scripts/lib/img.mjs https://skilllift.pages.dev/packs/mono-portrait/scripts/lib/refuse.mjs → scripts/lib/refuse.mjs https://skilllift.pages.dev/packs/mono-portrait/scripts/lib/font.mjs → scripts/lib/font.mjs 然后读一遍 SKILL.md,告诉我它是做什么的,并提醒我开一个新会话。
解压到 ~/.claude/skills
同一个技能,不同的需求
左边是预览。右边由另一个 Agent 按不同需求制作,它只有安装好的技能,没看过预览。
这是按虚构需求做的一次测试。系统字体不同时,字形可能略有差异。
把一张获得授权的成年人照片变成安静的黑白棚拍半身照:柔和的单向光、自然的皮肤质感、细微的胶片颗粒和有意留出的空白,适合头像、个人主页和社交媒体。不使用生成式图像模型,也不重绘人脸,所以人还是原来的样子,眼镜也在。全部在用户自己的电脑上运行。当有人想用现有照片做黑白头像、棚拍风格肖像或个人资料照时使用。不要用于护照、证件或任何身份证明照片。
交付前必须通过
- 我打开看过照片:只有一个人,看起来是成年人
- 用户确认这是本人,或对方已同意
- 不用于护照、证件、生物特征比对或身份证明
node scripts/check.mjs对输出文件夹的退出码是 0- 每种裁切都按原尺寸和 96 像素看过,并如实判断;没有看到与检查结果相矛盾的问题
- 如果照片上有徽记或名牌,已告诉用户这些仍然看得清,并建议换成自己的照片
- 所有警告和提示都用平实的话告诉了用户
- 告诉了用户:元数据已去除、没有上传任何内容、哪些东西改不了
- 提醒了用户妥善保管检查图、JSON 和
qa/
阅读完整 SKILL.md
--- name: mono-portrait description: 把一张获得授权的成年人照片变成安静的黑白棚拍半身照:柔和的单向光、自然的皮肤质感、细微的胶片颗粒和有意留出的空白,适合头像、个人主页和社交媒体。不使用生成式图像模型,也不重绘人脸,所以人还是原来的样子,眼镜也在。全部在用户自己的电脑上运行。当有人想用现有照片做黑白头像、棚拍风格肖像或个人资料照时使用。不要用于护照、证件或任何身份证明照片。 version: 1.0.0 --- # 黑白棚拍 这套效果写在 `assets/look.json` 和 `scripts/mono-portrait.mjs` 里。你要做的是:确认照片,确认下面的规则,运行一条命令,运行检查脚本,再亲眼看结果。不要手动修图。 **好处。** 这个技能有意不用生成式图像模型。Apple Vision 只在用户自己的 Mac 上找出人物轮廓以及眼睛和下巴的位置,不画任何东西。脸上的每个像素都来自用户自己的照片,只改变影调和光线,所以人还是本人的样子,眼镜和皱纹都原样保留。 **局限,要直接告诉用户。** 它改不了衣服、姿势和发型,去不掉衣服上的标志或徽章,也救不了一张差的照片。照片模糊、太暗或裁得太紧,结果就会差,或者直接被拒绝。衣服上的臂章、徽记和名牌仍然看得清,所以就算 `--label` 没写人名,名字也可能露出来。 ## 规则 - 只能使用用户本人的照片,或者已经同意使用的人的照片。 - 拒绝护照、签证、身份证等任何证件照,拒绝生物特征比对,拒绝任何用来证明身份的用途。也不要提供变通办法。渲染脚本也会拒绝 `passport`、`id-photo`、`photo-id`、`proof-of-identity`、`护照` 这类标签,但这份词表不可能列全,默认标签也能通过。遇到这类请求,不管标签写什么,你都必须自己拦下。 - 工具无法核实对方是否同意。`--consent self` 和 `--consent permission` 只是记下你得到的说法,检查脚本也只确认这个词存在。你必须询问。如果只是用替代照片做测试,要说明这个值只是占位,照片里的人并没有同意。 - 如果是官方照片,上面有徽记、名牌或机构标志,要直接告诉用户:这些内容仍然看得清,相关机构可能限制使用,应该换成用户自己的照片。检查图底部也有同样的提示。 - 绝不改动五官和脸型,也不要把结果拿到别的工具里去改。 - 如果照片里不止一个人,或者人物看起来是未成年人,先停下来问用户。只有用户明确说明此人其实已经成年,才能继续,否则不处理这张照片。 - 要告诉用户:输出文件不含元数据,EXIF、GPS、相机信息和文字备注都不会保留。 - 不上传任何内容。渲染脚本不发起任何网络请求。你也不要把照片发到别处。 ## 需要向用户询问的内容 需求里没有说明的,一次问清,放在同一条消息里。 1. 照片的文件路径。 2. 照片里是谁,对方是否同意。这一项决定 `--consent` 的值。 其他都不用问,所有字段都有安全的默认值。 ## 字段 | 字段 | 含义 | 限制 | 需求信息不足时 | |---|---|---|---| | `--input` | 照片,可以是 JPEG、PNG、HEIC 或其他 macOS 能打开的格式 | 一个文件 | 询问用户,没有默认值 | | `--out` | 输出文件夹,不存在时会自动创建 | 任何可写路径 | 用照片旁边的 `mono-portrait-out` | | `--consent` | `self` 表示用户本人的照片,`permission` 表示对方已同意 | 只能是这两个词 | 询问用户,绝不能猜。如果没人能回答就停下,这是唯一不能猜的字段 | | `--looked` | 你的声明:你已打开照片,看到一个看起来是成年人的人 | 只能是 `one-adult` | 先用看图工具打开照片。如果打不开,就询问用户 | | `--label` | 文件名的开头部分 | 1 到 40 个小写字母、数字或连字符 | 用 `portrait`,它一定能通过检查。除非用户要求,不要用人名 | | `--seed` | 颗粒图案。照片和种子都相同,结果就相同 | 0 到 999999 的整数 | 不填,默认是 1 | | `--side` | 空白留在哪一侧 | `auto`、`left`、`right` | 保持 `auto`,它根据鼻子和眼睛的位置判断头部朝向,得分达到 0.06 才算明显转头。如果你看到人物明明朝向某一侧,结果却不对,就设为 `left` 或 `right` | | `--backdrop` | 背景影调 | `auto`、`charcoal`(深炭灰)、`ash`(中灰) | 保持 `auto`。如果深色头发融进了背景,可以试 `ash` | | `--confirmed-one-person` | Vision 数出不止一人但只找到一张脸时,用户确认画面里只有一个人 | 开关,不带值 | 必须先问用户。出现第二张脸时它不起作用 | ## 步骤 1. 打开照片看一眼。确认只有一个人、看起来是成年人、脸部清楚、头顶上方有空间。留意有没有东西贴着身体,比如手下面的桌子:画面会尽量在它上方结束。确认对方同意。 2. 渲染。大约需要 5 到 20 秒,第一次运行要编译 Vision 辅助程序,多约 3 秒: ``` nice -n 10 node scripts/mono-portrait.mjs --input photo.jpg --out out --consent self --looked one-adult ``` 3. 运行检查脚本,在技能文件夹或其他位置运行都可以。按提示解决问题,没通过的结果不要交付: ``` node scripts/check.mjs out ``` 4. 亲眼看结果。每张 PNG 都按原尺寸看一遍,再缩到 96 像素宽看一遍。老实问自己:这像棚拍,还是像加了滤镜的随手拍?注意有没有残留的旧背景碎片、生硬的切口、身体边缘的渐隐和发虚的脸。品味这件事,脚本判断不了。**你亲眼看到的优先于检查结果。** 如果原尺寸下能看到碎片、切口或参差的边缘,就算检查通过也按不合格处理,这张裁切不要交付。 5. 告诉用户你交付了什么,把每一条 `WARNING` 和 `NOTE` 用平实的话转述出来,并说明上面的局限。 ## 其他系统 自动抠出人物需要 macOS Vision。在其他系统上,脚本会拒绝运行,也不会改动任何文件。请告诉用户,并提供第二种做法:由用户提供一张透明背景的人物 PNG,你自己从图上读出眼睛和下巴的位置: ``` node scripts/mono-portrait.mjs --cutout person.png --eyes x1,y1,x2,y2 --chin x,y --out out --consent self --looked one-adult ``` 坐标是 PNG 里的像素位置:两个瞳孔的中心和下巴的最低点。这种做法无法自动判断人数,所以只能靠你亲眼确认。 ## 脚本停止时 | 退出码 | 含义 | 怎么办 | |---|---|---| | 2 | 字段缺失或不合法 | 看提示,改命令 | | 3 | 不止一个人 | 问用户要处理哪一位、对方是否同意,再把照片裁到只剩这个人。只有确实只有一个人、一张脸时,才用 `--confirmed-one-person` | | 4 | 没有清楚的脸,或没有人物 | 请用户换一张更清楚、更正面的照片 | | 5 | 系统没有 Vision,或辅助程序编译失败 | 提供透明 PNG 的做法,或运行 `xcode-select --install` | | 6 | 照片太小或太暗。某个裁切需要放大超过 3.2 倍时会停止,大约相当于眼睛到下巴不足 125 像素。不足约 200 像素时会警告结果发虚 | 请用户换一张更好的照片。不要先放大或提亮来绕过检查 | | 7 | 标签写明了证件或生物特征用途。这只是一份词表 | 拒绝 | ## 检查不通过时 | 问题 | 怎么办 | |---|---| | 头顶被裁掉 | 原图头顶没有空间,请用户换一张 | | 残留旧背景碎片或有光晕 | Vision 分不开这种背景,请用户换一张背景更简单的照片。不要手动涂掉 | | 空白不够 | 打开照片,看人物朝哪边,设为 `--side left` 或 `--side right`。两边都不行,就请用户换一张更宽的 | | 身体上有生硬切口、碎片、参差或斑驳的边缘 | 原图里有东西被切掉,或者 Vision 分不开。请用户换一张身体没有贴着任何物体的照片 | | 面部边缘或结构不一致 | 渲染之后有人改过文件。重新渲染,不要再编辑 | | 暗部死黑、高光溢出或影调发平 | 问题出在原图,请用户换一张曝光更好的 | ## 第一张照片没通过时,按这个顺序试 1. 空白不够:重新运行,加 `--side left` 或 `--side right`,选人物面朝的一侧。 2. 深色头发或帽子融进了背景:重新运行,加 `--backdrop ash`。 3. 退出码 3,但确实只有一个人、一张脸:先问用户,再加 `--confirmed-one-person` 重新运行。 4. 其他问题:没有选项能解决,`--seed` 只会改变颗粒。请用户换一张:背后是素净的墙、头顶有空间、身体没有贴着物体、眼睛到下巴至少 200 像素。 5. 没有别的照片:什么都不交付,说明哪里没通过,以及什么样的照片可以通过。 如果没有更好的照片,也没人能回答,就不要交付没通过的结果。说明哪里没通过,以及什么样的照片可以通过。不要编造人物信息。用户没有提供的话,不要写说明文字、姓名或职位。 ## 半身照 画面通常到胸口中部结束,不需要露出手。身体下部会渐渐融入背景。原图裁得近时,结果会是更近的头肩照,这也算半身照。如果用户想露出更多身体,要告诉对方。 ## 交付内容 输出文件夹里有这些文件(`portrait` 代表 `--label` 的值): - `portrait-1600x2000`、`portrait-1600x1600`、`portrait-2000x1125`,每种尺寸都有 `.png` 和高质量 `.jpg`。 - `portrait-qa-sheet.png`:原图和结果并排的检查图,底部附有徽记提示。 - `mono-portrait.json` 和 `qa/`:检查脚本需要的记录,包括原图副本、蒙版,以及用于构图的眼睛和下巴位置。 只有那六个图片文件可以发布。检查图、`mono-portrait.json` 和 `qa/` 里有原图和面部位置,要提醒用户妥善保管,确认结果后删除。如果用户想要其他尺寸,告诉对方这三种尺寸是固定的,可以自己从 PNG 裁切,但裁切后的图不在检查范围内。 ## 交付前检查 - [ ] 我打开看过照片:只有一个人,看起来是成年人 - [ ] 用户确认这是本人,或对方已同意 - [ ] 不用于护照、证件、生物特征比对或身份证明 - [ ] `node scripts/check.mjs` 对输出文件夹的退出码是 0 - [ ] 每种裁切都按原尺寸和 96 像素看过,并如实判断;没有看到与检查结果相矛盾的问题 - [ ] 如果照片上有徽记或名牌,已告诉用户这些仍然看得清,并建议换成自己的照片 - [ ] 所有警告和提示都用平实的话告诉了用户 - [ ] 告诉了用户:元数据已去除、没有上传任何内容、哪些东西改不了 - [ ] 提醒了用户妥善保管检查图、JSON 和 `qa/` ## 不适用的情况 - 护照、签证、身份证、驾照等官方照片,或任何需要证明身份的照片。 - 合影、儿童照片,或未经本人同意的照片。 - 用户想换衣服、姿势或发型。这需要生成式图像模型,而这个技能没有。 - 用户想要彩色照片、真实场景或修过的脸。 ## 运行要求 - 自动抠图需要 macOS 12 或更高版本。macOS 14 及以上,Vision 还能数人数;更早的版本只能数人脸,所以你亲眼确认更加重要。 - Xcode Command Line Tools,用来编译本地 Vision 辅助程序:`xcode-select --install` - Node 18 或更高版本,不需要任何 npm 包:`brew install node`,或从 nodejs.org 下载安装包 - 不使用 Python、numpy、Pillow 和 Playwright,不使用生成式图像模型,也不需要联网。Apple Vision 在设备上运行。 - 渲染脚本只写入输出文件夹和系统临时文件夹。
用在这些流程里
- 做个人网站或作品集 第 4 步



