作者:用于创作与维护“动态图解”(motion diagrams)的技能。
用途 用于向插件市场新增插件,或在 scripts/animations/scenes/ 下创作、编辑、重新渲染某个场景,包括为插件详情页制作动画时使用。
核心约定 每个市场条目对应一个手工编写的场景,位于 scripts/animations/scenes/<plugin>.svg,并展示在该插件的详情页上。docs/plugins/<plugin>/anim.mp4 与 anim-poster.png 由该场景派生而来。不要直接修补视频——应修改场景并重新渲染。 场景必须说明插件做什么:什么在移动、按什么顺序、最终有什么不同。只是“东西在动”的场景属于装饰。
工作流程
- 从 .claude-plugin/marketplace.json 读取插件分类,再从 scripts/animations/palette.js 取该分类的标记与墨色。每个场景只用一个强调色。
- 将 references/scene-template.svg 复制为 scripts/animations/scenes/<plugin>.svg。
- 编排节拍。references/binding.md 包含当前使用的令牌、节拍模式与场景机制——复用已有形状,不要自创。
- 运行 node scripts/animations/render.js --check,约一秒内验证契约,无需 Chrome。应持续运行,而非最后只跑一次。
- 运行 node scripts/animations/preview.js <plugin>,一帧约 1 秒;用 AT=0.3 查看另一时刻。这能发现检查器无法发现的问题:标签压在连接线上、盒子越出边框、路径悬在半空。
- 运行 node scripts/animations/render.js <plugin> 生成 mp4 与海报,约 75 秒。
- 运行 npm run generate && npm test。
- 将场景、mp4 与海报一起提交。它们一旦不同步就会漂移。
--check 强制的内容
- 周期:每个 dur 为 8s,repeatCount="indefinite",事件放在 keyTimes 中。
- 数量:keySplines = n−1,values = n,keyPoints = n。不匹配会静默禁用动画。
- 底色:第一个元素是 #faf9f6 的矩形。
- 文字:每处文字填充必须是合法墨色令牌——在纸色上达到 4.5:1,靠计算而非目测。
- 色块:实心矩形使用分类墨色,使其上的白色文字达到 4.5:1。
- 网格:按 20px 对齐;已有场景在 grid-baseline.json 中记有冻结债务,只能改善。
palette.js 会在检查任何场景之前重新推导自身的对比度声明,因此令牌若被改到下限以下,会直接使构建失败,而不是悄悄发布。
无门禁可查的内容
- 每次变化需两个节拍。过渡表示某物到达;落定表示该物已不同。只有一个节拍读起来像装饰。
- 变更后的状态保持到周期的 0.95。没有保持的过渡只显示运动,不传达结果。
- 路径避开它不涉及的节点。一条通向 C 的路径若穿过 B,会被读作已进入 B。
- 位置预先分配。从第一帧起就用浅色虚线引导线画出路径,使布局在部件落位时不会重排——重排读起来像重写,而非扩展。
- 海报要为偏好减弱动态的读者承载整张图解。要检查海报,不只是视频。
常见错误
- 用 begin="other.end" 链接:无法拖拽到某一帧,导出会坏。
- 因“标签是次要的”而用更浅的灰:会达不到下限;不存在合法的、比 muted 更浅的灰。
- 把移动的点改色为墨色:点是标记,下限为 3:1——保持其为标记色。
- 编辑 anim.mp4 或未重新渲染就提交场景:视频与源会漂移,且无人报告。
- 在已有场景中把几何微调出网格:棘轮会使构建失败;基线只会下降。
参考文件
- references/binding.md——本市场的令牌、处理方式与场景机制
- references/mechanic.md——可移植的声明式 SVG 运动文档
- references/scene-template.svg——合规的骨架