三千张照片。
没人愿意花的九十分钟。
7Photo 是一个住在你自己 Mac 上的照片图库。五张几乎一模一样的照片里哪张眼睛是清晰的, 它知道;它还打算让你从手机上随时访问——而这一切都不离开这台机器。
图库是索引,不是容器
文件留在你放的地方——存储卡、SSD、NAS。不移动,不复制。原片附近唯一会写入的, 是放在它们旁边的 XMP 旁车文件。
它有主见,也亮出依据
清晰度测在眼睛上,而不是整个画面。闭眼检测。按人设定优先级。你看到的是
0.261 对 0.027,信不信由你决定。
随时可达,无需同步
Mac 上只有一份权威副本,直接访问。没有合并,没有冲突,没有云,没有订阅, 也没有第三方替你保管客户的照片。
同一瞬间的两张照片,二选一
这才是挑片的本质。不是浏览,而是选择——一秒五次,在只差“有没有人眨眼” 和“焦点有没有落准”的照片之间做选择。其他工具都让你先看一张、再看下一张, 等看到第二张时,第一张的细节你已经记不准了。
C 看整组连拍,按 Z 放大到眼睛。
为什么测眼睛,而不是整个画面
毛衣锐利、眼睛发虚的人像就该淘汰,而任何整幅画面的清晰度数值都告诉不了你这一点。 7Photo 在检测到的眼部区域上测量,必要时退回到面部,再退回到整个画面—— 并且会告诉你它用的是哪一个。
为什么你的判断和模型的判断分开存放
表里是两行独立记录,以 (uid, source) 为键。模型的判断永远无法覆盖你的,
界面也把模型的判断画得很淡,让你随时看得出还剩哪些没回答。早先一个版本只用
uid 作键,一次自动处理就悄无声息地抹掉了六十张已经判断过的照片;
这条规则正是因此而来。
它会学你,而且学不坏
偏好模型只用你的决定训练,而且用的是连拍组内的比较,而不是绝对分数—— 因为“这是不是一张好照片”这个问题谁也说服不了谁,而“同一瞬间里,这张是不是比那张好” 你每次都会给出同样的答案。
每个学出来的模型都要和朴素的规则打分器做交叉验证,输了就丢弃。 它可以越来越会预测你,却不会比它取代的规则更差。这种纪律,只有面向单个摄影师的工具才做得到; 必须给所有人发同一个模型的产品做不到。
美学模型就是同一种克制的实例。一个标准的图像质量网络被训练、测量,然后被刻意 挡在打分器之外,因为在真实拍摄中它偏爱过曝的高光——与溢出的相关系数为 +0.50。 它只作为一个输入提供给偏好模型,偏好模型可以学会忽略它;它从不被当作规则使用。
你的 Mac 就是服务器
所有能在手机上用的图库产品都押了同一个注:接管文件,好让它们能被同步。苹果“照片”把文件复制进一个不透明的包里, Lightroom CC 把它们上传。对档案以 TB 计的摄影师来说,两者都行不通;对签过保密协议的人来说,两者都不可接受。
7Photo 反其道而行。唯一的权威副本留在 Mac 上,手机去连它。这不是解决了图库产品里最难的问题, 而是让它不复存在——而这之所以可行,全靠索引本身其实很轻。
实测,不是估算
本页每个数字都来自在一次真实拍摄上实际运行的结果:Nikon D610 拍的 435 张照片。 凡是外推到十万张照片的数字,都会注明。
手机实际需要承载多少
| 层级 | 每张照片 | 100,000 张时 | 放在哪里 |
|---|---|---|---|
| 索引,不含向量 | ~4 KB | 400 MB | 哪里都行,即时可用 |
| 手机网格所需的列 | ~0.2 KB | 20 MB | 几乎不占地方 |
| 网格缩略图,512px | 36 KB | 3.6 GB | 手机装得下 |
| 预览图,1400px | 198 KB | 19.8 GB | 按需传输 |
| 搜索与人脸向量 | 5.4 KB | 540 MB | 留在 Mac 上 |
| 原片 | 25–30 MB | ~3 TB | 从不移动 |
手机可以浏览、判断、评星、搜索一个十万张照片的图库,而连接上传输的始终只有几 KB; 打开某一张时,再拉一张 200 KB 的预览。“照片”和 Lightroom 都做不到,因为两者都假定原片就在本地。
把一张照片显示到屏幕上
这四个数字决定了架构:画网格时绝不解码原片。相机的缩略图立即出现,正式的缩略图在后台生成; 一次解码产出两种尺寸,因为第二种是白送的。
什么都不会被锁住
| 内容 | 放在哪里 |
|---|---|
| 你的判断和星级 | 原片旁的 XMP 旁车文件——旗标写成色标,星级写入 XMP:Rating,与 Lightroom 读取的方式完全一致。RAW 和相机在它旁边写下的 JPEG 算作一张照片,只判断一次,所以同一个判断会写进 Lightroom 为该 RAW 读取的旁车文件 |
| 所有测量结果 | .photocull/ 里的一个 SQLite 文件,格式在源码中有文档说明 |
| 你的原片 | 原封不动,就在你放的地方。 |
在这里挑完的拍摄,用 Lightroom 或 Capture One 打开时,旗标和星级已经在上面了。 7Photo 不需要拿下你的整个工作流——它接走那没人想要的九十分钟,其余的交还给你。
缓存是一份公开的契约,而不是私有的目录格式。已经有两种语言按同一条有文档的规则读写它, 第三种也可以。删掉它,不会丢失任何不可替代的东西:每项测量都能重新计算, 而唯一不能重算的那张表——你的决定——正是设计要保护的。
图库
G 网格,E 单张,
C 对比,Z 放大到眼睛,K X U
判断,0–5 评星,⌘Z
撤销。
关于这些截图
截图里是项目为自己生成的一次模拟拍摄——
tools/make_sample_shoot.py——因为一文件夹素材库样片算不上一次拍摄。
它虚构的是结构:按顺序拍下的场景,场景里的连拍,每组连拍一张好照片、其余按照片真实会出问题的方式废掉,
再加上一张存储卡被复制两次产生的重复,以及合理递增的 EXIF。里面的照片是真的——
scikit-image 的样例集,以及 NASA 拍摄的 Eileen Collins 肖像,属公有领域。
本页没有任何人的客户。
横向对比
7Photo 不是 Lightroom 或“照片”的替代品。它是它们之前的那一步——决定哪些照片值得保留—— 而且生来就是要把决定交给它们,而不是取而代之。下面是每个工具各自的核心定位, 依据我们在 2026 年 10 月的理解;它们变化很快,欢迎指正。
| 7Photo | Lightroom Classic | Lightroom(云端) | 苹果“照片” | AfterShoot | Narrative Select | Photo Mechanic | |
|---|---|---|---|---|---|---|---|
| 用来做什么 | 挑片,以及跨拍摄的图库 | 目录管理与 RAW 显影 | 云端编辑与同步 | 覆盖所有 Apple 设备的个人图库 | AI 挑片与修图,服务于 Lightroom | AI 辅助挑片 | 快速导入、浏览与图注 |
| 文件留在你放的地方 | 是 | 是 | 否——存在 Adobe 的云里 | 默认存进它自己的图库 | 是 | 是 | 是 |
| 找出连拍中最好的一张——眼睛对焦、闭眼 | 是,并给出数值 | 手动 | 手动 | 归组连拍,由你来选 | 是 | 是 | 手动,但非常快 |
| 从你的判断中学习你的口味 | 是,且赢不了规则的就丢掉 | 否 | 否 | 否 | 个人配置,主要用于修图 | 否 | 否 |
| 跨拍摄认出同一批人 | 是,并按重点人物评判合影 | 是 | 是 | 是 | 否 | 否 | 否 |
| 无需导入即可处理你的“照片”图库 | 是——原地读取 | 导入副本 | 导入副本 | 它本身就是图库 | 否 | 否 | 否 |
| RAW 显影与编辑 | 没有,有意为之 | 行业标杆 | 有 | 基础 | AI 修图,在 Lightroom 中应用 | 没有 | 没有 |
| 人像修图——瘦脸、磨皮、去瑕疵 | 有,非破坏性 | 修复画笔,不能改形 | 修复画笔,不能改形 | 一支修饰画笔 | 作为附加功能 | 没有 | 没有 |
| 决定交给谁 | Lightroom 可读的 XMP 旁车文件 | — | — | — | 交给 Lightroom | 交给 Lightroom | 交给任何能读 XMP 的软件 |
| 怎么付费 | 免费——还不是产品 | 订阅 | 订阅 | 免费;存储空间付费 | 订阅 | 免费版加订阅 | 买断或订阅 |
| 运行平台 | Mac;手机通过浏览器 | Mac、Windows | 全平台,外加网页 | Apple 设备 | Mac、Windows | Mac、Windows | Mac、Windows |
各自更合适的场景
Lightroom:凡是以修图收尾的工作。它的 RAW 显影背后是几十年实测的相机与镜头配置文件, 这里没有任何东西想和它比。苹果“照片”:同时在 iPhone、iPad 和 Mac 上使用的家庭图库—— 它会同步,而 7Photo 刻意不做同步。AfterShoot 和 Narrative Select:想要挑片加 AI 修图、并且希望背后有公司提供支持的摄影师; 它们很成熟,而这里只是一个人的作品。 Photo Mechanic:赶截稿的新闻摄影,它的导入和图注是最快的。
7Photo 适合的场景
当挑片本身就是难点,而且“为什么选这张”很重要时:它会展示眼睛处的清晰度、闭眼、笑容, 以及它与哪组连拍做了比较;它学习一位摄影师的口味,却永远不被允许比朴素的规则更差。 当照片绝不能离开这台机器时——什么都不会上传,永远不会。当各个拍摄散落在多块硬盘上或存在“照片”里, 而搬动它们不可行时:它原地读取。当十年的判断应该比工具活得更久时: 它们存在一个有文档的 SQLite 文件里,也存在 Lightroom 能读的旁车文件里。
它们如何配合
在 7Photo 里挑片,然后 File → Export to Lightroom:这次拍摄在 Lightroom 中打开时, 旗标和星级都在,修图从那里开始。或者直接从“照片”打开一个相簿,原地挑片,什么都不导入。
它不是什么
一个告诉你它做不到什么的工具,比一个靠猜的工具更有用。对它自己的介绍也是如此。
没有显影模块,以后也不会有
Lightroom 的 RAW 处理不是一个读懂就能实现的算法。它是为大约一千款机身实测的双光源色彩配置文件, 两千个实测的镜头配置文件,一套专有的去马赛克算法,一种防止肤色发品红的高光重建, 以及一个联合设计、二十年里修订了五次的局部自适应色调算子。花三年做出来的东西, 在 D610 上的效果也比不上 Adobe 第一天的水平。
挑片用不着它。相机自带的内嵌预览就能看出对焦和表情,而且是由造传感器的人渲染的。 唯一真正的代价是,JPEG 预览比 RAW 更早溢出,所以高光溢出这项测量会偏高—— 这一点写在明处,而不是粉饰过去。
飞机上用不了
Mac 必须开着,并且连得上。这是拒绝同步直接带来、没有商量余地的代价,而它换来的是唯一值得说的一句话: 你的照片永远不会离开你的机器。
不知道时,它会直说
方向检测宁可弃权也不乱猜,因为把一张正着的照片转歪是损坏,而让一张横着的照片保持原样只是有点麻烦。 它拿不准的照片会标为待定,而不是悄悄归类。一个会说“这些我不确定”的专业工具, 比一个默默替你做决定的工具更有价值。而且即便是有把握的判断,也只在你要求时才应用—— Settings → Turn photographs upright by their faces,默认关闭—— 所以开箱即用时,每张照片都按相机存储的样子显示。
进展到哪了 进行中
挑片引擎
Python 引擎,内部代号 photocull。十三条命令。人脸与人物识别、连拍与场景分组、重复检测、几何构图分析、偏好学习、语义搜索、XMP 导出、修图。539 个测试。它留作实验室:每一处 Swift 移植都要对照它测试。
原生 Mac app
网格、胶片条、对比模式、在检测到的眼睛上真正 1:1、撤销、星级、筛选,以及一个按开始时间命名的“时刻”侧边栏。扫描、给人物命名、导出到 Lightroom,都在 app 里完成。约 15,500 行 Swift,401 个测试,不依赖任何第三方包。
一个图库,跨越各个拍摄
贯穿所有拍摄的时间线,可以从任意拍摄取片的相簿,跨文件夹识别的人物并沿用他们的名字,按文字和关键词搜索,以及一个知道某次拍摄在那块没插上的硬盘里的全局目录。
app 里没有 Python
测量、判断、人物分组和学习你的口味,全部用 Swift 基于 Core ML 和 Vision 完成。在一场 435 张的婚礼上:整个扫描不到一分钟,模型跑在神经网络引擎上,435 个判断中 435 个、516 张人脸中 516 张与引擎给出的完全一致。扫描可以中途停止,下一次从已测量的部分接着来。
app 内修图
瘦脸、磨皮、去瑕疵、拉直、向三分线裁切,带实时预览,而且没有接缝:变形不会折叠,皮肤蒙版覆盖额头、止于发际。非破坏性——设置随照片保存,只在导出时才生成全尺寸 JPEG 放进 Retouched/ 文件夹,一张特写只需几秒——在测试样本上与引擎的输出逐字节一致,在全尺寸特写上误差不超过一个色阶。
从手机访问
对整个设计最便宜的检验。引擎的浏览器工作台 photocull review 已经在家庭网络里从手机上用过;离开家、通过 Tailscale 访问还有待测试,app 自己的手机服务器就等这一步。
这还不是产品。它能运行,有测试,也在真实拍摄中用过。 app 能打包成一个自带模型的单一程序包,不需要 Python 或这个代码仓库就能运行——但构建它仍需要开发者工具链, 程序包没有签名或公证,没有安装程序,而且它使用的人脸身份模型仅限非商业用途发布。 这些都是已知并排好了顺序的事项,不是刚刚发现的问题。