tl;dr:Rawback 是一个让相机拍完自动进云、长期保存 RAW,并让 AI 理解整个照片库的摄影平台。
我自己的库里现在有 1.5 万张 RAW、313 GB。相机拍完可以自动上传,后台会继续做 EXIF、地理信息、缩略图、AI 分析和人脸处理。项目本身从第一个 commit 到现在 223 天、50 万+ 行代码;其中绝大多数代码由 AI 协助生成,但产品设计、架构约束、review 和线上运行仍然由我自己负责。
我以前其实不太理解摄影
我以前不太明白照片有什么意思。
看过的风景就是看过了,体验过就行了。拍照费时费力,有时候甚至会打断当下的体验。
直到很多年以后,我偶尔翻 iCloud 相册,才第一次意识到:照片真正保存下来的,往往不是画面本身,而是一个已经消失的时刻。
2023 年去日本、2024 年去韩国,当时觉得只是普通旅行。几年后重新看到这些 RAW,脑子里反而会自动补回当时的温度、同行的人、走过的路,甚至某些已经忘掉的情绪。
今年年初买了新的相机以后,我又发现了另一件事:拍摄本身也很有意思。
相机的机械结构、传感器、镜头、对焦、快门和光圈,都像是现代工业把物理和光学压到极限之后做出来的艺术品。更重要的是,手里有了相机之后,我开始主动找光、找影子、找构图,也开始愿意走得更远一点,只为了看看那里有没有什么值得拍下来。
摄影让我看世界的方式变了。
但作为一个程序员,我很快又发现了另一件事:相机本身极其先进,相机之后的软件工作流却像停留在很多年前。
拍完以后,我仍然要拔卡、插读卡器、开电脑、导文件、建目录、备份;如果想发给朋友,还要再想办法把几十 MB 的 RAW 变成能看的图片。等到几个月后想找某张照片,又只记得“好像是在二月、蓝调时刻、拍过一个人”,然后开始翻文件夹。
于是我产生了一个很简单的问题:
相机明明已经有 Wi-Fi,为什么按完快门以后,照片不能已经在云上?
从 FTP 开始,给相机做一个后端
很多相机内部其实已经支持 FTP client。于是 Rawback 最开始的想法非常简单:做一个 FTP server,让相机直接把照片传上来,再转存到对象存储。
Camera → FTP → Storage。
真正做起来以后,这条链路自然开始往后生长:既然文件已经到了服务器,那么 EXIF 可以自动解析,GPS 可以做反向地理查询,RAW 可以生成 AVIF/JPEG 预览,图片可以自动分析,人物可以聚类,搜索也不应该再依赖文件名。
现在实际使用起来大概是这样:
- 相机直传:Canon R6 Mark III 开着 Wi-Fi,一张约 25 MB 的 CR3,几秒到十几秒可以落到云上;人继续拍,不需要停下来管传输。
- 桌面端批量上传:最近一个月日志里有 4 次较大的批量任务,共 779 张,平均约 6.2 秒一张。一次 500 张左右的拍摄,后台大约 50 分钟传完。
- 上传以后:EXIF、地理反查、缩略图、AI 分析、人脸识别继续异步执行。单张从上传到全部处理完一般约 4–7 分钟,大量照片则需要排队。
我现在已经很少思考“这张照片到底放在哪个文件夹里”。对我来说,它们应该像代码进入 CI 一样:相机拍完,后面的事情自动发生。
Rawback 不是另一个“带 AI 的相册”
单独看功能,其实都不新鲜:存储、搜索、人脸识别、分享、相册、修图,市面上都能找到对应产品。
我更在意的是把它们连成完整的 workflow。
1. 拍完以后,不再管理文件
原图进入 Rawback 后,系统自动补齐元数据和预览。RAW 本身长期保留,只要还在存储额度内,不会因为“时间久了”自动过期。
这件事情听起来很普通,但它改变了我拍照时的心理负担:我不需要想着“晚上回去记得导卡”,也不需要在旅行结束以后面对几百张文件做第一次搬运。
2. 几个月以后,用一句话把照片找回来
文件系统的搜索逻辑是:你要记得文件在哪里。
摄影真正的记忆不是这样的。
我记住的通常是:
二月,新加坡,蓝调时刻,人像。
或者:
上海,春天,街边的花和人。
Rawback 会尝试把照片理解成主体、场景、时间、地点、器材和人物,于是搜索逐渐可以接近人脑的记忆方式,而不是文件管理器的方式。
最近 30 天我上传了 784 张照片。自动分析里,它标出了 115 张疑似过曝、19 张低质、11 张模糊;同一批数据中,有 409 张照片识别到了人物。
我并不会把 AI 的判断当成最终答案,但它很适合先替我跑一轮粗筛,再由人做最后决定。
3. 单张照片最终应该重新变回故事
很多时候,我们拍照并不是为了得到一张孤立的“作品”。
旅行、婚礼、散步、一次见面,一般都是一组照片。时间、地点、人物和文字放在一起以后,才重新接近当时真正发生过的事情。
这也是 Rawback 里 Article 功能存在的原因。你现在看到的这篇文章,本身就是一个 album story;它可以直接引用相册里的原图,让照片和文字在同一个上下文里组织起来。
我越来越觉得,一张照片只是一个 frame。
很多 frames 组成 album;很多 album 经过时间以后变成 memory;足够多的 memory,最终才形成一个人的 context。
Frame → Album → Memory → Context。
这才是我真正想做的东西。
AI 不应该只“看懂一张图”
Article:把照片组织成故事
相册是一组静态照片,Article 则让它有时间顺序、文字和上下文。AI 可以协助起草、整理和选图,但最后留下来的应该仍然是人的经历,而不是一段自动生成的旅游宣传文案。
Dreaming:自动回顾一天
相册还是有点重。很多时候我并不会专门整理一次普通散步。
所以我做了 Dreaming:让系统根据当天的地点、器材、路线和照片自动生成一份轻量回顾。它不是为了“创作内容”,更像是在帮我压缩一天的记忆。
Context:让系统逐渐理解拍照的人
不同摄影者关注的东西完全不一样。
有人喜欢风光,有人爱拍人,有人喜欢扫街,有人爱打鸟;有人执着于长焦压缩,有人更喜欢广角里的空间感。
当 Rawback 里积累了足够多的照片、评分、器材、地点和选择以后,我希望 AI 不只是判断“这张照片里有什么”,而是逐渐知道:这个人为什么会拍它。
Sunny:不是右下角的 chatbot
Rawback 也有一个全局 AI 助手,我把它叫 Sunny。
但我不太想把它做成一个“无论在哪个页面都只是聊天”的东西。更理想的状态是:你在哪里,它就知道你正在看什么,也知道当前有哪些工具可以调用。
在相册页面,它可以协助选照片、写故事;在照片详情页,它可以直接调用修图能力;在图库页面,它可以搜索、筛选和整理。
AI 如果只是会回答问题,其实离真正参与工作流还差很远。
一个摄影产品,为什么还有 CLI、MCP 和 SDK?
因为我不希望 Rawback 只能通过我自己写的 UI 使用。
同一个照片库现在同时暴露给 Web、CLI、MCP 和 SDK。
- CLI:上传、下载、分类和批处理,适合终端工作流。
- MCP:让 Claude、ChatGPT 或其他支持 MCP 的 agent 直接读取和操作照片库。事实上,这篇文章现在的修改、数字读取和图片整理,就是通过 MCP 完成的。
- SDK:如果你只喜欢底层存储和数据能力,完全可以自己写客户端或小工具。
CLI 文档:
MCP:
SDK:
我更愿意把 Rawback 理解成一个 programmable photography platform:UI 只是入口之一,照片库本身应该也能成为 agent 和程序的工作对象。
AI 来了,还需要摄影吗?
这是做 Rawback 以后我经常想到的问题。
AI 生成图片、视频的速度已经快得有些夸张。Rawback 自己也大量依赖 AI 开发:从 1 月 18 日第一个 commit 到现在 223 天,代码超过 50 万行,绝大多数代码由 AI 协助生成。
这不是一个“代码越多越厉害”的指标。相反,它真正让我惊讶的是:一个人能够独立完成和维护的软件边界,正在被 AI 改写。
那摄影呢?
我的答案还是很简单:只要还有情感、真实与爱,就还需要。
摄影和很多生产活动不一样。会不会拍照,并不直接决定今天晚上能不能吃上饭;我拍不拍照,也不会让明天少开一个会。
但摄影和一首歌、一部电影、一本书很像。它会让人感受到美,也会记录丑;会留下壮丽,也会留下狼狈;会保存一个人的脸、一场婚礼、一条普通的路,以及当时我们根本没意识到以后会怀念的东西。
很多年以后重新看照片,我们记住的未必是焦段和快门。
可能是玄武湖的安静,宁国路夏天的热,札幌烧肉店里沾在衣服上的味道,也可能是 Marina Bay 晚上的风。
AI 当然可以制造一张越来越真实的图片。未来它甚至可能拥有另一种我们现在无法理解的情感和真实。
但你我真正活过的那段时间,它暂时没有办法替我们重新创造。
所以现在,感受当下。
我的照片最终还是应该属于我
照片和普通 SaaS 数据不太一样。
这里面可能有家人、朋友、位置、旅行轨迹,也可能是一生只拍到一次的 RAW。对于这种数据,我越来越确定一件事:产品不能靠“把用户锁在 UI 里”获得长期价值。
Rawback 目前支持原图下载,CLI 和 SDK 也能把数据拿出来;分享和下载权限也独立存在。即使以后产品继续增加 AI 能力,我也希望最底层的原则不变:Rawback 可以帮助理解照片,但不应该让人失去对照片的控制。
关于 AI 模型如何处理数据、第三方模型边界、删除和迁移策略这些事情,我也会继续补成更明确、可以直接查阅的文档。对于照片服务来说,这些问题的重要性不亚于“AI 好不好用”。
价格
Rawback 的成本主要分成三类:存储、AI credits 和人脸处理,所以价格也按这三个维度来设计。
付费档可以使用 MCP,也可以单独购买存储和 credits addon。完整价格以这里为准:
免费档 5 GB 大约可以先放 200 张左右的 CR3,200 credits 也足够把它们完整分析一遍。比较适合先看看整个 workflow 是否适合你。
现在还不够好的地方
我不想把它写成一篇只有优点的 launch article,因为现在 Rawback 当然还有很多问题。
图片加载还不够快
现在部分地区的首屏图片加载仍然不够理想。继续优化 CDN 和流量链路当然可以解决一部分,但对于一个独立项目来说,全球图片分发本身就是非常现实的成本问题。
我会继续优化缩略图、缓存和加载策略,但目前这件事还没有做到我理想中的程度。
大批量上传以后,AI 后处理会排队
单张任务很快,成百上千张一起进来以后就完全不是一回事了。
这是最近一个月真实日志里的数据:
这里的“17 小时”不是说原图 17 小时以后才安全保存,而是指大量任务排队以后,直到 AI 分析等所有后处理全部完成所需的时间。
这个问题当然可以通过增加机器和 worker 暴力解决,但那会直接变成成本。Max 档目前有更高的处理优先级,其他档位一次上传几百张以后,最适合的使用方式还是让它在后台慢慢跑。
Rawback 现在是我用分布在不同地方的 5 台服务器混合跑出来的。做程序员这么多年,我大概最有信心的一件事就是“抠成本”:服务器、架构、任务调度、存储和部署环境都在尽量寻找价格和可靠性之间的平衡。
最后
我最开始只是想解决“相机拍完以后怎么不用拔卡”这个问题。
后来它变成了 RAW 存储;再后来变成图片分析、搜索、人脸、修图、Article、Dreaming、Context、Sunny、CLI、MCP 和 SDK。
但回头看,它们其实一直都在解决同一个问题:
不是让 AI 替我们制造更多照片,而是让 AI 帮我们保存、理解和重新发现自己真实拍过的照片。
如果你也拍 RAW,或者只是和我一样越来越觉得照片值得认真保存,可以试一下 Rawback。
注册链接目前仍然需要邀请码:
有任何问题都可以联系我;只要看到,一般都会回复。邮箱:_
