JSON Canvas.
npx -y skills add kepano/obsidian-skills --skill json-canvas --agent claude-codeСоздание и редактирование файлов JSON Canvas (.canvas): узлы, рёбра, группы и связи. Используйте при работе с .canvas файлами, интеллект-картами, блок-схемами и визуальными канвасами в Obsidian.
{
"nodes": [],
"edges": []
}
.canvas файл с базовой структурой"6f0ad84f44ce9c17")id, type, x, y, width, heightfromNode и toNodefromNode/toNode существуют в массиве узловПорядок в массиве определяет z-индекс: первый узел — нижний слой, последний — верхний.
| Атрибут | Обязателен | Тип | Описание |
|---|---|---|---|
id | Да | string | Уникальный 16-символьный hex идентификатор |
type | Да | string | text, file, link или group |
x | Да | integer | Позиция X в пикселях |
y | Да | integer | Позиция Y в пикселях |
width | Да | integer | Ширина в пикселях |
height | Да | integer | Высота в пикселях |
color | Нет | canvasColor | Пресет "1"–"6" или hex ("#FF0000") |
{
"id": "6f0ad84f44ce9c17", "type": "text",
"x": 0, "y": 0, "width": 400, "height": 200,
"text": "# Заголовок\n\nКонтент в **Markdown**."
}
Используйте \n для переносов строк. Не используйте буквальный \\n — Obsidian отобразит его как символы.
{
"id": "a1b2c3d4e5f67890", "type": "file",
"x": 500, "y": 0, "width": 400, "height": 300,
"file": "Attachments/diagram.png",
"subpath": "#Heading"
}
{
"id": "c3d4e5f678901234", "type": "link",
"x": 1000, "y": 0, "width": 400, "height": 200,
"url": "https://obsidian.md"
}
{
"id": "d4e5f6789012345a", "type": "group",
"x": -50, "y": -50, "width": 1000, "height": 600,
"label": "Обзор проекта", "color": "4",
"background": "path/to/bg.png", "backgroundStyle": "cover"
}
| Атрибут | Обязателен | По умолчанию | Описание |
|---|---|---|---|
id | Да | — | Уникальный идентификатор |
fromNode | Да | — | ID исходного узла |
fromSide | Нет | — | top, right, bottom, left |
fromEnd | Нет | none | none или arrow |
toNode | Да | — | ID целевого узла |
toSide | Нет | — | top, right, bottom, left |
toEnd | Нет | arrow | none или arrow |
color | Нет | — | Цвет линии |
label | Нет | — | Текстовая метка |
{
"id": "0123456789abcdef",
"fromNode": "6f0ad84f44ce9c17", "fromSide": "right",
"toNode": "a1b2c3d4e5f67890", "toSide": "left",
"toEnd": "arrow", "label": "ведёт к"
}
| Пресет | Цвет |
|---|---|
"1" | Красный |
"2" | Оранжевый |
"3" | Жёлтый |
"4" | Зелёный |
"5" | Голубой |
"6" | Фиолетовый |
16-символьные строчные hex-строки (64-битное случайное значение): "6f0ad84f44ce9c17"
x растёт вправо, y — вниз; позиция — верхний левый угол| Тип узла | Рекомендуемая ширина | Рекомендуемая высота |
|---|---|---|
| Малый текст | 200–300 | 80–150 |
| Средний текст | 300–450 | 150–300 |
| Большой текст | 400–600 | 300–500 |
| Превью файла | 300–500 | 200–400 |
| Превью ссылки | 250–400 | 100–200 |
id уникальны (узлы + рёбра)fromNode и toNode ссылается на существующий узелtext для text, file для file, url для link)type — одно из: text, file, link, groupfromSide/toSide — одно из: top, right, bottom, leftfromEnd/toEnd — одно из: none, arrow"1"–"6" или валидный hex\n, не \\n)