
24 个 crate 重写 PhotoshopPhotoCraft 的 clean-room 工程拆解【免费下载链接】photocraftPhotoCraft: An open-source, photo editor written by scratch in pure Rust项目地址: https://gitcode.com/gh_mirrors/pho/photocraftPhotoCraft 是一个纯 Rust 从零实现的 Photoshop 兼容图像编辑器支持图层、调整图层与真实 PSD 读写上线 7 天获得超过 6,400 颗 GitHub star0.1.0 到 0.6.0 五个版本在 8 天内发布docs/roadmap.md。它与套壳式编辑器的本质区别在于架构选择24 个 crate 在构建期强制依赖方向一切行为皆命令同一套引擎可编译到桌面、CLI 与浏览器 WebAssembly。本文基于仓库源码与项目自产度量文档拆解它的设计决策、可复算的证据以及与 Photoshop 的差距。把依赖方向写成构建期检查主流图像编辑器最常见的架构债是 UI 框架与文档模型焊死在一起。GIMP 的教训被项目专门写进了 docs/architecture.md 的 Avoiding GIMPs hole 一节核心写死 8-bit 像素16/32 位支持依赖 GEGL 引擎重写该移植 2008 年才引入、直到 GIMP 2.102018才完成非破坏性滤镜更是等到 2025 年的 3.0。PhotoCraft 的对策是把 24 个 crate 划成 L0–L6 共七层book/src/architecture/crates.md并用cargo xtask layers在每次构建时检查下层不得依赖上层psd、codecs、cms三个格式与色彩 crate 不依赖工作区内任何 crateui-egui以下的所有代码禁止引入 egui、eframe、winit。这条纪律的直接收益是换 UI 不动引擎、引擎可整体编译到 wasmL0–L6 必须通过cargo xtask wasm的wasm32-unknown-unknown检查apps/photocraft-web/src/main.rs 里浏览器版跑的就是桌面版同一个PhotocraftApp只是把文件对话框换成浏览器选择器。根 Cargo.toml 甚至有一个wasm-releaseprofile 专门为浏览器调优fat LTO 加上按 crate 分级的 size 优化注释里写明动机是托管平台单文件 25 MiB 上限。Never crash 同样是编译期规则而非口号。工作区 Cargo.toml 设置unsafe_code forbid唯一例外是封装数位板输入的photocraft-tabletcratemacOS 需要 AppKit 事件监听AGENTS.md 规定非测试代码禁止unwrap/panic!clippy 配置在测试外直接拒绝这些调用集成测试panic_hunt对每个命令做对抗性参数模糊。用一个命令注册表统一四端入口AGENTS.md 的第一条黄金规则是 Everything is a command任何用户可见行为必须注册为引擎命令带稳定的 id、label、菜单路径、快捷键、JSON 参数文档与run闭包六元组定义在 crates/engine/src/commands.rs。收益是同一套能力四端复用egui 界面、photocraft-cli、JSON 控制通道、MCP 服务器全部按命令 id 分发。README 原文anything you can click, a script or an AI agent can do too。菜单覆盖率 631/631 不是人工统计而是cargo xtask parity从 crates/ui-egui/src/menu_catalog.rs 与命令注册表自动比对生成的docs/parity-checklist.md。自动化入口有三种book/src/automation/overview.md一次性任务的convert/inspect/run/batch、长会话的servestdio 或回环 TCP、面向 AI Agent 的mcp。桌面端photocraft --control port启动的 NDJSON 控制服务器只绑定回环地址每个连接必须先出示 Bearer token 才派发操作。一条命令即可完成打开 PSD、智能锐化、叠曲线调整层、导出 PNGphotocraft-cli run wave.psd \ --cmd filter.sharpen.smartSharpen --params {amount:80} \ --cmd layer.newAdjustmentLayer.curves --params {points:[[0,0],[64,48],[192,212],[255,255]]} \ --out wave-final.pngREADME 中所有截图都是这样通过控制通道离屏渲染的我们真能用因此是可验证的事实而非 PPT。让位深与色彩模型成为运行时数据Photoshop 时代的架构把 8-bit、RGB 写死进核心PhotoCraft 把位深8/16/32f与色彩模型RGB/Gray/CMYK/Lab全部设计成文档的运行时属性。AGENTS.md 的禁令是硬约束Never introduce au8-only pixel path in public APIs——每个工具必须在多种位深下可用并有多位深测试。渲染层采用双合成器互检composecrate 的 CPU 合成器是参考 oraclegpucrate 的 wgpu 合成器Metal/Vulkan/DX12/WebGPU是交互路径两者在 CI 的软件渲染适配器上逐混合模式比对像素差要求 ≤1/255docs/architecture.md。像素存储用 256² 稀疏瓦片加写时复制让撤销与大画布都保持廉价未建模的 PSD 原始块原样保留而非丢弃。用 CI 底线与语料库量化兼容性格式兼容不靠自评靠可复算的语料库门槛。crates/io/tests/it/corpus.rs 中硬编码了三个语料库的下限值注释写明 Raise the floors when they improve——只许上调跌破即 CI 失败指标数值出处psd-tools 语料309 文件渲染/重存往返oracle ≥249/309往返 ≥308/309crates/io/tests/it/corpus.rs自产 Photoshop oracle256 文件oracle ≥190/256往返 ≥258/256同上Photoshop 菜单项接线631/631100%docs/parity-checklist.mdGPU 与 CPU 像素一致性≤1/255CI 强制docs/architecture.md性能预算达标25 项预算场景仅 3 项达标docs/scorecard.md项目自己公布的短板同样具体。docs/scorecard.md 是cargo xtask scorecard生成的机器可读记分卡其中177 个偏好设置里有 20 个不起作用目标 0场景 P12150 层文档中按方向键微调直接触发 wgpu 校验错误——GPU 合成器崩溃22 项性能预算超标包括 15000×10000 16-bit 文档移动图层 p50 达 2.7 秒。差距的官方口径在 ROADMAP.md 与 docs/target-app-parity.md功能表面积约 76%专业人士能否换过来做日常活约 45%工具箱工具 59/68AI/生成式能力约 10–15% 且没有 ML 运行时。docs/roadmap.md 对菜单覆盖率有一句自我限定631/631 says nothing about behaviour——菜单接线 100% 只度量有没有入口不度量行为是否正确。579 个 open issue2026-10-10 统计中PSD 导出被 Photoshop 拒绝#1281、#2469是当前头号阻塞项。舆论场的偷家叙事与产品现实海外技术社区的讨论焦点集中在工程叙事无一行 JavaScript、无 Electron 壳、工作区级unsafe_code forbid、1,700 测试与 cargo-fuzz 模糊测试。GIMP 迁移史的复盘——8-bit 核心、GEGL 六年移植、2025 年才有非破坏性滤镜——恰好击中了 HN 上大量对这段历史有记忆的用户给纯 Rust 从零重写提供了技术可信度。中文社区的传播叠加了 Adobe 订阅制这一现实痛点开源版 Adobe 全家桶的标签来自项目所属的 ArtCraft 工具套件PhotoCraft 与 VectorCraft、FilmCraft、LightCraft 等 8 个应用共享同一套 clean-room 与纯 Rust 约定。但偷家目前是情绪叙事而非产品现实——项目 README 的官方措辞是 early alpha并原文声明 it is not yet a Photoshop replacement for daily professional work。横向对比GIMP 是 C 语言单体加 GEGL 管线GPL 授权PSD 支持弱Krita 强在矢量与绘画格式生态以 XCF 为中心Affinity 商业闭源、一次买断。PhotoCraft 占的是开源 PSD 语义兼容 Agent 可驱动这个此前空着的生态位。现在该用还是再等等按项目自己的分级当前是 alpha 阶段功能覆盖约 76%、专业就绪约 45%距离 beta 还差约 1,100–1,800 个 agent 工时ROADMAP.md。需要无头批处理、PSD 往返验证或研究纯 Rust 图形引擎分层的开发者可以现在就用photocraft-cli把日常专业工作从 Photoshop 迁过来的用户等 beta。【免费下载链接】photocraftPhotoCraft: An open-source, photo editor written by scratch in pure Rust项目地址: https://gitcode.com/gh_mirrors/pho/photocraft创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考