纯Rust重写Photoshop,一个月7.2万Star

这周 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 或者视频编辑解码的同行吗,想听听实际踩过的坑。

相关推荐
韩振方1 小时前
Kubernetes 通过资源 requests 决定 Pending Pod 能否找到节点
后端
用户360055579001 小时前
Kestrel_VLLM - 18 · 投机解码位级对拍收口:batch 与 M=1 一致,注意力路径与 CPU 逐字节对齐
后端
HelloWorld0011 小时前
百万 QPS 流量压测不垮!基于 Spring Cloud Gateway + Sentinel 打造分布式动态限流与灰度分流中枢(源码+避坑实战)
架构
Thneonl1 小时前
git reset --hard 之后先别哭:reflog 里存着你刚弄丢的那个分支
运维·后端
弦儿1 小时前
后端 Web 实战:员工管理模块(多表关系 + 多表查询 + 分页查询 + 条件分页)
后端·sql
王中阳Go1 小时前
网页上答对、接口里答错:同一个知识库,差的不是模型是入口
人工智能·后端·架构
郝琳1 小时前
真实 flaky 18.3%,CI 报 0%,让 Agent 修测试,它删掉了被测的变量
后端·ai编程
子兮曰1 小时前
Bun v1.4.4 实测:2,025 个文件,bun fmt 2.6 秒跑完
前端·后端·bun
萧瑟余晖2 小时前
Spring Data JPA高级特性详解
后端·spring