办公文档
当需要把文章、博客、主题或论文转成风格化…
适合追求风格化外观、便于阅读和社交分享的幻灯图片;不适用于需要精确可编辑公式、数据、引用的正式学术演讲。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
当需要把文章、博客、主题或论文转成风格化特定
解决思路
- 使用命令:`/paper-slide-deck path/to/paper.pdf`、`/paper-slide-deck path/to/paper.pdf --style academic-paper`、`/paper-slide-deck path/to/content.md --style sketch-notes`、`/paper-slide-deck path/to/content.md --audience executives`、`/paper-slide-deck path/to/content.md --lang zh`、`/paper-slide-deck path/to/content.md --slides 10`、`/paper-slide-deck path/to/content.md --outline-only`、`/paper-slide-deck`(然后粘贴内容)。
- 一次性安装 Node 依赖:`cd ${SKILL_DIR}/scripts && npm install`,安装 `canvas`、`pdfjs-dist`、`pptxgenjs`、`pdf-lib`(`package-lock.json` 锁定版本);若脚本报 `missing Node dependency "<name>"`,重新运行该命令。
- Python 生成器 `generate-slides.py` 首次运行会自动安装 `google-genai`。
- 安装 PyMuPDF:`pip install pymupdf`,它用于从嵌入位图的页面(X-rays、CAM heatmaps、照片)提取图片,是 `extract-figure.ts` 中 `pdfjs` + `canvas` 路径失败(`Error: Image or Canvas expected`)时的可靠 fallback;对医学影像论文应视为必需,而非可选。
- 图片生成需要 `GOOGLE_API_KEY`/`GEMINI_API_KEY`(Gemini API)或 Gemini Web skill;若没有 key 且没有 web 选项,仍不中止,使用降级模式:1. 用 `--outline-only` 产生 outline + prompts(不生成图片);2. 对源 PDF 用 `detect-figures.ts` + `extract-figure.ts` + `apply-template.ts` 提取真实图/表(无需 API key,纯渲染);3. 将已有 slides(`extract` 来源页面)合并为 PPTX/PDF,并把 `prompts/` 交回用户,等以后有 key 时再生成图片。
- 确定脚本目录:将 SKILL.md 文件所在目录设为 `SKILL_DIR`;脚本路径 = `${SKILL_DIR}/scripts/<script-name>.ts`;将文档中所有 `${SKILL_DIR}` 替换为实际路径。
- 脚本用途:`scripts/generate-slides.py` 通过 Gemini API 生成 AI slides(Python);`scripts/merge-to-pptx.ts` 合并 slides 到 PowerPoint;`scripts/merge-to-pdf.ts` 合并 slides 到 PDF;`scripts/detect-figures.ts` 自动检测 PDF 中图/表(启发式,需验证页码);`scripts/extract-figure.ts` 将完整 PDF 页面渲染为 PNG(可选 `--crop`;PyMuPDF fallback);`scripts/apply-template.ts` 应用图片容器模板。
- 选项:`--style <name>` 选择视觉风格;`--audience <type>` 选择目标受众 beginners/intermediate/experts/executives/general;`--lang <code>` 设置输出语言 en/zh/ja 等;`--slides <number>` 设置目标 slide 数;`--outline-only` 只生成 outline,跳过图片生成。
- 风格库:`academic-paper` 干净专业、精确图表,适合学术风格视觉、技术讲义(忠实可编辑演讲用 scholar-slides);`blueprint`(默认)技术示意、网格纹理,适合架构、系统设计;`chalkboard` 黑板彩色粉笔,适合教育、教程、课堂;`notion` SaaS 仪表盘、卡片布局,适合产品演示、SaaS、B2B;`bold-editorial` 杂志封面、粗体排版、深色,适合产品发布、主题演讲;`corporate` 海军蓝/金色、结构化布局,适合投资人 deck、提案;`dark-atmospheric` 电影感暗色、发光点缀,适合娱乐、游戏;`editorial-infographic` 杂志解释器、扁平插画,适合技术解释、研究;`fantasy-animation` Ghibli/Disney 手绘,适合教育、讲故事;`intuition-machine` 技术简报、双语标签,适合技术文档、学术;`minimal` 超干净、最大留白,适合高管简报、高端;`pixel-art` 复古 8-bit、粗像素,适合游戏、开发者演讲;`scientific` 学术图表、精确标注,适合生物、化学、医学;`sketch-notes` 手绘、温暖友好,适合教育、教程;`vector-illustration` 扁平矢量、复古可爱,适合创意、儿童内容;`vintage` 做旧纸张、历史风格,适合历史、遗产、传记;`watercolor` 手绘纹理、自然温暖,适合生活方式、健康、旅行。
- 自动风格选择:内容信号 `paper, thesis, defense, conference, ieee, acm, icml, neurips, cvpr, acl, aaai, iclr` → `academic-paper`;`tutorial, learn, education, guide, intro, beginner` → `sketch-notes`;`classroom, teaching, school, chalkboard, blackboard` → `chalkboard`;`architecture, system, data, analysis, technical` → `blueprint`;`creative, children, kids, cute, illustration` → `vector-illustration`;`briefing, bilingual, infographic, concept` → `intuition-machine`;`executive, minimal, clean, simple, elegant` → `minimal`;`saas, product, dashboard, metrics, productivity` → `notion`;`investor, quarterly, business, corporate, proposal` → `corporate`;`launch, marketing, keynote, bold, impact, magazine` → `bold-editorial`;`entertainment, music, gaming, creative, atmospheric` → `dark-atmospheric`;`explainer, journalism, science communication` → `editorial-infographic`;`story, fantasy, animation, magical, whimsical` → `fantasy-animation`;`gaming, retro, pixel, developer, nostalgia` → `pixel-art`;`biology, chemistry, medical, pathway, scientific` → `scientific`;`history, heritage, vintage, expedition, historical` → `vintage`;`lifestyle, wellness, travel, artistic, natural` → `watercolor`;默认 `blueprint`。
- 学术信号 caution:当内容匹配 `academic-paper` 信号(paper/thesis/neurips/cvpr/icml/…)时,本技能仍会把文本烘焙进图片,因此方程、结果表、精确数字可能 garbled;应从源 PDF 提取真实图/表(`Source: extract`),不要让模型重画;若 deck 需要忠实、可编辑的公式/数据,告知用户改用 `scholar-slides`。
- 布局提示:在 outline 的 `// LAYOUT` 区块中指定 `Layout: <name>` 来指导视觉构图。具体布局:`title-hero` 大型居中标题+副标题,适合封面、章节分隔;`quote-callout` 突出引用+署名,适合推荐语、关键洞察;`key-stat` 单个大数字焦点,适合影响统计、指标;`split-screen` 半图半文,适合特性亮点、比较;`icon-grid` 图标网格+标签,适合功能、能力、收益;`two-columns` 均衡双栏,适合配对信息、双点;`three-columns` 三栏,适合三重比较、类别;`image-caption` 全出血图+文字叠加,适合视觉叙事、情绪;`agenda` 编号列表+高亮,适合议程、路线图;`bullet-list` 结构化项目符号,适合简单内容、列表;`linear-progression` 从左到右顺序流,适合时间线、逐步;`binary-comparison` 并排 A vs B,适合前后、优缺点;`comparison-matrix` 多因素网格,适合功能比较;`hierarchical-layers` 金字塔或堆叠层级,适合优先级、重要性;`hub-spoke` 中心节点+辐射项,适合概念图、生态;`bento-grid` 不同大小瓷砖,适合概览、总结;`funnel` 收窄阶段,适合转化、筛选;`dashboard` 指标+图表/数字,适合 KPI、数据展示;`venn-diagram` 重叠圆,适合关系、交集;`circular-flow` 连续循环,适合重复流程;`winding-roadmap` 弯曲路径+里程碑,适合旅程、时间线;`tree-branching` 父子层级,适合组织图、分类法;`iceberg` 可见 vs 隐藏层,适合表面 vs 深度;`bridge` 差距+连接,适合问题-解决;`paper-title` 标题、作者、单位、会议,适合会议论文封面;`outline-agenda` 编号章节列表+高亮,适合演讲结构概览;`methods-diagram` 中央架构/流程 diagram,适合方法、系统设计;`results-chart` 图表区域+数据注释,适合定量结果;`equation-focus` 居中方程+变量定义,适合数学推导;`qualitative-grid` 2x2 或 3x2 图像比较网格,适合视觉结果、消融;`references-list` 编号引用列表,适合关键参考文献 slide;`contributions` 编号贡献点,适合贡献总结。
- 设计哲学:该 deck 为阅读和分享设计,不是现场演讲;每张 slide 必须无需口头解说即可自解释;为滚动时逻辑流组织内容;每张 slide 包含所有必要上下文;优化社交媒体分享和离线阅读。
- 文件管理:每次会话创建独立目录 `slide-deck/{topic-slug}/`,结构为 `source-{slug}.{ext}`、`outline.md`、`outline-{style}.md`、`prompts/`(`01-slide-cover.md`, `02-slide-{slug}.md`, ...)、`01-slide-cover.png`, `02-slide-{slug}.png`, ...、`{topic-slug}.pptx`、`{topic-slug}.pdf`。
- Slug 生成:从内容提取主主题(2-4 个词,kebab-case),例 `Introduction to Machine Learning` → `intro-machine-learning`。
- 冲突解决:若 `slide-deck/{topic-slug}/` 已存在,追加时间戳 `{topic-slug}-YYYYMMDD-HHMMSS`,例 `intro-ml` 存在 → `intro-ml-20260118-143052`。
- 源文件:将所有源复制为 `source-{slug}.{ext}`,如 `source-article.md`(主文本)、`source-diagram.png`(对话中图片)、`source-data.xlsx`(附加文件);支持多个源:文本、图片、对话中文件。
- Step 1 分析内容:保存源内容(若粘贴,保存为 `source.md`);遵循 `references/analysis-framework.md` 做深度内容分析;确定风格(用 `--style` 或自动选择);检测语言(源语言 vs 用户偏好);计划 slide 数(`--slides` 或动态);对学术论文 PDF(含图)运行 `npx -y bun ${SKILL_DIR}/scripts/detect-figures.ts --pdf source-paper.pdf --output figures.json`,输出检测到的图/表、页码、标题的 JSON。
- Step 1 验证 caption:caption 检测是启发式,尤其首页 teaser。面向行锚定的 `Figure N` 匹配器能可靠找到独立成行标题(单列布局),但会漏掉标题与正文交织的双列首页图——常是论文最重要架构/概览图。运行 detect-figures 后,交叉检查源的 `Figure 1`:若论文正文引用某 `Figure N` 但不在 `figures.json`,通过 `// IMAGE_SOURCE` 块手动添加并用 PyMuPDF fallback 提取;不要假定 `figures.json` 完整。
- Step 2 生成 outline 变体:根据内容分析生成 3 个风格变体 outlines;遵循 `references/outline-template.md` 结构;学术论文自动填充 `IMAGE_SOURCE`:读取 Step 1 的 `figures.json`;按 `references/analysis-framework.md` Section 8 规则映射图到 slide;自动给合适 slide 添加 `// IMAGE_SOURCE` 块:架构/流程图标 → Methods slides(`Source: extract`);结果表 → 定量结果 slides(`Source: extract`);比较图 → 定性结果 slides(`Source: extract`);概念/简单图 → 留给 AI 生成(`Source: generate` 或省略);保存为 `outline-{style}.md` 每个变体。
- Step 3 用户确认:用单个 `AskUserQuestion` 问所有适用选项;Style variant 总是问(3 个选项 + 自定义);Language 仅在源语言 ≠ 用户语言时问。选择后:复制选中的 `outline-{style}.md` 到 `outline.md`;若请求不同语言则重新生成;用户可编辑 `outline.md` 微调;若 `--outline-only`,停在此处。
- Step 4 生成 prompts:读 `references/base-prompt.md`;结合 outline 的风格说明;添加 slide 特定内容;若 outline 指定 `Layout:`,在 prompt 中包含布局指导(例 `Layout: hub-spoke` → “Central concept in middle with related items radiating outward”);保存到 `prompts/` 目录。
- Step 5 选择图片生成方法:生成图片前问用户选择方法;用 `AskUserQuestion` 提供:1. Gemini API (Recommended):通过 Python 官方 Google API,需要 `GOOGLE_API_KEY` 环境变量;2. Gemini Web (Browser-based):⚠ 使用逆向工程 web API,无需 API key 但可能失效。
- Step 5 选项 1 Gemini API:验证 `GOOGLE_API_KEY` 或 `GEMINI_API_KEY` 环境变量;运行 `python3 ${SKILL_DIR}/scripts/generate-slides.py <slide-deck-dir>`;默认模型 `gemini-3-pro-image`(Nano Banana Pro, GA),可用 `--model <id>` 覆盖;旧 `gemini-3-pro-image-preview` id 已弃用。脚本功能:自动安装 `google-genai`;从 `prompts/` 读取 `*.md`(或 `*.txt`)作为 prompt 文件;若没有 prompt 文件则以非零退出,不静默什么都不做;带指数退避重试(3 次);设置 `response_modalities=["IMAGE"]` 使模型返回图片部分;跳过已生成 slides(> 10KB,任意图片扩展名);每张 slide 写到 deck 根目录(如 `01-slide-cover.png`),与提取图 slide 同处,便于一个 merge 步骤同时拾取;保存真实图片扩展名(Gemini 常返回 JPEG 即使请求 PNG → 保存为 `.jpg`,绝不误标 `.png`);支持 `--model` 标志。故障:server disconnection 自动重试;持续失败重新运行脚本(跳过已完成);很多失败检查 API quota。
- Step 5 选项 2 Gemini Web Skill:读取 consent 文件:Windows `$APPDATA/baoyu-skills/gemini-web/consent.json`;macOS `~/Library/Application Support/baoyu-skills/gemini-web/consent.json`;Linux `~/.local/share/baoyu-skills/gemini-web/consent.json`。若无 consent 或版本不匹配,显示免责声明并询问:`⚠ DISCLAIMER: This uses a reverse-engineered Gemini Web API (NOT official). Risks: May break anytime, no support, possible account risk.` 对每张 slide 运行 `npx -y bun ${GEMINI_WEB_SKILL_DIR}/scripts/main.ts --promptfiles prompts/01-slide-cover.md --image 01-slide-cover.png --sessionId slides-{topic-slug}-{timestamp}`,其中 `GEMINI_WEB_SKILL_DIR` = `baoyu-danger-gemini-web` skill 目录路径。代理支持:若用户在受限网络,前置 `HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890`。
- Step 5.5 处理 IMAGE_SOURCE 自动图提取:解析 outline 识别 `Source: extract` 的 slides;创建 `figures` 目录:`mkdir -p figures`;对每个 extract slide 自动:从 metadata 读 Figure number、Page、Caption;运行 `npx -y bun ${SKILL_DIR}/scripts/extract-figure.ts --pdf source-paper.pdf --page <page-number> --output figures/figure-<N>.png`;注意 `extract-figure.ts` 将完整页面渲染为高分辨率 PNG,不自动检测或裁剪单个图边界框;双列页面会得到两列;要隔离单个图,要么传 `--crop "x,y,width,height"`(渲染/缩放页面中的像素),要么打开 PNG 目检并手动裁剪后再应用模板;运行 `npx -y bun ${SKILL_DIR}/scripts/apply-template.ts --figure figures/figure-<N>.png --title "<slide-headline>" --caption "Figure <N>: <caption-text>" --output <NN>-slide-<slug>.png`;报告 `Extracted: Figure N → slide NN`。对 `Source: generate` 或无 `IMAGE_SOURCE` 的 slides,去 Step 6 AI 生成。注意源 PDF 需保存为 `source-paper.pdf` 在输出目录。故障:若图检测漏图,手动给 outline 加 `// IMAGE_SOURCE` 块;若映射错误,编辑 outline 中 `Figure:` 和 `Page:` 值;若提取失败,检查 PDF 页码(1-indexed)。PyMuPDF fallback:若 `extract-figure.ts` 失败并报 `Image or Canvas expected`(复杂 PDF 常见),用:`import fitz`、`doc = fitz.open("source-paper.pdf")`、`page = doc[page_num - 1]`、`mat = fitz.Matrix(3, 3)`、`pix = page.get_pixmap(matrix=mat)`、`pix.save(f"extracted/page-{page_num}.png")`,然后用 `apply-template.ts` 应用模板。
- Step 6 生成图片:使用 Step 5 选择的方法;跳过 Step 5.5 已处理的 slides(`Source: extract`);生成 session ID `slides-{topic-slug}-{timestamp}`;用相同 session ID 生成每张剩余 slide;报告进度 `Generated X/N`;生成失败自动重试一次。
- Step 6.5 校对生成图片(内容完整性):T2I 会将文本烘焙进像素,会 garbled 拼写、数学符号、数字——这是该技能最大风险;不要未检查就交付。对每张生成 slide(尤其含方程、表格、关键数字或非拉丁文本),用 `Read` 打开 PNG 目检:1. 拼写/措辞——headline 和 body text 匹配 outline,无捏造或损坏词;2. 数学与符号——方程、下标、希腊字母、运算符正确(或不存在);假定模型弄错直到确认不是;3. 数字与单位——任何携带数据的数值与源完全一致。若发现 garbling:用修正/简化 prompt 重新生成该 slide(风险词按音拼写、降低文本密度、把精确数字移到 caption);最多 2 次重试;若 2 次后仍失败,在 Step 8 总结中将该 slide 标记 `[CHECK]` 并建议:替换为源 PDF 提取的图/表(`Source: extract`),或简化 slide 去掉脆弱文本,或若 deck 真需要忠实可编辑公式/数据则换 `scholar-slides`。绝不静默交付含 garbled 数学或数据的 slide——始终暴露。
- Step 7 合并到 PPTX 和 PDF:运行 `npx -y bun ${SKILL_DIR}/scripts/merge-to-pptx.ts <slide-deck-dir>`;运行 `npx -y bun ${SKILL_DIR}/scripts/merge-to-pdf.ts <slide-deck-dir>`。
- Step 8 输出总结:格式:`Slide Deck Complete!`,`Topic: [topic]`,`Style: [style name]`,`Location: [directory path]`,`Slides: N total`;列出每张 slide:`01-slide-cover.png ✓ Cover`、`02-slide-intro.png ✓ Content`、`04-slide-results.png ⚠ [CHECK] math/numbers — verify or use scholar-slides`、...、`{NN}-slide-back-cover.png ✓ Back Cover`;`Outline: outline.md`;`PPTX: {topic-slug}.pptx`;`PDF: {topic-slug}.pdf`;明确列出所有 `[CHECK]` 标记的 slides(来自 Step 6.5),让用户知道哪些 slide 可能含 garbled 文本/数学/数据以及如何修复。
- Slide 修改:参考 `references/modification-guide.md`,包括编辑单张 slide workflow、添加新 slide(重编号)、删除 slide(重编号)、文件命名约定。
- 图片生成依赖:Gemini API(选项 1 推荐)需要 `GOOGLE_API_KEY` 或 `GEMINI_API_KEY` 环境变量、Python 3.8+ 和 pip、`google-genai` 包(脚本自动安装);模型 `gemini-3-pro-image`(默认;Nano Banana Pro, GA),旧 `gemini-3-pro-image-preview` id 已弃用,仅在需要时用 `--model` 覆盖。Gemini Web Skill(选项 2)需要 `baoyu-danger-gemini-web` skill 安装在 `.claude/skills/baoyu-danger-gemini-web`、Google Chrome 浏览器且登录 Google 账号、用户同意逆向工程 API 免责声明。PDF 图提取需要(通过 `cd ${SKILL_DIR}/scripts && npm install` 安装):主要 `pdfjs-dist` npm 包(Node.js 使用 legacy build)、`canvas` npm 包用于 `extract-figure.ts` / `apply-template.ts`;fallback `pymupdf` Python 包(复杂 PDF 更可靠)。
- 参考文件:`references/analysis-framework.md` 演示深度内容分析;`references/outline-template.md` outline 结构和 `STYLE_INSTRUCTIONS` 格式;`references/modification-guide.md` 编辑、添加、删除 slide workflows;`references/content-rules.md` 内容和风格指南;`references/base-prompt.md` 图片生成基础 prompt;`references/figure-container-template.md` 提取图容器视觉规格;`references/styles/<style>.md` 完整风格规格。
- 注意事项-图片生成:Nano Banana Pro API 推荐,稳定可靠,需要 API key;Gemini Web 无需 API key,但使用逆向工程 API 有账号风险;生成时间每张 slide 10-30 秒;生成失败自动重试一次;通过 session ID 保持风格一致。
- 内容指南:对敏感公众人物使用风格化替代;两种方法都使用相同底层 Gemini 模型生成图片。
- 扩展支持:通过 `EXTEND.md` 自定义风格和配置;检查路径优先级:1. `.paper-skills/paper-slide-deck/EXTEND.md`(项目);2. `~/.paper-skills/paper-slide-deck/EXTEND.md`(用户);若找到,在 Step 1 前加载;扩展内容覆盖默认值。
适用边界 · 注意事项
- 需要忠实学术演讲,方程、数字、表格、引用必须保持精确、可编辑、投影就绪(组会/答辩/thesis defense/conference/results-heavy talks)时,应改用 scholar-slides。
- 需要可编辑的文本、公式或数据,而不是烘焙进图片像素时。
- 无 API key 且无法接受降级模式(仅 outline/提取图/无 AI 图片)时。