1实现原理 · 为什么它能做到
两条自带脚本接力:extract_diagrams.py 用正则从 markdown 抽出 ```mermaid 代码块并编号命名,extract-and-generate.sh 逐文件调用 mermaid-cli(mmdc) 渲染 PNG。
mermaid_pattern = r'```mermaid\n(.*?)\n```'
渲染引擎是 mermaid-cli + 本地 Chrome:脚本以 PUPPETEER_EXECUTABLE_PATH 指到 /usr/bin/google-chrome-stable,并传 puppeteer-config.json 与 -w/-H/-s 尺寸缩放参数。
PUPPETEER_EXECUTABLE_PATH="$CHROME_PATH" mmdc \ -i "$mmd_file" \ -o "$diagram.png" \ --puppeteerConfigFile "$CONFIG_FILE" \ -w "$width" \ -H "$height" \ -s "$SCALE_FACTOR"
高分辨率输出靠环境变量覆盖:MERMAID_WIDTH/HEIGHT/SCALE 默认 1200×800×2,PPT/打印场景可放大到 2400×1800×4 或 SCALE=5。
MERMAID_WIDTH=2400 MERMAID_HEIGHT=1800 MERMAID_SCALE=4 ./extract-and-generate.sh "<markdown_file>" "<output_directory>"
smart sizing 按图名类型猜尺寸:timeline/gantt 拉宽压扁、architecture/system/caching 放大、workflow/sequence/api 加宽,默认 1200×800。
- **Timeline/Gantt**: 2400×400 (wide and short) - **Architecture/System/Caching**: 2400×1600 (large and detailed)
依赖前置校验写进流程:mmdc/google-chrome-stable/python3 缺一即提示查 references/setup_and_troubleshooting.md(含 WSL2 的 Chrome 安装与依赖清单)。
1. **mermaid-cli**: `mmdc --version` 2. **Google Chrome**: `google-chrome-stable --version` 3. **Python 3**: `python3 --version`
运行约定是『从 scripts/ 目录执行』:脚本用 ${CLAUDE_SKILL_DIR} 定位,依赖同目录的 extract_diagrams.py 与 puppeteer-config.json 的相对位置。
cd "${CLAUDE_SKILL_DIR}/scripts" ./extract-and-generate.sh "<markdown_file>" "<output_directory>"
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | mermaid-cli (mmdc) |
| cli | Google Chrome(/usr/bin/google-chrome-stable,headless 渲染) |
| cli | python3(extract_diagrams.py) |
| network | dl.google.com(setup 参考文档:加 Chrome apt 源并 sudo apt install,一次性安装) |
| cli | file / sort -V / stat / identify(可选)(bash 工具链) |
4风险提醒 风险提醒:蓝色 · 知晓即可
- --no-sandbox 渲染不可信图内容 — mermaid 代码以本地 HTML 注入 Chrome(无沙箱)渲染;若 markdown 来自不可信来源,理论上有浏览器侧请求/利用面。建议只处理可信输入。
- 环境假设偏 WSL2/Linux — Chrome 硬编码 /usr/bin/google-chrome-stable;macOS/Windows 原生需改路径或装 WSL2,参考文档亦以 WSL2 为主线。
- 正则提取脆弱 — extract_diagrams.py 用非贪婪正则匹配 ```mermaid 块,异常围栏(如嵌套、无闭合)会导致漏提;复杂文档需人工复核输出。
- 安装 Chrome 需要 sudo + 外部 apt 源 — setup 文档引导添加 dl.google.com 源并以 sudo 安装——环境预置动作,执行时需用户知情。
5第二遍独立确认
- [ok] 脚本三件套自包含 — extract-and-generate.sh / extract_diagrams.py / puppeteer-config.json 均在 scripts/ 且被 SKILL 逐一引用。
- [ok] mmdc 本地渲染 + PUPPETEER_EXECUTABLE_PATH — 脚本内逐字存在 'PUPPETEER_EXECUTABLE_PATH="$CHROME_PATH" mmdc -i ... --puppeteerConfigFile' 调用。
- [ok] smart sizing 逻辑一致 — SKILL.md 尺寸表与脚本 [[ "$diagram" =~ timeline|gantt ]] 等分支对应。
- [ok] PNG 校验存在 — 脚本 'test -s ... && file ... | grep -q "PNG image"' + identify 尺寸回退分支属实。
- [ok] 运行期无网络 — 三个脚本全文无 curl/wget/requests/http 调用;唯一网络在 setup 参考文档的 dl.google.com apt 安装(sudo,用户主动执行)。
- [ok] 无凭证读取 — 仅读 MERMAID_WIDTH/HEIGHT/SCALE/CLAUDE_SKILL_DIR 等路径/尺寸变量,无 token/secret/key 环境读取。
- [ok] --no-sandbox 浏览器参数 — puppeteer-config.json args 含 --no-sandbox/--disable-setuid-sandbox 等;渲染目标为本地生成的图表 HTML,输入为工作区 markdown。
- [ok] 元数据 — GitHub API:MIT / 1385 stars / pushed 2026-09-09T12:33:29Z;本地 HEAD==pin d5c4678。
6结论
3b3522624bae3e65…d5c4678cb5