/canvas-layout
Re-layout existing Obsidian Canvas nodes using 6 spatial algorithms: grid (galleries, mood boards), dagre (flowcharts, org charts), radial (mind maps), force-directed (knowledge graphs), linear (timelines), and auto-detect. Preserves group membership, snaps to 20px grid, refits
$ npx -y skills add AgriciDaniel/claude-canvas --skill canvas-layout --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/canvas-layout
Context preview
The summary Claude sees to decide when to auto-load this skill.
Re-layout existing Obsidian Canvas nodes using 6 spatial algorithms: grid (galleries, mood boards), dagre (flowcharts, org charts), radial (mind maps), force-directed (knowledge graphs), linear (timelines), and auto-detect. Preserves group membership, snaps to 20px grid, refits
SKILL.md
canvas-layout.SKILL.mdname: canvas-layout
description: >
Re-layout existing Obsidian Canvas nodes using 6 spatial algorithms: grid
(galleries, mood boards), dagre (flowcharts, org charts), radial (mind maps),
force-directed (knowledge graphs), linear (timelines), and auto-detect.
Preserves group membership, snaps to 20px grid, refits zones around content.
Triggers on: canvas layout, re-layout canvas, arrange canvas, auto-layout,
organize canvas, fix canvas layout, canvas grid, canvas dagre.
user-invocable: false
canvas-layout: Re-Layout Canvas Nodes
Read `../canvas/references/layout-algorithms.md` for algorithm details and selection guide. Read `../canvas/references/performance-guide.md` for node limits.
---
Workflow
1. **Identify target canvas**: Use the active canvas or ask which one (`/canvas list` to show options). 2. **Select algorithm**: Use the user-specified algorithm, or run `auto` detection. 3. **Confirm before applying**: Show what will happen: "Will apply [algorithm] layout to [canvas] ([N] nodes, [M] groups). Create backup? [Y/n]" 4. **Run the layout script**:
python3 scripts/canvas_layout.py [canvas_path] [algorithm] [options]
5. **Report results**: "Moved [N] of [M] nodes. [G] groups refitted. Backup at [path].bak" 6. **Validate**: Run `python3 scripts/canvas_validate.py [canvas_path]` to confirm valid output.
---
Algorithm Selection
When the user says `/canvas layout auto` or doesn't specify an algorithm, use the auto-detection in the script. It analyzes edge density, node types, and connection patterns.
For explicit requests, map user intent to algorithm:
| User says | Algorithm | Options | |-----------|-----------|---------| | "organize these images" | grid | `--sort-by type` | | "make a grid" | grid | | | "flowchart layout" | dagre | `--direction TB` | | "left to right flow" | dagre | `--direction LR` | | "mind map layout" | radial | | | "expand from [node]" | radial | `--center [node-id]` | | "untangle this" | force | | | "spread out the nodes" | force | | | "make a timeline" | linear | `--axis horizontal` | | "vertical sequence" | linear | `--axis vertical` | | "auto-layout" | auto | | | "fix the layout" | auto | |
---
Options Forwarding
Pass algorithm-specific options to the script:
- **grid**: `--columns N` (override auto-detection), `--sort-by type|size`
- **dagre**: `--direction TB|LR|BT|RL`
- **radial**: `--center node-id` (override auto-detection of hub node)
- **force**: `--iterations N` (default 100, reduce to 50 for 50+ nodes)
- **linear**: `--axis horizontal|vertical`
Add `--dry-run` to preview without writing.
---
For Complex Layouts (30+ Nodes)
When a canvas has more than 30 nodes, dispatch the `canvas-layout` agent instead of running the script directly. The agent can:
- Analyze the canvas content to choose sub-groups for different algorithms
- Split large canvases into zone-by-zone layouts
- Handle edge crossing minimization that the basic dagre doesn't cover
- Refine positions after the algorithm runs for better visual balance
---
Edge Cases
- **Empty canvas**: Report "No nodes to layout" and skip.
- **Single node**: Center it at (0, 0) and skip.
- **No edges + dagre requested**: Warn "dagre works best with edges. Using grid instead." Fall back to grid.
- **100+ nodes**: Warn about performance. Suggest splitting into sub-canvases.
- **Backup conflict**: If `.bak` already exists, use `.bak2`, `.bak3`, etc.
Read more
name: canvas-layout description: > Re-layout existing Obsidian Canvas nodes using 6 spatial algorithms: grid (galleries, mood boards), dagre (flowcharts, org charts), radial (mind maps), force-directed (knowledge graphs), linear (timelines), and auto-detect. Preserves group membership, snaps to 20px grid, refits zones around content. Triggers on: canvas layout, re-layout canvas, arrange canvas, auto-layout, organize canvas, fix canvas layout, canvas grid, canvas dagre. user-invocable: false
canvas-layout: Re-Layout Canvas Nodes
Read `../canvas/references/layout-algorithms.md` for algorithm details and selection guide. Read `../canvas/references/performance-guide.md` for node limits.
---
Workflow
1. **Identify target canvas**: Use the active canvas or ask which one (`/canvas list` to show options). 2. **Select algorithm**: Use the user-specified algorithm, or run `auto` detection. 3. **Confirm before applying**: Show what will happen: "Will apply [algorithm] layout to [canvas] ([N] nodes, [M] groups). Create backup? [Y/n]" 4. **Run the layout script**:
python3 scripts/canvas_layout.py [canvas_path] [algorithm] [options]
5. **Report results**: "Moved [N] of [M] nodes. [G] groups refitted. Backup at [path].bak" 6. **Validate**: Run `python3 scripts/canvas_validate.py [canvas_path]` to confirm valid output.
---
Algorithm Selection
When the user says `/canvas layout auto` or doesn't specify an algorithm, use the auto-detection in the script. It analyzes edge density, node types, and connection patterns.
For explicit requests, map user intent to algorithm:
| User says | Algorithm | Options | |-----------|-----------|---------| | "organize these images" | grid | `--sort-by type` | | "make a grid" | grid | | | "flowchart layout" | dagre | `--direction TB` | | "left to right flow" | dagre | `--direction LR` | | "mind map layout" | radial | | | "expand from [node]" | radial | `--center [node-id]` | | "untangle this" | force | | | "spread out the nodes" | force | | | "make a timeline" | linear | `--axis horizontal` | | "vertical sequence" | linear | `--axis vertical` | | "auto-layout" | auto | | | "fix the layout" | auto | |
---
Options Forwarding
Pass algorithm-specific options to the script:
- **grid**: `--columns N` (override auto-detection), `--sort-by type|size`
- **dagre**: `--direction TB|LR|BT|RL`
- **radial**: `--center node-id` (override auto-detection of hub node)
- **force**: `--iterations N` (default 100, reduce to 50 for 50+ nodes)
- **linear**: `--axis horizontal|vertical`
Add `--dry-run` to preview without writing.
---
For Complex Layouts (30+ Nodes)
When a canvas has more than 30 nodes, dispatch the `canvas-layout` agent instead of running the script directly. The agent can:
- Analyze the canvas content to choose sub-groups for different algorithms
- Split large canvases into zone-by-zone layouts
- Handle edge crossing minimization that the basic dagre doesn't cover
- Refine positions after the algorithm runs for better visual balance
---
Edge Cases
- **Empty canvas**: Report "No nodes to layout" and skip.
- **Single node**: Center it at (0, 0) and skip.
- **No edges + dagre requested**: Warn "dagre works best with edges. Using grid instead." Fall back to grid.
- **100+ nodes**: Warn about performance. Suggest splitting into sub-canvases.
- **Backup conflict**: If `.bak` already exists, use `.bak2`, `.bak3`, etc.
AI-orchestrated visual production for Obsidian Canvas. Create presentations, flowcharts, mood boards, knowledge graphs, and galleries with intelligent layout and AI-generated content.
Other skills on claude-canvas.
- /canvas-create
Create new Obsidian Canvas files — blank with a starter structure, or from one of 12 template archetypes (presentation, flowchart, mind-map, gallery, dashboard, storyboard, knowledge-graph, mood-board, timeline, comparison, kanban, project-brief). Handles directory creation,
Open skill - /canvas-export
Export Obsidian Canvas files to PNG, SVG, or PDF formats. Uses the Advanced Canvas plugin's built-in export when Obsidian is running, or falls back to Playwright browser-based screenshot capture. Supports single canvas export, presentation slide-per-page PDF export, and batch
Open skill - /canvas-generate
AI-orchestrated full canvas generation. Given a description, detects the best archetype, generates content and visuals, instantiates a template, applies layout, and produces a complete canvas. The flagship command. Dispatches canvas-media and canvas-composer agents for parallel
Open skill - /canvas-populate
Add content to existing Obsidian Canvas files. Supports all node types: images (with auto aspect ratio detection), text cards, PDFs, wiki notes, web links, Mermaid diagrams, SVGs, GIFs, AI-generated images via banana. Also adds zones (groups), edges between nodes, and imports
Open skill - /canvas-present
Build presentation-mode canvases for the Advanced Canvas plugin. Creates slide-deck canvases with 1200x675 group nodes connected by edges for arrow-key navigation. Supports title slides, content slides with images, full-text slides, and optional script annotation columns for
Open skill - /canvas-template
Browse and instantiate 12 canvas template archetypes: presentation, flowchart, mind-map, gallery, dashboard, storyboard, knowledge-graph, mood-board, timeline, comparison, kanban, project-brief. Each template generates a ready-to-use canvas with proper layout, zones, and
Open skill

