Loading...
Loading...
Hand-drawn Excalidraw JSON diagrams (arch, flow, seq).
npx skill4agent add nousresearch/hermes-agent excalidraw.excalidraw.excalidrawwrite_file.excalidrawscripts/upload.pyterminal.excalidrawwrite_file{
"type": "excalidraw",
"version": 2,
"source": "hermes-agent",
"elements": [ ...your elements array here... ],
"appState": {
"viewBackgroundColor": "#ffffff"
}
}~/diagrams/my_diagram.excalidrawscripts/python skills/diagramming/excalidraw/scripts/upload.py ~/diagrams/my_diagram.excalidrawcryptographypip install cryptographytypeidxywidthheightstrokeColor"#1e1e1e"backgroundColor"transparent"fillStyle"solid"strokeWidth2roughness1opacity100{ "type": "rectangle", "id": "r1", "x": 100, "y": 100, "width": 200, "height": 100 }roundness: { "type": 3 }backgroundColor: "#a5d8ff"fillStyle: "solid"{ "type": "ellipse", "id": "e1", "x": 100, "y": 100, "width": 150, "height": 150 }{ "type": "diamond", "id": "d1", "x": 100, "y": 100, "width": 150, "height": 150 }WARNING: Do NOT useon shapes. This is NOT a valid Excalidraw property and will be silently ignored, producing blank shapes. You MUST use the container binding approach below."label": { "text": "..." }
boundElementscontainerId{ "type": "rectangle", "id": "r1", "x": 100, "y": 100, "width": 200, "height": 80,
"roundness": { "type": 3 }, "backgroundColor": "#a5d8ff", "fillStyle": "solid",
"boundElements": [{ "id": "t_r1", "type": "text" }] },
{ "type": "text", "id": "t_r1", "x": 105, "y": 110, "width": 190, "height": 25,
"text": "Hello", "fontSize": 20, "fontFamily": 1, "strokeColor": "#1e1e1e",
"textAlign": "center", "verticalAlign": "middle",
"containerId": "r1", "originalText": "Hello", "autoResize": true }containerIdxywidthheightoriginalTexttextfontFamily: 1{ "type": "arrow", "id": "a1", "x": 300, "y": 150, "width": 200, "height": 0,
"points": [[0,0],[200,0]], "endArrowhead": "arrow",
"boundElements": [{ "id": "t_a1", "type": "text" }] },
{ "type": "text", "id": "t_a1", "x": 370, "y": 130, "width": 60, "height": 20,
"text": "connects", "fontSize": 16, "fontFamily": 1, "strokeColor": "#1e1e1e",
"textAlign": "center", "verticalAlign": "middle",
"containerId": "a1", "originalText": "connects", "autoResize": true }{ "type": "text", "id": "t1", "x": 150, "y": 138, "text": "Hello", "fontSize": 20,
"fontFamily": 1, "strokeColor": "#1e1e1e", "originalText": "Hello", "autoResize": true }xcxx = cx - (text.length * fontSize * 0.5) / 2textAlignwidth{ "type": "arrow", "id": "a1", "x": 300, "y": 150, "width": 200, "height": 0,
"points": [[0,0],[200,0]], "endArrowhead": "arrow" }points[dx, dy]xyendArrowheadnull"arrow""bar""dot""triangle"strokeStyle"solid""dashed""dotted"{
"type": "arrow", "id": "a1", "x": 300, "y": 150, "width": 150, "height": 0,
"points": [[0,0],[150,0]], "endArrowhead": "arrow",
"startBinding": { "elementId": "r1", "fixedPoint": [1, 0.5] },
"endBinding": { "elementId": "r2", "fixedPoint": [0, 0.5] }
}fixedPointtop=[0.5,0]bottom=[0.5,1]left=[0,0.5]right=[1,0.5]fontSizefontSizefontSizefontSizereferences/colors.md| Use | Fill Color | Hex |
|---|---|---|
| Primary / Input | Light Blue | |
| Success / Output | Light Green | |
| Warning / External | Light Orange | |
| Processing / Special | Light Purple | |
| Error / Critical | Light Red | |
| Notes / Decisions | Light Yellow | |
| Storage / Data | Light Teal | |
#757575references/dark-mode.mdreferences/examples.md