为 UI、游戏美术和设计师打造的 Photoshop 批量效率工具。
Sliceman 是一款基于 Photoshop UXP 开发的生产力插件,专门解决日常设计工作中大量重复、机械的图层操作。
无需反复整理图层、逐个改名、手动排列或一个个导出资源。通过 Sliceman,可以直接在 Photoshop 中完成:
- 智能切图 —— 按图层、组和颜色标记自动批量导出资源
- 批量重命名 —— 替换、重新命名、前后缀、连续编号,实时预览结果
- 智能分割 —— 自动识别同一图层中的独立元素,并拆分为多个图层
- 批量智能对象 —— 多个图层分别转换为独立智能对象,不会被合并
- 批量新建组 —— 为每个选中图层或组分别建立独立父级组
- 一键排版 —— 自动识别元素空间顺序,按指定方向、对齐方式和间距快速排列
- 快速平移 —— 批量按照指定 X / Y 距离精确移动多个对象
- 快速绘制表格 —— 填行列尺寸即出矢量表格,可选整张一层或每格一层
- 参考线助手 —— 一键唤起 PS 原生「新建参考线版面」,建过的版面自动记录,下次一键重放
减少重复点击,把 Photoshop 中原本需要几十次操作的工作压缩成一次操作。
特别适合:
游戏 UI / App UI / 网页设计 / 图标整理 / 美术资源切图 / PSD 规范化 / 批量素材处理
给图层做好标记,剩下的交给 Sliceman。
⬇ 下载最新版 .ccx —— 双击安装,重启 Photoshop 即可使用。
面板左侧竖排七个功能入口(图标 + 名称),各对应一个功能页,启动默认停在「重命名」;设置钮在功能栏底部。顶栏(品牌 + 版本号)与底部状态栏固定不动,只有右侧内容列滚动。
| 重命名 | 数字编号 n | 分割 | 批处理 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| 四种改名方式,实时预览 | 起始 / 递增 / 位数 / 方向 | 一个开关,默认按连通像素拆 | 转智能对象 / 建组 / 快速平移 |
| 排版 | 表格 | 参考线 | 切图 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| 方向 · 对齐 · 间距 · 扩画布 | 行列尺寸填完直接出矢量表格 | 原生弹窗 + 版面记录与收藏 | 完整切图与 Symbols 两套规则 |
对在图层面板选中的图层 / 组批量改名。改动只作用于选中项本身:选中一个组改的是组名,不会自己钻进组里去动子图层;但要是你把组和组里的某几层都点亮了,那它们就都是选中项,组名和这几个层名会各按规则改一次(编号顺序按面板从上往下:组名在前,组内的层紧随其后)。
按名称查找图层:手点太慢时,点「已选中 N 个」那一行右侧的「按名称查找」开弹窗,把整个文档(或已选中的组内)名称匹配的图层一次性选出来 ——
- 匹配方式:包含 / 完全匹配 / 前缀 / 后缀;查找范围:整个文档 / 已选中的组内;图层类型:全部 / 仅图层 / 仅图层组
- 附加条件:区分大小写;含隐藏图层(眼睛关掉的层也找,默认勾选)
- 最底下那个「背景」图层一并查出来并标「背景」—— 注意给它改名,Photoshop 会顺手把它转成普通图层
- 填好关键词按回车或点「搜索」即查(边打字也会实时出结果);在 PS 里增删过图层后,回车 / 点搜索即按当前条件重查一遍 弹窗分两步:
- 查找页 —— 标题行给出「找到 N 项,已勾选 M 项」;命中的层实时列出(带所在路径、高亮的命中片段、图层 / 图层组 / 背景 / 隐藏 / 锁定标注),默认全部勾选,可点行取消、可全选 / 反选,右上角的下拉可切「图层顺序 / 按名称」(默认图层顺序,只影响看的顺序)。点「+ 添加到查找列表」把这一批收成一张小卡片。
- 查找项页 —— 列出所有卡片:放大镜 + 关键词、命中数、启用开关、编辑与删除两个图标钮,默认折叠,点头上的 ▶ 展开后是条件摘要与已勾选的名字(只占一行,装不下的折成
+N,点名字可单独取消;要把取消掉的勾回来走「编辑」);「清空全部」一次清掉。下方是全部匹配结果预览:跨卡片按图层去重,点某行就从所有卡片里取消它,「全选」再全勾回来。
点「继续添加」回到查找页换关键词再查一批,多个关键词就是多张卡片;攒够了点「确认」,预览里的层一次性成为图层面板的当前选中、弹窗关闭,重命名预览随即更新,之后照旧能用鼠标继续增减选中。点「取消」或右上角 ✕,这次查找的内容全部作废,选中不受影响。
四种方式
| 方式 | 行为 |
|---|---|
| 替换 | 把原名里的「查找内容」换成新文字;没匹配到的原样不动 |
| 重新命名 | 整个名称直接换掉 |
| 前缀 | 在原名前面拼接 |
| 后缀 | 在原名后面拼接 |
连续编号:打开「数字编号 n」后,模板里单独的字母 n 会被替换成连续数字 —— Button、Icon 里的 n 不算。可设置:
- 起始数字、递增数字(如
Button_n+ 起始 3 + 递增 2 →Button_3、Button_5、Button_7…) - 数字位数 1–4 位,不足补 0
- 命名方向:沿图层面板从上到下 / 从下到上
预览实时显示「原名称 → 新名称」,重名会标出 ⚠同名。新旧名相同、替换后为空、未匹配到的行都不会写回 PS。整批合并为一条历史,Ctrl+Z 一步撤销。
选中一个像素图层(拼合的素材图 / 多元素图层),自动识别其中互不相连的内容块,把每一块复制成独立图层,按从上到下、每行从左到右依次命名为 0、1、2…
原图层保持不变,可放心撤销。
保持元素完整(开关,默认关)
- 关:严格按像素是否相连拆分 —— 字母
i的点会单独成为一层 - 开:先闭合 ≤6px 的抗锯齿裂缝,再按本图推导的自适应阈值把靠得很近的连通块并回同一图层;规则排列的字符表 / 雪碧图会被识别为网格,按格拆分而不做合并
同一页里三个功能并列,都作用于图层面板中最外层的选中项(选中组时组作为整体参与,不会连它的子图层一起算)。
选中的图层逐个转换为独立智能对象 —— 绝不把多个图层合并进同一个智能对象(这正是 PS 原生「转换为智能对象」的行为)。已是智能对象的自动跳过。图层名称、顺序、位置、所在组与视觉效果全部保持不变。
为每一个选中对象分别新建一层父级组并把它嵌套进去 —— 选中几个就建几个组,绝不合并。新组沿用原对象名称,建在对象原来的父级、原来的位置上:图层顺序、所在组、组内结构、名称、样式、混合模式、不透明度、蒙版与智能对象属性全部不变。无法处理的对象(如背景图层)会被跳过并在结果里报出。
所有选中对象按同一个 X/Y 偏移量整体平移,对象之间的相对位置、排列关系完全不变。
- 相对位移,不是绝对坐标:不需要指定左上角 / 中心点之类的基点
- 距离框留空即为 0,该轴不动;填负数自动转成正数并翻转方向(
→ -20会变成← 20) - 框内按 Enter 直接执行;↑/↓ 加减 1px,Shift+↑/↓ 加减 10px
- 数值执行后不清零,连点即可累加;走过头就点一下反方向箭头再移一次
- 选中父组和它的子图层时自动去重,只移动父组,子图层不会走出双倍距离
- 锁定图层与背景图层自动跳过,不影响其余对象
- 允许移动到画布外,不会自动改变画布尺寸
选中 2 个以上对象,按横向或竖向自动排成一排。
智能空间排序 —— 顺序不看图层面板,按对象在画布中的实际位置:
- 横排:先从上到下识别「行」,行内从左到右
- 竖排:先从左到右识别「列」,列内从上到下
行列识别用 Bounds 重叠比(重叠超过自身一半即归为同一带)而不是坐标相等,所以顶边不齐、高度差异大的真实素材也能正确归行。没有明显行列结构的散乱对象也会给出稳定、可复现的顺序。
间距是相邻对象的真实边缘距离,不是中心距。带投影 / 外发光的图层优先按主体边界(boundsNoEffects)计算,避免空出一大截。
锚点保持原位:排序后的第一个对象(横排=最上一行的最左,竖排=最左一列的最上)不动,其余依次贴过去,整批版面不会漂走。
| 设置 | 可选值 | 默认 |
|---|---|---|
| 排列方向 | 横排 / 竖排 | 横排 |
| 对齐方式(横排) | 顶部 / 居中 / 底部 | 底部 |
| 对齐方式(竖排) | 左侧 / 居中 / 右侧 | 左侧 |
| 对象间距 | 0–9999 px | 10 px |
| 自动扩展画布 | 开 / 关 | 关 |
| 画布边距 | 0–9999 px | 10 px |
横排与竖排各自记忆上次用的对齐方式。开启「自动扩展画布」后,只向真正超出的方向扩展并留出「画布边距」(与对象间距是两个独立参数);关闭时允许对象留在画布外,不动画布。
位移一律取整 —— 像素图层做小数位移会被重采样发虚。游标按取整后的实际落位推进,误差不沿链累积,每段间距与设定值最多差 1px。
锁定图层会中止排版并提示解锁(插件不擅自解锁)。这一点与快速平移不同:那边是跳过锁定层继续,这边排一半再报错会留下更难收拾的现场。
填好行列与尺寸,一键在当前文档画出矢量形状表格 —— 不是像素、不是选区,画完颜色、大小、圆角都能继续改。
表格画在当前视图的正中间:放大到局部工作时,表格就出现在眼前,而不是跑到画布中心去。读不到视图信息时自动退回画布居中。
两种输出方式
| 输出 | 结果 |
|---|---|
| 单一形状 | 整张表格的线条合成一个形状图层(开启单元格填充时再加一层填充,两层套一个组) |
| 独立单元格 | 每格一个独立矩形图层,命名 R1C1、R1C2…,放进一个组;描边与填充是两套独立属性,可以同时存在 |
相邻格子共用一条边 —— 独立单元格模式下每格自带内侧描边,紧挨着排会让两条 1px 描边并成 2px,比外边框粗一倍。插件把相邻矩形重叠一个线宽,两条描边落在同一列像素上,内部线与外边框都是 1×粗细。「表格总尺寸」模式下重叠量会被补回去,画出来的整体宽高仍精确等于填入的数值。
结构开关(外边框 / 内横线 / 内竖线,可多选)只对单一形状模式有效,独立单元格模式下自动置灰。行距或列距大于 0 时格子之间本就断开,单一形状模式会自动从连续表格线切换成「每格一个描边环」。
| 设置 | 可选值 | 默认 |
|---|---|---|
| 尺寸方式 | 单元格尺寸 / 表格总尺寸 | 单元格尺寸 |
| 输出 | 单一形状 / 独立单元格 | 单一形状 |
| 结构 | 外边框 · 内横线 · 内竖线 | 三项全开 |
| 宽 / 高 | > 0 px | 100 / 100 |
| 行 / 列 | 正整数 | 3 / 3 |
| 行距 / 列距 | ≥ 0 px | 0 / 0 |
| 粗细 | > 0 px | 1 px |
| 圆角 | ≥ 0 px | 0 px |
| 颜色 | 十六进制 / 点色块开拾色器 | 前景色,取不到则 #000000 |
| 单元格填充 | 开 / 关 | 关 |
| 填充 | 十六进制 / 点色块开拾色器 | #cccccc |
切换尺寸方式时两个数值框自动换算 —— 从「单元格尺寸」切到「表格总尺寸」会填入算好的总宽高,反之亦然,不用自己心算。
输入框的取值模型:当前值以灰字提示显示,点进去框自动清空可直接输入,按 Enter 确认并退出输入框;点进去没改就移开,仍保持进来时的数值。整页设置跨会话记忆。
形状图层超过 500 个时会先弹窗确认,避免几千格把 PS 拖死。整次绘制在历史记录中为一步,Ctrl+Z 一次撤销。
已知限制:独立单元格画出的矩形是路径形状,Photoshop 属性面板里改不了圆角(
keyOrigin*这类实时形状元数据对脚本只读,写不进去)。要改圆角就在面板里改好参数重画。状态栏会明确回报本次是不是实时形状。
给 Photoshop 原生「新建参考线版面」补上它缺的那件事 —— 把建过的版面记下来:
在原生弹窗里建一次 → 插件自动记录 → 下次点「应用」一键重放
不用再反复回忆和重填列数、列宽、装订线、四边边距。
参数一个都不在面板里。点面板上的 新建参考线版面,打开的就是 Photoshop 自己的弹窗(和「视图 > 新建参考线版面」完全同一个):
- 列 / 行 / 数量 / 宽度 / 高度 / 装订线 / 边距 / 列居中 / 清除现有的参考线,全在弹窗里填;
- 勾上弹窗里的预览就能边改边看;
- 点「确定」才创建,直接关掉弹窗则文档里什么都不留。
打开时的初值:和你手动点菜单打开时一模一样 —— 首次是 Photoshop 的出厂默认,之后每次都自动带出上一次确定的设置。想用更早建过的某一版,去下面的「最近使用 / 收藏版面」点「应用」。
弹窗点了确定之后,插件会把这一版写进「最近使用」,存的就是你在弹窗里填的那一版。创建成功后状态栏报一句摘要(如 已创建参考线版面:6列 / 8行),完整参数在记录里看。
「最近使用」和「收藏版面」两个入口并排一行,按钮上带条数(如 最近使用 (5)),点开各自的弹窗列出全部记录 —— 每条显示摘要、完整参数、创建时画布尺寸与时间,右侧是操作按钮。
| 弹窗 | 每条的操作 |
|---|---|
| 最近使用 | 应用 / ☆ 收藏(已收藏显示 ★,再点取消)/ 删除;底部有「清空历史」(二次确认) |
| 收藏版面 | 应用 / 改名 / 删除 |
- 最近使用保留 20 条并自动去重 —— 参数完全相同的不会堆成多条,而是把原记录提到最前;
- 应用不弹窗,直接重放那一版;
- 收藏可自定义名称(最长 24 字),不受 20 条上限影响;
- 删除记录只删插件里的数据,不会动文档里的参考线。
记录里的摘要列 / 行 / 边距三块都会写出来,没设的那块明写「未设置」,例如 列 未设置;行 5 · 高度自动 · 装订线 0px;边距 未设置 —— 不用点开也知道那一版到底设了什么。
跨尺寸复用:记录里存的是「自动」宽高时,应用到别的画布上会按当前画布重新计算;存的是固定值则照原值创建。所以同一套版面能在 1920 和 2560 的稿子上通用。
「列」要生效,弹窗里**「数字」必须填**:只勾上「列」、只填装订线而数字留空,Photoshop 建出来的就是 0 列,记录里自然是「列 未设置」。行同理。
弹窗里可以按像素 / 百分比 / 厘米填写,插件统一折算成像素保存(百分比按画布尺寸、物理单位按文档分辨率折算)。
没走插件按钮、自己去菜单里建的那一版不一定会自动进记录 —— 想留下它,用下面的 收藏当前版面。极少数情况下这一版的参数读不出来,状态栏会如实说明本次没有记录,不会编一条不准的进去。
两个入口下面还有一个 收藏当前版面 按钮:把当前文档里已经画好的参考线整套存进收藏,不用照着重建一遍 —— 别人给的源文件、很久以前建的版面、临时调出来的一套线,都能直接收下。
- 能认出规则(几列几行 / 装订线 / 边距)就按参数存,之后应用到别的尺寸会重算,和普通收藏完全一样;
- 认不出来的(手摆的、拼出来的)就按原坐标存成快照,列表里显示成
纵 8 条 / 横 4 条 · 自定参考线 · 按原坐标重放,应用时逐条还原(不缩放:位置是当初挑的,缩了就不是那一版了;画布尺寸和当初不同会在状态栏注明); - 不管哪种,坐标都会一起存下来:应用时若画布尺寸和收藏时一样,就按坐标原样还原,保证「和收藏时看到的一模一样」;换了尺寸的稿子才用参数重算。这一步是必要的 —— 有些版面用 PS 的版面参数表达不出来,比如「4 列 + 左右边距、没有横线」只能存成「边距 上0 下0 左100 右100」,而这套参数在 PS 里还会多画出画布上下两条边线;
- 同一套线重复收藏只提示「已经在收藏里了」,不会堆出第二条;文档里一条参考线都没有时也只提示。
| 按钮 | 生成 |
|---|---|
| 十字中心 | 垂直 50% + 水平 50% 两条中线 |
| 九宫格 | 横竖各三等分,共四条 |
这两个不经过弹窗、点了直接建,恒为追加,不会清掉已排好的版面;与已有参考线重合的位置自动跳过,连点也不会堆出重复线。它们不是「版面」,不进记录。
显示 / 隐藏(只改显示状态,不删数据)、锁定 / 解锁(防止在画布上误拖)、清除参考线(下拉可选:全部 / 仅横向 / 仅纵向)。
所有操作只作用于当前激活文档,切换文档后自动跟着切;没有打开文档时按钮整体置灰并提示。参考线坐标以标尺原点为基准(与 PS 原生行为一致)。插件自己做的创建 / 清除在历史记录中为一步,Ctrl+Z 一次撤销。
默认把当前文档每个叶子图层切成独立图片(紧贴像素裁切、带透明)。
颜色标记规则:图层 / 组标红色 → 不切;组标蓝色 → 整组合并为一张(组内红色图层 / 红色子组自动排除)。优先级 红 > 蓝 > 默认。
命名:[项目名_]PSD名_组名(逐层)_图层名,_ 分隔。中文取拼音首字母、全小写、去空格与符号。本次运行内重名自动加 _2/_3;目标文件夹已存在同名文件时逐个询问覆盖 / 跳过,并可选「全部覆盖」「全部跳过」。
给每个图标组加一个名称含「定位格」的参考图层,按定位格摆放图标。导出时以定位格为基准框:未超出则按定位格尺寸导出,超出则自动补足空白像素,确保图标居中。定位格本身不参与切图,隐藏后仍可识别。
| 项 | 可选值 | 默认 |
|---|---|---|
| 包含隐藏图层 | 开 / 关 | 开 |
| 完整导出超出画布部分 | 开 / 关 | 开 |
| 只对选中的图层 / 组切图 | 开 / 关 | 关 |
| 格式 | PNG / JPG / WebP / GIF / BMP | PNG |
| 倍率 | 0.25 / 0.5 / 1 / 2 / 3 / 5 / 10 x | 1x |
| 位置 | 点文件夹图标预选 | 未设置时导出前弹窗 |
切图过程中主按钮变红,点它或按 ESC 可暂停并询问「终止 / 继续」。选择终止会关闭遗留的临时文档、切回原文档并恢复到切图前的历史状态。
| 记忆多久 | 项 |
|---|---|
| 跨会话(localStorage) | 一键排版全部设置;快速平移的两个方向;快速绘制表格全部设置;参考线助手的最近使用 20 条 + 收藏版面 |
| 本次会话(PS 开着期间,关闭 PS 后清空) | 项目名称、导出位置 |
| 不记忆(每次打开面板重置) | 快速平移的两个距离 —— 默认为空即 0px,面板打开期间输入的值会留在框里以便连点累加 |
参考线的版面参数不由插件保存:它们填在 Photoshop 的原生弹窗里,由 PS 自己记住上次的设置。插件保存的是「建过哪些版面」—— 最近使用与收藏版面,点「应用」即可重放。
- Node ≥ 18、npm
- Photoshop 2022+(UXP manifest v5,manifest 里
host.minVersion为 23.3.0) - Adobe UXP Developer Tool (UDT) —— 开发期加载与调试
npm install # 安装依赖
npm test # 运行纯逻辑单测(vitest)
npm run test:watch # 单测 watch 模式
npm run build # 打包出可加载的插件目录 dist/plugin/
npm run pack # build + 打成可双击安装的 dist/Sliceman_vX.Y.Z.ccx
npm run icons # 重新生成插件 / 面板图标 PNG(含必需的 @1x / @2x 后缀)
npm run install:ps # build + 直接装进本机 PS 的插件目录
npm run uninstall:psnpm run build 会把 src/ui/panel.js 打包(内联 pinyin-pro 离线词典,photoshop / uxp 作为宿主注入保持 external),并把 manifest.json、index.html、styles.css、icons/ 一起拷进扁平目录 dist/plugin/。
npm run build- UDT →
Add Plugin→ 选dist/plugin/manifest.json(是 dist 里的那个,不是 src) Load→ Photoshop 出现「Sliceman」面板- 改代码后重新
npm run build,UDT 里点Reload
改了
src/一定要先npm run build再 Reload —— PS 加载的是dist/plugin/,只改源文件 Reload 读到的还是旧产物。
npm run pack # → dist/Sliceman_vX.Y.Z.ccx- 关闭 UDT 里加载的开发版(避免冲突)
- 双击
.ccx→ Creative Cloud 的 Unified Plugin Installer 弹确认 → 安装 - 重启 Photoshop → 插件菜单出现「Sliceman」
scripts/pack.mjs 在打包前会逐个断言 manifest 声明的图标在 dist/plugin/ 里真实存在。manifest 里的 path 是模板不是真文件名 —— PS 会按 scale 拼出 @1x/@2x 去找,少一个后缀就是面板标签空白。
双击无反应时:确认已登录 Creative Cloud 桌面端,且
UnifiedPluginInstallerAgent存在 (通常在C:\Program Files\Common Files\Adobe\Adobe Desktop Common\RemoteComponents\UPI\...)。
纯逻辑放 src/lib/*,在 Node 下用 vitest 覆盖;src/ps/* 与 UI 依赖 Photoshop 运行时,只能在 UDT 里对真实 PSD 手动验证。新功能一律先把可判定的部分抽进 lib/。
| 路径 | 职责 | 单测 |
|---|---|---|
src/lib/normalize.js |
单段规范化(拼音首字母 + slug) | ✅ |
src/lib/naming.js |
文件名拼接 + 占位兜底 + 去重 | ✅ |
src/lib/traversal.js |
图层树遍历,产出导出任务(红 / 蓝 / 默认规则) | ✅ |
src/lib/symbols.js |
定位格识别 + 以定位格为基准的导出框计算 | ✅ |
src/lib/rename-core.js |
批量重命名(四种方式 + n 编号 + 预览行) | ✅ |
src/lib/search-core.js |
按名称查找图层(四种匹配 + 类型 / 隐藏 / 范围过滤 + 命中区间) | ✅ |
src/lib/segment.js |
智能分割(连通域标记 + 自适应合并 + 网格检测) | ✅ |
src/lib/layout-core.js |
一键排版(行列识别 + 位移计算 + 画布扩展量) | ✅ |
src/lib/move-core.js |
快速平移(输入解析 + 负数归一 + 方向换算) | ✅ |
src/lib/table-core.js |
绘制表格(单元格排布 + 共边重叠 + 圆角矩形路径点) | ✅ |
src/lib/view-core.js |
视图变换解析 → 当前视图中心 → 表格左上角坐标 | ✅ |
src/lib/guide-core.js |
参考线版面几何 + 坐标去重 + 记录去重与上限 + newGuideLayout 描述符双向映射 + 从参考线反推版面参数 | ✅ |
src/ps/layer-tree.js |
读文档图层树为纯数据(含颜色标记、id) | 手动 |
src/ps/exporter.js |
临时文档 + mergeVisible 隔离 + trim + 存图 | 手动 |
src/ps/renamer.js |
图层面板顺序读取 + 批量改名写回 | 手动 |
src/ps/layer-finder.js |
读全文档图层为扁平清单(含路径 / 可见性)+ 按 id 批量选中 | 手动 |
src/ps/smart-split.js |
取像素 → 调 segment → 各块复制成独立图层 | 手动 |
src/ps/smart-object.js |
逐个转独立智能对象 | 手动 |
src/ps/group-maker.js |
逐个套父级组 | 手动 |
src/ps/layouter.js |
读 Bounds → 调 layout-core → 逐个位移 + 扩画布 | 手动 |
src/ps/mover.js |
一条 move 描述符批量平移选区 | 手动 |
src/ps/layer-lock.js |
批量读图层锁定状态(排版 / 平移共用) | 手动 |
src/ps/table-maker.js |
路径组件 → 形状图层描述符 + 建组 + 拾色器 + 读视图 | 手动 |
src/ps/guides.js |
播菜单项开原生弹窗 + 静默重放 + 动作通知 + 弹窗前后参考线快照 + 参考线读 / 建 / 清 + 显隐与锁定 | 手动 |
src/ui/ |
面板 HTML / CSS / JS | 手动 |
面板本身还有两层自动化兜底,避免「面板全白」这类只有真机才发现的问题:
tests/ui-ids.test.js 静态比对 panel.js 引用的每个 id 在 index.html 里都存在,并检查 HTML/CSS 没有踩 UXP 的渲染红线;
tests/panel-smoke.test.js 用一套 DOM / Photoshop 桩把打包产物真跑一遍,验证初始化不抛错,并模拟两条完整链路:「点新建参考线版面 → PS 建出参考线 → 写记录 → 点应用重放」(断言下发给 PS 的是菜单项而不是参数描述符、三条记录来源各自能写进记录、「收藏当前版面」的两种存法、参数会损耗的版面在同尺寸下按坐标原样还原、原生 newGuideLayout 被接受却一条线都没画时退回插件自己建),以及「开查找弹窗 → 查找页搜索勾选 → 添加到查找列表 → 继续添加下一批 → 查找项页增删改 → 确认选中 → 改名」(断言列出的行与「找到 / 已勾选」统计、全选 / 反选、排序下拉、「含隐藏图层」默认勾选且不跨会话记忆、搜索按钮与回车不靠输入事件也能查、卡片的停用 / 折叠 / 删除 / 单项取消、预览跨卡片去重与「点行=从所有卡片取消」、编辑卡片时条件回填且保存是替换不是新增、清空全部后确认置灰且不下发、重开弹窗时查找项清零、下发给 PS 的 select 描述符、查找范围为「已选中的组内」时组内子层真的进得了预览、弹窗期间页面输入框被藏起、取消不留痕、背景层标注、加入后图层被删时跳过)。
- 不支持 CSS grid,一律用 flex;可点击元素的子元素要统一
pointer-events: none,否则点击落在子元素上。 - 文字编辑控件恒绘制在所有 DOM 之上,z-index 无效 —— 这是 Adobe 官方已知问题,换成普通
<input>也一样。悬停说明浮层压到sp-textfield时会被顶穿,解法是浮层出现期间把输入框visibility: hidden(必须设在控件自身,设在父级不生效)。 - 多张位图 /
box-shadow/ 渐变 /position: fixed会让 PS 卡死闪退,图标一律用内联净化过的 SVG。 sp-picker/ 原生select/sp-switch不稳,下拉与开关都是自绘的。- 正则不支持 lookbehind(
(?<!...)真机不展开),边界判断用手工扫描,见rename-core.js。 - 文字控件的原生绘制层还会向下溢出一两像素,紧贴时会盖掉输入框的底边框,
overflow: hidden管不到它。解法是把边框画在外层div上、上下各留 2px 缓冲;框内出现深浅两种底色则是 UXP 自绘的内层控件皮肤,用appearance: none+box-shadow: none去掉。 - 实时形状元数据(
keyOriginType/keyOriginRRectRadii)对脚本只读 —— 四种写法真机全部失败。脚本建的矩形只能是路径形状,Photoshop 属性面板里改不了圆角,别在这上面耗时间。 - 面板的
hide()回调从不触发(PS-57284:面板被折叠 / 隐藏时收不到任何事件,show()也只在首次显示时来一次)。所以「面板一关就把预览的改动撤掉」这类设计做不到 —— 需要「不确认就不留痕」,只能把活交给 PS 原生弹窗。 - 给 batchPlay 传描述符会顶掉原生弹窗自己的「上次设置」记忆:哪怕传的是空对象
{_obj:'newGuideLayout'},PS 也会按这份描述符初始化弹窗、缺的键用出厂默认补上,表现就是每次打开都像第一次。要保留原生记忆就得播菜单项(select+menuItemClass)。代价是 batchPlay 不回传执行参数,得另想办法拿(本插件靠对比文档前后状态反推)。 - 单步撤销优先官方
doc.suspendHistory。smart-object.js里那套「快照折叠」只在转智能对象流程真机验证过,别往别处复用 —— 用在改名流程上出现过历史倒回文档打开状态、改动全丢。
-
layer-tree:红色图层label==='red'、蓝色组label==='blue'、结构与图层面板一致 -
exporter:普通层紧贴像素、超画布开关两态、蓝组合并排除红色(含嵌套红色组)、全透明跳过 - 端到端切图:命名 / 去重 / 红蓝规则 / 隐藏开关 / 同名询问 / ESC 暂停与终止恢复
- Symbols 切图:图标未超定位格按定位格尺寸导出,超出则补白居中
- 批量重命名:四模式预览与写回、n 编号(起始 / 位数 / 方向按面板序)、Ctrl+Z 一步撤销
- 智能分割:开关两态、网格素材按格拆、原图层未改动
- 批量转智能对象 / 新建独立组:逐个独立不合并、层级与属性不变、一步撤销
- 一键排版:行列识别正确、边缘间距精确、锚点未动、四方向扩画布、锁定层中止并提示
- 批量快速平移:多选统一位移、父子去重不双倍、锁定层跳过、Enter 与方向键、一步撤销
- 快速绘制表格:画在当前视图正中、两种尺寸方式互相换算、独立单元格相邻边不加倍、圆角生效、拾色器、一步撤销
- 新建参考线版面:点按钮弹出的是 PS 原生「新建参考线版面」、勾预览能边改边看、点确定后参考线生效、直接关掉弹窗则文档毫无变化且不记录
- 弹窗初值:第一次打开是 PS 的出厂默认;确定一版之后再打开,列 / 行 / 装订线 / 边距全是上一次的数值,和手动点「视图 > 新建参考线版面」打开的完全一致
- 每次点「确定」都在「最近使用」里多一条(入口条数 +1),状态栏只报一句摘要(如
已创建参考线版面:6列 / 8行),摘要里的列 / 行 / 边距和弹窗里填的对得上;相同参数不产生第二条 - 记录摘要:列 / 行 / 边距三块都显示,没设的写「未设置」;同时设了列和行时两块都有数字
- 画布上先建一套版面 → 点「收藏当前版面」→ 起名确认 → 进「收藏版面」,摘要和画布上的一致;清掉参考线后点「应用」能原样还原;手摆几条不规则的线再收藏,显示成
纵 x 条 / 横 y 条且能原样还原 - 一键重放:点记录里的「应用」不弹窗、参考线与当时一致、记录提到最前;换到别的尺寸画布上应用时「自动」宽高按新画布重算
- 参考线收藏:☆ 收藏并命名、改名、删除只删数据不动文档、清空历史二次确认、重启插件后仍在
- 参考线控制:显隐 / 锁定按钮文案跟随真实状态、清除全部 / 仅横向 / 仅纵向、无文档时按钮置灰
-
.ccx双击安装可用,面板标签图标不空白
设计与计划见 docs/plans/、docs/superpowers/specs/、docs/superpowers/plans/。







