Install
openclaw skills install @scottgl9/excalidraw-renderCreate professional Excalidraw diagrams — flowcharts, architecture diagrams, workflows, systems, processes, or concepts. Use when user asks to "create a diagram", "draw a flowchart", "visualize a process", "make a flow diagram", "architecture diagram", "excalidraw", "technical diagram", or discusses workflow/process visualization. Supports quick DSL-based flowcharts and comprehensive hand-crafted JSON diagrams. Built-in PNG rendering and PDF export.
openclaw skills install @scottgl9/excalidraw-renderGenerate .excalidraw files — from quick flowcharts to comprehensive technical diagrams.
Every diagram MUST be rendered to PNG and visually inspected before delivery. Look at the actual image — check that text fits inside boxes, no elements overlap, arrows connect correctly, and spacing is balanced. Fix the JSON and re-render until it looks professional. See the Render & Validate section. No exceptions.
| Need | Approach | Time |
|---|---|---|
| Simple flowchart, decision tree, linear process | Quick Path — CLI DSL | ~1 min |
| Architecture, multi-zoom technical, evidence artifacts | Full Path — hand-crafted JSON | ~10 min |
For straightforward flows, use @swiftlysingh/excalidraw-cli (installed locally by setup.sh):
excalidraw-cli create --inline "DSL" -o output.excalidraw
Note: If
excalidraw-cliis not in your PATH after setup, use:"$SKILL_DIR/.npm/node_modules/.bin/excalidraw-cli"or re-runsetup.sh.
| Syntax | Shape | Use For |
|---|---|---|
[Label] | Rectangle | Process steps |
{Label?} | Diamond | Decisions |
(Label) | Ellipse | Start/End |
[[Label]] | Database | Data storage |
-> | Arrow | Connection |
-> "text" -> | Labeled arrow | Conditional |
--> | Dashed arrow | Optional path |
Directives: @direction LR|TB|RL|BT, @spacing 60
excalidraw-cli create --inline "$(cat <<'EOF'
@direction TB
(Start) -> [Receive Request] -> {Authenticated?}
{Authenticated?} -> "yes" -> [Process Request] -> (Success)
{Authenticated?} -> "no" -> [Return 401] -> (End)
EOF
)" -o auth-flow.excalidraw
CLI options: -d LR (direction), -s 80 (spacing), --format dot (DOT/Graphviz input).
After generation, always render and validate (see Render section below). Fix overlaps or clipping in the JSON if needed.
For comprehensive, professional diagrams. Read these references as needed:
references/color-palette.md — All colors (read FIRST, every time)references/element-templates.md — Copy-paste JSON for each element typereferences/json-schema.md — Full property referencereferences/layout-rules.md — Anti-overlap spacing and text-sizing rules ⚠️ READ THIS{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [...],
"appState": { "viewBackgroundColor": "#ffffff", "gridSize": 20 },
"files": {}
}
fontFamily: 3, roughness: 0, opacity: 100 on all elementstext property = ONLY readable words (no markup)references/layout-rules.mdreferences/layout-rules.md| Concept Behavior | Pattern |
|---|---|
| One source → many outputs | Fan-out (radial arrows from center) |
| Many inputs → one output | Convergence (arrows merging) |
| Hierarchy/nesting | Tree (lines + free-floating text) |
| Sequence of steps | Timeline (line + dots + labels) |
| Feedback loop | Spiral/Cycle (arrow returning to start) |
| Abstract state | Cloud (overlapping ellipses) |
| Transformation | Assembly line (before → process → after) |
| Comparison | Side-by-side (parallel structures) |
| Phase changes | Gap/Break (visual whitespace) |
| Concept | Shape |
|---|---|
| Labels, descriptions | Free-floating text (no container) |
| Timeline markers | Small ellipse (12px) |
| Start/trigger | Ellipse |
| End/output | Ellipse |
| Decision | Diamond |
| Process/action | Rectangle |
| Artifact | Rendering |
|---|---|
| Code snippets | Dark rect (#1e293b) + syntax-colored text |
| JSON/data | Dark rect (#1e293b) + green text (#22c55e) |
| Event sequences | Timeline (line + dots + labels) |
| UI mockups | Nested rectangles |
Build JSON one section at a time (Claude has ~32k token output limit):
"trigger_rect", "auth_arrow")Every diagram must be rendered and visually inspected before delivery. This catches overlap, text clipping, and spacing issues that are invisible in JSON.
cd ~/.openclaw/skills/excalidraw-diagram && uv run python render_excalidraw.py <path-to-file.excalidraw>
Outputs a PNG next to the .excalidraw file. Use the Read tool to view it.
cd ~/.openclaw/skills/excalidraw-diagram
bash setup.sh # builds local Excalidraw bundle (requires node/npm)
uv sync && uv run playwright install chromium
Do not skip this loop. JSON coordinates are approximate — you will almost always find issues on the first render. The visual check IS the quality gate.
The render script outputs high-res PNG (2x scale by default):
cd ~/.openclaw/skills/excalidraw-diagram && uv run python render_excalidraw.py diagram.excalidraw --output diagram.png --scale 3
Options: --scale 3 (3x for print), --width 2560 (wider viewport).
Convert PNG to PDF:
# ImageMagick (most common)
convert diagram.png -density 150 diagram.pdf
# Or with a white background and margins
convert diagram.png -gravity center -background white -extent 110%x110% -density 150 diagram.pdf
For multi-page or A4/Letter sizing:
convert diagram.png -resize 1800x -gravity center -background white \
-extent 2100x2970 -units PixelsPerInch -density 254 diagram-a4.pdf
roughness: 0, opacity: 100, fontFamily: 3 everywherereferences/color-palette.md