山行AI公众号文章

PS开源平替—Compositor 让 AI 改图以后,人还能接着改

设计工具图层留给下一次修改图层还在,下一次修改就有地方落。 Compositor 的项目文档里有个很具体的

山行AI

公众号 · 20 篇文章

设计工具

图层留给下一次修改

图层还在,下一次修改就有地方落。

Compositor 的项目文档里有个很具体的操作。你在 Mac 上打开一个 .comp 项目,让 Codex 或 Claude Code 一次改一两层文件,画布就会跟着刷新。改完的图层仍在应用里,可以移动,也可以继续画蒙版。

做图的人常会遇到一种很实际的需求。成图大致满意,但标题需要挪一点,主体边缘还要擦一下,背景想再暗一些。Compositor 把这些修改所需的图层保存下来,因而值得花些时间看看它怎样工作。

可编辑的成果

文件写入顺序

人的修改怎样留

01

先确认你的 Mac 能不能用

Compositor(https://github.com/robbietilton/Compositor) 面向 Apple Silicon Mac,v1.5.1 要求 macOS 26.0 或更高版本,源码构建需要 Xcode 26。项目采用 MIT 许可,应用当时只有英文界面,由一位开发者维护。

作者以前用 Photoshop 做合成和后期,希望保留熟悉的操作方式,又能自己修改工具。因此它的功能围绕图层式编辑展开,菜单、混合模式和大量快捷键都照顾了这类使用习惯。

普通用户可以从官网(https://robbietilton.com/compositor/)或发布页面(https://github.com/robbietilton/Compositor/releases/tag/v1.5.1)下载。Homebrew 也提供安装命令。

brew install --cask robbietilton-compositor

想改源码,就打开 Compositor.xcodeproj 并运行 Compositor scheme。制作对外发行的 DMG 还涉及 Developer ID 签名、公证凭据和 create-dmg,这些与在自己电脑上编译运行是不同的工作。

Windows、Linux 和 Intel Mac 用户需要先考虑其他工具。macOS 版本要求也可能挡住一部分现有机器,下载前看清这一项,能少折腾一趟。

02

先留住图层,后面的修改才有地方落

Compositor 支持图层和文件夹。文件夹透明度会作用到里面的内容;图层可以拖动排序、嵌套、复制,也能在多个项目之间拷贝。合并操作保留了 Photoshop 使用者熟悉的方式。

照片合成中常用的蒙版也有。可以画、填充、反相,再做模糊和羽化。解除蒙版与图层的链接后,可以单独移动蒙版;剪贴蒙版则让一层使用另一层的透明度,文件夹也能加蒙版。

色相、色阶、曲线、曝光等调整可以放在独立调整层里。往后改色时,打开参数继续调就行。描边、投影、颜色叠加、内阴影和内外发光同样保留设置,项目称这些效果在 GPU 上渲染。

图片

项目收录的色阶界面参考,用于说明参数布局,并非本次运行 Compositor 的截图

变换保留原始图片分辨率。先缩小一层,再放大,并不要求立即重采样原始素材。位置、尺寸、旋转角度可以精确输入,也能用参考线、网格和吸附调整。自由变形、多层一起变换,以及图层或画布翻转都在功能范围里。

这些功能对 Agent 有一个直接好处。它可以先排好几层,人随后只改其中一层;背景和主体不必重新生成一遍。

03

手工编辑工具也得够用

人接手以后,仍然需要常规选区和修图工具。Compositor 提供矩形、椭圆、自由套索和多边形套索。Magic 工具可在按颜色选择的 Wand 与 Object 之间切换,还有 Select Subject、选区扩展、收缩和羽化。

画笔能调大小、硬度、透明度和笔迹平滑,支持绘制与擦除。修复画笔、仿制图章和模糊工具用于处理局部,内容识别填充也可以向图片边缘之外扩展内容。渐变和形状可以继续编辑。

文字工具采用可拖动、可调整大小的段落框,支持多行、字体、字号、颜色、对齐、字距和行距。项目同时保存文字信息和 PNG 外观。缺失字体时,继续编辑会使用系统字体,保存的 PNG 则保留原来的样子。

这个区别在交稿时很要紧。对方能看见正确外观,与对方能用同一字体继续修改,依赖的条件不同。需要多人接着改的文件,最好提前确认字体。

图片

项目收录的色相与饱和度界面参考

滤镜方面,Camera Raw 面板包括光线、色彩、曲线、混色、细节、光学和几何调整。其他选项有高斯模糊、运动模糊、噪点、暗角、辉光、抖动、扫描线、色调对比和移除背景。预览可以限制在选区内,上次滤镜也能用相同参数重跑。

多个项目可以放在标签页里。命令搜索用来查菜单和工具,裁切支持 3∶4、9∶16 等比例。画布尺寸、图像尺寸与裁去空白分别处理不同任务;放大到 300% 以后,还可以用 Navigator 缩略图移动视野。

04

Agent 打开的其实是一份项目目录

.comp 是 macOS 文档包,在文件系统里是一份目录。里面最重要的是 manifest.json 和 images/。清单记录画布尺寸、图层顺序和参数,素材目录保存图层图片与蒙版。

Example.comp/

├── manifest.json

└── images/

  ├── <LAYER-UUID>.png

  └── <LAYER-UUID>.mask.png


Agent 只要能够读写这些文件,就能创建或修改项目。作者提供的这条接入方式不需要插件或 API,文档也没有把它描述成 MCP 服务。

清单里的 layers 按从底到顶排列。documentID 标识文档,图层各有独立 UUID。变换中的 origin 是左上角,size 决定放到画布上的宽高,rotation 用顺时针角度。透明度范围为 0 到 1。

指南用下面这份最小清单描述一个铺满画布的背景层。实际编辑时要换成自己的素材和 ID,并保留已有项目的文档身份。

{

 "format": "com.compositor.project",

 "version": 11,

 "colorSpace": "sRGB",

 "documentID": "0C5E7A91-3B2D-4F6A-8E1C-9D0B7A6F5E4D",

 "width": 1920,

 "height": 1080,

 "resolution": 72,

 "activeLayerID": "6F1D3C2A-0B7E-4E8A-9C4D-2A1B3C4D5E6F",

 "layers": [{

  "id": "6F1D3C2A-0B7E-4E8A-9C4D-2A1B3C4D5E6F",

  "name": "Background",

  "imageFile": "6F1D3C2A-0B7E-4E8A-9C4D-2A1B3C4D5E6F.png",

  "isVisible": true,

  "isGroup": false,

  "opacity": 1,

  "blendMode": "Normal",

  "transform": {

   "origin": [0, 0],

   "size": [1920, 1080],

   "rotation": 0,

   "flipX": false,

   "flipY": false,

   "sampling": "High quality"

  }

 }]

}

图片

Compositor 的外部文件编辑、项目检查与画布刷新关系

修改已有项目时,先读清单,保留文档 ID 与已有图层 ID。PNG 文件名必须和对应 ID 一致,蒙版用 .mask.png 后缀,通过 maskFile 和 maskEnabled 字段关联。图层图片采用 RGBA,蒙版用灰度,白色显示、黑色隐藏,灰色留下半透明边缘。


调整层没有自己的 imageFile,它用 adjustment 对象保存参数,并影响相应范围内下方的内容。文字、文件夹、图层效果和父子关系都有各自字段。想加一个复杂调整层,最稳妥的起点是先在应用里建好一个、保存,再参考那份清单。

格式编号和位深要分开看。自动化指南给出的最小例子使用格式版本 11 和 8 位 PNG。格式版本 12 增加 16 位 PNG,版本 13 增加 OpenEXR。这里的 12、13 都是格式版本号。HDR 素材在该版本仍通过限制到白点并转成 8 位的副本显示和编辑,不能据此声称全程 HDR 编辑已经完成。脚本应按目标应用实际支持的版本写入,蒙版继续使用 8 位 PNG。

05

为什么要先写图片,再替换清单

应用会在目录变化后读取项目。清单如果先写,里面引用的 PNG 还没生成,应用就可能读到一个不完整项目。直接覆盖清单,也可能让它读到半份 JSON。

作者给出的顺序很明确。先把图片放到 images/,再把完整清单写到项目包内的临时文件,最后通过重命名替换 manifest.json。清单的替换是原子的,应用读取时会得到完整的旧版或新版。

不过,清单的原子替换不等于整个目录里所有图片都有了同一个事务。修改已有素材也要控制写入顺序,重要操作可以先复制项目,避免人和脚本同时覆盖同一层。

图片

增量改图的一次完整过程

改一层时,保留它的 ID、更新对应 PNG,再提交清单。删一层时,先去掉清单里的引用,之后清理不再使用的素材。项目保存后还有供 Finder 预览的 QuickLook 目录;外部编辑后若预览过时,文档建议删除它,下次应用保存时会重新生成。

监听还有个容易忽略的细节。它比较 manifest 的内容和素材文件名、大小,并不逐张读取图片计算像素哈希。如果换入一张字节数恰好相同的 PNG,清单又完全没变,刷新可能不会触发。此时要同时改变清单内容,例如更新图层名称。

格式错误、素材缺失或命名不合法时,当前画布可能保持原样。遇到这种情况,先检查文件,再考虑是不是程序反应慢。

06

刷新以后,人的修改怎么办

项目文档说,连续写入结束后约三分之一秒会重新载入,通常半秒以内能看到变化。这是作者描述的行为,不是所有机器和大文件的响应保证。

重新载入保留缩放、滚动和选择,但会清空 undo 历史。用户有尚未保存的修改时,应用会询问保留当前版本,还是使用磁盘上被外部修改的版本。它不会静默替换这部分工作。

所以我更倾向于把它用于一两层一停的协作。Agent 改完,先看画布;人要继续改,就让脚本停下来。需要回退的节点,复制整个项目或另行保存版本,应用的 undo 无法承担外部写入的历史记录。

07

从导入到交付,哪些东西会保留

Compositor 能导入 JPEG、PNG、HEIC、TIFF、WebP、SVG、相机 RAW,以及 Photoshop PSD、PSB。RAW 有显影步骤。PSD 和 PSB 的范围限定在 8-bit RGB,CMYK 不在这条导入支持中。

Photoshop 文件夹、蒙版、混合模式、填充矩形与椭圆、简单横排文字可以保持可编辑,其他矢量和竖排文字会转成像素。应用会在导入前给转换报告,这份报告值得看完,尤其是要继续改的客户文件。

图片

项目收录的画布尺寸界面参考


导出提供 PNG、JPEG 和按打印尺寸输出的单页 PDF,可预览尺寸、JPEG 质量和文件大小。项目保存与导出分别完成不同工作。扁平图片不会保留完整图层,也不会把尚未保存的项目改动标为已保存。


文件格式文档列出的限制包括单边 30,000 像素、最多 10,000 个图层、4 MiB 清单和每个编码素材 512 MiB。像素与内存预算也要检查所用构建和机器,脚本连续加层前应核对实际限制。大 PSD 还可能采用把图层裁到画布范围的处理,保留超出画布的素材时尤其要验证。

第一次试用可以很小。先在应用里保存一个项目,让 Agent 读清单、添加一层、改变一次位置,然后手工调透明度,最后保存、关闭、重新打开。确认这几步都如预期,再尝试批量生成。

这时交付物最好有两份。.comp 留给需要继续修改的人,PNG、JPEG 或 PDF 用于发布和查看。

我是山行AI,持续分享工具与技术资料。

本文由山行整理自 robbietilton/Compositor(https://github.com/robbietilton/Compositor)及项目文档与发布记录,如果对您有帮助,请帮忙点赞、关注、收藏,谢谢~

前往微信阅读全文

内容来自公众号,可前往微信查看原文。

查看作者的更多文章 →订阅更新、RSS 与阅读指南 →