Communitygithub.com

machineroom-dev/animated-diagram

将系统设计主题转化为动画示意图——生成无缝循环的GIF(以及MP4和静态PNG),其中箭头持续流动,每个图标具有独立的空闲动画,并根据项目主题一次性设置样式。

animated-diagram 是什么?

这个AI技能将用户提供的系统设计主题自动转化为高质量的动画示意图,输出为无缝循环的GIF、MP4和静态PNG格式。它支持多种图表模板:流程网格、对比图、分层堆栈和彩色区域系统地图,每种模板都有相应的JSON描述格式。用户只需通过节点和步骤进行描述,渲染引擎会自动完成布局和90帧的动画渲染。该技能需要Node.js ≥ 22、Google Chrome和ffmpeg,并支持主题样式设置(包括从图片提取配色)。渲染过程中会进行碰撞检测(通过check.json报告),确保箭头和标签不重叠,同时对颜色对比度有强制性要求,以保证可读性。它适用于流式系统设计、架构对比、网络拓扑和完整系统架构的动画展示,特别适合用于社交媒体(LinkedIn、X、Instagram、Threads)的图解发布。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/machineroom-dev/animated-diagram/tree/HEAD/skills/animated-diagram

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

动画示意图(Animated Diagram)

你编写一个简短的 JSON 描述(网格单元格中的节点、编号步骤、分组);渲染器会完成布局,检查布局,然后将 90 帧渲染为 <name>.gif、<name>.mp4、<name>.png 和 <name>.check.json。你永远不需要编写坐标。

下面的 $SKILL 指存放此文件的文件夹(在 Claude Code 中为 ${CLAUDE_SKILL_DIR})。需要 Node ≥ 22、Google Chrome 和 ffmpeg。每台机器执行一次:npm install --prefix "$SKILL"。如果设置了 ANIMATED_DIAGRAM_RENDER_LOCK,每次渲染都会等待该锁目录,从而确保每次只有一个 Chrome 实例在渲染。

工作流程

1. 先设置主题

在图片将要存放的位置查找 diagram-theme.json(render 会先检查该目录,然后检查工作目录)。如果不存在,则在执行任何其他操作之前设置一个。询问用户想要的样式:

node "$SKILL/scripts/cli.mjs" theme --preset machine-room-dark          # 或 light, dark
node "$SKILL/scripts/cli.mjs" theme --brand "#E4572E,#17BEBB" --mode light
node "$SKILL/scripts/cli.mjs" theme --from-image logo.png --mode dark
node "$SKILL/scripts/cli.mjs" theme --check my-theme.json               # 验证手动编辑的主题

每个命令都会写入 diagram-theme.json(使用 --out 可更改路径),并打印颜色及其对比度。若主题未能通过对比度检查(每个文本颜色在其背景上必须达到 4.5:1)或暗色规则,则会被拒绝,并会提出最接近的通过颜色。详细信息请见:reference/theme-setup.md。

2. 内容

根据用户的主题或源文本,草拟节点和编号步骤,并在聊天中展示步骤列表:

1. 用户 → DNS:DNS 查询
2. DNS → 用户:返回最近边缘 IP(回复)
3. 用户 → 边缘服务器:GET /logo.png

等待用户确认。每个箭头代表一条主张:在渲染之前,请根据来源验证每一条。

3. 编写 JSON

根据 reference/templates.md 选择模板(流程网格、对比图、堆栈或地图),并按照 reference/diagram-format.md 编写 <topic>.json。从最接近的示例开始:examples/cdn.json(流程网格)、examples/cache-strategies.json(对比图)、examples/web-stack.json(堆栈)或 examples/anatomy-of-an-ai-app.json(地图)。节点仅按单元格放置;offset 是最后一种微调手段,每次仅移动几个像素。

当用户希望在一页上展示整个系统,而不是仅展示一条路径时,使用地图模式:12 到 25 个节点,最多 6 个彩色区域,图例置于图片旁边。在地图中,放置决定一切:将连接最多箭头的节点放在中央,与其通信的对象放在附近,并尽量让大部分步骤连接相邻节点。给一个简短的 title 和 subtitle。

4. 图标

node "$SKILL/scripts/cli.mjs" icons          # 图标库:用户、笔记本电脑、手机、机架、塔式服务器、数据库、缓存……

如果节点需要的图标不在库中,按照 reference/icon-rulebook.md 在图片旁边创建 ./diagram-icons/<name>.js,然后在使用之前将其与两个现有图标并排以 2 倍大小查看:

node "$SKILL/scripts/cli.mjs" icon-sheet <name> laptop rack --out sheet.png

5. 渲染

node "$SKILL/scripts/cli.mjs" render <topic>.json --out out/      # --theme <预设|文件>,--style filled|line|duotone

退出码:0 成功 · 2 检查失败(静态图和 <topic>.check.json 会写入,但不生成 GIF) · 3 尚未设置主题 · 1 输入错误(图表或主题的错误会连同其 JSON 路径一起打印)。

若退出码为 2,请读取 out/<topic>.check.json。每个失败项包含一个 code、涉及的 ids(节点 ID,步骤箭头为 s<index>)和 detail。修复 JSON(移动单元格、缩短标签、拆分步骤、减少行数)后再次渲染——最多 3 轮,地图最多 6 轮,因为移动中心节点可以一次性解开许多箭头。每个代码对应的修复方法在 reference/templates.md 中有说明。然后打开 PNG 自行查看:检查只捕捉重叠,不会捕捉阅读顺序是否别扭。

6. 汇报

向用户提供 GIF、MP4 和 PNG 的路径、GIF 的大小(预算约为 1080×1350 时 1 MB,海报大小 3 MB)以及检查摘要,包括任何警告。

相关技能