设计工具
图层留给下一次修改
图层还在,下一次修改就有地方落。
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)及项目文档与发布记录,如果对您有帮助,请帮忙点赞、关注、收藏,谢谢~