npx skills add ...
npx skills add zc277584121/marketing-skills --skill mermaid-to-gif
Convert Mermaid code blocks in .mmd or .md files to animated GIFs with customizable animation styles (progressive, highlight walk, pulse flow, wave).
npx skills add zc277584121/marketing-skills --skill mermaid-to-gif
Convert Mermaid diagrams into animated GIFs with rich animation effects. Supports .mmd files and extracting ```mermaid code blocks from .md files.
Prerequisites: FFmpeg, Python 3.8+, Playwright (
pip install playwright && playwright install chromium)
.mmd files or .md files containing mermaid code blocksIMPORTANT: When converting mermaid blocks from .md files, read the surrounding markdown context to choose the most appropriate animation style for each diagram. Do NOT blindly apply the same style to all blocks.
| Context Clue | Recommended Style | Reasoning |
|---|---|---|
| Data pipeline, ETL flow, request/response path | pulse-flow | Flowing dashed lines convey data movement |
| Architecture layers, org chart, hierarchy | progressive | Elements activate layer-by-layer |
| Step-by-step process, tutorial walkthrough | highlight-walk | Spotlight guides the reader through each step |
| System overview, title diagram, simple reference | wave | Brightness ripple adds life without distraction |
| Sequence diagram with message flow | progressive | Messages activate one by one in conversation order |
| Class/ER diagram (reference/static) | progressive or wave | Structure lights up or gets a subtle ripple |
Consider special handling:
pulse-flow even for a simple flowchartprogressive to activate layer-by-layerwave to keep it simplewave or shorter --duration to keep GIF size reasonablePer-block style override: When batch-processing a .md file, you may need to run the script multiple times with different styles, extracting specific blocks. Or process the whole file with a sensible default and re-run individual blocks that need different treatment.
This extracts all ```mermaid code blocks and generates one GIF per block.
After generating GIFs, replace the original ```mermaid code blocks with image references:
Use descriptive alt text based on the diagram content. The image path should be relative to the markdown file.
All styles keep the diagram fully visible from frame 1 — no elements start hidden or fade in from zero. Every style adds motion while the user can see the complete diagram structure at all times.
| Style | Effect | Best For |
|---|---|---|
progressive (default) | All elements start dimmed (25% opacity), activate sequentially to full brightness; edges draw in with stroke animation | Flowcharts, architecture, hierarchy |
highlight-walk | All elements start dimmed (15%); a spotlight with blue glow moves through each element, leaving visited ones bright | Step-by-step process, tutorials |
pulse-flow | All elements fully visible; edges become flowing dashed lines (uniform dash size and speed) | Data flow, pipelines, request paths |
wave | All elements fully visible; a brightness pulse + blue glow ripple sweeps through elements sequentially | Simple diagrams, overviews, reference |
| Flag | Default | Description |
|---|---|---|
-o, --output-dir | Same as input | Output directory for generated GIFs |
-s, --style | progressive | Animation style (see table above) |
--fps | 10 | Frames per second |
--duration | 4.0 | Animation duration in seconds |
--hold | 1.0 | Hold last frame before looping (seconds) |
--theme | default | Mermaid theme: default, dark, forest, neutral |
--bg | #ffffff | Background color (hex) |
--padding | 40 | Padding around diagram in pixels |
--scale | 2 | Render scale factor (2 = retina quality) |
--custom-css | — | Path to custom CSS file |
--no-loop | — | Play GIF once instead of looping |
Create a CSS file to customize the appearance of the diagram during animation:
Pass it via --custom-css:
.mmd or .md filessetProgress(t) for frame-by-frame control (t: 0→1). Elements are collected, sorted by position (respecting LR/TB direction), and animated in interleaved node-edge order--scale 1 for smaller files--scale 1, or use wave stylepython <skill-root>/scripts/mermaid_to_gif.py diagram.mmdpython <skill-root>/scripts/mermaid_to_gif.py document.md -o ./images/python <skill-root>/scripts/mermaid_to_gif.py *.mmd -o ./gifs/
python <skill-root>/scripts/mermaid_to_gif.py doc1.md doc2.md -o ./gifs/# Dark theme with faster animation
python <skill-root>/scripts/mermaid_to_gif.py arch.mmd --theme dark --bg "#1a1a2e" --duration 3
# High FPS for smoother animation
python <skill-root>/scripts/mermaid_to_gif.py flow.mmd --fps 15 --duration 5
# Batch convert all mermaid blocks from a doc
python <skill-root>/scripts/mermaid_to_gif.py README.md -o ./images/
# Custom CSS for special effects
python <skill-root>/scripts/mermaid_to_gif.py diagram.mmd --custom-css my-style.css
# No loop, suitable for one-time playback
python <skill-root>/scripts/mermaid_to_gif.py intro.mmd --no-loop --duration 6
# Lower resolution for smaller file size
python <skill-root>/scripts/mermaid_to_gif.py diagram.mmd --scale 1/* Rounded nodes with shadow */
.node rect {
rx: 10;
filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));
}
/* Thicker edge lines */
.edgePath path {
stroke-width: 2.5;
}
/* Custom background for actors (sequence diagram) */
.actor {
fill: #e8f4f8;
}python <skill-root>/scripts/mermaid_to_gif.py diagram.mmd --custom-css my-style.css