- SignalDesk2小时前
怎么用两个周末手搓一个 Lightroom 平替 AnyLUT 开发笔记 先说结果。 AnyLUT·光璐 已经上架 App Store 了。iPhone 和 iPad 都能用,能开 RAW,能套任何 .cube LUT,光线、颜色、HSL、曲线、质感、去雾、降噪、蒙版、裁剪这些该有的都有,照片全程不离开手机。 顺手还做了一个 Mac 版,叫 AnyLUT Studio,有图库、导入、筛选、批量调色、导出队列。 还有一个命令行工具 anylut ,带 MCP server,AI agent 也能拿它修图。 仓库里 309 次提交,6 万行左右的 Swift 和 C++(含测试),18 份实现计划。第一次提交是 9 月 9 日,9 月 19 日做完上架准备。 花了多少钱?Claude Pro 加 ChatGPT Plus,一个月 50 加币。 这么多代码当然不是我一行一行敲出来的。 我带了一个 AI 草台班子 干什么 谁 交出来的东西 聊需求 ChatGPT 功能、定位、取舍 写 plan ChatGPT docs/plan/.md 画界面 Claude Design design/.dc.html 写代码 Claude Code(主要用 Sonnet) 代码、测试、提交 审代码 ChatGPT P0–P3 的问题清单 DevOps GLM(在 omp 里跑) 官网、CI/CD、发布脚本 市场调研和营销 OpenClaw docs/marketing/ 拍板、看屏幕 我 决定 表格看着挺像回事,像是我带了个团队。 其实它们互相之间不说话。 它们之间传的是文件:plan 是 Markdown,设计稿是 HTML,规则写在 AGENTS.md 里,全放在仓库里。哪个 AI 换掉了,哪个上下文用完了,东西都还在。 为什么是一个 Monorepo 文件要在 AI 之间传,前提是都在一个地方。AnyLUT 所有东西都在一个仓库里: core/ C++ 色彩引擎,没有平台相关代码 ios/ iPhone / iPad app,project.yml 定义所有 Xcode target apple/ iOS、Mac、命令行共用的 Swift 包 (配方、渲染、设计 token、AI 助手、人像识别、统计) apple/CLI/ 命令行工具和 MCP server studio/ Mac 版 AnyLUT Studio luts/ 内置 LUT tools/ 构建和发布脚本 docs/plan/ 实现计划 docs/cicd/ 构建发布过程说明 docs/marketing/ 营销计划 design/ 设计稿 site/ 官网 AGENTS.md 给所有 AI 的规则 好处比我想的大。 Claude Code 做一个界面,可以自己打开 design/ 里的设计稿对着做。写代码前可以先读 plan。改了统计上报,能顺手找到 site/privacy/ 把隐私政策也改了。它不用问我"那个文件在哪",我也不用来回贴东西。 一份 C++ 引擎和一套 Swift 包,同时编进 iPhone、Mac 和命令行。改一次颜色算法,三个地方一起变,三套测试一起跑。 一个功能一个提交。"将效果存为 LUT"从 C++ 一路改到 iOS 界面、Studio 界面、中英文翻译和 plan 文档。后来把名字改短,iOS 和 Studio 也是一个提交改完。 一个事实只存一处。命令行工具给 agent 看的说明只写在一个文件里,代码里那份是脚本生成的,对不上测试就挂。AI 最爱干的事就是改了这边忘了那边,这样它想忘都忘不了。 代价也有。 最直接的一个:好几个 AI 在同一个工作区里干活。写这篇文章的时候,另一个 session 正在旁边改 Studio 的文件夹功能,工作区里一半的改动不是它的。 正经的做法是每个 agent 一个 git worktree,各干各的,互不打扰。 道理我都懂。但一个人开发,为了几个 AI 搞一套分支、合并的流程,有点杀鸡用牛刀。所以目前是将就着来:大家挤在一个工作区里,提交的时候各认各的文件。 这个取舍迟早要还。哪天两个 AI 同时改了同一个文件,大概就是换 worktree 的时候了。 还有依赖边界。在一个仓库里什么都够得着,所以更要写清楚谁不能碰谁。比如共享的 AnyLUTKit 不能 import UIKit,因为命令行也要编译它。 第一步:先想清楚不做什么 "Lightroom 平替"这个题目太大了,大到没法做。 跟 ChatGPT 来回聊了几轮,最后定下来的其实是几条"不": 不锁相机品牌,不开滤镜商店。任何标准 .cube 都能用,LUT 是一等公民。 不要账号,不上云。RAW 解码、调色、导出都在本机。 AI 不重画照片。AI 助手只帮你拖滑块,曝光、色温、HSL 这些,照片永远是你的照片。 第二步:用最强的模型写 plan 每个稍微大一点的功能都有一份 plan,色彩科学、曲线、去雾、降噪、蒙版、iPad、Studio、变现,加起来 18 份。 我觉得好的 plan 有三个特点。 写清楚不做什么,为什么不做。 "将效果存为 LUT"的 plan 专门有一节讲颗粒、蒙版、降噪为什么放不进 LUT。 写清楚唯一的实现在哪。 "曝光、对比度……不能有第二份实现"这一句话,比十页架构图管用。AI 找不到现成的函数,就会自己再写一个,这是它最常犯的错。 写清楚怎么算做完。 要测什么,测到什么程度。 但 plan 也会错。 所以写代码之前,我先让 Claude Code 拿 plan 去对照真代码,把 plan 里不对的地方写下来。这一步抓到过好几次错误的假设。LUT 那份 plan 里有一个地方,把整条颜色处理链都写成了在线性空间里做,实际上只有曝光一步是。要是照着错的 plan 做下去,算出来的 LUT 和编辑器里看到的就对不上。 第三步:Claude Design 画界面 plan 和功能清单交给 Claude Design,出来的是浏览器里直接能打开的设计稿。 design/ 里现在有主界面 v1 到 v4、iPad 版、桌面版 v1 到 v3、Logo、官网、社交海报…… 光看版本号就知道,没有一稿过的。 设计稿里的颜色、圆角、字号,后来整理成了设计 token,iOS 和 Mac 共用一份,所以两个 app 看起来是一家人。 第四步:Sonnet 写代码 设计稿和 plan 一起交给 Claude Code,主力是 Sonnet。 为什么是 Sonnet,这个我是试出来的。 不同家的中档模型我试了一圈。单看跑分,大家差不太多。真放到项目里,差别就出来了。 下面说的只是我在这个项目里、这几轮试下来的感受,不是什么评测结论:有明确 plan 的时候,Sonnet 最能打。它不抢戏,plan 里写的一步不落地做完,规矩守得住,测试会写也会跑,跑挂了自己回去修。有的模型更"聪明",喜欢自己加戏:plan 没让它重构的地方它顺手重构了,没让它加的功能它贴心地加了。一个人开发,最怕的就是这种惊喜。 结果最扎实,价格又是中档。算下来,性价比最高的就是它。 当然前提是 plan 得写清楚。plan
- 情报分类:硬件与数码
- 分类依据:内容涉及硬件、数码产品或通信卡
- 信息来源:服务器 / V2EX
- 发布时间:2026/10/2 10:56:23
- 暂无回复