catalog/repos/agents365-ai--excalidraw-skill.md

254 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 自然语言生成手绘图表
`Excalidraw` `图表生成` `Claude Code技能` `可视化` `SVG导出`
# Excalidraw 图表技能
自然语言生成手绘风格图表,自动导出为 PNG/SVG 的 Claude Code 技能。
[English](README_EN.md)
## 为什么选这个 skill
- **自然语言生成图表** — 用中文或英文描述你想要的内容,自动生成专业图表,无需手动拖拽布局。
- **零学习成本** — 不需要学习 Excalidraw JSON 格式、Mermaid 语法或任何 DSL直接说就行。
- **零安装即可使用** — Kroki API 方案只需要 `curl`,无需 npm、Docker 或浏览器自动化工具。
- **主动生成** — 当 Claude 检测到复杂系统需要可视化解释时,自动触发画图,不需要你明确要求。
- **专业设计体系** — 内置语义色彩系统60-30-10 法则)、字体大小层次、箭头语义(实线/虚线/点线),以及针对不同图表类型的布局模式。
- **5 种图表模式** — 流程图、架构图、时序图、思维导图、泳道图,各有专门的布局规则和间距规范。
- **反模式防护** — 文档化常见陷阱(区域文字重叠、箭头面条化、标签碰撞),让 Claude 在生成前就规避问题。
- **智能尺寸计算** — 根据标签文字自动计算元素宽度(`max(160, charCount * 9)`CJK 字符自适应,杜绝文字截断。
- **精确间距体系** — 有标签/无标签箭头的像素级间距规则,列间距、行间距、区域内边距一目了然。
- **3 种箭头路由** — 直线、L 形折线、曲线弯折三种路由模式,连线清晰不混乱。
- **可编辑输出** — `.excalidraw` 文件可在 [excalidraw.com](https://excalidraw.com) 中打开编辑,箭头交互绑定完整保留。
- **支持离线** — 本地 CLI 方案(基于 Firefox完全在本机运行无需网络。
## 与同类 skill 对比
| 能力 | **本技能** | 原生 Claude Code | 其他技能 |
|------|:-:|:-:|:-:|
| 生成 Excalidraw JSON | ✓ 有设计体系引导 | ✓ 能写但无布局规范 | ✓ 各有侧重 |
| 导出 PNG/SVG | ✓ 自动完成 | ✗ 需手动要求 | 部分支持 |
| 零安装导出Kroki API | ✓ 仅需 curl | ✗ 无备选方案 | 不支持 |
| 主动触发(自动检测) | ✓ 3+组件自动触发 | ✗ 仅在明确要求时 | 不支持 |
| 语义色彩系统 | ✓ 60-30-10 法则 | ✗ 无设计规范 | 部分支持 |
| 精确间距规则 | ✓ 像素级规范 | ✗ 凭感觉布局 | 部分支持 |
| 反模式防护 | ✓ 内置陷阱文档 | ✗ 无防护 | 不支持 |
| 智能尺寸计算(中文感知) | ✓ 自动适配 | ✗ 容易截断 | 不支持 |
| 箭头路由(直线/折线/曲线) | ✓ 3 种模式 | ✗ 仅直线 | 部分支持 |
| 双向箭头绑定 | ✓ 完整交互 | ✗ 静态连线 | 部分支持 |
| 中英双语 | ✓ 关键词触发 | ✗ 无关键词触发 | 不支持 |
| 端到端工作流 | ✓ 生成→导出→报告 | ✗ 仅生成代码 | 部分支持 |
| 单文件自包含 | ✓ 一个 SKILL.md | 不适用 | 否4-6 个文件) |
**相比原生 Claude Code 的核心优势:**
- **完整管道** — Claude Code 能写 Excalidraw JSON但不会自动导出图片、不懂设计规范。本技能提供从生成到交付的完整自动化
- **专业品质** — 内置语义色彩、精确间距、箭头路由等设计体系,输出即可用,无需手动调整
- **防错机制** — 反模式防护避免文字重叠、箭头混乱等常见问题
- **主动画图** — 讨论架构时自动触发,不需要你专门要求
## 为什么用 Skill 而不是 MCP
Excalidraw 的 JSON 格式就是一个元素数组,每个元素有 x/y/width/height —— Claude 天然就能写。Skill 教 Claude「怎么画」MCP 给 Claude「一个画笔」。当 LLM 自己就能画的时候,教它怎么画更好。
| 维度 | Skill | MCP Server |
|------|-------|------------|
| 原理 | 提示词注入到 Claude 上下文 | 独立运行的服务进程 |
| 生成方式 | Claude 直接写 JSONLLM 原生能力) | 需要代码处理 JSON 生成逻辑 |
| 灵活性 | Claude 理解语义,自由布局 | API 参数固定,灵活性受限 |
| 安装 | 复制一个文件 | 启动服务、配置 MCP |
| 依赖 | 零 | Node.js / Python 运行时 |
| 导出 | 调用现有工具curl / CLI | 需内置导出逻辑或仍然调 curl |
MCP 的价值在于提供 Claude **自身做不到的能力** —— 数据库访问、浏览器自动化、带认证的 API。图表生成的核心是 **设计布局 + 写 JSON**,恰恰是 LLM 最擅长的。
## 功能说明
- 根据自然语言描述生成 `.excalidraw` JSON 文件
- 通过 **Kroki** API 导出为 SVG — 零安装,仅需 `curl`
- 使用 `excalidraw-brute-export-cli` 本地导出为 PNG/SVG基于 Firefox
- 当图表有助于解释复杂系统时自动触发
- 自动应用语义色彩、字体层次和箭头样式
- 根据标签文字自动计算元素宽度CJK 字符自适应
- 大型图表分段构建,避免 token 超限
- 生成完全可交互的文件,支持双向箭头绑定
## 特性
### 语义色彩系统
8 种语义色彩类别 — 主要(蓝)、成功(绿)、警告(黄)、错误(红)、外部(紫)、流程(天蓝)、触发(橙)、中性(灰蓝)。遵循 60-30-10 法则60% 留白、30% 主色调、10% 强调色。
### 图表模式
| 模式 | 布局 | 适用场景 |
|------|------|----------|
| 流程图 | 左右或上下200px 间距 | 流程、决策树 |
| 架构图 | 列式布局,精确间距规则 | 系统设计、微服务 |
| 时序图 | 参与者间 200px | API 流程、协议 |
| 思维导图 | 放射状,逐级缩小 | 头脑风暴、概念图 |
| 泳道图 | 水平泳道 + 跨道箭头 | 跨团队工作流 |
### 精确间距体系
| 场景 | 间距 |
|------|------|
| 有标签箭头间距 | 150200px |
| 无标签箭头间距 | 100120px |
| 列间距(有标签) | 400px |
| 列间距(无标签) | 340px |
| 区域内边距 | 5060px |
### 箭头路由
3 种模式直线默认、L 形折线(`points` 直角转折)、曲线弯折(`roundness: { type: 2 }`)。
### 箭头语义
| 样式 | 含义 |
|------|------|
| 实线 | 主流程 |
| 虚线 | 响应、异步 |
| 点线 | 可选、弱依赖 |
### 智能元素尺寸
根据标签文字自动计算宽度:西文字符 `max(160, charCount * 9)`,中日韩字符 `max(160, charCount * 18)`。避免生成图表中的文字截断问题。
### 字体层次
标题28px→ 组标题24px→ 标签20px→ 描述16px→ 注释14px
### 反模式防护
内置常见陷阱文档 — 区域文字居中重叠、跨区域箭头面条化、短箭头标签碰撞、容器透明度规则 — 让 Claude 在生成前就规避错误。
## 依赖项
| 工具 | 用途 |
|------|------|
| `curl` | 将 `.excalidraw` 发送到 Kroki API 渲染为 SVG |
| `excalidraw-brute-export-cli` | 本地导出 `.excalidraw` → PNG/SVG 的命令行工具 |
| `Playwright + Firefox` | 本地 CLI 使用的无头浏览器 |
`curl` 在 macOS、Linux、WindowsGit Bash/WSL上已预装。
## 安装技能
**Claude Code全局**
```bash
git clone https://github.com/Agents365-ai/excalidraw-skill.git ~/.claude/skills/excalidraw
```
**Claude Code仅当前项目**
```bash
git clone https://github.com/Agents365-ai/excalidraw-skill.git .claude/skills/excalidraw
```
**OpenClaw**
```bash
git clone https://github.com/Agents365-ai/excalidraw-skill.git skills/excalidraw
```
**SkillsMP** 在 [skillsmp.com](https://skillsmp.com) 搜索 `excalidraw`,一键安装。
## 安装依赖
### 方式 AKroki API推荐 — 零安装,仅 SVG
```bash
# curl 已预装,验证即可:
curl --version
```
无需额外配置SVG 通过 `https://kroki.io` 渲染。
### 方式 B本地 CLIPNG 必须使用此方式)
```bash
npm install -g excalidraw-brute-export-cli
npx playwright install firefox
```
### 平台说明
| 平台 | 额外步骤 |
|------|----------|
| **macOS** | 需要打一次补丁(见下方) |
| **Windows** | 无需额外操作 |
| **Linux** | 无需额外操作 |
### macOS 补丁(一次性,本地 CLI 必须)
CLI 使用 `Control+O` / `Control+Shift+E`,但 macOS 需要 `Meta`Cmd
```bash
CLI_MAIN=$(npm root -g)/excalidraw-brute-export-cli/src/main.js
sed -i '' 's/keyboard.press("Control+O")/keyboard.press("Meta+O")/' "$CLI_MAIN"
sed -i '' 's/keyboard.press("Control+Shift+E")/keyboard.press("Meta+Shift+E")/' "$CLI_MAIN"
```
## 使用方式
直接描述你想要的图表:
```
画一个微服务电商架构图,包含 Mobile/Web/Admin 客户端API Gateway
Auth/User/Order/Product/Payment 微服务Kafka 消息队列Notification 服务,
以及各自独立的数据库
```
Claude 会自动生成 `.excalidraw` 文件并导出为 PNG。
## 示例
**提示词:**
> 画一个微服务电商架构图,包含 Mobile/Web/Admin 客户端API Gateway含认证+限流+路由),
> Auth/User/Order/Product/Payment 微服务Kafka 消息队列Notification 服务,
> User DB / Order DB / Product DB / Redis Cache / Stripe API
**输出效果:**
![微服务架构图](assets/microservices-example.png)
## 文件说明
- `SKILL.md` — Claude Code 加载的技能指令文件
- `README.md` — 本文件(中文)
- `README_EN.md` — 英文说明
- `assets/` — 示例图表
## 开源协议
MIT
## 支持作者
如果这个 skill 对你有帮助,欢迎支持作者:
<table>
<tr>
<td align="center">
<img src="https://raw.githubusercontent.com/Agents365-ai/images_payment/main/qrcode/wechat-pay.png" width="180" alt="微信支付">
<br>
<b>微信支付</b>
</td>
<td align="center">
<img src="https://raw.githubusercontent.com/Agents365-ai/images_payment/main/qrcode/alipay.png" width="180" alt="支付宝">
<br>
<b>支付宝</b>
</td>
<td align="center">
<img src="https://raw.githubusercontent.com/Agents365-ai/images_payment/main/qrcode/buymeacoffee.png" width="180" alt="Buy Me a Coffee">
<br>
<b>Buy Me a Coffee</b>
</td>
</tr>
</table>
## 作者
**Agents365-ai**
- Bilibili: https://space.bilibili.com/441831884
- GitHub: https://github.com/Agents365-ai