Agent skill

Obsidian Canvas Builder

by AgriciDaniel in AgriciDaniel/claude-canvas

Builds and lays out Obsidian Canvas files with sub-agents for images, diagrams and layout, from flowcharts and mood boards to presentation decks.

MITAuto-check passedMedia & Creative

Install Obsidian Canvas Builder

skills CLI
$ npx skills add AgriciDaniel/claude-canvas --skill canvas -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install AgriciDaniel/claude-canvas canvas --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-canvas.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/canvas .claude/skills/canvas && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
canvas
GitHub stars
300
Token cost
~2.5k tokens
SKILL.md length
910 words
Files
8 (incl. references)
Skills in repo
8
Repo updated
First seen
Licence
MIT

At a glance

Builds and lays out Obsidian Canvas files with sub-agents for images, diagrams and layout, from flowcharts and mood boards to presentation decks.

  • Works in 3 steps: If wiki/canvases/ exists in the current… → Otherwise: use .canvases/ in the current… → Create the directory if it doesn't exist.
  • Creating a mood board, flowchart or storyboard as an Obsidian canvas
  • SKILL.md covers Context Detection, Command Routing, Status / List (Inline… and Key References, plus 5 more sections
  • Calls python3

What it does

This skill lets the agent act as a creative director for Obsidian Canvas, turning a description into a populated .canvas file. It first finds where canvases live: a wiki/canvases folder if one exists in the current or a parent directory, as in a claude-obsidian vault, and otherwise a .canvases folder in the working directory, with main.canvas as the default file.

Slash commands route to sub-skills for creating blank or templated canvases, adding nodes (image, text, PDF, note, link, Mermaid, SVG, GIF), drawing zones and connections, re-laying out with auto, grid, dagre, radial, force or linear algorithms, building presentation canvases of 1200x675 slides, generating a full canvas from a description, and exporting to PNG, SVG or PDF. Twelve template archetypes are available, and recent AI-generated images can be imported.

Sub-agents are dispatched for image generation, SVG diagrams, GIF creation and spatial layout, and Advanced Canvas presentation mode is supported. Reference files cover the canvas spec, layout algorithms, media, Mermaid patterns, performance, the presentation spec and a template catalog.

When your agent uses it

  • Creating a mood board, flowchart or storyboard as an Obsidian canvas
  • Building a presentation from notes inside Obsidian Canvas
  • Re-laying out a cluttered canvas with a different algorithm
  • Exporting a canvas to PNG, SVG or PDF

Example prompts

  • “Create a canvas from the timeline template for our product launch.”
  • “Lay out my research canvas with a radial layout.”
  • “Build a presentation canvas from my meeting notes.”
  • “Add the latest AI-generated images to the mood board canvas.”

Requirements

  • Obsidian, or a project folder to hold the .canvas files

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. If wiki/canvases/ exists in the current directory or a parent: use it (claude-obsidian vault mode).
  2. Otherwise: use .canvases/ in the current working directory (standalone mode).
  3. Create the directory if it doesn't exist.

What it can do on your machine

Read from SKILL.md and the folder at commit 05b808c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Obsidian Canvas Builder loads about 2.5k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 188 tokens; SKILL.md has 910 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~188
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~13k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from AgriciDaniel/claude-canvas at commit 05b808c, republished under its MIT licence (© AgriciDaniel). 910 words, ~2,486 tokens.

Download SKILL.mdSave it as .claude/skills/canvas/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
canvas
description
AI-orchestrated visual production for Obsidian Canvas. Create presentations, flowcharts, mood boards, knowledge graphs, galleries, storyboards, timelines, dashboards, and more with intelligent layout and AI-generated content. Claude acts as Creative Director — dispatching sub-agents for image generation, SVG diagrams, GIF creation, and spatial layout. Supports 12 template archetypes, 6 layout algorithms, and Advanced Canvas presentation mode. Triggers on: /canvas, create canvas, build canvas, make a presentation, visual board, mood board, flowchart canvas, storyboard, canvas from template, lay out canvas, export canvas, canvas layout, canvas generate, add to canvas, put this on the canvas, open canvas, canvas present, canvas template.

canvas: AI-Orchestrated Visual Production

Claude acts as Creative Director for Obsidian Canvas. Describe what you want and get a fully populated, professionally laid-out .canvas file.


Context Detection

Before any operation, determine the canvas directory:

  1. If wiki/canvases/ exists in the current directory or a parent: use it (claude-obsidian vault mode).
    • Media goes to _attachments/images/canvas/
  2. Otherwise: use .canvases/ in the current working directory (standalone mode).
    • Media goes to .canvases/assets/
  3. Create the directory if it doesn't exist.

Default canvas: [canvas_dir]/main.canvas


Command Routing

CommandSub-skillDescription
/canvas (no args)(inline)Status: list canvases, node counts, zones
/canvas create [name]canvas-createCreate blank or templated canvas
/canvas create [name] from [template]canvas-createCreate from archetype
/canvas add [type] [content]canvas-populateAdd node (image/text/pdf/note/link/mermaid/svg/gif/banana)
/canvas zone [name] [color]canvas-populateAdd group node
/canvas connect [from] [to] [label]canvas-populateAdd edge between nodes
/canvas from bananacanvas-populateImport recent AI-generated images
/canvas layout [algorithm]canvas-layoutRe-layout (auto/grid/dagre/radial/force/linear)
/canvas present [topic]canvas-presentBuild presentation canvas (1200x675 slides)
/canvas present from [notes]canvas-presentPresentation from existing content
/canvas generate [description]canvas-generateAI-orchestrated full canvas generation
/canvas template listcanvas-templateBrowse 12 archetypes
/canvas template use [name]canvas-templateInstantiate a template
/canvas export [format] [path]canvas-exportExport to PNG/SVG/PDF
/canvas list(inline)List all canvases with stats

Status / List (Inline Operations)

/canvas (no args)
  1. Detect canvas directory (vault or standalone).
  2. Find default canvas (main.canvas).
  3. If exists: read JSON, count nodes by type, list zone labels. Report: "Canvas has N nodes: X images, Y text, Z files. Zones: [list]"
  4. If not exists: report "No canvas found. Run /canvas create [name] to start."
/canvas list
  1. Glob [canvas_dir]/*.canvas.
  2. For each: read JSON, count nodes by type.
  3. Report table:
main.canvas              14 nodes (8 images, 3 text, 2 file, 1 group)
design-ideas.canvas      42 nodes (30 images, 4 text, 8 groups)

Key References

Read these references before performing canvas operations:

  • references/canvas-spec.md — JSON Canvas 1.0 format, coordinate system, node types, edges, colors, sizing
  • references/performance-guide.md — Node limits, GIF lag, SVG gotchas, 20px grid snapping

Additional references:

  • references/layout-algorithms.md — 6 layout algorithms (canvas-layout)

  • references/template-catalog.md — 12 archetypes (canvas-template)

  • references/presentation-spec.md — Advanced Canvas slides (canvas-present)

  • references/mermaid-patterns.md — Mermaid in text nodes (canvas-populate, canvas-generate)

  • references/media-guide.md — Image/GIF/SVG integration (canvas-generate, canvas-populate)


Auto-Positioning Algorithm

Used by canvas-populate to place new nodes. Read references/canvas-spec.md for the full coordinate system.

python
def next_position(canvas_nodes, target_zone_label, new_w, new_h):
    # Find zone group node
    zone = next((n for n in canvas_nodes
                 if n.get('type') == 'group'
                 and n.get('label') == target_zone_label), None)

    if zone is None:
        # No zone: place below all content
        max_y = max((n['y'] + n.get('height', 0) for n in canvas_nodes), default=-140)
        return snap_grid(-400, max_y + 60)

    zx, zy = zone['x'], zone['y']
    zw, zh = zone['width'], zone['height']

    # Nodes inside this zone (exclude groups)
    inside = [n for n in canvas_nodes
              if n.get('type') != 'group'
              and zx <= n['x'] < zx + zw
              and zy <= n['y'] < zy + zh]

    if not inside:
        return snap_grid(zx + 20, zy + 20)

    # Find the bottom-most row: nodes whose bottom edge is closest to the zone bottom
    max_bottom = max(n['y'] + n.get('height', 0) for n in inside)
    # Nodes on the last row: those whose top y is within one row-height of the bottom
    last_row = [n for n in inside if n['y'] + n.get('height', 0) >= max_bottom - 20]
    if not last_row:
        last_row = inside  # fallback

    rightmost_x = max(n['x'] + n.get('width', 0) for n in last_row)
    next_x = rightmost_x + 40

    if next_x + new_w > zx + zw:
        # Overflow: new row below the current last row
        return snap_grid(zx + 20, max_bottom + 20)

    # Same row: align to top of the LAST row (not all nodes)
    current_row_y = min(n['y'] for n in last_row)
    return snap_grid(next_x, current_row_y)

def snap_grid(x, y, grid=20):
    return (round(x / grid) * grid, round(y / grid) * grid)

ID Generation

Read the canvas JSON first. Collect all existing IDs. Never reuse one.

Pattern: [type]-[content-slug]-[full-unix-timestamp]

Use the full 10-digit Unix timestamp to avoid collisions in batch operations.

Examples: img-cover-1744032823, text-note-1744032845, zone-branding-1744032901

If a collision is detected (ID already exists), append -2, -3, etc.


Canvas JSON Structure

The minimal valid canvas:

json
{
  "nodes": [],
  "edges": []
}

Z-index rule: First node in the array renders at the bottom (background). Last node renders on top (foreground). Groups MUST come before their contained nodes so content renders in front of zone backgrounds.

Grid snapping: All x, y, width, height values should be multiples of 20.

Node limit: Warn the user if a canvas exceeds 100 nodes. Error if it exceeds 200.


Quality Standards (MANDATORY)

Every canvas produced by any sub-skill MUST pass these checks before reporting success. These are not optional — they are the definition of "done."

Show full SKILL.md (411 more words)Show less
Content Quality
  • NO placeholder text in any node. Replace ALL of these:
    • "Describe this step" → write a real step description relevant to the title
    • "YYYY-MM-DD" → use today's date or a realistic date
    • "Value: 0, Target: 100" → use realistic example values
    • "Content goes here" → write actual content matching the slide topic
    • "Define this entity" → write a real definition
    • "What happened" → write a real event description
  • Every text node must contain real, useful content that a user can immediately understand
  • Template instantiation is STEP 1 — writing real content into the nodes is STEP 2 (never skip it)
Layout Quality
  • Minimum 80px horizontal gap between adjacent content nodes
  • Minimum 60px vertical gap between adjacent content nodes
  • Mind-map canvases must have radial layout (run canvas layout radial after instantiation)
  • Knowledge-graph canvases must have force layout (run canvas layout force after instantiation)
  • Flowchart canvases should have dagre layout applied (run canvas layout dagre for proper hierarchy)
  • No overlapping nodes — run canvas_validate.py to confirm
Structural Quality
  • Groups (zones) appear BEFORE content nodes in the array (z-index)
  • All coordinates are multiples of 20 (grid snapping)
  • Node count under 120 (warn at 100, error at 200)
  • All file paths are vault-relative (no absolute paths)
  • Edge IDs are unique, node IDs are unique
Before Reporting Success
  1. Run python3 scripts/canvas_validate.py <path> — must return valid: true with 0 errors
  2. Visually scan the generated JSON — are there any "Describe this" or "YYYY-MM-DD" strings remaining?
  3. If the canvas has groups, verify content nodes are inside their designated zones (center-point check)
  4. If the archetype needs a specific layout (mind-map→radial, kg→force), verify it was applied

Integration with Other Skills

banana (AI image generation):

  • /canvas add banana [prompt] delegates to the banana skill, then adds the result as a file node.
  • /canvas from banana reads .recent-images.txt or finds images modified in the last 10 minutes.
  • If banana is not installed, report gracefully: "Install the banana skill for AI image generation."

svg (diagram/chart/icon generation):

  • /canvas add svg [description] delegates to the svg skill, then adds the SVG as a file node.
  • SVGs render as <img> in Obsidian — no interactivity. Must include viewBox for proper scaling.

claude-gif-* (GIF generation/editing):

  • /canvas add gif [description] delegates to the gif skill, then adds as a file node.
  • Performance warning: limit to 3 GIFs per canvas, cap dimensions at 480px width.

Mermaid (native in text nodes):

  • Mermaid code blocks render natively in Obsidian text nodes. No external skill needed.
  • Wrap in triple-backtick mermaid code fence inside a text node.

© AgriciDaniel, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 7 other files (references) in skills/canvas of AgriciDaniel/claude-canvas.

  • SKILL.md
  • references/canvas-spec.md
  • references/layout-algorithms.md
  • references/media-guide.md
  • references/mermaid-patterns.md
  • references/performance-guide.md
  • references/presentation-spec.md
  • references/template-catalog.md

Open the folder on GitHubat commit 05b808c

Compare with similar skills

Obsidian Canvas Builder next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Obsidian Canvas Builder compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Obsidian Canvas Builder this skillAgriciDaniel/claude-canvas300—~2.5kAutomated safety check: PassMIT
Visual Explainernicobailon/visual-explainer10k—~3.3kAutomated safety check: PassMIT
Guizang Material Illustrationop7418/guizang-material-illustration1.2k—~1.6kAutomated safety check: PassNone
Strategy Consulting Visualizationkgraph57/mckinsey-style-visualization-skill128—~3.2kAutomated safety check: PassMIT
Article Illustration Batch GeneratorSpaceZephyr/design-buddy175—~1kAutomated safety check: PassNone
Tesseract Designmirage-hq/Tesseract128—~986Automated safety check: PassCustom licence

Similar skills

  • Visual Explainer

    nicobailon/visual-explainer

    Turns systems, code changes, plans and data into self-contained HTML pages where figures carry the explanation, with options for slide decks and narrated MP4 videos.

    10k GitHub stars~3.3k tokensUpdated 2 days ago
    Media & CreativeAuto-check passed
  • Guizang Material Illustration

    op7418/guizang-material-illustration

    Generate Guizang-style material illustrations, labeled explanatory visuals, material-styled chart illustrations, and data-first editorial images from articles, notes, product concepts, workplace…

    1.2k GitHub stars~1.6k tokensUpdated 3 mo ago
    Media & CreativeAuto-check passed
  • Strategy Consulting Visualization

    kgraph57/mckinsey-style-visualization-skill

    A skill your agent uses when turning any content into clear, professional visualizations - board slides, reports, proposals, research summaries, training materials, technical diagrams, infographics…

    128 GitHub stars~3.2k tokensUpdated 1 mo ago
    Media & CreativeAuto-check passed
  • Article Illustration Batch Generator

    SpaceZephyr/design-buddy

    Splits a Markdown article by heading, drafts an image prompt for each section, then generates diagrams with the Gemini API and embeds them in the note.

    175 GitHub stars~1k tokensUpdated 3 mo ago
    Media & CreativeAuto-check passed
  • Tesseract Design

    mirage-hq/Tesseract

    Create and revise static visual designs as editable Tesseract compositions and rendered PNGs, including posters, social graphics, slide layouts, diagrams, and web/UI mockups.

    128 GitHub stars~986 tokensUpdated 7 days ago
    Frontend & DesignAuto-check passed
  • Media Asset Sourcing

    BingHanOfUESTC/open_agent_team

    A skill your agent uses when PPT slides need external images, screenshots, logos, product photos, stock-like visuals, diagrams, or videos that must be downloaded, inserted, or linked with source and…

    106 GitHub stars~819 tokensUpdated 3 mo ago
    Documents & OfficeAuto-check passed

More from AgriciDaniel/claude-canvas

All 8 skills in this repo
  • Canvas Create

    AgriciDaniel/claude-canvas

    Creates new Obsidian Canvas files, either blank with a starter structure or from one of 12 templates such as flowchart, mind map, kanban or timeline.

    300 GitHub stars~849 tokensUpdated 6 mo ago
    Auto-check passed
  • Obsidian Canvas Export

    AgriciDaniel/claude-canvas

    Exports Obsidian Canvas files to PNG, SVG or PDF, using the Advanced Canvas plugin when Obsidian is open and falling back to a Playwright screenshot.

    300 GitHub stars~1.2k tokensUpdated 6 mo ago
    Auto-check passed
  • Canvas Generate

    AgriciDaniel/claude-canvas

    Builds a complete Obsidian canvas from a plain description by picking one of 12 template archetypes, planning nodes, and generating text and media for it.

    300 GitHub stars~2k tokensUpdated 6 mo ago
    Auto-check passed
  • Obsidian Canvas Re-Layout

    AgriciDaniel/claude-canvas

    Rearranges the nodes of an existing Obsidian Canvas with grid, dagre, radial, force-directed or linear layouts while keeping groups intact.

    300 GitHub stars~866 tokensUpdated 6 mo ago
    Auto-check passed
  • Obsidian Canvas Populator

    AgriciDaniel/claude-canvas

    Adds images, text cards, PDFs, notes, links, diagrams, zones and edges to an existing Obsidian Canvas file without overlapping what is already there.

    300 GitHub stars~1.6k tokensUpdated 6 mo ago
    Auto-check passed
  • Canvas Presentation Builder

    AgriciDaniel/claude-canvas

    Builds an Obsidian Advanced Canvas slide deck with title, content and closing slides wired together by arrow-key navigation edges.

    300 GitHub stars~1.3k tokensUpdated 6 mo ago
    Auto-check passed

Works with

Questions about Obsidian Canvas Builder

What does Obsidian Canvas Builder do?

Builds and lays out Obsidian Canvas files with sub-agents for images, diagrams and layout, from flowcharts and mood boards to presentation decks. canvas file.canvas as the default file.

When should I use Obsidian Canvas Builder?

Obsidian Canvas Builder fits situations like: creating a mood board, flowchart or storyboard as an Obsidian canvas; building a presentation from notes inside Obsidian Canvas; re-laying out a cluttered canvas with a different algorithm; exporting a canvas to PNG, SVG or PDF.

How do I install Obsidian Canvas Builder in Claude Code?

Run `npx skills add AgriciDaniel/claude-canvas --skill canvas -a claude-code`. Or copy the skill folder (skills/canvas in AgriciDaniel/claude-canvas) into .claude/skills/canvas in your project. Claude Code loads it when a task matches its description.

How do I install Obsidian Canvas Builder in Codex?

Run `npx skills add AgriciDaniel/claude-canvas --skill canvas -a codex`. Or copy the skill folder (skills/canvas in AgriciDaniel/claude-canvas) into .agents/skills/canvas in your project. Codex loads it when a task matches its description.

Can I use Obsidian Canvas Builder in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AgriciDaniel/claude-canvas --skill canvas -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/canvas, .gemini/skills/canvas, .github/skills/canvas and .opencode/skills/canvas in your project.

What does Obsidian Canvas Builder need to run?

Going by SKILL.md and its folder, Obsidian Canvas Builder needs the command-line tools its instructions call (python3). Our summary lists: Obsidian, or a project folder to hold the .canvas files.

Does Obsidian Canvas Builder access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Obsidian Canvas Builder safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Obsidian Canvas Builder use?

Obsidian Canvas Builder is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Obsidian Canvas Builder use?

About 2.5k tokens (SKILL.md is roughly 9.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 11k tokens, read only when the agent opens those files.

What are the alternatives to Obsidian Canvas Builder?

Skills that share tags, products or a category with Obsidian Canvas Builder: Visual Explainer (nicobailon/visual-explainer, 10k stars), Guizang Material Illustration (op7418/guizang-material-illustration, 1.2k stars), Strategy Consulting Visualization (kgraph57/mckinsey-style-visualization-skill, 128 stars) and Article Illustration Batch Generator (SpaceZephyr/design-buddy, 175 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Obsidian Canvas Builder?

AgriciDaniel (a GitHub user) maintains it in AgriciDaniel/claude-canvas, which has 300 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on April 10, 2026.

Source: AgriciDaniel/claude-canvas on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.