Obsidian Canvas logo

Obsidian Canvas

Community
jykim
obsidian-canvas

Create and manage Obsidian Canvas files with automatic layout generation. Use when creating visual knowledge maps, weekly reading summaries, or project timelines.

Overview

Publisherjykim
Repositoryclaude-obsidian-skills
Skill nameobsidian-canvas
Stars
52
Forks
10
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by jykim on GitHub. Read the source before you install it.

Installation

Install the Obsidian Canvas AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/jykim/claude-obsidian-skills/tree/main/obsidian-canvas
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/jykim/claude-obsidian-skills.git /tmp/claude-obsidian-skills
mkdir -p .claude/skills
cp -r /tmp/claude-obsidian-skills/obsidian-canvas .claude/skills/obsidian-canvas
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Obsidian Canvas in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Obsidian Canvas on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Obsidian Canvas is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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의 핵심은 노드 배치와 연결. 수동으로 좌표 계산하는 대신, 패턴별 자동 레이아웃 사용.

Edit Workflow: Draft & Atomic Replace (CRITICAL)

캔버스 파일을 직접 여러 번 덮어쓰지 마라.

Obsidian이 캔버스 탭을 열어둔 상태에서 외부에서 .canvas 파일을 수정하면, Obsidian이 자기 메모리의 (종종 minimal한) 상태로 디스크를 다시 덮어써 작업 결과가 사라질 수 있다.

권장 워크플로우

  1. 임시 파일에서 편집 완료: <원본>.canvas.draft에 모든 노드·엣지·컨테이너를 한 번에 작성
  2. 검증: JSON 유효성, 노드 좌표 오버랩, 엣지 ID 매칭 확인
  3. Atomic Replace: mv draft → 원본 한 번의 파일 시스템 이벤트로 교체
  4. 결과 확인: wc -l로 파일 크기 검증 (minimal 상태 = 빈 캔버스 의심)

피해야 할 패턴

  • 같은 .canvas 파일에 연속적으로 Write 호출 (race condition)
  • Edit으로 부분 수정 후 Obsidian sync 전 다음 Edit
  • 작성 직후 바로 obsidian://open 호출 (작성 중 sync 충돌 가능)
  • 사용자에게 "Obsidian 새로고침" 반복 요청

Atomic Replace 예시

bash
# 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 상태)

작은 수정도 전체 재작성

부분 수정이 필요해도 전체 캔버스 JSON을 임시 파일에 다시 쓰고 atomic replace. Edit 도구로 한 노드만 수정하는 패턴은 sync 충돌을 일으킬 수 있다.

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

ColorIDUse Case
Red1AI & Tech
Orange2Work & Projects
Yellow3Current Events
Green4PKM & Learning
Purple5Personal & Meta
Blue6Education & 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 간격
Radial400-600pxN/A
Grid350-450px40-60px
Timeline280-350pxN/A
HierarchicalN/A150-250px
Two-Column500-700px40-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.

Frequently asked questions

What does the Obsidian Canvas AI skill do?

Create and manage Obsidian Canvas files with automatic layout generation. Use when creating visual knowledge maps, weekly reading summaries, or project timelines.

Why use Obsidian Canvas on TypingMind?

Because you install it once and use it with any model. Obsidian Canvas is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Obsidian Canvas in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/jykim/claude-obsidian-skills/tree/main/obsidian-canvas. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Obsidian Canvas?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Obsidian Canvas?

As many as you like. As long as a model supports skills, you can use Obsidian Canvas with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Obsidian Canvas AI skill free?

Yes. It is published on GitHub by jykim under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇