excalidraw-diagram
npx skills add https://github.com/axtonliu/axton-obsidian-visual-skills --skill excalidraw-diagram
Agent 安装分布
Skill 文档
Excalidraw Diagram Generator
Create Excalidraw diagrams from text content with multiple output formats.
Output Modes
æ ¹æ®ç¨æ·ç触åè¯éæ©è¾åºæ¨¡å¼ï¼
| 触åè¯ | è¾åºæ¨¡å¼ | æä»¶æ ¼å¼ | ç¨é |
|---|---|---|---|
Excalidrawãç»å¾ãæµç¨å¾ãæç»´å¯¼å¾ |
Obsidianï¼é»è®¤ï¼ | .md |
å¨ Obsidian ä¸ç´æ¥æå¼ |
æ åExcalidrawãstandard excalidraw |
Standard | .excalidraw |
å¨ excalidraw.com æå¼/ç¼è¾/å享 |
Excalidrawå¨ç»ãå¨ç»å¾ãanimate |
Animated | .excalidraw |
æå° excalidraw-animate çæå¨ç» |
Workflow
- Detect output mode from trigger words (see Output Modes table above)
- Analyze content – identify concepts, relationships, hierarchy
- Choose diagram type (see Diagram Types below)
- Generate Excalidraw JSON (add animation order if Animated mode)
- Output in correct format based on mode
- Automatically save to current working directory
- Notify user with file path and usage instructions
Output Formats
Mode 1: Obsidian Format (Default)
ä¸¥æ ¼æç §ä»¥ä¸ç»æè¾åºï¼ä¸å¾æä»»ä½ä¿®æ¹ï¼
---
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 宿´æ°æ®}
\`\`\`
%%
å ³é®è¦ç¹ï¼
- Frontmatter å¿
é¡»å
å«
tags: [excalidraw] - è¦åä¿¡æ¯å¿ 须宿´
- JSON å¿
须被
%%æ è®°å å´ - ä¸è½ä½¿ç¨
excalidraw-plugin: parsed以å¤çå ¶ä» frontmatter 设置 - æä»¶æ©å±åï¼
.md
Mode 2: Standard Excalidraw Format
ç´æ¥è¾åºçº¯ JSON æä»¶ï¼å¯å¨ excalidraw.com æå¼ï¼
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [...],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}
å ³é®è¦ç¹ï¼
source使ç¨https://excalidraw.comï¼ä¸æ¯ Obsidian æä»¶ï¼- 纯 JSONï¼æ Markdown å è£
- æä»¶æ©å±åï¼
.excalidraw
Mode 3: Animated Excalidraw Format
ä¸ Standard æ ¼å¼ç¸åï¼ä½æ¯ä¸ªå
ç´ æ·»å customData.animate åæ®µæ§å¶å¨ç»é¡ºåºï¼
{
"id": "element-1",
"type": "rectangle",
"customData": {
"animate": {
"order": 1,
"duration": 500
}
},
...å
¶ä»æ ååæ®µ
}
å¨ç»é¡ºåºè§åï¼
order: å¨ç»ææ¾é¡ºåºï¼1, 2, 3…ï¼ï¼æ°åè¶å°è¶å åºç°duration: 该å ç´ çç»å¶æ¶é¿ï¼æ¯«ç§ï¼ï¼é»è®¤ 500- ç¸å
orderçå ç´ åæ¶åºç° - 建议顺åºï¼æ é¢ â ä¸»è¦æ¡æ¶ â è¿æ¥çº¿ â ç»èæå
ä½¿ç¨æ¹æ³ï¼
- çæ
.excalidrawæä»¶ - æå° https://dai-shi.github.io/excalidraw-animate/
- ç¹å» Animate é¢è§ï¼ç¶åå¯¼åº SVG æ WebM
æä»¶æ©å±åï¼.excalidraw
Diagram Types & Selection Guide
éæ©åéçå¾è¡¨å½¢å¼ï¼ä»¥æåçè§£åä¸è§è§å¸å¼åã
| ç±»å | è±æ | 使ç¨åºæ¯ | åæ³ |
|---|---|---|---|
| æµç¨å¾ | Flowchart | æ¥éª¤è¯´æã工使µç¨ã任塿§è¡é¡ºåº | ç¨ç®å¤´è¿æ¥åæ¥éª¤ï¼æ¸ æ°è¡¨è¾¾æµç¨èµ°å |
| æç»´å¯¼å¾ | Mind Map | æ¦å¿µåæ£ã主é¢åç±»ãçµæææ | 以ä¸å¿ä¸ºæ ¸å¿åå¤åæ£ï¼æ¾å°ç¶ç»æ |
| å±çº§å¾ | Hierarchy | ç»ç»ç»æãå 容å级ãç³»ç»æè§£ | èªä¸è䏿èªå·¦è³å³æå»ºå±çº§èç¹ |
| å ³ç³»å¾ | Relationship | è¦ç´ ä¹é´çå½±åãä¾èµãäºå¨ | å¾å½¢é´ç¨è¿çº¿è¡¨ç¤ºå ³èï¼ç®å¤´ä¸è¯´æ |
| 对æ¯å¾ | Comparison | 两ç§ä»¥ä¸æ¹æ¡æè§ç¹çå¯¹ç §åæ | å·¦å³ä¸¤æ æè¡¨æ ¼å½¢å¼ï¼æ ææ¯è¾ç»´åº¦ |
| æ¶é´çº¿å¾ | Timeline | äºä»¶åå±ã项ç®è¿åº¦ãæ¨¡åæ¼å | 以æ¶é´ä¸ºè½´ï¼æ åºå ³é®æ¶é´ç¹ä¸äºä»¶ |
| ç©éµå¾ | Matrix | å维度åç±»ãä»»å¡ä¼å 级ãå®ä½ | å»ºç« X ä¸ Y 两个维度ï¼åæ å¹³é¢å®ç½® |
| èªç±å¸å± | Freeform | å 容鶿£ãçµæè®°å½ãåæ¥ä¿¡æ¯æ¶é | æ éç»æéå¶ï¼èªç±æ¾ç½®å¾åä¸ç®å¤´ |
Design Rules
Text & Format
- ææææ¬å
ç´ å¿
须使ç¨
fontFamily: 5ï¼Excalifont æååä½ï¼ - ææ¬ä¸çåå¼å·æ¿æ¢è§åï¼
"æ¿æ¢ä¸ºãã - ææ¬ä¸ç忬巿¿æ¢è§åï¼
()æ¿æ¢ä¸ºãã - åä½å¤§å°è§åï¼ç¡¬æ§ä¸éï¼ä½äºæ¤å¼å¨æ£å¸¸ç¼©æ¾ä¸ä¸å¯è¯»ï¼ï¼
- æ é¢ï¼20-28pxï¼æå° 20pxï¼
- 坿 é¢ï¼18-20px
- æ£æ/æ ç¾ï¼16-18pxï¼æå° 16pxï¼
- æ¬¡è¦æ³¨éï¼14pxï¼ä» éä¸éè¦çè¾ å©è¯´æï¼æ ç¨ï¼
- ç»å¯¹ç¦æ¢ä½äº 14px
- è¡é«ï¼ææææ¬ä½¿ç¨
lineHeight: 1.25 - æåå±
ä¸ä¼°ç®ï¼ç¬ç«ææ¬å
ç´ æ²¡æèªå¨å±
ä¸ï¼éæå¨è®¡ç® x åæ ï¼
- ä¼°ç®æå宽度ï¼
estimatedWidth = text.length * fontSize * 0.5ï¼CJK å符ç¨* 1.0ï¼ - å±
ä¸å
¬å¼ï¼
x = centerX - estimatedWidth / 2 - 示ä¾ï¼æå “Hello”ï¼5å符, fontSize 20ï¼å±
ä¸äº x=300 â
estimatedWidth = 5 * 20 * 0.5 = 50âx = 300 - 25 = 275
- ä¼°ç®æå宽度ï¼
Layout & Design
- ç»å¸èå´ï¼å»ºè®®ææå ç´ å¨ 0-1200 x 0-800 åºåå
- æå°å½¢ç¶å°ºå¯¸ï¼å¸¦æåçç©å½¢/æ¤åä¸å°äº 120x60px
- å ç´ é´è·ï¼æå° 20-30px é´è·ï¼é²æ¢éå
- 屿¬¡æ¸ æ°ï¼ä½¿ç¨ä¸åé¢è²åå½¢ç¶åºåä¸åå±çº§çä¿¡æ¯
- å¾å½¢å ç´ ï¼éå½ä½¿ç¨ç©å½¢æ¡ãåå½¢ãç®å¤´çå ç´ æ¥ç»ç»ä¿¡æ¯
- ç¦æ¢ Emojiï¼ä¸è¦å¨å¾è¡¨ææ¬ä¸ä½¿ç¨ä»»ä½ Emoji 符å·ï¼å¦éè§è§æ 记请使ç¨ç®åå¾å½¢ï¼åå½¢ãæ¹å½¢ãç®å¤´ï¼æé¢è²åºå
Color Palette
æåé¢è²ï¼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
JSON Structure
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": {}
}
Element Template
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.
Additional Technical Requirements
Text Elements å¤ç
## Text Elementsé¨åå¨ Markdown ä¸å¿ é¡»ç空ï¼ä» ç¨%%ä½ä¸ºåé符- Obsidian ExcaliDraw æä»¶ä¼æ ¹æ® JSON æ°æ®èªå¨å¡«å ææ¬å ç´
- ä¸éè¦æå¨ååºææææ¬å 容
åæ ä¸å¸å±
- åæ ç³»ç»ï¼å·¦ä¸è§ä¸ºåç¹ (0,0)
- æ¨èèå´ï¼ææå ç´ å¨ 0-1200 x 0-800 åç´ èå´å
- å
ç´ IDï¼æ¯ä¸ªå
ç´ éè¦å¯ä¸ç
idï¼å¯ä»¥æ¯å符串ï¼å¦ãtitleããbox1ãçï¼
Required Fields for All Elements
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
}
Text-Specific Properties
ææ¬å
ç´ (type: “text”) éè¦é¢å¤å±æ§ï¼do NOT include rawTextï¼ï¼
{
"text": "æ¾ç¤ºææ¬",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "æ¾ç¤ºææ¬",
"autoResize": true,
"lineHeight": 1.25
}
appState é ç½®
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
}
files åæ®µ
"files": {}
Common Mistakes to Avoid
- æååç§» â ç¬ç« text å
ç´ ç
xæ¯å·¦è¾¹ç¼ï¼ä¸æ¯ä¸å¿ãå¿ é¡»ç¨å± ä¸å ¬å¼æå¨è®¡ç®ï¼å¦åæåä¼åå°ä¸è¾¹ - å ç´ éå â y åæ ç¸è¿çå ç´ å®¹æå å ãæ¾ç½®æ°å ç´ åæ£æ¥ä¸å¨å´å ç´ æ¯å¦æè³å° 20px é´è·
- ç»å¸çç½ä¸è¶³ â å 容ä¸è¦è´´çç»å¸è¾¹ç¼ãå¨åå¨ç 50-80px ç padding
- æ 颿²¡æå± ä¸äºå¾è¡¨ â æ é¢åºå± ä¸äºä¸æ¹å¾è¡¨çæ´ä½å®½åº¦ï¼ä¸æ¯åºå®å¨ x=0
- ç®å¤´æ ç¾æº¢åº â é¿æåæ ç¾ï¼å¦ “ATP + NADPH”ï¼ä¼è¶ åºçç®å¤´ãä¿ææ ç¾ç®çæå 大ç®å¤´é¿åº¦
- 对æ¯åº¦ä¸å¤ â æµ
è²æåå¨ç½åºä¸å ä¹ä¸å¯è§ãæåé¢è²ä¸ä½äº
#757575ï¼æè²æåç¨æ·±è²åä½ - åå·å¤ªå° â ä½äº 14px 卿£å¸¸ç¼©æ¾ä¸ä¸å¯è¯»ï¼æ£ææå° 16px
Implementation Notes
Auto-save & File Generation Workflow
å½çæ Excalidraw å¾è¡¨æ¶ï¼å¿ é¡»èªå¨æ§è¡ä»¥ä¸æ¥éª¤ï¼
1. éæ©åéçå¾è¡¨ç±»å
- æ ¹æ®ç¨æ·æä¾çå å®¹ç¹æ§ï¼åè䏿¹ ãDiagram Types & Selection Guideã 表
- åæå å®¹çæ ¸å¿è¯æ±ï¼éæ©æåéçå¯è§åå½¢å¼
2. çæææä¹çæä»¶å
æ ¹æ®è¾åºæ¨¡å¼éæ©æä»¶æ©å±åï¼
| æ¨¡å¼ | æä»¶åæ ¼å¼ | ç¤ºä¾ |
|---|---|---|
| Obsidian | [主é¢].[ç±»å].md |
å䏿¨¡å¼.relationship.md |
| Standard | [主é¢].[ç±»å].excalidraw |
å䏿¨¡å¼.relationship.excalidraw |
| Animated | [主é¢].[ç±»å].animate.excalidraw |
å䏿¨¡å¼.relationship.animate.excalidraw |
- ä¼å 使ç¨ä¸æä»¥æé«æ¸ æ°åº¦
3. ä½¿ç¨ Write å·¥å ·èªå¨ä¿åæä»¶
- ä¿åä½ç½®ï¼å½åå·¥ä½ç®å½ï¼èªå¨æ£æµç¯å¢åéï¼
- 宿´è·¯å¾ï¼
{current_directory}/[filename].md - è¿æ ·å¯ä»¥å®ç°çµæ´»è¿ç§»ï¼æ é硬ç¼ç è·¯å¾
4. ç¡®ä¿ Markdown ç»æå®å ¨æ£ç¡®
å¿ é¡»æä»¥ä¸æ ¼å¼çæï¼ä¸è½æä»»ä½ä¿®æ¹ï¼ï¼
---
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 æ°æ®}
\`\`\`
%%
5. JSON æ°æ®è¦æ±
- å å«å®æ´ç Excalidraw JSON ç»æ
- ææææ¬å
ç´ ä½¿ç¨
fontFamily: 5 - ææ¬ä¸ç
"æ¿æ¢ä¸ºãã - ææ¬ä¸ç
()æ¿æ¢ä¸ºãã - JSON æ ¼å¼å¿ é¡»ææï¼éè¿è¯æ³æ£æ¥
- ææå
ç´ æå¯ä¸ç
id - å
å«
appStateåfiles: {}åæ®µ
6. ç¨æ·åé¦ä¸ç¡®è®¤
åç¨æ·æ¥åï¼
- å¾è¡¨å·²çæ
- 精确çä¿åä½ç½®
- å¦ä½å¨ Obsidian 䏿¥ç
- å¾è¡¨çè®¾è®¡éæ©è¯´æï¼éæ©äºä»ä¹ç±»åçå¾è¡¨ã为ä»ä¹ï¼
- æ¯å¦éè¦è°æ´æä¿®æ¹
Example Output Messages
Obsidian 模å¼ï¼
Excalidraw å¾å·²çæï¼
ä¿åä½ç½®ï¼å䏿¨¡å¼.relationship.md
ä½¿ç¨æ¹æ³ï¼
1. å¨ Obsidian 䏿弿¤æä»¶
2. ç¹å»å³ä¸è§ MORE OPTIONS èå
3. éæ© Switch to EXCALIDRAW VIEW
Standard 模å¼ï¼
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 æ WebM