#!/bin/bash # knelpdf-mermaid: render a mermaid diagram to PNG without Node.js. # Uses bundled mermaid.min.js + headless chromium. # usage: knelpdf-mermaid input.mmd output.png [theme] [width] [height] set -euo pipefail IN="${1:?usage: knelpdf-mermaid input.mmd output.png [theme] [width] [height]}" OUT="${2:?usage: knelpdf-mermaid input.mmd output.png [theme] [width] [height]}" THEME="${3:-default}" W="${4:-1600}"; H="${5:-1200}" case "$IN" in *.svg|*.png) echo "output-only extension in OUT, not IN" >&2; exit 2;; esac WORK="$(mktemp -d)" trap 'rm -rf "$WORK"' EXIT { echo '' echo '' echo '
' cat "$IN" echo '
' echo '' echo "" echo '' } > "$WORK/render.html" chromium --headless=new --no-sandbox --disable-gpu \ --allow-file-access-from-files --hide-scrollbars \ --screenshot="$OUT" --window-size="${W},${H}" \ --virtual-time-budget=10000 "file://$WORK/render.html" 2>/dev/null test -s "$OUT" && echo "wrote $OUT"