Render Mermaid diagrams to SVG/PNG/PDF with optional hand-drawn (sketch) style. Supports all diagram types, multiple output formats, custom themes, CJK text, Markdown input, and batch processing.
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.
--pencil-filter--no-handdrawnAll 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>"
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--no-handdrawn
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.png \
--scale 2
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.pdf \
--pdf-fit
node "$SKILL_DIR/scripts/render.mjs" \
--input document.md \
--output ./output-dir
node "$SKILL_DIR/scripts/batch.mjs" \
--input-dir ./diagrams \
--output-dir ./output
Step 1: What does the user want?
$SKILL_DIR/assets/example_diagrams/Step 2: Choose output style
--no-handdrawn — clean standard Mermaid output, no sketch effectStep 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 themeStep 5: Render
node "$SKILL_DIR/scripts/render.mjs" -i input.mmd -o output.svg --theme neutral
| 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 |
| 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 |
node "$SKILL_DIR/scripts/render.mjs" \
--input "$SKILL_DIR/assets/example_diagrams/flowchart.mmd" \
--output flowchart.svg \
--no-handdrawn
node "$SKILL_DIR/scripts/render.mjs" \
--input "$SKILL_DIR/assets/example_diagrams/flowchart.mmd" \
--output flowchart.svg
node "$SKILL_DIR/scripts/render.mjs" \
--input "$SKILL_DIR/assets/example_diagrams/sequence.mmd" \
--output sequence.png \
--scale 2 --theme neutral
node "$SKILL_DIR/scripts/render.mjs" \
--input "$SKILL_DIR/assets/example_diagrams/state.mmd" \
--output state.pdf \
--pdf-fit --theme dark
# 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-dir
# config.json: { "theme": "neutral", "flowchart": { "curve": "basis" } }
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--config config.json
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--css custom.css
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--icon-packs @iconify-json/logos
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--seed 42 --no-randomize
node "$SKILL_DIR/scripts/render.mjs" \
--input diagram.mmd \
--output diagram.svg \
--pencil-filter
Step 1: Identify diagram type
graph TD or flowchart LRsequenceDiagramstateDiagram-v2classDiagramerDiagramtimelineganttmindmapStep 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-render
npm install)❌ @mermaid-js/mermaid-cli not found
Fix: npm install
Puppeteer needs to download Chromium. Ensure network access. Manual install:
cd "$SKILL_DIR" && npm install
Validate syntax at https://mermaid.live/ before rendering.
render.mjs — Single-file renderer (SVG/PNG/PDF, Markdown input)batch.mjs — Batch rendererexample_diagrams/flowchart.mmd — Flowchart templateexample_diagrams/sequence.mmd — Sequence diagram templateexample_diagrams/state.mmd — State diagram template