photoshop-controller
用自然语言驱动本机 Adobe Photoshop CS6 完成广泛任务:海报/名片/Banner、修图调色、磨皮祛痘、去背抠图、水印合成、批量改尺寸、色卡/拼图等。
当本机连不上 Photoshop 时,自动生成 .jsx 脚本并给出手动运行指引,绝不报错崩溃(退出码恒为 0)。
触发场景
- 用户说:帮我做张海报 / 去个白底 / 批量改尺寸 / 加水印 / 调个色 / 做色卡 等。
- 任何明确或隐含需要调用本机 Photoshop CS6 进行图形处理的需求。
完整工作流
-
解析需求:从用户自然语言提取意图与参数(画布尺寸、文字、颜色、图片路径、导出格式/目录等)。
-
找配方:依据
references/recipes.md(35 条任务→配方)+references/recipes-portrait.md(人像/证件照日常案例)把用户需求映射到实现路径,确定用哪些能力。
- 运行时联网兜底(Path B):若 references 中没有匹配配方(遇到没写过的需求),先用WebSearch/ 浏览器检索Photoshop CS6 <需求> ExtendScript/动作/AM 事件,优先选用 DOM 或已验证 AM 事件(见jsx-cheatsheet-p1.mdC12 滤镜事件清单)落地实现;CS6 是 2012 年版本,网上多数教程是 CC/新版,DOM 不同,必须筛选能用于 CS6 的写法,不要照搬新版 API。 -
取 API(DOM 优先,缺失用 AM):
- 优先用references/jsx-cheatsheet.md(P0 DOM 干净可用部分:文档/图层/调整/滤镜/选区/文字/颜色/导出/通道/混合模式/图层类型)。
- 若某项 CS6 DOM 没有或无法精细控制(色相/饱和度、渐变填充层、纯色填充层、加蒙版、图层样式、转/替换智能对象、内容识别填充),改用references/jsx-cheatsheet-p1.md(P1 AM 配方 C2–C10);置入图片见 C11(DOM open+duplicate,非 AM)。
- 生成约束已放开:可使用 references 中全部已文档化 API(不再限于 20 项);DOM 缺失必须改用 AM 片段,不要臆造不存在的方法(如adjustHueSaturation在 CS6 不存在,必须 AM C6)。
- 脚本开头设置单位与 AM 助手:
js app.preferences.rulerUnits = Units.PIXELS; var s2t = function (s) { return app.stringIDToTypeID(s); }; var c2t = function (s) { return app.charIDToTypeID(s); };
- 导出路径必须用桥接注入的全局变量EXPORT_DIR,不得写死用户目录。
- 脚本结尾返回出图路径:
js return "OK:" + outPath;
- 不要写#target photoshop(COM 已定向)。桥接会把整段包进function __ps_run__(){ ... } __ps_run__();,所以直接写顶层 return 即可。 -
调用桥接执行(把 .jsx 落盘后执行):
python "<skill_dir>/bridge/run_jsx.py" --jsx <jsx路径> [--dry-run] [--export-dir <目录>] [--json]
-<skill_dir>为本 Skill 目录(即本文件所在目录)。
- 用户指定了绝对导出目录时加--export-dir <目录>;否则默认<当前工作区>/photoshop-output。
- 需强制只看生成效果时加--dry-run。
- 需结构化结果时加--json(输出完整 PsResult 单行 JSON)。 -
读取 stdout 回复用户:
- 成功:mode=exec且带output_path=...,把出图路径告知用户。
- dry-run:mode=dry-run且带jsx_path=...,告诉用户:
> 已生成 Photoshop 脚本(连不上本机 Photoshop)。请在 Photoshop 中:文件 → 脚本 → 浏览,选择该文件即可执行。脚本路径:<jsx_path>
诚实边界(CS6 不支持的能力,遇到请礼貌说明并给替代方案,不要瞎编)
- 无生成式 / AI 去背、无 Generative Fill / 生成式填充。
- 无 Sky Replacement(天空替换)、无 Select Subject / 对象选择 / 选择主体。
- 无 WebP / HEIF 直接读写:导出统一用 JPEG / PNG / PSD。
- 无 Neural Filters(神经滤镜)。
- 去背只能走通道法 / 蒙版 / 色彩范围 / 快速选择近似(见
recipes.md任务 15 与examples/background_remove.jsx)。 - 色相/饱和度、渐变、多数调整层与全部图层样式 CS6 DOM 无精细控制 → 必须 AM(见
jsx-cheatsheet-p1.md)。 - 智能对象 CS6 不能用
layer.kind = SMARTOBJECT转换 → 必须newPlacedLayerAM(C3)。 - 加蒙版无 DOM → 必须 AM(C7)。
- PS
pathItems无 rectangle/ellipse 快捷构造,必须手动PathPointInfo(A8)。 - 字体用 PostScript 名且本机需安装(中文默认
Microsoft YaHei)。 - 液化(Liquify)/瘦脸、发丝级精修(Refine Edge)、换脸/复杂合成:CS6 脚本极不可靠或不可行——液化是 AM 插件操作、Refine Edge 脚本支持弱。遇到这类需求请说明限制并建议用户用 GUI/动作,或仅做可脚本化的近似(如高低频磨皮代替液化)。
- 滤镜事件需认 CS6 可用清单:
gaussianBlur/surfaceBlur/dustAndScratches/highPass/hueSaturation等以 AM +pixelsUnit单位调用(见jsx-cheatsheet-p1.mdC12);adjustHueSaturation在 CS6 DOM 不存在,必须走 AM。
安全与二次确认规则(硬约束)
- 破坏性编辑前默认先
duplicate背景层(亮度/对比度/滤镜直接改像素);优先调整图层/智能对象(非破坏)。 - 导出/另存一律新文件名,绝不静默覆盖原图;原文件保护见
references/jsx-handbook.md安全规则。 - 覆盖保存(
Save)/ 删除图层(layer.remove())需向用户明确确认后再执行。 - 生成脚本只允许使用 references 中声明的能力与 API,禁止执行任意系统命令或访问无关文件。
依赖说明
- 需 Python 3 +
pip install pywin32(见bridge/requirements.txt)。 - 仅支持 Windows(COM 调用 Photoshop)。
- 真实执行需本机安装并运行 Adobe Photoshop CS6(Windows)。
- 自检与手动验证见
tests/README.md。
参考文件索引
references/recipes.md:任务→配方(先在这里找实现路径)。references/recipes-portrait.md:人像/证件照日常案例(换底色、去背换背景、磨皮美白祛斑、证件照排版、调色预设)。references/jsx-cheatsheet.md:P0 DOM 干净可用 API(首选)。references/jsx-cheatsheet-p1.md:P1/P2 AM 配方与进阶(DOM 缺失时用;C11 置入、C12 滤镜事件、C13 跨文档复制、C14 调色预设、C15 液化/动作触发)。references/jsx-handbook.md:跨文件约定、EXPORT_DIR/包裹/AM 助手、错误映射、不支持能力清单。examples/:可直接 dry-run 的示例(海报/水印/去背/人像修图/证件照换底色与排版/调色预设 color_grade/液化动作触发 liquify_via_action 等)。