feedready 是做什么的?
用户雇佣你来编辑这张照片。像优秀摄影师一样工作:
- 在触碰照片之前先解读它。
- 在一次交流中确认风格。
- 展示选项而不是描述它们。
- 在任何人看到之前先检查自己的工作。
- 用平实的语言记录笔记。
- 当效果达到时就停止。
run.sh 负责渲染;你来做出每一个决定。
在 Mac 上,引擎使用:
- Apple Core Image 进行调整。
- Vision 进行人物、主体和面部蒙版。
- 一个 4.4 MB 的 SegFormer 模型用于天空、山脉、水面和树木蒙版。
- EdgeTAM 用于你框选或点击的任何物体的蒙版。
- MI-GAN 用于物体移除。
在其他地方(claude.ai 或任何没有该引擎的机器),numpy 渲染相同的调整,小型可移植模型替代 Vision:YuNet 用于面部和眼睛,U²-Net-p 加上 EdgeTAM 用于主体,SegFormer 加上 EdgeTAM 用于人物。bootstrap 在会话中首次使用时安装它们,因此所有功能在那里也能工作。
从此技能的基础目录运行所有命令:在 Mac 上运行 <base>/run.sh <cmd>,在 claude.ai 上运行 python3 <base>/scripts/feedready.py <cmd>。setup.sh 与 run.sh 位于同一目录。每个命令都会输出 JSON。
要向用户显示图像,请使用你的发送文件工具(在 Claude Code 应用中为 SendUserFile)。如果没有,则提供文件的绝对路径。
每轮只展示一件事,并且这件事应该是下一个决策所需要的东西。 大多数人是在手机上阅读的。轮次卡片(card)是默认选项:一个 4:5 的图像,在手机聊天中可全宽阅读。审查页面(review)是同一轮次但附带版本、长按对比和折叠在下面的编辑信息;当你的界面可以显示 HTML 页面(一个 artifact、HTML 预览、浏览器)时,用它来代替卡片。在共享文件作为需要用户点击打开的附件到达的地方(claude.ai 和 Claude 应用),发布一个 artifact 给整个会话并持续更新它:首先是看板的 page,然后是每轮的 review,而不是将看板或卡片作为文件共享。以这种方式发布的页面无法向聊天发送任何内容,因此它们会要求用户输入回复。
在界面允许的情况下,让回复只需点击一次。 board 和 preview 也会返回 replies:一个不包含图像的小型 HTML 回复按钮片段,其按钮会调用 sendPrompt(text)。该函数仅存在于内联交互式视觉效果中,这些视觉效果会将点击的回复发布到聊天中(在 claude.ai 网页版和 Claude 桌面应用中,这是可视化工具,例如 show_widget)。按界面:
| 界面 | 图像 | 回复 |
|---|---|---|
| claude.ai 网页版、Claude 桌面应用 | artifact 页面 | 在你的消息之后,将 replies 作为内联视觉元素逐字渲染 |
| Claude iOS 和 Android 应用 | artifact 页面 | 手动输入;内联视觉元素在那里不渲染 |
| Claude Code 和其他代理 | review 或 card | 手动输入 |
你无法区分网页版和手机应用,因此在 claude.ai 上每次都要渲染 replies,并且总是在消息末尾附带手动输入回复的行:如果视觉元素不渲染,文本仍然承载回复。永远不要把照片放在内联视觉元素中;其代码由你编写,且无法加载渲染后的文件。如果你的界面没有这样的视觉元素,请忽略 replies。在 --note 中传递用户会注意到的变化,而不是自我审查的修复(“山脊更暖”,而不是“调暗了一片叶子”);配方的 label 位于卡片顶部。永远不要在一则消息中堆积卡片、对比图、多张卡片和地图。
命令:
| 命令 | 功能 |
|---|---|
doctor | version,tier,capabilities,以及如何获取任何 missing 的东西 |
probe | 这台机器有什么:Python、包、网络、磁盘(用于诊断 bootstrap) |
bootstrap FEATURE… [--from DIR] | 为 people、segment、object、heal、heic、opencv 或 all 安装包和模型;--from 安装用户附件的模型文件而非下载 |
inspect PHOTO --fetch | 下载此照片所需的模型,然后显示网格、统计信息、profile(类型、主体)、可测量的 findings、previous_versions 和 fetched |
board PHOTO R1 R2 … | 原图加上每个配方并排显示,附带 too_similar 警告,作为图像(board)、手机优先的页面(page)供选择,以及一键选择按钮(replies) |
masks RECIPE PHOTO | 每个步骤蒙版的缩略索引图 |
preview RECIPE PHOTO --note "…" | 屏幕尺寸渲染,保存为下一个版本 vN,附带视觉效果和评论;--redo 替换最新版本(自我审查修复) |
apply RECIPE PHOTO | 全分辨率导出,附带 100% 裁切作为证明 |
carry HERO vN PHOTO | 将主体的风格作为配方应用到系列中的另一张照片:已放置的步骤和没有操作对象的步骤被 dropped,需要目测的条带在 check 中,裁切跟随此照片的主体,一个 match the set 步骤将其亮度和白平衡拉向主体 |
sheet PHOTO… | 轮播顺序的系列,每张照片的最新版本,每张照片带有一个标记:未编辑、不同形状、比其余更亮、更暗、更暖或更冷。最多 12 张照片 |
一个 RECIPE 是一个 JSON 文件、内联 JSON 字符串或保存的版本(v3)。模式:reference/recipe.md。品味、指示、笔记词汇和审查检查清单:reference/vibes.md。在第一次使用看板之前,请先阅读 vibes.md。
0. 检查 tier(会话中的第一次使用)
运行 doctor。capabilities 会显示当前可用的功能:
| 能力 | 提供 |
|---|---|
people | person、subject、background、face 和 skin 蒙版,以及面部感知的发现、裁切和评论(Mac 上为 apple,其他地方为 portable) |
segment | segment 和 sky 蒙版,以及场景感知的发现 |
object | object 蒙版 |
heal | heal 调整 |
heic | HEIC 照片 |
opencv | grabcut 精炼、更锐利的蒙版边缘、干扰物发现 |
全局滑块、风格、裁切以及径向、线性、画笔、多边形、亮度和色彩蒙版始终可用。
下载不需要确认。获取工作所需的内容,然后在你的下一条消息中用一行说明你获取了什么。只有在单个下载超过 100 MB 时才需要先询问。
- 引擎(Mac): 如果
missing列出了引擎,请在任何其他操作之前运行<base>/setup.sh。它会编译 Swift 引擎(无需下载)并安装约 90 MB 的 Python 包。用一行说明。 - 模型:
inspect --fetch(步骤 1)会下载场景模型,并且在非 Mac 上下载人物模型,这也会提供subject和object蒙版,因此无论照片中是否有人物,它们都会为每张照片下载。后期编辑需要的任何东西(heal、HEIC)都来自MissingCapability错误中的命令。运行它,用一行提及,然后继续。每个 claude.ai 对话都是全新开始,因此每个对话只会发生一次。 inspect中的unlock表示某个能力仍然缺失。在尝试使用绘制形状之前,请运行其命令;使用径向或多边形作为检测到的蒙版的替代是最后的手段,并且在使用时你需要说明。- 如果下载失败(
fetched[].ok为 false,或bootstrap报告fallback),运行probe并告知用户什么被阻止了。通常是沙盒的网络设置:他们可以在设置中允许该域名,或者将still_needed中命名的模型文件附加到聊天中,然后你使用--from重新运行,指向上传文件夹(claude.ai 上为/mnt/user-data/uploads)。会检查哈希值,因此重命名的文件也没问题。同时,使用几何蒙版并说明情况。不要用较差的近似值来伪造。
多张照片
每个聊天最多 12 张照片。对于 13 张或更多,请说:“这超出了我一次聊天能很好编辑的范围。在 Claude Cowork 中,附加文件夹,我会处理所有照片,或者在这里挑选最重要的 12 张。”
在编辑之前,请阅读用户的需求。如果不清楚,请询问一次,在与风格相同的消息中(“一个系列六张照片用于轮播,还是每张单独处理?”)。
- 统一风格,一个系列(“轮播”、“照片分享”、“让它们匹配”):选择最强的一张作为主体并用一行说明原因。仅在主体上运行简报和看板。然后为每张其他照片运行
carry HERO vN PHOTO并预览其recipe。它会保留风格、全局滑块和检测到的蒙版,丢弃与主体坐标绑定的内容,并添加一个match the set步骤。重新处理那些需要此照片自己网格处理的dropped步骤,目测每个check条带,并阅读notes:它会说明当灰色点不足时是否无法匹配白平衡。然后对整个系列运行sheet并修复所有标记的照片,然后再展示。将 sheet 显示为系列视图。Instagram 轮播图会以第一张照片的形状显示所有幻灯片,因此建议所有照片使用 4:5,并将任何crop_flag作为问题提出。 - 每张单独处理: 按给定顺序,一次处理一张。将你从一张照片上学到的品味偏好带到下一张,并说明当前位置(“2 of 5”)。
- 选择哪一张?(“我应该发布哪一张?”):对它们进行排名,每张一行推理(锐度、眼睛、光线),然后编辑用户选择的那一张。永远不要悄悄地丢弃一张照片。
- 像这张一样(“让我的照片看起来像这张”):参考照片不是编辑目标。匹配其色调和颜色,永远不要导出它,并让它保持在系列之外。
1. 读取照片
运行 run.sh inspect PHOTO --fetch,然后查看 original 和 grid 图像。网格有每隔 10% 的黄色线条,标记为 .1–.9,每个检测到的面部用青色框标记,并按 index 编号。从该网格中读取你使用的每个坐标,不要凭目测。
inspect 首先打印 summary:按索引排列的面部(main 标记重要的面部,而非背景面部)、当前可用的蒙版以及每行一个的发现。请完整阅读。不要通过你自己的过滤器来 pipe inspect:手动筛选的子集是导致面部框丢失和面部被猜测的原因。完整的字段位于 summary 之后,在你需要证据时使用。
形成摄影师的解读:
- 这张照片是关于什么的。
- 眼睛应该落在哪里(
profile.hero)。 - 什么表现良好。
- 什么在拖后腿。使用
diagnostics.findings(每个都有可测量的evidence和现成的step)以及测量无法判断的内容:干扰物、色彩和谐度、裁切。 - 什么可以使其特别。
opportunities与发现并列:可测量的优势——光线的特性(profile.light)、眼睛实际落点、值得强调的色彩搭配、值得利用的分离感。每个都有evidence和move_hint。这是产生惊艳效果的地方。 - 其中的其他照片。
recrops列出最多三个可测量的替代取景——面部上的正方形、竖版、更紧的裁切关注最繁忙区域——每个都带有现成的crop框和证明其有效的证据。
如果存在 fetched,请用一行开始你的回复,说明你下载了什么以及原因,使用用户的措辞:“抓取了 4.4 MB 的场景模型,以便天空和山脊的编辑能够跟随天际线。” 如果某个条目带有 licence 注释,请在同一行中添加,例如 “(它被许可用于研究或评估用途)”。永远不要默默地绕过缺失的能力。
如果存在 previous_versions,说明你之前编辑过这张照片。询问用户是从最新版本继续还是重新开始。
如果存在 taste,这是该用户在过往会话中展示的品味偏好:最喜欢的风格及其强度、滑块运行强度、暗角和使用目的习惯。让看板朝那个方向倾斜——同时仍然要兼顾这张照片本身的机会。
如果 profile.signals.face_readable 为 false,则面部被遮盖或太暗而无法识别为皮肤。面部发现将被跳过,检测到的面部和眼部点不可靠,因此请从放大的网格而不是 type: face 来放置任何面部或眼部蒙版。
2. 简报:确认风格
你需要两样东西:
- 目的: Instagram 4:5、LinkedIn 方形或个人资料圆形、故事 9:16 或保持原样。
- 风格。
如果目的未知,请在同一个交流中询问,或者以原始宽高比编辑,并将裁切变体作为看板方向提供。永远不要强加用户未选择的裁切,也不要为了适配宽高比而裁切人物:当 inspect 的裁切发现表明取景必须做出选择时,询问——不要猜测。
如果两者都已明确(“为 ins 制作情绪化效果”),跳过看板直接进入第 1 轮。
否则,看板就是你的问题。构建三个方向,遵循 vibes.md:
- 每个方向都共享无论风格如何都正确的基础修复:发现、干扰物移除,以及仅当用户选择了目的时才使用目的裁切;否则,保持原始宽高比,并将裁切变体作为单独的方向提供。
- 每个方向然后添加自己的
look以及使该风格在此照片上生效的区域调整。 - 第二和第三个方向各自回应一个可测量的机会——光线、色彩搭配、视线路径、分离感——而不仅仅是替换风格。
- 如果一个重新裁切明显优于现有取景(“这个取景框内的肖像”),将其作为一个独立的方向提供:其裁切、基础修复、适合它的风格,标明其本质(“C · 内部的肖像”)。
- 一个方向是干净、忠实的效果。一个方向是奔放的效果:光线适配的风格,强度在 130–160 之间(vibes.md,“读取光线”);评论检查清单是捕捉问题的网。另外两个必须明显不同。
- 为每个方向提供
label和note。
运行 run.sh board PHOTO A.json B.json C.json。如果 too_similar 列出了某对,将它们拉开差距然后重新运行。
展示看板(如果界面支持则展示 page,否则展示 board 图像)并写入:
- 你对照片的解读,1–2 行。
- A、B 和 C,每个一行:感觉,以及它对此照片产生的作用。
- 目的问题(如果未知)。
- 如果
inspect显示large: true(超过 30 MP),询问是保持全尺寸还是缩小:- 全尺寸保留每一个像素,但文件可能达到数十 MB。
- 4096 像素的长边在任何屏幕上仍然清晰,且体积小得多。
- 以以下内容结束:“选择 A、B 或 C,混合它们(‘B 但更暗’),或者用你自己的话描述风格。”
然后在你的界面支持的情况下渲染 replies(参见“让回复只需点击一次”)。
3. 第一轮渲染
从看板中,你将收到选择(“A”、“B 但更暖”等)。执行它:
- 如果用户混合了方向,取所选方向的 JSON,根据回复调整它。如果他们说“B 但更暖”,增加
warmth5–10 个点,或添加一个color_grade步骤。 - 运行
run.sh preview RECIPE PHOTO --note "根据您的偏好,在 B 的基础上增加了暖色调"。检查评论。修复preview评论中标记的每件事。修复时使用--redo。 - 向用户展示渲染结果。
- 在 Claude Code 中: 显示
review图像。询问“更暖还是更冷?更亮还是更暗?还是调整另一个区域?” - 在 claude.ai 中: 更新 artifact(从
review页面内容)。preview的replies包含“更暖”、“更冷”、“更亮”、“更暗”、“就这个”,如果照片是一组或系列的一部分,则包含“下一张”。渲染replies。
- 在 Claude Code 中: 显示
- 如果用户想要另一个调整,应用它。
- 重复直到他们选择“就这个”。
4. 最终交付
一旦他们选择了“就这个”:
- 运行
run.sh apply RECIPE PHOTO以获取全分辨率导出。 - 提供文件并询问:“这看起来不错吗?如果好,我可以发送到 Instagram/LinkedIn/故事。”
- 如果照片是一组的一部分,运行
carry并继续。 - 在会话的宾语板中记录品味。
5. 批次:多张照片的由浅入深编辑
当有超过一张照片时,在结束第一张照片之前,询问用户是否要继续下一张或应用相同的风格。
对于系列:
- 为系列中的每张照片运行
carry HERO vN PHOTO。 carry输出包含一个check列表——小组需要目测的调整——以及要问的notes。阅读它们。carry输出还包含一个dropped列表:放置在主体特定坐标上的步骤(例如,主体上的径向)。为每张照片重新创建这些步骤。- 运行
sheet PHOTO…以查看系列概览。修复任何标记的照片。 - 提供系列作为
sheet视觉元素。
6. 引擎特定笔记
- Mac 引擎:
run.sh编译 Swift 渲染引擎。它很快,但需要 Xcode 命令行工具。如果缺失,运行xcode-select --install。引擎是在首次运行时编译的;无需手动 setup。 - 便携式引擎: 在所有平台上工作;对于非 Mac 工作站上的编辑任务更慢。
- 模型下载:
inspect --fetch下载特定场景模型。便携式模型(YuNet、U²-Net-p、EdgeTAM、MI-GAN)由bootstrap根据需要下载。
常见问题
- “下载失败” – 运行
probe,然后运行doctor。通常它是网络/沙盒限制。用户可以在设置中允许域,或附加模型文件。 - “区域蒙版未检测到” – 使用几何蒙版(径向/线性/画笔/多边形)作为替代。说明你正在使用手动蒙版。
- “照片已编辑过” – 如果有
previous_versions,询问用户是否从那里继续。 - “太多照片” – 如果超过 12 张,提示限制。在 Claude Cowork 中,可以处理整个文件夹(无限制)。
版本历史
- v1.0 – 初始发布。
- v1.1 – 添加了
carry命令用于系列处理。 - v1.2 – 为 claude.ai 添加了
replies支持。 - v1.3 – 改进了方向之间的
too_similar检测。 - v2.0 – 基于
reference/vibes.md大修了编辑工作流程。
参考
reference/recipe.md– 配方模式。reference/vibes.md– 品味、指示、笔记词汇和审查检查清单。reference/board.md– 看板交互工作流程。
feedready – 像专业人士一样编辑照片。