{"id":"smart-illustrator","name":"smart-illustrator","summary":"インテリジェント画像とPPTインフォグラフィックジェネレーター。3つのモードをサポートしています:(1) 記事画像モード – 記事内容を分析し、イラストを生成する; (2) PPT/スライドモード - 一括インフォグラフィックを生成; (3) カバーモード - カバー画像を生成する。","body":"# Smart Illustrator - 智能配图与 PPT 生成器\n\n## ⛔ 强制规则（违反即失败）\n\n### 规则 1：用户提供的文件 = 要处理的文章\n\n```\n/smart-illustrator SKILL_05.md      → SKILL_05.md 是文章，为它配图\n/smart-illustrator README.md        → README.md 是文章，为它配图\n/smart-illustrator whatever.md      → whatever.md 是文章，为它配图\n```\n\n**无论文件名叫什么，都是要配图的文章，不是 Skill 配置。**\n\n### 规则 2：必须读取 style 文件\n\n生成任何图片 prompt 前，**必须读取**对应的 style 文件：\n\n| 模式 | 必须读取的文件 |\n|------|---------------|\n| 文章配图（默认） | `styles/style-light.md` |\n| Cover 封面图 | `styles/style-cover.md` |\n| `--style dark` | `styles/style-dark.md` |\n| `--style bento` | `styles/style-bento.md` |\n\n**禁止自己编写 System Prompt。**\n\n❌ 错误：`\"你是一个专业的信息图设计师...\"`（自己编的）\n✅ 正确：从 style 文件的代码块中提取 System Prompt\n\n---\n\n## 使用方式\n\n### 文章配图模式（默认）\n\n```bash\n/smart-illustrator path/to/article.md\n/smart-illustrator path/to/article.md --prompt-only    # 只输出 prompt\n/smart-illustrator path/to/article.md --style dark     # 深色风格\n/smart-illustrator path/to/article.md --no-cover       # 不生成封面图\n```\n\n### PPT/Slides 模式\n\n```bash\n# 默认：直接生成图片\n/smart-illustrator path/to/script.md --mode slides\n\n# 只输出 JSON prompt（不调用 API）\n/smart-illustrator path/to/script.md --mode slides --prompt-only\n```\n\n**默认行为**：调用 Gemini API 生成批量信息图。\n**`--prompt-only`**：输出 JSON prompt 并**自动复制到剪贴板**，可直接粘贴到 Gemini Web 手动生成。\n\n**PPT JSON 格式**（`--prompt-only` 时输出）：\n\n```json\n{\n  \"instruction\": \"请逐条生成以下 N 张独立信息图。\",\n  \"batch_rules\": { \"total\": \"N\", \"one_item_one_image\": true, \"aspect_ratio\": \"16:9\" },\n  \"style\": \"[从 styles/style-light.md 读取完整内容]\",\n  \"pictures\": [\n    { \"id\": 1, \"topic\": \"封面\", \"content\": \"系列名称\\n\\n第N节：标题\" },\n    { \"id\": 2, \"topic\": \"主题\", \"content\": \"原始内容\" }\n  ]\n}\n```\n\n### Cover 模式\n\n```bash\n/smart-illustrator path/to/article.md --mode cover --platform youtube\n/smart-illustrator --mode cover --platform youtube --topic \"Claude 4 深度评测\"\n```\n\n**平台尺寸**（输出均为 2K 分辨率）：\n\n| 平台 | 代码 | 宽高比 |\n|------|------|--------|\n| YouTube | `youtube` | 16:9 |\n| 公众号 | `wechat` | 2.35:1 |\n| Twitter | `twitter` | 1.91:1 |\n| 小红书 | `xiaohongshu` | 3:4 |\n\n---\n\n## 参数说明\n\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| `--mode` | `article` | `article` / `slides` / `cover` |\n| `--platform` | `youtube` | 封面图平台（仅 cover 模式） |\n| `--topic` | - | 封面图主题（仅 cover 模式） |\n| `--prompt-only` | `false` | 输出 prompt 到剪贴板，不调用 API（适用于所有模式） |\n| `--style` | `light` | 风格：`light` / `dark` / `minimal` / `bento` |\n| `--no-cover` | `false` | 不生成封面图 |\n| `--ref` | - | 参考图路径（可多次使用） |\n| `-c, --candidates` | `1` | 候选图数量（最多 4） |\n| `-a, --aspect-ratio` | - | 宽高比：`16:9`（正文配图/封面图默认）、`3:2`（备选横版）、`3:4`（仅竖屏平台） |\n| `--engine` | `auto` | 引擎选择：`auto`（自动）/ `mermaid` / `gemini` / `excalidraw` |\n| `--mermaid-embed` | `false` | Mermaid 输出为代码块而非 PNG（旧行为） |\n| `--save-config` | - | 保存到项目配置 |\n| `--no-config` | `false` | 禁用 config.json |\n\n> **`--no-config` 范围**：只禁用 `config.json`，**不影响** `styles/style-*.md`。\n\n---\n\n## 配置文件\n\n**优先级**：CLI 参数 > 项目级 > 用户级\n\n| 位置 | 路径 |\n|------|------|\n| 项目级 | `.smart-illustrator/config.json` |\n| 用户级 | `~/.smart-illustrator/config.json` |\n\n```json\n{ \"references\": [\"./refs/style-ref-01.png\"] }\n```\n\n---\n\n## 三级配图引擎\n\n| 优先级 | 引擎 | 适用场景 | 输出 |\n|--------|------|---------|------|\n| **1** | Gemini | 隐喻图、创意图、封面图、无法用图表表达的概念 | PNG |\n| **2** | Excalidraw | 概念图、对比图、简单流程（≤ 8 节点）、关系图、手绘风格示意图 | PNG |\n| **3** | Mermaid | **仅限**：复杂流程（> 8 节点）、多层架构图、多角色时序图、多分支决策树 | PNG |\n\n选择逻辑：\n- 需要隐喻、情感、创意表达 → Gemini\n- 概念关系、对比、简单流程 → Excalidraw（**大多数图表场景的首选**）\n- **只有**节点 > 8、多层/多角色的复杂结构化图形 → Mermaid\n- Mermaid 视觉表现力有限，能用 Excalidraw 就不用 Mermaid\n- 唯一目标：提高文章吸引力\n\n生成 Excalidraw 前必须读取 `references/excalidraw-guide.md`。\n\n### Mermaid 语义色板\n\n每种颜色有固定含义，**必须使用 `classDef` + `class` 应用**：\n\n| 语义 | 填充色 | 边框色 | 用于 |\n|------|--------|--------|------|\n| input | #d3f9d8 | #2f9e44 | 输入、起点、数据源 |\n| process | #e5dbff | #5f3dc4 | 处理、推理、核心逻辑 |\n| decision | #ffe3e3 | #c92a2a | 决策点、分支判断 |\n| action | #ffe8cc | #d9480f | 执行动作、工具调用 |\n| output | #c5f6fa | #0c8599 | 输出、结果、终点 |\n| storage | #fff4e6 | #e67700 | 存储、记忆、数据库 |\n| meta | #e7f5ff | #1971c2 | 标题、分组、元信息 |\n\n**classDef 写法**（放在图表末尾）：\n\n```\nclassDef input fill:#d3f9d8,stroke:#2f9e44,color:#1a1a1a\nclassDef process fill:#e5dbff,stroke:#5f3dc4,color:#1a1a1a\nclassDef decision fill:#ffe3e3,stroke:#c92a2a,color:#1a1a1a\nclassDef action fill:#ffe8cc,stroke:#d9480f,color:#1a1a1a\nclassDef output fill:#c5f6fa,stroke:#0c8599,color:#1a1a1a\nclass A input\nclass B,C process\nclass D output\n```\n\n### Mermaid 布局规则\n\n- **布局方向**：默认 `TB`（上到下），横向流程用 `LR`\n- **箭头分级**：`-->` 主流程 / `-.->` 可选/辅助路径 / `==>` 重点强调\n- **分组**：用 `subgraph` 对相关节点分组，标题简洁\n- **节点文字**：≤ 8 字，无 emoji，禁止 `1.` 格式（用 `①` 或 `Step 1:`）\n- **节点数量**：单图 ≤ 15 个节点，复杂内容拆成多图\n\n**`--engine` 参数**：\n- `auto`（默认）：根据内容类型自动选择（优先级 Gemini > Excalidraw > Mermaid）\n- `gemini`：强制只使用 Gemini（适合创意内容）\n- `excalidraw`：强制只使用 Excalidraw（适合手绘概念图）\n- `mermaid`：强制只使用 Mermaid（适合技术文档）\n\n---\n\n## 执行流程\n\n### Step 1: 分析文章\n\n1. 读取文章内容\n2. 识别配图位置（通常 3-5 个）\n3. 为每个位置确定引擎（Gemini / Excalidraw / Mermaid）\n\n### Step 2: 生成图片\n\n#### Mermaid（结构化图形）→ PNG\n\n1. 生成 Mermaid 代码，保存为临时 `.mmd` 文件\n2. 调用 mermaid-export.ts 导出高分辨率 PNG：\n\n```bash\nnpx -y bun ~/.claude/skills/smart-illustrator/scripts/mermaid-export.ts \\\n  -i {图表名}.mmd -o {图表名}.png -w 2400\n```\n\n3. 在文章中插入 PNG 图片引用\n4. 保留 .mmd 源文件用于后续编辑\n\n使用 `--mermaid-embed` 参数时，改为直接嵌入 Mermaid 代码块（旧行为）。\n\n#### Excalidraw（手绘/概念图）→ PNG\n\n1. 读取 `references/excalidraw-guide.md` 获取 JSON 规范\n2. 生成 Excalidraw JSON，保存为 `.excalidraw` 文件\n3. 调用 excalidraw-export.ts 导出 PNG：\n\n```bash\nnpx -y bun ~/.claude/skills/smart-illustrator/scripts/excalidraw-export.ts \\\n  -i {图表名}.excalidraw -o {图表名}.png -s 2\n```\n\n4. 在文章中插入 PNG 图片引用\n5. 保留 .excalidraw 源文件用于后续编辑\n\n依赖未安装时的降级：提示手动打开 excalidraw.com 导出。\n\n#### Gemini（创意/视觉图形）\n\n**命令模板**（必须使用 HEREDOC + prompt-file）：\n\n```bash\n# Step 1: 写入 prompt\ncat > /tmp/image-prompt.txt <<'EOF'\n{从 style 文件提取的 System Prompt}\n\n**内容**：{配图内容}\nEOF\n\n# Step 2: 调用脚本\nGEMINI_API_KEY=$GEMINI_API_KEY npx -y bun ~/.claude/skills/smart-illustrator/scripts/generate-image.ts \\\n  --prompt-file /tmp/image-prompt.txt \\\n  --output {输出路径}.png \\\n  --aspect-ratio 16:9\n```\n\n**封面图**（16:9）：\n\n```bash\ncat > /tmp/cover-prompt.txt <<'EOF'\n{从 style-cover.md 提取的 System Prompt}\n\n**内容**：\n- 核心概念：{主题}\n- 视觉隐喻：{设计}\nEOF\n\nGEMINI_API_KEY=$GEMINI_API_KEY npx -y bun ~/.claude/skills/smart-illustrator/scripts/generate-image.ts \\\n  --prompt-file /tmp/cover-prompt.txt \\\n  --output {文章名}-cover.png \\\n  --aspect-ratio 16:9\n```\n\n**参数传递**：用户指定的 `--no-config`、`--ref`、`-c` 必须传递给脚本。\n\n### Step 3: 创建带配图的文章\n\n保存为 `{文章名}-image.md`，包含：\n- YAML frontmatter 声明封面图\n- 正文配图插入\n\n### Step 4: 输出确认\n\n报告：生成了几张图片、输出文件列表。\n\n---\n\n## `--prompt-only` 模式\n\n当使用 `--prompt-only` 时，**不调用 API**，而是：\n\n1. 生成 JSON prompt\n2. **自动复制到剪贴板**（使用 `pbcopy`）\n3. 同时保存到文件备份\n\n```bash\n# 执行方式\necho '{生成的 JSON}' | pbcopy\necho \"✓ JSON prompt 已复制到剪贴板\"\n\n# 同时保存备份\necho '{生成的 JSON}' > /tmp/smart-illustrator-prompt.json\necho \"✓ 备份已保存到 /tmp/smart-illustrator-prompt.json\"\n```\n\n用户可直接粘贴到 Gemini Web 手动生成图片。\n\n---\n\n## 输出文件\n\n```\narticle.md              # 原文（不修改）\narticle-image.md        # 带配图的文章\narticle-cover.png       # 封面图（16:9）\narticle-image-01.png    # Gemini 配图\n```","author":"@axtonliu","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/axtonliu/smart-illustrator","license":"MIT","category":"writing","lang":"en","tokens":3080,"stars":0,"calls30d":1,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":".gitignore","size":606,"sha256":"9b28d275b61228bf0063978d210694afebd036502e0503001c6ec237bcf0faa2"},{"path":"LICENSE","size":1066,"sha256":"a1d23715a7f1487f4021c4a7ce47b4b78dd1aae92f59dd142fbe7eef9908ea4d"},{"path":"prompts/learning-analysis.md","size":2128,"sha256":"fc53df714fd1d134709bc14625fe5b6c582b29f1179a71015852079d9e52a7e6"},{"path":"prompts/README.md","size":1455,"sha256":"1f8fcb4099c112a1ff7372b62a239a8c0c77e05d8d53843e1cb96a91aef47cad"},{"path":"prompts/varied-styles.md","size":1198,"sha256":"e4bc39ee84ab761198a6c13f612cf90fb8b7e499d7dd2a6a328eb276a81ef9b4"},{"path":"README.md","size":26597,"sha256":"882a6827d23da33498e629b76a75517e7b1adf2d0ce44670fdf8ff346b10cf57"},{"path":"README.zh-CN.md","size":28704,"sha256":"f58344360fbf8dfed445fa8e4968c7ae6ca456be0f68d9b7b77242cd5562a948"},{"path":"references/cover-best-practices.md","size":4663,"sha256":"80d4a69370a4945005823710bc60ad7c794bb4cdc8dea0bb6f79045c548df3b9"},{"path":"references/excalidraw-export-selectors.md","size":7605,"sha256":"268dbb2c0a2d5cff6adfad1990dabaebb3acc0b1d58917075b4d56e5c946bad2"},{"path":"references/excalidraw-guide.md","size":4007,"sha256":"f5fc9d47848851a11970fe999b2b65daa3fe1999d8fde083ea7b4349b7b16508"},{"path":"references/slides-prompt-example.json","size":9169,"sha256":"b8004a49c3b5f9a7558cfa10717869ddb346f979a5b2393f8915fcda805f5770"},{"path":"scripts/batch-generate.ts","size":13614,"sha256":"4d19862c1cc35e5bd304fcd8a80b9ed297c77ba59cfb6633f78263d05078cd3e"},{"path":"scripts/config.ts","size":4805,"sha256":"c423d9fb8e2e3222bacbafef4f253500f27945fca82ff77a75958eda38934611"},{"path":"scripts/cover-learner.ts","size":12440,"sha256":"00643c9bba0595195b6a91584fccc169eb1a73ef0651eff3f447b9f796eca1bc"},{"path":"scripts/excalidraw-export.ts","size":11045,"sha256":"08a2dc367c60310158328f82ef9ea7749d74d75da00b1cdcbbbb2a5f640c84d5"},{"path":"scripts/generate-image.ts","size":23168,"sha256":"22b71c086ff96ee4f22007198cdc5d038d325a894dcb2f90692c5230f240e465"},{"path":"scripts/mermaid-export.ts","size":6039,"sha256":"89445b04fbfe7f68886ef2d6e889b202f04ae232dbd0b4775c93a52df9cd374e"},{"path":"scripts/package.json","size":171,"sha256":"082113847201e8f9c8ac3374a87ea3a8e2b7d332f93ff2187e5e93a1a2c5236a"},{"path":"scripts/package-lock.json","size":46135,"sha256":"d07a0269535ff6773cb86c0c6b39e5be0dbc5db65d23a54cde8ff2722b2890ac"},{"path":"styles/brand-colors.md","size":5774,"sha256":"fa3fe127479f071fd9d8bb77e42c36bf55b5c44f687dd336a7a6bf589adf6d6b"},{"path":"styles/style-bento.md","size":6471,"sha256":"df5b30c9899ee4f11ac3d51a3aa4d382edb149f1fa71b4bab0c1b3de4e61a508"},{"path":"styles/style-cover.md","size":15266,"sha256":"e4bc19b24dfc831c014c6781aa6eea267ceaa7464e9f9279278a137a36c29e70"},{"path":"styles/style-dark.md","size":4457,"sha256":"10c75b4aba6684ff9aba129ea6b5263cf90077323fbb5352a880f0a909ed734b"},{"path":"styles/style-light.md","size":4810,"sha256":"66a0fc7b8feba05ee252abe07762e7ff3413b6f31af44156d4aaffbb3ba7a1f9"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[{"code":"net.endpoints","kind":"exfiltration","excerpt":"ai.google.dev, aistudio.google.com, bun.sh, excalidraw.com, feross.org, gemini.google.com, generativelanguage.googleapis.com, img.shields.io","message":"bundled scripts reach 17 external host(s)","severity":"warn"}],"scannedAt":"2026-08-22","hasScripts":true,"networkEndpoints":["ai.google.dev","aistudio.google.com","bun.sh","excalidraw.com","feross.org","gemini.google.com","generativelanguage.googleapis.com","img.shields.io","mermaid.js.org","openrouter.ai","playwright.dev","registry.npmjs.org","twitter.com","www.axtonliu.ai","www.patreon.com","youtu.be","youtube.com"]}}