home / skills / jykim / claude-obsidian-skills / obsidian-canvas

obsidian-canvas skill

/obsidian-canvas

This skill creates Obsidian Canvas visuals with automatic layouts and color-coding, helping you organize knowledge maps, timelines, and weekly readings.

npx playbooks add skill jykim/claude-obsidian-skills --skill obsidian-canvas

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
11.7 KB
---
name: obsidian-canvas
description: Create and manage Obsidian Canvas files with automatic layout generation. Use when creating visual knowledge maps, weekly reading summaries, or project timelines.
allowed-tools:
  - Read
  - Write
  - Edit
  - Glob
  - Grep
license: MIT
---

# 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

```json
{
  "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**: 250x60 (single line)
- **Quote**: 280x60 (wider for readability)
- **Multi-line**: 250x(60 + 20*lines)

### File Node
- **Link to note**: 280x90 (includes title + summary)
- **Path format**: Use wiki links in text field

### Group Node
- **Category header**: 200x50
- **Container**: Auto-size based on children

### Width Adaptation (폭 변경 시 콘텐츠 조정)

레이아웃 변경으로 노드 폭이 줄어들 때:

| 폭 변경 | 콘텐츠 조정 |
|--------|------------|
| 550px → 350px | 테이블 열 축소, 긴 문장 분리 |
| 350px → 300px | 불릿 2-3개만, 예시 제거 |
| 300px → 250px | 제목 + 한 줄 요약만 |

**축약 우선순위** (먼저 제거할 것):
1. 부연 설명, 괄호 내용
2. 예시, 참조
3. 테이블 행 (핵심만 유지)
4. 불릿 포인트 수

## 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

```json
{
  "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

```json
{
  "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
1. List all items to include
2. Group by category/theme
3. Choose layout pattern
4. Generate coordinates
5. 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 헤더 형식**:
```json
{"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 |

### 캔버스 수정 시 체크리스트

1. **수정 전**: 현재 노드들의 Y 좌표 + Height 파악
2. **노드 추가 시**: 삽입 위치 기준 하단 모든 노드 Y값 조정
3. **Height 변경 시**: 해당 노드 이후 모든 노드 Y값 재계산
4. **수정 후**: 모든 인접 노드 쌍에 대해 오버랩 검사

### 레이아웃 패턴별 간격

| 레이아웃 | 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.

Overview

This skill creates and manages Obsidian Canvas files with automatic layout generation, color-coding, and smart node positioning. It helps turn scattered notes into visual maps, timelines, and reading summaries quickly and consistently. Designed for Obsidian users who want repeatable canvas templates and overlap-free arrangements.

How this skill works

The skill inspects note metadata, tags, and provided node lists to categorize content and pick a layout pattern (radial, grid, timeline, hierarchical, or comparison). It then computes node sizes and coordinates, creates edges with sensible routing, applies the color scheme, and validates the canvas JSON for overlaps and broken links. Validation includes unique ID checks, spacing enforcement, and auto-adjustment steps to prevent collisions.

When to use it

  • Summarize weekly reading into a visual snapshot.
  • Build a concept or knowledge map linking related notes.
  • Design a project timeline or milestone view.
  • Compare options side-by-side for decision making.
  • Organize a long document into parts and sections visually.

Best practices

  • Start with content: list nodes and group by theme before choosing a layout.
  • Limit canvases to ~20 nodes or use Part headers for large sets.
  • Pick a layout pattern that matches relationships (timeline for time, radial for topic hubs).
  • Use wiki links for File nodes and test links during validation.
  • Keep consistent spacing and color usage for quick scanning.

Example use cases

  • Weekly Reading Canvas: radial layout with category spokes for AI, PKM, Current Events.
  • Project Timeline: horizontal timeline with phase nodes and auto-generated edges.
  • Concept Map: hierarchical breakdown of a core concept into subtopics and resources.
  • Two-column comparison: pros vs cons with a shared center for common ground.

FAQ

How does overlap prevention work?

The skill checks bounding boxes and enforces a minimum gap (30–50px). If collisions are detected it shifts nodes iteratively and re-validates until all overlaps are resolved.

Can I control node sizes and colors?

Yes. Node type presets define default sizes, and the color scheme maps IDs to categories. You can override widths/heights and color IDs in the node definition.