SuperAPI AI Directory

obsidian-canvas

General & other

View repository

Updated 10-15 20:05

About this 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

Let the layout be automatic, focus on the content

The core of Canvas is node placement and connections. Instead of manually calculating coordinates, use automatic layouts per pattern.

Edit Workflow: Draft & Atomic Replace (CRITICAL)

Do not overwrite the canvas file directly multiple times.

While Obsidian has the canvas tab open, if you modify the .canvas file externally, Obsidian may overwrite the disk again with its own in-memory (often minimal) state, and your work results may be lost.

Recommended workflow

  1. Finish editing in a temporary file: <원본>.canvas.draftWrite all nodes, edges, and containers at once to
  2. Validation: Check JSON validity, node coordinate overlap, and edge ID matching
  3. Atomic Replace: mv draft → 원본 Replace with a single file system event
  4. Check results: wc -lVerify file size with (minimal state = suspect empty canvas)

Patterns to avoid

  • Consecutive Write calls to the same .canvas file (race condition)
  • Partial edit with Edit, then next Edit before Obsidian sync
  • Immediately after writing, call obsidian://open (sync conflict possible during writing)
  • Repeatedly asking the user to "refresh Obsidian"

Atomic Replace example

# 1. 임시 파일에 완전한 캔버스 작성
Write file: AI/Canvas/foo.canvas.draft (전체 내용)

# 2. 한 번에 교체
mv "AI/Canvas/foo.canvas.draft" "AI/Canvas/foo.canvas"

# 3. 결과 검증
wc -l "AI/Canvas/foo.canvas"  # 정상 = 노드 수에 비례한 줄 수
                              # 비정상 = 6-9줄 (minimal 상태)

Even small edits rewrite the whole thing

Even if partial edits are needed, rewrite the entire canvas JSON to a temporary file and atomic replace. The pattern of editing only one node with the Edit tool can cause sync conflicts.

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

Radial placement by category from a central node

        Topic1
           |
Topic4 - CENTER - Topic2
           |
        Topic3

Use case: Weekly reading, topic overview Spacing: 400-600px from center

2. Grid Layout

Place in vertical columns by category

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

Horizontal flow in chronological order

Event1 → Event2 → Event3 → Event4

Use case: Project milestones, historical events Spacing: 300px horizontal

4. Hierarchical Layout

Expand top→bottom in a tree structure

         Root
        /    \
    Child1  Child2
     / \      / \
   A   B    C   D

Use case: Concept breakdown, org charts Spacing: Y: 200px per level

5. Side-by-side Comparison

Place related items horizontally for comparison at a glance

┌─────────┐ ┌─────────┐ ┌─────────┐
│  항목1  │ │  항목2  │ │  항목3  │
│ (350px) │ │ (350px) │ │ (350px) │
└─────────┘ └─────────┘ └─────────┘

Use case: Option comparison, summary cards, listing related concepts Node width: 300-350px (narrow) X spacing: 40px between nodes X position calculation (centered at x=0):

  • 2 nodes: x = -195, 195
  • 3 nodes: x = -390, 0, 390
  • Formula: first node x = -(total width/2) + (node width/2)

6. Two-Column Comparison

Place two contrasting viewpoints/options on both sides

    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 comparison, pros and cons, Before/After, viewpoint contrast Column width: 500-550px each X spacing: 750px between column centers (left: -375, right: 375) Center elements: x = 0 (connect both sides)

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 (adjust content when width changes)

When node width shrinks due to a layout change:

Width change Content adjustment
550px → 350px Reduce table columns, split long sentences
350px → 300px Only 2-3 bullets, remove examples
300px → 250px Title + one-line summary only

Abbreviation priority (what to remove first):

  1. Additional explanations, parenthetical content
  2. Examples, references
  3. Table rows (keep only the essentials)
  4. Number of bullet points

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

  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

Separate sections with Part headers for long canvases

When to use:

  • 15 or more nodes
  • Logically distinct stages/sections exist

Part header format:

{"id":"part1","type":"text","text":"# 📋 Part 1: [섹션명]","x":-275,"y":[y],"width":550,"height":60,"color":"[색상]"}

Color distinction between Parts:

  • Assign a different color to each Part
  • Nodes within a Part use the same color family
  • Improved visual navigation

Overlap Prevention

When updating the canvas, always overlap must be checked. Overlap harms readability and makes node selection difficult.

Overlap calculation formula

Check whether two nodes overlap:

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

Calculating the appropriate spacing

Formula for maintaining spacing between nodes:

다음 노드 Y = 현재 노드 Y + 현재 노드 Height + Gap(30-50px)

예시:
- Node A: y=500, height=180 → Node A 하단 = 680
- Node B 시작: y = 680 + 40(gap) = 720

Recommended node height criteria

Content type Recommended height
Single-line title 60-80px
2-3 lines of text 100-120px
Medium description (4-6 lines) 140-180px
Long description (7-10 lines) 200-260px
Includes a table 250-350px

Checklist when modifying the canvas

  1. Before modification: Identify the Y coordinate + Height of the current nodes
  2. When adding a node: Adjust the Y values of all nodes below the insertion position
  3. When changing Height: Recalculate the Y values of all nodes after the relevant node
  4. After modification: Check for overlap for every pair of adjacent nodes

Spacing by layout pattern

Layout X spacing Y spacing
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

Automatic overlap correction procedure

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.