json-canvas
npx skills add https://github.com/wyfusion/note --skill json-canvas
Agent 安装分布
Skill 文档
å¦ä¹ ç¬è®°å¯è§åCanvasæè½
ð¨ 设计ç念
为å¦ä¹ ç¬è®°ä¼åçå¯è§åç³»ç»ï¼å®ç°ï¼
- ç¥è¯ç»æå: å°æ½è±¡æ¦å¿µè½¬å为ç´è§å¾å½¢
- å ³ç³»å¯è§å: æ¸ æ°å±ç¤ºç¥è¯é´çå ³è
- è·¯å¾è§å: å¯è§åå¦ä¹ è¿ç¨åè·¯å¾
- æç»´æ´ç: æ¯æå¤´è飿´åæ¦å¿µæ¢³ç
ð æ ¸å¿åºç¨
JSON Canvas = èç¹ç³»ç» + è¿æ¥å ³ç³» + å¸å±ç®æ³
- èç¹ç±»å: ææ¬ãæä»¶ã龿¥ãåç»
- è¿æ¥ç³»ç»: æåè¾¹ãæ åè¾¹ãæ ç¾è¾¹
- å¸å±æ¨¡å¼: 屿¬¡ãç½ç¶ãèªç±å¸å±
- 交äºåè½: 缩æ¾ãææ½ãæå å±å¼
File Structure
A canvas file contains two top-level arrays:
{
"nodes": [],
"edges": []
}
nodes(optional): Array of node objectsedges(optional): Array of edge objects connecting nodes
Nodes
Nodes are objects placed on the canvas. There are four node types:
text– Text content with Markdownfile– Reference to files/attachmentslink– External URLgroup– Visual container for other nodes
Z-Index Ordering
Nodes are ordered by z-index in the array:
- First node = bottom layer (displayed below others)
- Last node = top layer (displayed above others)
Generic Node Attributes
All nodes share these attributes:
| Attribute | Required | Type | Description |
|---|---|---|---|
id |
Yes | string | Unique identifier for the node |
type |
Yes | string | Node type: text, file, link, or group |
x |
Yes | integer | X position in pixels |
y |
Yes | integer | Y position in pixels |
width |
Yes | integer | Width in pixels |
height |
Yes | integer | Height in pixels |
color |
No | canvasColor | Node color (see Color section) |
Text Nodes
Text nodes contain Markdown content.
{
"id": "6f0ad84f44ce9c17",
"type": "text",
"x": 0,
"y": 0,
"width": 400,
"height": 200,
"text": "# Hello World\n\nThis is **Markdown** content."
}
| Attribute | Required | Type | Description |
|---|---|---|---|
text |
Yes | string | Plain text with Markdown syntax |
File Nodes
File nodes reference files or attachments (images, videos, PDFs, notes, etc.).
{
"id": "a1b2c3d4e5f67890",
"type": "file",
"x": 500,
"y": 0,
"width": 400,
"height": 300,
"file": "Attachments/diagram.png"
}
{
"id": "b2c3d4e5f6789012",
"type": "file",
"x": 500,
"y": 400,
"width": 400,
"height": 300,
"file": "Notes/Project Overview.md",
"subpath": "#Implementation"
}
| Attribute | Required | Type | Description |
|---|---|---|---|
file |
Yes | string | Path to file within the system |
subpath |
No | string | Link to heading or block (starts with #) |
Link Nodes
Link nodes display external URLs.
{
"id": "c3d4e5f678901234",
"type": "link",
"x": 1000,
"y": 0,
"width": 400,
"height": 200,
"url": "https://obsidian.md"
}
| Attribute | Required | Type | Description |
|---|---|---|---|
url |
Yes | string | External URL |
Group Nodes
Group nodes are visual containers for organizing other nodes.
{
"id": "d4e5f6789012345a",
"type": "group",
"x": -50,
"y": -50,
"width": 1000,
"height": 600,
"label": "Project Overview",
"color": "4"
}
{
"id": "e5f67890123456ab",
"type": "group",
"x": 0,
"y": 700,
"width": 800,
"height": 500,
"label": "Resources",
"background": "Attachments/background.png",
"backgroundStyle": "cover"
}
| Attribute | Required | Type | Description |
|---|---|---|---|
label |
No | string | Text label for the group |
background |
No | string | Path to background image |
backgroundStyle |
No | string | Background rendering style |
Background Styles
| Value | Description |
|---|---|
cover |
Fills entire width and height of node |
ratio |
Maintains aspect ratio of background image |
repeat |
Repeats image as pattern in both directions |
Edges
Edges are lines connecting nodes.
{
"id": "f67890123456789a",
"fromNode": "6f0ad84f44ce9c17",
"toNode": "a1b2c3d4e5f67890"
}
{
"id": "0123456789abcdef",
"fromNode": "6f0ad84f44ce9c17",
"fromSide": "right",
"fromEnd": "none",
"toNode": "b2c3d4e5f6789012",
"toSide": "left",
"toEnd": "arrow",
"color": "1",
"label": "leads to"
}
| Attribute | Required | Type | Default | Description |
|---|---|---|---|---|
id |
Yes | string | – | Unique identifier for the edge |
fromNode |
Yes | string | – | Node ID where connection starts |
fromSide |
No | string | – | Side where edge starts |
fromEnd |
No | string | none |
Shape at edge start |
toNode |
Yes | string | – | Node ID where connection ends |
toSide |
No | string | – | Side where edge ends |
toEnd |
No | string | arrow |
Shape at edge end |
color |
No | canvasColor | – | Line color |
label |
No | string | – | Text label for the edge |
Side Values
| Value | Description |
|---|---|
top |
Top edge of node |
right |
Right edge of node |
bottom |
Bottom edge of node |
left |
Left edge of node |
End Shapes
| Value | Description |
|---|---|
none |
No endpoint shape |
arrow |
Arrow endpoint |
Colors
The canvasColor type can be specified in two ways:
Hex Colors
{
"color": "#FF0000"
}
Preset Colors
{
"color": "1"
}
| Preset | Color |
|---|---|
"1" |
Red |
"2" |
Orange |
"3" |
Yellow |
"4" |
Green |
"5" |
Cyan |
"6" |
Purple |
Note: Specific color values for presets are intentionally undefined, allowing applications to use their own brand colors.
ð å¦ä¹ ç¬è®°Canvas示ä¾
ð§ æ¦å¿µæç»´å¯¼å¾
{
"nodes": [
{
"id": "neural-network-main",
"type": "text",
"x": 400,
"y": 200,
"width": 320,
"height": 180,
"text": "# ð§ ç¥ç»ç½ç»\n\n**æ ¸å¿æ¦å¿µ**\n- åçç©ç¥ç»ç³»ç»å¯å\n- å¤å±ç¥ç»å
è¿æ¥\n- éè¿è®ç»å¦ä¹ 模å¼",
"color": "6"
},
{
"id": "basic-concepts",
"type": "group",
"x": 50,
"y": 50,
"width": 280,
"height": 400,
"label": "ð åºç¡æ¦å¿µ",
"color": "4"
},
{
"id": "neuron",
"type": "text",
"x": 80,
"y": 100,
"width": 220,
"height": 120,
"text": "## ç¥ç»å
\n\n- åºæ¬è®¡ç®åå
\n- æ¥æ¶è¾å
¥ä¿¡å·\n- 产çè¾åºååº\n- **æé**è°èè¿æ¥å¼ºåº¦",
"color": "4"
},
{
"id": "activation",
"type": "text",
"x": 80,
"y": 250,
"width": 220,
"height": 120,
"text": "## æ¿æ´»å½æ°\n\n- **Sigmoid**: (0,1)\n- **ReLU**: max(0,x)\n- **Tanh**: (-1,1)\n- å¼å
¥é线æ§åæ¢",
"color": "4"
},
{
"id": "algorithms",
"type": "group",
"x": 780,
"y": 50,
"width": 280,
"height": 400,
"label": "âï¸ æ ¸å¿ç®æ³",
"color": "3"
},
{
"id": "forward",
"type": "text",
"x": 810,
"y": 100,
"width": 220,
"height": 120,
"text": "## ååä¼ æ\n\n$$y = f(Wx + b)$$\n\n- è¾å
¥âéèâè¾åº\n- éå±è®¡ç®æ¿æ´»å¼\n- å¾å°é¢æµç»æ",
"color": "3"
},
{
"id": "backward",
"type": "text",
"x": 810,
"y": 250,
"width": 220,
"height": 120,
"text": "## ååä¼ æ\n\n$$\\frac{\\partial L}{\\partial W} = \\delta \\cdot a^T$$\n\n- è®¡ç®æå¤±æ¢¯åº¦\n- é¾å¼æ³åæ±å¯¼\n- æ´æ°ç½ç»åæ°",
"color": "3"
},
{
"id": "applications",
"type": "group",
"x": 400,
"y": 450,
"width": 320,
"height": 200,
"label": "ð¯ åºç¨é¢å",
"color": "1"
},
{
"id": "cv",
"type": "text",
"x": 430,
"y": 500,
"width": 130,
"height": 80,
"text": "## è®¡ç®æºè§è§\n- å¾åè¯å«\n- ç®æ æ£æµ",
"color": "1"
},
{
"id": "nlp",
"type": "text",
"x": 580,
"y": 500,
"width": 130,
"height": 80,
"text": "## èªç¶è¯è¨\n- ææ¬åç±»\n- æºå¨ç¿»è¯",
"color": "1"
}
],
"edges": [
{
"id": "main-to-concepts",
"fromNode": "neural-network-main",
"fromSide": "left",
"toNode": "basic-concepts",
"toSide": "right",
"label": "å
å«",
"color": "4"
},
{
"id": "main-to-algorithms",
"fromNode": "neural-network-main",
"fromSide": "right",
"toNode": "algorithms",
"toSide": "left",
"label": "使ç¨",
"color": "3"
},
{
"id": "main-to-applications",
"fromNode": "neural-network-main",
"fromSide": "bottom",
"toNode": "applications",
"toSide": "top",
"label": "åºç¨äº",
"color": "1"
},
{
"id": "forward-to-backward",
"fromNode": "forward",
"fromSide": "bottom",
"toNode": "backward",
"toSide": "top",
"label": "梯度",
"toEnd": "arrow",
"color": "2"
}
]
}
ð å¦ä¹ è·¯å¾è§åå¾
{
"nodes": [
{
"id": "learning-path",
"type": "group",
"x": 0,
"y": 0,
"width": 1200,
"height": 600,
"label": "ð¯ æºå¨å¦ä¹ å¦ä¹ è·¯å¾",
"backgroundStyle": "cover"
},
{
"id": "foundation",
"type": "group",
"x": 50,
"y": 100,
"width": 300,
"height": 400,
"label": "ð åºç¡é¶æ®µ",
"color": "4"
},
{
"id": "math-basics",
"type": "text",
"x": 80,
"y": 150,
"width": 240,
"height": 100,
"text": "## æ°å¦åºç¡\n\n- 线æ§ä»£æ°\n- 微积å\n- æ¦çç»è®¡\n- ä¼åç论",
"color": "4"
},
{
"id": "programming",
"type": "text",
"x": 80,
"y": 280,
"width": 240,
"height": 100,
"text": "## ç¼ç¨åºç¡\n\n- Pythonè¯æ³\n- NumPy/Pandas\n- æ°æ®å¯è§å\n- ç®æ³åºç¡",
"color": "4"
},
{
"id": "ml-concepts",
"type": "text",
"x": 80,
"y": 410,
"width": 240,
"height": 80,
"text": "## MLæ¦å¿µ\n\n- çç£/æ çç£å¦ä¹ \n- ç¹å¾å·¥ç¨\n- 模åè¯ä¼°",
"color": "4"
},
{
"id": "core-algorithms",
"type": "group",
"x": 400,
"y": 100,
"width": 300,
"height": 400,
"label": "âï¸ æ ¸å¿ç®æ³",
"color": "3"
},
{
"id": "classical-ml",
"type": "text",
"x": 430,
"y": 150,
"width": 240,
"height": 100,
"text": "## ç»å
¸ç®æ³\n\n- 线æ§åå½\n- å³çæ \n- SVM\n- éæå¦ä¹ ",
"color": "3"
},
{
"id": "neural-networks",
"type": "text",
"x": 430,
"y": 280,
"width": 240,
"height": 100,
"text": "## ç¥ç»ç½ç»\n\n- æç¥æº\n- å¤å±ç½ç»\n- ååä¼ æ\n- æ¿æ´»å½æ°",
"color": "3"
},
{
"id": "optimization",
"type": "text",
"x": 430,
"y": 410,
"width": 240,
"height": 80,
"text": "## ä¼åæ¹æ³\n\n- 梯度ä¸é\n- Adamä¼å\n- æ£ååææ¯",
"color": "3"
},
{
"id": "advanced-topics",
"type": "group",
"x": 750,
"y": 100,
"width": 300,
"height": 400,
"label": "ð è¿é¶ä¸»é¢",
"color": "1"
},
{
"id": "deep-learning",
"type": "text",
"x": 780,
"y": 150,
"width": 240,
"height": 100,
"text": "## 深度å¦ä¹ \n\n- CNNå·ç§¯ç½ç»\n- RNN循ç¯ç½ç»\n- Transformer\n- 注æåæºå¶",
"color": "1"
},
{
"id": "specialized",
"type": "text",
"x": 780,
"y": 280,
"width": 240,
"height": 100,
"text": "## ä¸ä¸é¢å\n\n- è®¡ç®æºè§è§\n- èªç¶è¯è¨å¤ç\n- 强åå¦ä¹ \n- æ¨èç³»ç»",
"color": "1"
},
{
"id": "practical",
"type": "text",
"x": 780,
"y": 410,
"width": 240,
"height": 80,
"text": "## å®è·µåºç¨\n\n- 项ç®å®æ\n- 模åé¨ç½²\n- æ§è½ä¼å",
"color": "1"
}
],
"edges": [
{
"id": "foundation-to-core",
"fromNode": "foundation",
"fromSide": "right",
"toNode": "core-algorithms",
"toSide": "left",
"label": "ææ¡åºç¡å",
"toEnd": "arrow",
"color": "6"
},
{
"id": "core-to-advanced",
"fromNode": "core-algorithms",
"fromSide": "right",
"toNode": "advanced-topics",
"toSide": "left",
"label": "æ·±å
¥çè§£",
"toEnd": "arrow",
"color": "2"
},
{
"id": "math-to-programming",
"fromNode": "math-basics",
"fromSide": "bottom",
"toNode": "programming",
"toSide": "top",
"label": "忥å¦ä¹ ",
"color": "5"
},
{
"id": "programming-to-ml",
"fromNode": "programming",
"fromSide": "bottom",
"toNode": "ml-concepts",
"toSide": "top",
"label": "å®è·µç»å",
"color": "5"
}
]
}
ð ç¥è¯å ³èå¾è°±
{
"nodes": [
{
"id": "central-concept",
"type": "text",
"x": 500,
"y": 300,
"width": 350,
"height": 200,
"text": "# ð¯ æ·±åº¦å¦ä¹ \n\n**æ ¸å¿ç ç©¶é¢å**\n- åºäºç¥ç»ç½ç»çå¤å±å¦ä¹ \n- èªå¨ç¹å¾æå\n- 端å°ç«¯è®ç»\n\n**å
³é®çªç ´**: ImageNet 2012",
"color": "6"
},
{
"id": "related-notes",
"type": "group",
"x": 100,
"y": 50,
"width": 250,
"height": 180,
"label": "ð ç¸å
³ç¬è®°",
"color": "5"
},
{
"id": "nn-basics",
"type": "file",
"x": 120,
"y": 80,
"width": 210,
"height": 60,
"file": "ç¥ç»ç½ç»åºç¡.md",
"subpath": "#æ ¸å¿æ¦å¿µ"
},
{
"id": "backprop",
"type": "file",
"x": 120,
"y": 160,
"width": 210,
"height": 60,
"file": "ååä¼ æç®æ³.md"
},
{
"id": "resources",
"type": "group",
"x": 950,
"y": 50,
"width": 250,
"height": 180,
"label": "ð å¦ä¹ èµæº",
"color": "3"
},
{
"id": "course-link",
"type": "link",
"x": 970,
"y": 80,
"width": 210,
"height": 60,
"url": "https://cs231n.github.io/",
"text": "CS231n课ç¨"
},
{
"id": "book-link",
"type": "link",
"x": 970,
"y": 160,
"width": 210,
"height": 60,
"url": "https://www.deeplearningbook.org/",
"text": "深度å¦ä¹ ææ"
},
{
"id": "applications",
"type": "group",
"x": 100,
"y": 450,
"width": 800,
"height": 200,
"label": "ð¯ åºç¨é¢å",
"color": "1"
},
{
"id": "cnn",
"type": "text",
"x": 150,
"y": 490,
"width": 180,
"height": 100,
"text": "## ð¼ï¸ CNN\n\n- å¾ååç±»\n- ç®æ æ£æµ\n- è¯ä¹åå²",
"color": "1"
},
{
"id": "rnn",
"type": "text",
"x": 360,
"y": 490",
"width": 180,
"height": 100,
"text": "## ð RNN\n\n- åºå建模\n- è¯è¨å¤ç\n- æ¶é´åºå",
"color": "1"
},
{
"id": "gan",
"type": "text",
"x": 570,
"y": 490,
"width": 180,
"height": 100,
"text": "## ð¨ GAN\n\n- å¾åçæ\n- 飿 ¼è¿ç§»\n- æ°æ®å¢å¼º",
"color": "1"
},
{
"id": "transformer",
"type": "text",
"x": 780,
"y": 490,
"width": 180,
"height": 100,
"text": "## â¡ Transformer\n\n- 注æåæºå¶\n- BERT/GPT\n- 大è¯è¨æ¨¡å",
"color": "1"
},
{
"id": "visual-diagram",
"type": "file",
"x": 950,
"y": 300,
"width": 250,
"height": 200,
"file": "assets/deep-learning-architecture.png",
"subpath": ""
}
],
"edges": [
{
"id": "central-to-notes",
"fromNode": "central-concept",
"fromSide": "left",
"toNode": "related-notes",
"toSide": "right",
"label": "ç论åºç¡",
"color": "5"
},
{
"id": "central-to-resources",
"fromNode": "central-concept",
"fromSide": "right",
"toNode": "resources",
"toSide": "left",
"label": "å¦ä¹ ææ",
"color": "3"
},
{
"id": "central-to-applications",
"fromNode": "central-concept",
"fromSide": "bottom",
"toNode": "applications",
"toSide": "top",
"label": "å®é
åºç¨",
"color": "1"
},
{
"id": "nn-to-central",
"fromNode": "nn-basics",
"fromSide": "right",
"toNode": "central-concept",
"toSide": "left",
"label": "åç½®ç¥è¯",
"toEnd": "arrow",
"color": "4"
},
{
"id": "central-to-visual",
"fromNode": "central-concept",
"fromSide": "right",
"toNode": "visual-diagram",
"toSide": "left",
"label": "æ¶æå¾",
"color": "2"
},
{
"id": "app-connections",
"fromNode": "cnn",
"fromSide": "right",
"toNode": "rnn",
"toSide": "left",
"label": "å¹¶è¡åå±",
"color": "6"
},
{
"id": "rnn-to-transformer",
"fromNode": "rnn",
"fromSide": "right",
"toNode": "transformer",
"toSide": "left",
"label": "æ¼è¿å
³ç³»",
"toEnd": "arrow",
"color": "2"
}
]
}
Flowchart
{
"nodes": [
{
"id": "a0b1c2d3e4f5a6b7",
"type": "text",
"x": 200,
"y": 0,
"width": 150,
"height": 60,
"text": "**Start**",
"color": "4"
},
{
"id": "b1c2d3e4f5a6b7c8",
"type": "text",
"x": 200,
"y": 100,
"width": 150,
"height": 60,
"text": "Step 1:\nGather data"
},
{
"id": "c2d3e4f5a6b7c8d9",
"type": "text",
"x": 200,
"y": 200,
"width": 150,
"height": 80,
"text": "**Decision**\n\nIs data valid?",
"color": "3"
},
{
"id": "d3e4f5a6b7c8d9e0",
"type": "text",
"x": 400,
"y": 200,
"width": 150,
"height": 60,
"text": "Process data"
},
{
"id": "e4f5a6b7c8d9e0f1",
"type": "text",
"x": 0,
"y": 200,
"width": 150,
"height": 60,
"text": "Request new data",
"color": "1"
},
{
"id": "f5a6b7c8d9e0f1a2",
"type": "text",
"x": 400,
"y": 320,
"width": 150,
"height": 60,
"text": "**End**",
"color": "4"
}
],
"edges": [
{
"id": "a6b7c8d9e0f1a2b3",
"fromNode": "a0b1c2d3e4f5a6b7",
"fromSide": "bottom",
"toNode": "b1c2d3e4f5a6b7c8",
"toSide": "top"
},
{
"id": "b7c8d9e0f1a2b3c4",
"fromNode": "b1c2d3e4f5a6b7c8",
"fromSide": "bottom",
"toNode": "c2d3e4f5a6b7c8d9",
"toSide": "top"
},
{
"id": "c8d9e0f1a2b3c4d5",
"fromNode": "c2d3e4f5a6b7c8d9",
"fromSide": "right",
"toNode": "d3e4f5a6b7c8d9e0",
"toSide": "left",
"label": "Yes",
"color": "4"
},
{
"id": "d9e0f1a2b3c4d5e6",
"fromNode": "c2d3e4f5a6b7c8d9",
"fromSide": "left",
"toNode": "e4f5a6b7c8d9e0f1",
"toSide": "right",
"label": "No",
"color": "1"
},
{
"id": "e0f1a2b3c4d5e6f7",
"fromNode": "e4f5a6b7c8d9e0f1",
"fromSide": "top",
"fromEnd": "none",
"toNode": "b1c2d3e4f5a6b7c8",
"toSide": "left",
"toEnd": "arrow"
},
{
"id": "f1a2b3c4d5e6f7a8",
"fromNode": "d3e4f5a6b7c8d9e0",
"fromSide": "bottom",
"toNode": "f5a6b7c8d9e0f1a2",
"toSide": "top"
}
]
}
ID Generation
Node and edge IDs must be unique strings. Obsidian generates 16-character hexadecimal IDs:
"id": "6f0ad84f44ce9c17"
"id": "a3b2c1d0e9f8g7h6"
"id": "1234567890abcdef"
This format is a 16-character lowercase hex string (64-bit random value).
ð¨ å¦ä¹ ç¬è®°Canvasæä½³å®è·µ
ð å¸å±è®¾è®¡åå
屿¬¡åå¸å±
// æ¨èçç¥è¯å±æ¬¡å¸å±
{
"æ ¸å¿æ¦å¿µ": { "x": 400, "y": 200, "å±çº§": 0 },
"åºç¡ç论": { "x": 100, "y": 100, "å±çº§": 1 },
"åºç¨å®è·µ": { "x": 700, "y": 100, "å±çº§": 1 },
"ç¸å
³èµæº": { "x": 100, "y": 400, "å±çº§": 2 }
}
èç¹å°ºå¯¸è§è
| èç¹ç±»å | 建议宽度 | 建议é«åº¦ | ç¨é |
|---|---|---|---|
| æ ¸å¿æ¦å¿µ | 350-450 | 180-220 | ä¸å¿ä¸»é¢ï¼è¯¦ç»è¯´æ |
| 主è¦åæ¯ | 280-350 | 120-160 | éè¦æ¦å¿µï¼ä¸çå 容 |
| 次è¦èç¹ | 200-280 | 80-120 | è¡¥å ä¿¡æ¯ï¼ç®æ´å 容 |
| æä»¶å¼ç¨ | 250-350 | 100-150 | ç¬è®°é¾æ¥ï¼é¢è§ |
| å¤é¨é¾æ¥ | 220-300 | 80-120 | ç½é¡µèµæºï¼ç®çæè¿° |
| åç»å®¹å¨ | 400-800 | 300-600 | 主é¢åç»ï¼å å«å¤ä¸ªèç¹ |
é´è·å对é½
// æ åé´è·é
ç½®
{
"èç¹é´è·": "60-100px",
"åç»å
è¾¹è·": "30-50px",
"屿¬¡é´è·": "150-200px",
"ç½æ ¼å¯¹é½": "20pxåæ°"
}
ð¯ å¦ä¹ ç¬è®°ç±»å模æ¿
ð§ æ¦å¿µå ³ç³»å¾
{
"å¸å±": "ä¸å¿è¾å°å¼",
"æ ¸å¿": "ä¸»è¦æ¦å¿µ",
"忝": "ç¸å
³æ¦å¿µã屿§ãåºç¨",
"è¿æ¥": "å
å«å
³ç³»ãå½±åå
³ç³»ã对æ¯å
³ç³»"
}
ð¤ï¸ å¦ä¹ è·¯å¾å¾
{
"å¸å±": "çº¿æ§æµç¨å¼",
"é¶æ®µ": "åºç¡âè¿é¶âé«çº§âå®è·µ",
"è¿æ¥": "åç½®å
³ç³»ãä¾èµå
³ç³»",
"æ è®°": "å®æç¶æãææ¡ç¨åº¦"
}
ð³ ç¥è¯ä½ç³»å¾
{
"å¸å±": "æ ç¶å±æ¬¡å¼",
"æ ¹èç¹": "å¦ç§é¢å",
"忝": "åé¢åãå
·ä½æ¹å",
"å¶å": "å
·ä½æ¦å¿µãææ¯ç¹"
}
ð æç»´å¯¼å¾
{
"å¸å±": "èªç±åæ£å¼",
"ä¸å¿": "䏻颿é®é¢",
"忝": "æ³æ³ãå
³é®è¯ãçé®",
"è¿æ¥": "å
³èæè·¯ãå¯åå
³ç³»"
}
ð¨ è§è§è®¾è®¡æå
é¢è²ç¼ç ç³»ç»
{
"é¢è²æ¹æ¡": {
"æ ¸å¿æ¦å¿µ": "6 (ç´«è²)",
"ç论åºç¡": "4 (绿è²)",
"å®è·µåºç¨": "1 (红è²)",
"èµæºé¾æ¥": "3 (é»è²)",
"çé®é®é¢": "2 (æ©è²)",
"已宿": "4 (绿è²)",
"è¿è¡ä¸": "3 (é»è²)",
"å¾
å¼å§": "1 (红è²)"
}
}
è¿æ¥çº¿æ ·å¼
{
"è¿æ¥ç±»å": {
"å
å«å
³ç³»": { "æ ·å¼": "å®çº¿", "ç®å¤´": "æ ", "é¢è²": "4" },
"ä¾èµå
³ç³»": { "æ ·å¼": "å®çº¿", "ç®å¤´": "æ", "é¢è²": "6" },
"å½±åå
³ç³»": { "æ ·å¼": "è线", "ç®å¤´": "æ", "é¢è²": "2" },
"对æ¯å
³ç³»": { "æ ·å¼": "ç¹çº¿", "ç®å¤´": "æ ", "é¢è²": "3" },
"æ¶åºå
³ç³»": { "æ ·å¼": "å®çº¿", "ç®å¤´": "åå", "é¢è²": "1" }
}
}
ð å 容ç»ç»æå·§
ææ¬å å®¹ç»æ
# èç¹æ é¢
## å
³é®è¦ç¹
- è¦ç¹1ï¼ç®çæè¿°
- è¦ç¹2ï¼æ ¸å¿æ¦å¿µ
## éè¦å
¬å¼
$$æ°å¦è¡¨è¾¾å¼$$
## 代ç 示ä¾
`å
³é®å½æ°`
## ç¶ææ è®°
â
å·²ææ¡ ð å¦ä¹ ä¸ â æçé®
åç»å½åè§è
{
"åç»ç±»å": {
"é¶æ®µåç»": "ð åºç¡é¶æ®µ / âï¸ æ ¸å¿ç®æ³ / ð è¿é¶ä¸»é¢",
"主é¢åç»": "ð§ æ¦å¿µç论 / ð» å®è·µåºç¨ / ð å¦ä¹ èµæº",
"ç¶æåç»": "â
已宿 / ð è¿è¡ä¸ / ð å¾
å¼å§",
"ç±»ååç»": "ð§ å·¥å
·æ¹æ³ / ð æ°æ®åæ / ð¯ åºç¨åºæ¯"
}
}
ð ç»´æ¤åæ´æ°
å®æç»´æ¤ä»»å¡
{
"æ¯å¨æ£æ¥": [
"æ´æ°å¦ä¹ è¿åº¦ç¶æ",
"æ·»å æ°åç°çæ¦å¿µå
³è",
"ä¿®æ£è¿æ¶çä¿¡æ¯é¾æ¥"
],
"æ¯ææ´ç": [
"éæ°ç»ç»æ··ä¹±çå¸å±",
"è¡¥å
缺失çç¥è¯èç¹",
"ä¼åè§è§è®¾è®¡ææ"
]
}
çæ¬ç®¡ç建议
{
"çæ¬æ§å¶": {
"éè¦èç¹": "å建å¤ä»½åä¿®æ¹",
"ç»æè°æ´": "è®°å½åæ´åå ",
"å
å®¹æ´æ°": "æ æ³¨ä¿®æ¹æ¶é´åå
容"
}
}
Validation Rules
- All
idvalues must be unique across nodes and edges fromNodeandtoNodemust reference existing node IDs- Required fields must be present for each node type
typemust be one of:text,file,link,groupbackgroundStylemust be one of:cover,ratio,repeatfromSide,toSidemust be one of:top,right,bottom,leftfromEnd,toEndmust be one of:none,arrow- Color presets must be
"1"through"6"or valid hex color