obsidian-canvas
npx skills add https://github.com/jykim/claude-obsidian-skills --skill obsidian-canvas
Agent 安装分布
Skill 文档
Obsidian Canvas Skill
Create visual canvases with automatic layout, color-coding, and smart node positioning.
When to Use This Skill
Activate when you need to:
- Create visual summaries of weekly reading
- Build knowledge maps connecting related topics
- Design project timelines or mind maps
- Organize scattered notes into visual structure
Core Principle: Automatic Layout
ë ì´ììì ìëì¼ë¡, ì½í ì¸ ì ì§ì¤íë¼
Canvasì íµì¬ì ë ¸ë ë°°ì¹ì ì°ê²°. ìëì¼ë¡ ì¢í ê³ì°íë ëì , í¨í´ë³ ìë ë ì´ìì ì¬ì©.
Canvas File Structure
{
"nodes": [
{
"id": "unique-id",
"type": "text" | "file" | "link" | "group",
"text": "content or file path",
"x": 0, "y": 0,
"width": 250, "height": 60,
"color": "1-6"
}
],
"edges": [
{
"id": "edge-id",
"fromNode": "node-id",
"fromSide": "top|bottom|left|right",
"toNode": "node-id",
"toSide": "top|bottom|left|right",
"color": "1-6"
}
]
}
Layout Patterns
1. Radial Layout (ë°©ì¬í)
ì¤ì¬ ë ¸ëìì ì¹´í ê³ ë¦¬ë³ë¡ ë°©ì¬í ë°°ì¹
Topic1
|
Topic4 - CENTER - Topic2
|
Topic3
Use case: Weekly reading, topic overview Spacing: 400-600px from center
2. Grid Layout (그리ë)
ì¹´í ê³ ë¦¬ë³ ì¸ë¡ ì´ë¡ ë°°ì¹
Category1 Category2 Category3
Item1 Item1 Item1
Item2 Item2 Item2
Item3 Item3 Item3
Use case: Comparative analysis, multi-column organization Spacing: X: 400px, Y: 100px between items
3. Timeline Layout (íìë¼ì¸)
ìê°ì ê°ë¡ íë¦
Event1 â Event2 â Event3 â Event4
Use case: Project milestones, historical events Spacing: 300px horizontal
4. Hierarchical Layout (ê³ì¸µí)
í¸ë¦¬ êµ¬ì¡°ë¡ ìâìë íì¥
Root
/ \
Child1 Child2
/ \ / \
A B C D
Use case: Concept breakdown, org charts Spacing: Y: 200px per level
5. Side-by-side Comparison (ê°ë¡ ë¹êµ)
ê´ë ¨ í목ë¤ì ê°ë¡ë¡ ë°°ì¹íì¬ íëì ë¹êµ
âââââââââââ âââââââââââ âââââââââââ
â í목1 â â í목2 â â í목3 â
â (350px) â â (350px) â â (350px) â
âââââââââââ âââââââââââ âââââââââââ
Use case: ìµì ë¹êµ, ìì½ ì¹´ë, ê´ë ¨ ê°ë ëì´ Node width: 300-350px (ì¢ê²) X spacing: 40px between nodes X position calculation (centered at x=0):
- 2 nodes: x = -195, 195
- 3 nodes: x = -390, 0, 390
- ê³ì°ì: 첫 ë ¸ë x = -(ì´ëë¹/2) + (ë ¸ëëë¹/2)
6. Two-Column Comparison (2ì´ ë¹êµ)
ëì¡°ëë ë ê´ì /ìµì ì ì쪽ì ë°°ì¹
LEFT COLUMN RIGHT COLUMN
âââââââââââ âââââââââââ
â Header â â Header â
ââââââââââ⤠âââââââââââ¤
â Item 1 â â Item 1 â
â Item 2 â â Item 2 â
â Item 3 â â Item 3 â
ââââââ¬âââââ ââââââ¬âââââ
âââââââââ¬ââââââââââââ
âââââââ´ââââââ
â Common â
â Ground â
âââââââââââââ
Use case: A vs B ë¹êµ, ì°¬ë°, Before/After, ê´ì ëì¡° Column width: 500-550px each X spacing: 750px between column centers (left: -375, right: 375) Center elements: x = 0 (ì쪽 ì°ê²°)
Color Scheme
| Color | ID | Use Case |
|---|---|---|
| Red | 1 | AI & Tech |
| Orange | 2 | Work & Projects |
| Yellow | 3 | Current Events |
| Green | 4 | PKM & Learning |
| Purple | 5 | Personal & Meta |
| Blue | 6 | Education & Career |
Node Types & Sizes
Text Node
- Default: 250×60 (single line)
- Quote: 280×60 (wider for readability)
- Multi-line: 250x(60 + 20*lines)
File Node
- Link to note: 280×90 (includes title + summary)
- Path format: Use wiki links in text field
Group Node
- Category header: 200×50
- Container: Auto-size based on children
Width Adaptation (í ë³ê²½ ì ì½í ì¸ ì¡°ì )
ë ì´ìì ë³ê²½ì¼ë¡ ë ¸ë íì´ ì¤ì´ë¤ ë:
| í ë³ê²½ | ì½í ì¸ ì¡°ì |
|---|---|
| 550px â 350px | í ì´ë¸ ì´ ì¶ì, 긴 ë¬¸ì¥ ë¶ë¦¬ |
| 350px â 300px | ë¶ë¦¿ 2-3ê°ë§, ìì ì ê±° |
| 300px â 250px | ì 목 + í ì¤ ìì½ë§ |
ì¶ì½ ì°ì ìì (먼ì ì ê±°í ê²):
- ë¶ì° ì¤ëª , ê´í¸ ë´ì©
- ìì, 참조
- í ì´ë¸ í (íµì¬ë§ ì ì§)
- ë¶ë¦¿ í¬ì¸í¸ ì
Auto-Layout Algorithm
Step 1: Categorize Nodes
Group nodes by topic/category using tags or manual grouping.
Step 2: Calculate Positions
Based on layout pattern:
- Radial: Divide 360° by category count
- Grid: Calculate column width, row height
- Timeline: Distribute evenly on X-axis
- Hierarchy: BFS traversal, level-by-level
Step 3: Avoid Overlaps
- Minimum spacing: 50px
- Check bounding boxes
- Adjust if collision detected
Step 4: Create Edges
- Connect center to categories (radial)
- Connect sequential items (timeline)
- Connect parent-child (hierarchy)
Example Templates
Weekly Reading Canvas
{
"nodes": [
{
"id": "center",
"type": "text",
"text": "# Weekly Reading\n## Dec 20-27, 2025",
"x": 0, "y": 0,
"width": 200, "height": 80,
"color": "5"
},
{
"id": "group-ai",
"type": "text",
"text": "## AI & Learning",
"x": -380, "y": -200,
"width": 180, "height": 50,
"color": "1"
}
],
"edges": [
{
"id": "edge-center-ai",
"fromNode": "center",
"fromSide": "left",
"toNode": "group-ai",
"toSide": "right",
"color": "1"
}
]
}
Project Timeline Canvas
{
"nodes": [
{
"id": "phase1",
"type": "text",
"text": "**Phase 1**\nResearch",
"x": 0, "y": 0,
"width": 200, "height": 80,
"color": "1"
},
{
"id": "phase2",
"type": "text",
"text": "**Phase 2**\nDevelopment",
"x": 300, "y": 0,
"width": 200, "height": 80,
"color": "2"
}
],
"edges": [
{
"id": "edge-1-2",
"fromNode": "phase1",
"fromSide": "right",
"toNode": "phase2",
"toSide": "left"
}
]
}
Best Practices
Content First, Layout Second
- List all items to include
- Group by category/theme
- Choose layout pattern
- Generate coordinates
- Add edges last
Keep It Scannable
- Max 20 nodes per canvas
- 4-6 categories ideal
- Clear visual hierarchy
- Consistent spacing
Link to Notes
- Use wiki link format:
[[Note Title]] - Include section links:
[[Note#Section]] - Add emoji for visual cues
Iterate Layout
- Start with template
- Adjust spacing if crowded
- Test in Obsidian preview
- Refine edge routing
Part Headers for Long Documents
긴 ìºë²ì¤ë Part í¤ëë¡ ì¹ì 구ë¶
ì¸ì ì¬ì©:
- ë ¸ë ì 15ê° ì´ì
- ë ¼ë¦¬ì ì¼ë¡ 구ë¶ëë ë¨ê³/ì¹ì ì¡´ì¬
Part í¤ë íì:
{"id":"part1","type":"text","text":"# ð Part 1: [ì¹ì
ëª
]","x":-275,"y":[y],"width":550,"height":60,"color":"[ìì]"}
Part ê° ìì 구ë¶:
- ê° Partì ë¤ë¥¸ ìì í ë¹
- Part ë´ ë ¸ëë¤ì ëì¼ ìì ê³ì´ ì¬ì©
- ìê°ì ë¤ë¹ê²ì´ì í¥ì
Overlap Prevention (ì¤ë²ë© ë°©ì§)
ìºë²ì¤ ì ë°ì´í¸ ì íì ì¤ë²ë©ì ì²´í¬í´ì¼ íë¤. ì¤ë²ë©ì ê°ë ì±ì í´ì¹ê³ ë ¸ë ì íì ì´ë µê² ë§ë ë¤.
ì¤ë²ë© ê³ì° ê³µì
ë ë ¸ëê° ê²¹ì¹ëì§ íì¸:
Node A: (x1, y1, width1, height1)
Node B: (x2, y2, width2, height2)
ì¤ë²ë© ì¡°ê±´ (ë ë¤ ë§ì¡± ì ì¤ë²ë©):
- Xì¶: x1 < x2 + width2 AND x1 + width1 > x2
- Yì¶: y1 < y2 + height2 AND y1 + height1 > y2
ì ì ê°ê²© ê³ì°
ë ¸ë ê° ê°ê²©ì ì ì§í기 ìí ê³µì:
ë¤ì ë
¸ë Y = íì¬ ë
¸ë Y + íì¬ ë
¸ë Height + Gap(30-50px)
ìì:
- Node A: y=500, height=180 â Node A íë¨ = 680
- Node B ìì: y = 680 + 40(gap) = 720
ë ¸ë ëì´ ê¶ì¥ 기ì¤
| ì½í ì¸ ì í | ê¶ì¥ ëì´ |
|---|---|
| í ì¤ ì 목 | 60-80px |
| 2-3ì¤ í ì¤í¸ | 100-120px |
| ì¤ê° ì¤ëª (4-6ì¤) | 140-180px |
| 긴 ì¤ëª (7-10ì¤) | 200-260px |
| í ì´ë¸ í¬í¨ | 250-350px |
ìºë²ì¤ ìì ì ì²´í¬ë¦¬ì¤í¸
- ìì ì : íì¬ ë ¸ëë¤ì Y ì¢í + Height íì
- ë ¸ë ì¶ê° ì: ì½ì ìì¹ ê¸°ì¤ íë¨ ëª¨ë ë ¸ë Yê° ì¡°ì
- Height ë³ê²½ ì: í´ë¹ ë ¸ë ì´í 모ë ë ¸ë Yê° ì¬ê³ì°
- ìì í: 모ë ì¸ì ë ¸ë ìì ëí´ ì¤ë²ë© ê²ì¬
ë ì´ìì í¨í´ë³ ê°ê²©
| ë ì´ìì | X ê°ê²© | Y ê°ê²© |
|---|---|---|
| Radial | 400-600px | N/A |
| Grid | 350-450px | 40-60px |
| Timeline | 280-350px | N/A |
| Hierarchical | N/A | 150-250px |
| Two-Column | 500-700px | 40-60px |
ìë ì¤ë²ë© ìì ì ì°¨
1. 모ë ë
¸ë를 Y ì¢í ê¸°ì¤ ì ë ¬
2. ê° ë
¸ëì ëí´:
a. ì´ì ë
¸ëì íë¨(y + height)ê³¼ íì¬ ë
¸ëì ìë¨(y) ë¹êµ
b. ê²¹ì¹ë©´: íì¬ ë
¸ë y = ì´ì ë
¸ë íë¨ + 40px
c. ì´í 모ë ë
¸ë y ê°ì ëì¼ deltaë§í¼ ì´ë
3. ì¼í° ì ë ¬ì´ íìí ë
¸ëë x ê°ë ì¡°ì
Quality Checklist
Before finalizing canvas:
- All nodes have unique IDs
- No overlapping nodes (run overlap check formula above)
- Minimum 30-50px spacing between adjacent nodes
- Colors follow scheme (AI=1, PKM=4, etc.)
- Center node clearly visible
- Edges don’t cross unnecessarily
- Wiki links are valid
- Canvas renders in Obsidian without errors
Common Use Cases
1. Weekly Reading Summary
- Layout: Radial
- Categories: AI, PKM, Current Events, Education
- Nodes: Article links with quotes
- Output:
AI/Canvas/YYYY-MM-DD Weekly Reading.canvas
2. Project Planning
- Layout: Timeline or Hierarchical
- Nodes: Milestones, tasks, deliverables
- Colors: By status or phase
- Output:
Projects/[Name]/Planning.canvas
3. Concept Map
- Layout: Hierarchical
- Nodes: Main concept + subconcepts
- Edges: Parent-child relationships
- Output:
Topics/[Category]/[Concept].canvas
4. Meeting Network
- Layout: Radial
- Center: Person or topic
- Nodes: Related meetings/people
- Output:
AI/Canvas/[Topic] Network.canvas
Tools & Functions
generate_radial_layout(center, categories, items_per_category)
Returns node positions in radial pattern.
generate_grid_layout(columns, items)
Returns node positions in grid.
create_edge(from_id, to_id, color)
Returns edge object with auto-routing.
validate_canvas(canvas_json)
Checks for overlaps, invalid IDs, broken links.
Error Handling
Common Issues
- Overlapping nodes: Increase spacing or use different layout
- Broken wiki links: Validate file exists before linking
- Edge routing: Simplify connections, avoid crossing
Debugging
- Use Obsidian developer console (Cmd+Opt+I)
- Check JSON syntax
- Verify all node IDs exist in edges
Next Steps: Run example canvas generation to test layout algorithms.