Generate Excalidraw diagrams from text content. Supports three output modes - Obsidian (.md), Standard (.excalidraw), and Animated (.excalidraw with animation order). Triggers on "Excalidraw", "画图", "流程图", "思维导图", "可视化", "diagram", "标准Excalidraw", "standard excalidraw", "Excalidraw动画", "动画图", "animate".
Install with Tessl CLI
npx tessl i github:axtonliu/axton-obsidian-visual-skills --skill excalidraw-diagram89
Does it follow best practices?
If you maintain this skill, you can automatically optimize it using the tessl CLI to improve its score:
npx tessl skill review --optimize ./path/to/skillValidation for skill structure
Create Excalidraw diagrams from text content with multiple output formats.
根据用户的触发词选择输出模式:
| 触发词 | 输出模式 | 文件格式 | 用途 |
|---|---|---|---|
Excalidraw、画图、流程图、思维导图 | Obsidian(默认) | .md | 在 Obsidian 中直接打开 |
标准Excalidraw、standard excalidraw | Standard | .excalidraw | 在 excalidraw.com 打开/编辑/分享 |
Excalidraw动画、动画图、animate | Animated | .excalidraw | 拖到 excalidraw-animate 生成动画 |
严格按照以下结构输出,不得有任何修改:
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
# Excalidraw Data
## Text Elements
%%
## Drawing
\`\`\`json
{JSON 完整数据}
\`\`\`
%%关键要点:
tags: [excalidraw]%% 标记包围excalidraw-plugin: parsed 以外的其他 frontmatter 设置.md直接输出纯 JSON 文件,可在 excalidraw.com 打开:
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [...],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}关键要点:
source 使用 https://excalidraw.com(不是 Obsidian 插件).excalidraw与 Standard 格式相同,但每个元素添加 customData.animate 字段控制动画顺序:
{
"id": "element-1",
"type": "rectangle",
"customData": {
"animate": {
"order": 1,
"duration": 500
}
},
...其他标准字段
}动画顺序规则:
order: 动画播放顺序(1, 2, 3...),数字越小越先出现duration: 该元素的绘制时长(毫秒),默认 500order 的元素同时出现使用方法:
.excalidraw 文件文件扩展名:.excalidraw
选择合适的图表形式,以提升理解力与视觉吸引力。
| 类型 | 英文 | 使用场景 | 做法 |
|---|---|---|---|
| 流程图 | Flowchart | 步骤说明、工作流程、任务执行顺序 | 用箭头连接各步骤,清晰表达流程走向 |
| 思维导图 | Mind Map | 概念发散、主题分类、灵感捕捉 | 以中心为核心向外发散,放射状结构 |
| 层级图 | Hierarchy | 组织结构、内容分级、系统拆解 | 自上而下或自左至右构建层级节点 |
| 关系图 | Relationship | 要素之间的影响、依赖、互动 | 图形间用连线表示关联,箭头与说明 |
| 对比图 | Comparison | 两种以上方案或观点的对照分析 | 左右两栏或表格形式,标明比较维度 |
| 时间线图 | Timeline | 事件发展、项目进度、模型演化 | 以时间为轴,标出关键时间点与事件 |
| 矩阵图 | Matrix | 双维度分类、任务优先级、定位 | 建立 X 与 Y 两个维度,坐标平面安置 |
| 自由布局 | Freeform | 内容零散、灵感记录、初步信息收集 | 无需结构限制,自由放置图块与箭头 |
fontFamily: 5(Excalifont 手写字体)" 替换为 『』() 替换为 「」lineHeight: 1.25estimatedWidth = text.length * fontSize * 0.5(CJK 字符用 * 1.0)x = centerX - estimatedWidth / 2estimatedWidth = 5 * 20 * 0.5 = 50 → x = 300 - 25 = 275文字颜色(strokeColor for text):
| 用途 | 色值 | 说明 |
|---|---|---|
| 标题 | #1e40af | 深蓝 |
| 副标题/连接线 | #3b82f6 | 亮蓝 |
| 正文文字 | #374151 | 深灰(白底最浅不低于 #757575) |
| 强调/重点 | #f59e0b | 金色 |
形状填充色(backgroundColor, fillStyle: "solid"):
| 色值 | 语义 | 适用场景 |
|---|---|---|
#a5d8ff | 浅蓝 | 输入、数据源、主要节点 |
#b2f2bb | 浅绿 | 成功、输出、已完成 |
#ffd8a8 | 浅橙 | 警告、待处理、外部依赖 |
#d0bfff | 浅紫 | 处理中、中间件、特殊项 |
#ffc9c9 | 浅红 | 错误、关键、告警 |
#fff3bf | 浅黄 | 备注、决策、规划 |
#c3fae8 | 浅青 | 存储、数据、缓存 |
#eebefa | 浅粉 | 分析、指标、统计 |
区域背景色(大矩形 + opacity: 30,用于分层图表):
| 色值 | 语义 |
|---|---|
#dbe4ff | 前端/UI 层 |
#e5dbff | 逻辑/处理层 |
#d3f9d8 | 数据/工具层 |
对比度规则:
#757575,否则不可读#15803d,不用 #22c55e)#b0b0b0、#999)出现在白底上参考:references/excalidraw-schema.md
Obsidian 模式:
{
"type": "excalidraw",
"version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin",
"elements": [...],
"appState": { "gridSize": null, "viewBackgroundColor": "#ffffff" },
"files": {}
}Standard / Animated 模式:
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [...],
"appState": { "gridSize": null, "viewBackgroundColor": "#ffffff" },
"files": {}
}Each element requires these fields (do NOT add extra fields like frameId, index, versionNonce, rawText -- they may cause issues on excalidraw.com. boundElements must be null not [], updated must be 1 not timestamps):
{
"id": "unique-id",
"type": "rectangle",
"x": 100, "y": 100,
"width": 200, "height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 123456789,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
}strokeStyle values: "solid"(实线,默认)| "dashed"(虚线)| "dotted"(点线)。虚线适合表示可选路径、异步流、弱关联等。
Text elements add:
{
"text": "显示文本",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "显示文本",
"autoResize": true,
"lineHeight": 1.25
}Animated 模式额外添加 customData 字段:
{
"id": "title-1",
"type": "text",
"customData": {
"animate": {
"order": 1,
"duration": 500
}
},
...其他字段
}See references/excalidraw-schema.md for all element types.
## Text Elements 部分在 Markdown 中必须留空,仅用 %% 作为分隔符id(可以是字符串,如「title」「box1」等)IMPORTANT: Do NOT include frameId, index, versionNonce, or rawText fields. Use boundElements: null (not []), and updated: 1 (not timestamps).
{
"id": "unique-identifier",
"type": "rectangle|text|arrow|ellipse|diamond",
"x": 100, "y": 100,
"width": 200, "height": 50,
"angle": 0,
"strokeColor": "#color-hex",
"backgroundColor": "transparent|#color-hex",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid|dashed|dotted",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"roundness": {"type": 3},
"seed": 123456789,
"version": 1,
"isDeleted": false,
"boundElements": null,
"updated": 1,
"link": null,
"locked": false
}文本元素 (type: "text") 需要额外属性(do NOT include rawText):
{
"text": "显示文本",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "显示文本",
"autoResize": true,
"lineHeight": 1.25
}"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
}"files": {}x 是左边缘,不是中心。必须用居中公式手动计算,否则文字会偏到一边#757575,有色文字用深色变体当生成 Excalidraw 图表时,必须自动执行以下步骤:
根据输出模式选择文件扩展名:
| 模式 | 文件名格式 | 示例 |
|---|---|---|
| Obsidian | [主题].[类型].md | 商业模式.relationship.md |
| Standard | [主题].[类型].excalidraw | 商业模式.relationship.excalidraw |
| Animated | [主题].[类型].animate.excalidraw | 商业模式.relationship.animate.excalidraw |
{current_directory}/[filename].md必须按以下格式生成(不能有任何修改):
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
# Excalidraw Data
## Text Elements
%%
## Drawing
\`\`\`json
{完整的 JSON 数据}
\`\`\`
%%fontFamily: 5" 替换为 『』() 替换为 「」idappState 和 files: {} 字段向用户报告:
Obsidian 模式:
Excalidraw 图已生成!
保存位置:商业模式.relationship.md
使用方法:
1. 在 Obsidian 中打开此文件
2. 点击右上角 MORE OPTIONS 菜单
3. 选择 Switch to EXCALIDRAW VIEWStandard 模式:
Excalidraw 图已生成!
保存位置:商业模式.relationship.excalidraw
使用方法:
1. 打开 https://excalidraw.com
2. 点击左上角菜单 → Open → 选择此文件
3. 或直接拖拽文件到 excalidraw.com 页面Animated 模式:
Excalidraw 动画图已生成!
保存位置:商业模式.relationship.animate.excalidraw
动画顺序:标题(1) → 主框架(2-4) → 连接线(5-7) → 说明文字(8-10)
生成动画:
1. 打开 https://dai-shi.github.io/excalidraw-animate/
2. 点击 Load File 选择此文件
3. 预览动画效果
4. 点击 Export 导出 SVG 或 WebM1265976
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.