Converts dynamic Mermaid diagrams to static SVG images for better performance and accessibility.
- Python 3.7+
- Node.js 14+
- Jekyll (for local testing)
bash scripts/setup.shIf you can't run the setup script:
- Install dependencies:
pip install -r requirements.txt
npm install -g @mermaid-js/mermaid-cli- On Linux, install Chrome dependencies:
sudo apt install -y libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2- Generate fonts:
python3 scripts/generate_embedded_fonts.py- Add flag to post front matter:
---
mermaid: true
use_static_image: true # β Add this line
---- Generate static images:
python3 scripts/generate_images_only.py "053.md"- Test locally:
bundle exec jekyll serve# Generate images for all posts
python3 scripts/generate_images_only.py
# Generate for specific posts
python3 scripts/generate_images_only.py "053.md"
# Force regeneration of all images
python3 scripts/generate_images_only.py --force
# Force regeneration of specific post
python3 scripts/generate_images_only.py "053.md" --force
# Verbose output
python3 scripts/generate_images_only.py --verbosegitfichas/
βββ _posts/ # Markdown posts with mermaid diagrams
βββ assets/img/mermaid/ # Generated static SVG files
βββ scripts/ # Setup and generation scripts
βββ requirements.txt # Python dependencies
Input (_posts/2024-01-01-example.md):
---
title: "My Post"
mermaid: true
use_static_image: true
---
```mermaid
graph TD
A[Start] --> B[End]
```Output: Creates assets/img/mermaid/2024-01-01-example-0.svg
Remove all generated images:
rm -rf assets/img/mermaid/*.svgRegenerate everything:
python3 scripts/generate_images_only.py --forceBrowser launch fails: Run scripts/setup.sh to install Chrome dependencies
Missing fonts: Run python3 scripts/generate_embedded_fonts.py
Image not showing: Verify use_static_image: true is in front matter and SVG exists in assets/img/mermaid/
Debug mode: Use --verbose flag for detailed output
MIT License - Feel free to adapt for your own Jekyll sites!