Mermaid Render
Render Mermaid diagrams to SVG/PNG/PDF. Supports standard Mermaid output as well as hand-drawn (sketch) style via svg2roughjs — identical to Mermaid Live Editor's hand-drawn mode.
By default, hand-drawn style is enabled. Use --no-handdrawn for standard Mermaid output.
When to Use This Skill
- User asks to "render", "visualize", or "generate" a Mermaid diagram
- User provides.mmd files or Mermaid code blocks and needs output images
- User wants to "create a flowchart/sequence/state/class/ER diagram"
- User needs to extract and render diagrams from a Markdown document
- User wants to "batch process" a directory of.mmd files
- User mentions "hand-drawn", "sketch", or "rough" style — keep default or add
--pencil-filter - User wants clean/standard Mermaid output (no hand-drawn) — use
--no-handdrawn
⚠️ Path Resolution (Important)
All scripts are located in the same directory as this SKILL.md. Before running any script, you must determine the actual path of this file and derive the script directory from it.
Rule: Replace every $SKILL_DIR placeholder in this document with the absolute path of the directory containing this SKILL.md file.
Example: if this file is at /path/to/mermaid-render/SKILL.md, then $SKILL_DIR = /path/to/mermaid-render.
SKILL_DIR="<absolute path to the directory containing this SKILL.md>"Quick Start
Standard Mermaid output (no hand-drawn)
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--no-handdrawnHand-drawn style (default)
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svgOutput as PNG (high resolution)
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.png \
--scale 2Output as PDF
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.pdf \
--pdf-fitExtract and render from Markdown
node "$SKILL_DIR/scripts/render.mjs" \
--input document.md \
--output ./output-dirBatch render
node "$SKILL_DIR/scripts/batch.mjs" \
--input-dir ./diagrams \
--output-dir ./outputWorkflow
Step 1: What does the user want?
- Render existing Mermaid code → Save as.mmd file, use render.mjs
- Extract diagrams from Markdown → Pass.md file directly
- Create a new diagram → Refer to templates in
$SKILL_DIR/assets/example_diagrams/ - Batch process → Use batch.mjs
Step 2: Choose output style
- Default (hand-drawn) — sketch/rough style via svg2roughjs, same as Mermaid Live Editor
--no-handdrawn— clean standard Mermaid output, no sketch effect
Step 3: Choose output format
svg— Vector, ideal for web and docs (default)png— Bitmap, ideal for embedding and sharing (use --scale for resolution)pdf— Ideal for printing (use --pdf-fit for auto-sizing)
Step 4: Choose theme
default— Mermaid default themeneutral— Neutral tones, good for documentationdark— Dark themeforest— Green theme
Step 5: Render
node "$SKILL_DIR/scripts/render.mjs" -i input.mmd -o output.svg --theme neutralOptions
render.mjs
| Option | Description | Default |
|---|---|---|
-i, --input | Input file (.mmd or.md) | required |
-o, --output | Output file (.svg/.png/.pdf) | required |
-e, --format | Output format: svg, png, pdf | inferred from extension |
-t, --theme | Mermaid theme | default |
--bg | Background color | transparent |
-w, --width | Page width | 800 |
-H, --height | Page height | 600 |
-s, --scale | Scale factor (affects PNG resolution) | 1 |
-c, --config | Mermaid JSON config file | none |
-C, --css | Custom CSS file | none |
--pdf-fit | Fit PDF to diagram size | off |
--icon-packs | Icon packs, comma-separated | none |
--font | Font family for hand-drawn mode | Excalifont, Xiaolai, cursive |
--pencil-filter | Enable pencil filter effect (hand-drawn only) | off |
--randomize | Enable per-element randomization (causes variable hachure density) | off |
--seed | Random seed | none |
--roughness | Roughness level (hand-drawn only) | rough.js default |
--bowing | Bowing level (hand-drawn only) | rough.js default |
--hachure-gap | Gap between hachure lines in px (smaller = denser) | 2 |
--fill-weight | Width of hachure lines in px | 1.5 |
--no-handdrawn | Skip hand-drawn conversion, output raw Mermaid SVG | off |
batch.mjs
| Option | Description | Default |
|---|---|---|
-i, --input-dir | Input directory | required |
-o, --output-dir | Output directory | required |
-e, --format | Output format: svg, png, pdf | svg |
-t, --theme | Mermaid theme | default |
--bg | Background color | transparent |
-s, --scale | Scale factor (affects PNG resolution) | 1 |
--font | Font family (hand-drawn mode) | Excalifont, Xiaolai, cursive |
--pencil-filter | Enable pencil filter effect | off |
--randomize | Enable per-element randomization | off |
--seed | Random seed | none |
--roughness | Roughness level | rough.js default |
--bowing | Bowing level | rough.js default |
--hachure-gap | Gap between hachure lines in px | 2 |
--fill-weight | Width of hachure lines in px | 1.5 |
--no-handdrawn | Skip hand-drawn conversion | off |
--concurrency | Max parallel renders | 3 |
Examples
Flowchart — standard style
node "$SKILL_DIR/scripts/render.mjs" \
--input "$SKILL_DIR/assets/example_diagrams/flowchart.mmd" \
--output flowchart.svg \
--no-handdrawnFlowchart — hand-drawn style
node "$SKILL_DIR/scripts/render.mjs" \
--input "$SKILL_DIR/assets/example_diagrams/flowchart.mmd" \
--output flowchart.svgSequence diagram (high-res PNG, neutral theme)
node "$SKILL_DIR/scripts/render.mjs" \
--input "$SKILL_DIR/assets/example_diagrams/sequence.mmd" \
--output sequence.png \
--scale 2 --theme neutralState diagram (auto-fit PDF)
node "$SKILL_DIR/scripts/render.mjs" \
--input "$SKILL_DIR/assets/example_diagrams/state.mmd" \
--output state.pdf \
--pdf-fit --theme darkExtract all diagrams from Markdown
# Single code block → single output file
node "$SKILL_DIR/scripts/render.mjs" -i doc.md -o diagram.svg
# Multiple code blocks → output to directory (auto-named doc-1.svg, doc-2.svg, ...)
node "$SKILL_DIR/scripts/render.mjs" -i doc.md -o ./output-dirCustom Mermaid config
# config.json: { "theme": "neutral", "flowchart": { "curve": "basis" } }
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--config config.jsonCustom CSS
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--css custom.cssIcon packs
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--icon-packs @iconify-json/logosReproducible hand-drawn output (fixed seed)
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--seed 42 --no-randomizePencil filter effect
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--pencil-filterCreating diagrams from user requirements
Step 1: Identify diagram type
- Process / workflow →
graph TDorflowchart LR - API / interaction →
sequenceDiagram - State / lifecycle →
stateDiagram-v2 - Object model →
classDiagram - Database →
erDiagram - Timeline →
timeline - Gantt / project →
gantt - Mind map →
mindmap
Step 2: Create.mmd file Refer to templates in $SKILL_DIR/assets/example_diagrams/.
Step 3: Render and iterate
node "$SKILL_DIR/scripts/render.mjs" -i diagram.mmd -o preview.svg
# Edit diagram.mmd based on feedback, re-renderFeatures
Mermaid rendering
- All Mermaid diagram types supported (flowchart, sequence, state, class, ER, timeline, gantt, mindmap, etc.)
- Output SVG / PNG / PDF
- Markdown input support (auto-extracts mermaid code blocks)
- CJK (Chinese/Japanese/Korean) text auto-optimization
- Custom Mermaid config and CSS
- Icon pack support (Iconify)
- Custom themes: default, neutral, dark, forest
Hand-drawn style (default, disable with --no-handdrawn)
- Identical to Mermaid Live Editor hand-drawn mode (powered by svg2roughjs)
- Custom node colors (style directives) preserved
- Pencil filter effect
- Roughness and bowing controls
- Reproducible output via seed parameter
Dependencies
- Node.js 18+
- puppeteer, svg2roughjs, and @mermaid-js/mermaid-cli (all installed via
npm install)
Troubleshooting
mmdc not found
❌ @mermaid-js/mermaid-cli not foundFix: npm install
puppeteer install fails
Puppeteer needs to download Chromium. Ensure network access. Manual install:
cd "$SKILL_DIR" && npm installMermaid syntax errors
Validate syntax at https://mermaid.live/ before rendering.
File structure
scripts/
render.mjs— Single-file renderer (SVG/PNG/PDF, Markdown input)batch.mjs— Batch renderer
assets/
example_diagrams/flowchart.mmd— Flowchart templateexample_diagrams/sequence.mmd— Sequence diagram templateexample_diagrams/state.mmd— State diagram template