Skill JSON Canvas
Structure de fichier
Un fichier canvas (.canvas) contient deux tableaux de haut niveau suivant la spécification JSON Canvas 1.0 :
{
"nodes": [],
"edges": []
}
nodes(optionnel) : Tableau d'objets nœudedges(optionnel) : Tableau d'objets arête reliant les nœuds
Flux de travail courants
1. Créer un nouveau canvas
- Créer un fichier
.canvasavec la structure de base{"nodes": [], "edges": []} - Générer des identifiants uniques en hexadécimal 16 caractères pour chaque nœud (par exemple,
"6f0ad84f44ce9c17") - Ajouter des nœuds avec les champs requis :
id,type,x,y,width,height - Ajouter des arêtes qui référencent les ID de nœud valides via
fromNodeettoNode - Valider : Parser le JSON pour confirmer sa validité. Vérifier que toutes les valeurs
fromNode/toNodeexistent dans le tableau nodes
2. Ajouter un nœud à un canvas existant
- Lire et parser le fichier
.canvasexistant - Générer un ID unique qui ne crée pas de collision avec les ID de nœud ou d'arête existants
- Choisir une position (
x,y) qui évite le chevauchement des nœuds existants (laisser 50-100px d'espacement) - Ajouter le nouvel objet nœud au tableau
nodes - Optionnellement ajouter des arêtes reliant le nouveau nœud aux nœuds existants
- Valider : Confirmer que tous les ID sont uniques et que toutes les références d'arête se résolvent en nœuds existants
3. Connecter deux nœuds
- Identifier les ID du nœud source et cible
- Générer un ID d'arête unique
- Définir
fromNodeettoNodesur les ID source et cible - Optionnellement définir
fromSide/toSide(top, right, bottom, left) pour les points d'ancrage - Optionnellement définir
labelpour un texte descriptif sur l'arête - Ajouter l'arête au tableau
edges - Valider : Confirmer que
fromNodeettoNoderéférencent des ID de nœud existants
4. Éditer un canvas existant
- Lire et parser le fichier
.canvasen JSON - Localiser le nœud ou l'arête cible par
id - Modifier les attributs souhaités (texte, position, couleur, etc.)
- Écrire le JSON mis à jour dans le fichier
- Valider : Re-vérifier l'unicité de tous les ID et l'intégrité des références d'arête après édition
Nœuds
Les nœuds sont des objets placés sur le canvas. L'ordre du tableau détermine le z-index : premier nœud = couche inférieure, dernier nœud = couche supérieure.
Attributs génériques des nœuds
| Attribut | Requis | Type | Description |
|---|---|---|---|
id |
Oui | string | Identifiant hexadécimal 16 caractères unique |
type |
Oui | string | text, file, link, ou group |
x |
Oui | integer | Position X en pixels |
y |
Oui | integer | Position Y en pixels |
width |
Oui | integer | Largeur en pixels |
height |
Oui | integer | Hauteur en pixels |
color |
Non | canvasColor | Préset "1"-"6" ou hexadécimal (par exemple, "#FF0000") |
Nœuds de texte
| Attribut | Requis | Type | Description |
|---|---|---|---|
text |
Oui | string | Texte brut avec syntaxe Markdown |
{
"id": "6f0ad84f44ce9c17",
"type": "text",
"x": 0,
"y": 0,
"width": 400,
"height": 200,
"text": "# Hello World\n\nThis is **Markdown** content."
}
Pièges des retours à la ligne : Utiliser \n pour les sauts de ligne dans les chaînes JSON. Ne pas utiliser le littéral \\n -- Obsidian le rend comme les caractères \ et n.
Nœuds de fichier
| Attribut | Requis | Type | Description |
|---|---|---|---|
file |
Oui | string | Chemin du fichier au sein du système |
subpath |
Non | string | Lien vers un titre ou bloc (commence par #) |
{
"id": "a1b2c3d4e5f67890",
"type": "file",
"x": 500,
"y": 0,
"width": 400,
"height": 300,
"file": "Attachments/diagram.png"
}
Nœuds de lien
| Attribut | Requis | Type | Description |
|---|---|---|---|
url |
Oui | string | URL externe |
{
"id": "c3d4e5f678901234",
"type": "link",
"x": 1000,
"y": 0,
"width": 400,
"height": 200,
"url": "https://obsidian.md"
}
Nœuds de groupe
Les groupes sont des conteneurs visuels pour organiser d'autres nœuds. Positionner les nœuds enfants à l'intérieur des limites du groupe.
| Attribut | Requis | Type | Description |
|---|---|---|---|
label |
Non | string | Étiquette textuelle du groupe |
background |
Non | string | Chemin vers une image de fond |
backgroundStyle |
Non | string | cover, ratio, ou repeat |
{
"id": "d4e5f6789012345a",
"type": "group",
"x": -50,
"y": -50,
"width": 1000,
"height": 600,
"label": "Project Overview",
"color": "4"
}
Arêtes
Les arêtes relient les nœuds via les ID fromNode et toNode.
| Attribut | Requis | Type | Par défaut | Description |
|---|---|---|---|---|
id |
Oui | string | - | Identifiant unique |
fromNode |
Oui | string | - | ID du nœud source |
fromSide |
Non | string | - | top, right, bottom, ou left |
fromEnd |
Non | string | none |
none ou arrow |
toNode |
Oui | string | - | ID du nœud cible |
toSide |
Non | string | - | top, right, bottom, ou left |
toEnd |
Non | string | arrow |
none ou arrow |
color |
Non | canvasColor | - | Couleur de ligne |
label |
Non | string | - | Étiquette textuelle |
{
"id": "0123456789abcdef",
"fromNode": "6f0ad84f44ce9c17",
"fromSide": "right",
"toNode": "a1b2c3d4e5f67890",
"toSide": "left",
"toEnd": "arrow",
"label": "leads to"
}
Couleurs
Le type canvasColor accepte soit une chaîne hexadécimale, soit un numéro préset :
| Préset | Couleur |
|---|---|
"1" |
Red |
"2" |
Orange |
"3" |
Yellow |
"4" |
Green |
"5" |
Cyan |
"6" |
Purple |
Les valeurs de couleur préset sont volontairement indéfinies -- les applications utilisent leurs propres couleurs de marque.
Génération d'ID
Générer des chaînes hexadécimales minuscules 16 caractères (valeur aléatoire 64-bit) :
"6f0ad84f44ce9c17"
"a3b2c1d0e9f8a7b6"
Directives de mise en page
- Les coordonnées peuvent être négatives (le canvas s'étend infiniment)
xaugmente vers la droite,yaugmente vers le bas ; la position est le coin supérieur gauche- Espacer les nœuds de 50-100px ; laisser 20-50px de remplissage à l'intérieur des groupes
- Aligner à la grille (multiples de 10 ou 20) pour des mises en page plus propres
| Type de nœud | Largeur suggérée | Hauteur suggérée |
|---|---|---|
| Petit texte | 200-300 | 80-150 |
| Texte moyen | 300-450 | 150-300 |
| Grand texte | 400-600 | 300-500 |
| Aperçu fichier | 300-500 | 200-400 |
| Aperçu lien | 250-400 | 100-200 |
Liste de contrôle de validation
Après création ou édition d'un fichier canvas, vérifier :
- Toutes les valeurs
idsont uniques dans les nœuds et les arêtes - Chaque
fromNodeettoNoderéférence un ID de nœud existant - Les champs requis sont présents pour chaque type de nœud (
textpour les nœuds de texte,filepour les nœuds de fichier,urlpour les nœuds de lien) typeest l'un de :text,file,link,group- Les valeurs
fromSide/toSidesont l'une de :top,right,bottom,left - Les valeurs
fromEnd/toEndsont l'une de :none,arrow - Les présets de couleur sont
"1"à"6"ou hexadécimal valide (par exemple,"#FF0000") - Le JSON est valide et parsable
Si la validation échoue, vérifier les ID en doublon, les références d'arête orphelines, ou les chaînes JSON malformées (en particulier les retours à la ligne non échappés dans le contenu texte).
Exemples complets
Voir references/EXAMPLES.md pour des exemples de canvas complets incluant mind maps, tableaux de projet, canvas de recherche, et organigrammes.