PhotoCraft:把 500 多条命令交给 AI 的纯 Rust 开源修图软件
【免费下载链接】photocraftPhotoCraft: An open-source, photo editor written by scratch in pure Rust项目地址: https://gitcode.com/gh_mirrors/pho/photocraft
上周我在终端里敲下一条photocraft-cli run,给它一个 PSD、两步参数,让它自己打开图、调曲线、锐化、存成 PNG,然后退出。几秒后wave-final.png躺在输出目录里。我盯着终端愣了两秒——这不是"AI 帮我写了段修图脚本",是修图软件本身长出了一双手。这套东西叫PhotoCraft:一个用纯 Rust 从公开资料重写、把每个菜单动作都变成 AI 可直接调用命令的本地开源修图软件,不联网、不上传、不订阅。
PhotoCraft 走的是 clean-room(洁净室)路线:不拿别人的代码改,照着公开规范和软件的实际行为,把 Photoshop 的引擎在 Rust 里重新造了一遍。菜单、快捷键、面板位置都照着老用户的手感摆——会用 PS 的人打开它,基本不用重新学。
菜单、脚本和 AI 走的是同一张命令表
先说它想解决的问题:大多数软件里,"点菜单"和"调 API"是两套世界。界面背后那些按钮各自封装,脚本想驱动就得去猜窗口、模拟点击,又脆又慢。AI 更惨,它连点都点不了。
PhotoCraft 的做法很"工程直男":软件里每一个菜单项、每一个工具、每一个对话框,背后都执行同一条命令,全部登记在一个 500 多条命令的注册表里。界面点它、CLI 调它、JSON 控制通道喊它、MCP 服务器转发它——全是同一条路径。官方文档把这件事说得很直白:你能点出来的,脚本和 AI 也能做。
类比我用的是老式点唱机:以前你想听哪首歌,得起身走到机器前按按钮;现在手机里一个 App 直接控制机器,但机器里装的是同一套机芯。UI 只是其中一块"按键面板"而已。
好处是 AI 完全不用"看懂"界面:
photocraft-cli run wave.psd \ --cmd filter.sharpen.smartSharpen --params '{"amount":80}' \ --out wave-final.png要批量,一行命令指一个文件夹、吐一个文件夹:
photocraft-cli batch --actions grade.json --in ./raw --out ./graded三个入口,对应三种干法
自动化一共三条路,像一家餐馆的三种点单方式。
CLI 一次性任务,就是上面那种:给图、给指令、处理完就退出,适合流水线。
常驻无头会话:photocraft-cli serve开一个不下班的后台引擎,用 JSON 行协议对话,它一直记得当前打开的是哪张图、做到第几步。适合"先抠图、再调色、再加字"这种不能断的连续操作。
MCP 挂给 AI 客户端,这是最有想象力的一个:
photocraft-cli mcp --automation-read-root /work/imgs --automation-write-root /work/out把它注册进支持 MCP 的 AI 客户端后,AI 手里有这几件工具:command_list(查有哪些命令和参数文档)、command_run(执行一条)、command_batch(按顺序执行一串)、doc_inspect(看图层树和历史)、render_preview(拿一张预览图)。它还有两种形态:
无头模式,AI 在后台自己开引擎干活,全程不用你盯着屏幕,适合批量和服务器场景。
桥接模式,AI 直接连上你正开着的那个桌面窗口——能检查界面状态、能截图,甚至能模拟指针和键盘输入,相当于坐在你电脑前替你操作软件。桌面端这个控制通道是回环地址加令牌鉴权的,不是往公网开的门。
顺带一提安全边界:AI 只能读写你指定在--automation-read-root/--automation-write-root两个根目录下的文件,而且导出只会覆盖图片和文档格式的文件,src/main.rs、.env这类东西碰都不会碰。这一步是我比较欣赏的设计——先划好围栏,再交钥匙。
走一遍:一张照片从进来到出去
光说能力是虚的,我把仓库验收测试里那种典型任务按流水账走一遍。假设手上有一张照片,要做:锐化、加一条曲线、导出 PNG。
第一步,打开。AI 调doc_open {path},无头会话把文件加载进引擎,图层结构、通道、历史全部就位。
第二步,发现能力。它不需要人告诉它"锐化命令叫什么",直接command_list {filter:"blur"}之类地查,返回的是带参数文档和当前可用状态的 JSON,命令 id 长什么样、参数怎么填,写得明明白白。
第三步,执行。command_run {id:"filter.sharpen.smartSharpen", params:{...}},引擎跑滤镜,这条操作同时进历史栈,能撤销。
第四步,自检。这是最关键的一环:AI 拿doc_inspect看图层和历史对不对,再读某个坐标上的像素值,确认效果真的落在了像素上——不是"我调用了",而是"我验证了"。
第五步,落盘。doc_save/ 导出命令把结果写到 write root 下面,文件归位。
全程 AI 只用 MCP 那几个工具,没碰一次界面。这个流程不是我的想象,是仓库里的测试原文:crates/automation/tests/it/agent_tasks.rs里跑的是"一个智能体通过 MCP 独立完成 10 个真实编辑任务"的验收用例,覆盖标题卡、调色、撤销重做、智能模糊、蒙版、对齐、导出、改尺寸到 CMYK,跑完还补了第二轮 10 个任务。
官方自评:七成覆盖面,四成五的可靠度
到了该泼冷水的地方,而且冷水是官方自己泼的。仓库的 ROADMAP.md 和 target-app-parity 自评里,数字摆得很清楚:
功能覆盖面约 76%——Photoshop 的菜单项 631 个全部接上了活命令,工具箱 68 个工具上了 59 个,面板 35 个有了 30 个;但按使用权重算,文件格式只支持了 31 个里的 13 个,AI 生成类功能(Generative Fill、Neural Filters 这些)大约只有 15%。
能不能替代专业日常干活,约 45%(区间 40–50%)。11 个 183 项偏好设置里 11 个还是空壳,用户报过 Photoshop 拒收它导出的文件的 issue,Wayland 下拖拽打开文件目前也不支持(winit 的限制,issue #386)。
状态徽章上写着early alpha。它自己的话是:"每个 Photoshop 菜单项都接了命令,但那衡量的是接线,不是行为。" 这句话我反复看了两遍——一个项目愿意把"接线 ≠ 能用"写进首页,比满屏"遥遥领先"值钱。
它不抢 AI 的活
PhotoCraft 背后是 ArtCraft 团队,同门的还有 VectorCraft、FilmCraft、LightCraft 等一整套 Craft 应用,共同执念是三条:纯 Rust 从零写、能离线跑、能被 AI 驱动。
它的定位也很克制:不跟 AI 抢着画图,而是把专业软件的每一个操作翻译成 AI 能听懂的语言。生成一张图,云端模型干得热火朝天;但把一份带图层的 PSD 打开、替换文案、导出三个尺寸,这活 AI 自己干不了,得有人递工具。导出、预览全部本地完成,敏感素材不出机器——对摄影师和电商素材来说,这一条比十个滤镜都重要。
如果只能让 PhotoCraft 自动干一件你手上的重复活,你选哪件——批量改尺寸、统一加标题条,还是把一堆乱七八糟的图层整理干净?
【免费下载链接】photocraftPhotoCraft: An open-source, photo editor written by scratch in pure Rust项目地址: https://gitcode.com/gh_mirrors/pho/photocraft
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考