这周 GitHub 上有个项目让我看愣了。
`storytold/photocraft`,纯 Rust 从零重写的 Photoshop。9 月 30 日建仓,不到一个月 71,991 star,12,719 fork。
不是套壳,不是 Electron 包一层,是原生应用,100% Rust。图层、蒙版、调整图层、图层样式、文字、矢量、笔刷,能读能写真 PSD 文件。
更让我在意的是它不是一个孤例。
一个人重写了五个商业软件
同一个作者的项目矩阵,全部一个月内建仓:PhotoCraft 7.2 万 star 对 Photoshop、PdfCraft 1.75 万对 Acrobat、FilmCraft 1.59 万对 Premiere、WordCraft 1.58 万对 Word、LightCraft 1.45 万对 Lightroom,合计约 13.6 万 star。
这个组合传递的信息比单个项目清楚得多:桌面软件的护城河,可能没有大家想的那么深。
Photoshop、Acrobat、Word 这些产品经营了二三十年,护城河一直被理解为「功能复杂度」。但复杂度里有一部分是历史包袱,另一部分是真正的工程难点。AI 辅助编码把「历史包袱」这一半的成本压下来了,剩下的一半才是真门槛。
为什么是 Rust
三个原因,按实际重要性排序。
第一,零 GC 停顿。 图像编辑最怕的就是主线程卡住。Java/C# 有 GC,Go 有 STW 优化但仍需调度,C++ 没有 GC 但内存安全靠人。Rust 的所有权模型在编译期解决释放问题,运行时没有回收器。
第二,内存占用可预测。 一张 8000×6000 的 RGBA8 图层是 192MB,加上撤销栈、缩略图、缓存,很容易冲到几个 G。Rust 的显式内存管理让你能算清每一块。
第三,跨平台一致。 同一套代码编译到 macOS、Windows、Linux,不依赖运行时。对开源项目来说,这直接决定能不能被更多人跑起来。
真正的难点在文件格式
界面是最简单的部分。难的是 PSD。
PSD 是分层格式,一个文件里同时存在:图层结构树、像素数据(可能是 RLE 压缩或 Zip 压缩)、混合模式、调整图层参数、图层样式(投影、描边、渐变叠加各有一套参数)、矢量蒙版、文字图层(保留可编辑的字体和排版信息)、智能对象。
要「能读能写」意味着双向兼容。读的时候要容忍各种历史版本写出来的畸形数据,写的时候要保证 Adobe 的软件能正确打开。这部分工作量,光靠 AI 加速也压不掉多少,得靠对格式规范的逐字节摸索。
这是我判断这个项目能走多远的关键点。7.2 万 star 证明的是「这件事被期待」,不证明「这件事做完了」。
图像处理里 Rust 实际怎么写
给个具体的。图层混合最常见的是逐像素遍历,用 `rayon` 一行就能并行化:
```rust
use rayon::prelude::*;
/// 并行调整亮度,RGBA8 缓冲区
pub fn adjust_brightness(buf: &mut u8, delta: i16) {
buf.par_chunks_mut(4).for_each(|px| {
for c in 0..3 {
let v = pxc as i16 + delta;
pxc = v.clamp(0, 255) as u8;
}
// alpha 通道保持不动
});
}
```
`par_chunks_mut(4)` 按 4 字节切块(一个像素),`for_each` 分发到线程池。192MB 的图层在 8 核机器上大概能跑进几十毫秒。同样的逻辑用 C++ + OpenMP 也能做到,用 Python + NumPy 也能,但 Rust 的收益在于:不用管线程安全,编译器替你把 `Send`/`Sync` 检查完了。
调整图层的实现要复杂一些,因为它是非破坏性的:原始像素不能改,渲染时按顺序应用调整链。这块更像一个小型的表达式求值引擎,每个节点实现一个 `Adjustment` trait,好处是调整链能动态增删、随时重排,以后接 GPU 后端(wgpu)也不用改业务逻辑。代价是每个像素都要虚函数调用,真上生产得换成枚举分发或者批量 SIMD。开源项目第一版通常先选正确性,性能后补。
另外两个这周值得看的项目
magpie ⭐20,264
Go 写的本地网关,菜单栏一个小图标,管每个 agent 用哪家模型:Claude Code 接 Kimi、Codex 接 DeepSeek、Gemini CLI 接 GLM、OpenCode 接你的 ChatGPT 套餐。配额用完自动切账号。
对同时订好几家模型的开发者,它解决的痛点很具体------不用改代码,也不用改一堆 dotfile,环境变量重定向到本地网关就行:
```bash
export ANTHROPIC_BASE_URL="http://127.0.0.1:8787"
export OPENAI_BASE_URL="http://127.0.0.1:8787/v1"
之后 Claude Code / Codex 都走本地网关,菜单栏切后端
```
架构上是个常规的反向代理 + 路由层,有意思的是产品定位:它把「模型选择」从代码配置里抽出来,变成了一个系统级的开关。
Strata ⭐31,220
C++ 推理引擎,目标很朴素:让消费级显卡跑得动 Qwen3.8-Flash-Next。Windows/Linux/Mac 一键装,本地起一个兼容 OpenAI 和 Anthropic 的 API,支持图片输入。
用起来就是标准的 OpenAI SDK:
```python
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8080/v1",
api_key="local", # 本地服务一般不校验
)
resp = client.chat.completions.create(
model="qwen3.8-flash-next",
messages={"role": "user", "content": "PSD 的图层蒙版和剪贴蒙版有什么区别"},
max_tokens=512,
)
print(resp.choices0.message.content)
```
对成本敏感的团队,这笔账值得认真算。云上跑一个 7×24 的常驻 agent,一个月的账单可能比一张 4090 贵,而且有配额和限流。本地推理的代价是首字延迟和并发受限,但如果你的 agent 是批处理任务,这两个缺点都不致命。
对开发者的现实影响
这周资本市场的消息挺吓人:费城半导体指数六个交易日跌 12%,蒸发约 1 万亿美元,Meta 披露 8250 亿美元的支出承诺,CDS 创历史新高。这些数字跟写代码没什么直接关系。
但有一件事有关系:预算收紧的时候,只留下能算清 ROI 的项目。
过去两年「先试试 AI」是被允许的,现在不行了。技术选型会更看成本,不看参数。这对本地推理和开源工具是利好,对纯 API 依赖的产品是压力。
同一天还有两条印证。亚马逊 CEO 贾西说,AI 要在企业软件里普及,成本得降到现在的十分之一。月之暗面发布了 Kimi K3.1 Pro,3 万亿级参数,编程和智能体评测超 GPT-6。一边是能力继续往上堆,一边是采购方要求降价十倍,中间那段差价,只能靠推理效率和本地部署来填。
顺带说一个反例:长电科技这周把 2026 年投资计划从 110.1 亿加到 182 亿,加幅 65%,钱主要投先进封装。股价一周能跌 12%,产线要建 18 到 24 个月。企业的决策周期和市场的情绪周期完全不是一回事,做技术选型也是一样------别跟着一个季度的情绪改架构。
最后聊两个技术问题
第一,你们团队现在跑 AI 是纯云 API,还是已经开始混本地推理了? 如果混了,成本大概降了多少,延迟涨了多少?
第二,桌面软件用 Rust 重写这件事,你觉得是可复制的路线,还是一次性的开源热情? 我倾向认为可复制------PhotoCraft 真正的价值不是「又一个 PS 替代品」,而是证明了「纯 Rust + 现代渲染管线」能把这类软件的开发成本压到一个小组能承受的范围。
选边站一下:
A. 值得,明年会出现更多 Rust 重写的商业软件
B. 不值得,star 数不等于能维护,两年后一地鸡毛
C. 看品类,编辑类可行,协作类不行
评论区打字母,说说你的理由。有做过 PSD 或者视频编辑解码的同行吗,想听听实际踩过的坑。