canvaslisted
Install: claude install-skill tboome33/obsidian-mcp-router
# canvas
Obsidian's `.canvas` files are JSON. This skill writes them programmatically with sensible auto-layout so you don't have to hand-position nodes.
## .canvas format primer
A canvas file is a JSON object:
```json
{
"nodes": [
{
"id": "<unique-id>",
"type": "file|text|link|group",
"x": <int>, "y": <int>,
"width": <int>, "height": <int>,
"color": "1-6 or #hex" // optional
// type-specific fields below
}
],
"edges": [
{
"id": "<unique-id>",
"fromNode": "<node-id>",
"fromSide": "top|right|bottom|left",
"toNode": "<node-id>",
"toSide": "top|right|bottom|left",
"label": "<optional>"
}
]
}
```
Type-specific fields:
- `type: "file"` → adds `"file": "<vault-relative-path>"` (any file: .md, .png, .pdf, etc.)
- `type: "text"` → adds `"text": "<markdown content>"`
- `type: "link"` → adds `"url": "<https://...>"`
- `type: "group"` → adds `"label": "<zone label>"`, `"background": "<optional>"`
## Operations
### `canvas-new <name>`
Create a new canvas at `wiki/canvases/<slug>.canvas` (extension is `.canvas` only — Obsidian renders these with a canvas icon in the file tree). Empty `nodes` and `edges` arrays.
### `canvas-add-text <canvas> <text>`
Append a text node. Auto-position: rightmost node's `x + width + 50`, same `y`. Default size 300×120.
### `canvas-add-file <canvas> <path>`
Append a file node. Auto-detect size based on file type:
- Markdown: 400×300
- Image (.png/.jpg/.we