waterdjiang/wattter_openskills/wtt-course-pptx-builder

Claude Code and agent skill by waterdjiang/wattter_openskills

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

AI 驱动的多格式 SVG 内容生成系统。通过多角色协作,将源文档(PDF / DOCX / URL / Markdown)转换为高质量 SVG 页面并导出为 PPTX。 支持品牌/版式/Deck 模板、AI 图像生成、网页图像搜索、实时预览编辑、图表校准、动画定制、旁白录制、视觉自检等。 当用户提出以下需求时使用:(1) "create PPT" / "make presentation" / "生成 PPT" / "做 PPT" / "制作演示文稿"; (2) 模板相关:"create template" / "create brand" / "创建模板" / "创建品牌"; (3) 图像相关:"generate image" / "搜索图片" / "AI 生图"; (4) 后处理相关:"verify charts" / "校准图表" / "customize animations" / "定制动画" / "visual review" / "视觉自检"; (5) 导出相关:"export PPTX" / "导出 PPT" / "add narration" / "添加旁白"; (6) 恢复:"继续生成" / "resume execution"

Install

npx vskill@latest install waterdjiang/wattter_openskills/wtt-course-pptx-builder

SKILL.md

课程 PPT 构建器技能

AI 驱动的多格式 SVG 内容生成系统。通过多角色协作将源文档转换为高质量 SVG 页面,并最终导出为 PPTX。

核心流水线: 源文档 → 创建项目 → [模板] → 策略师 → [图像生成] → 执行器实时预览 → 质量检查 → 后期处理 → 导出

[!CAUTION]
## 🚨 全局执行纪律(强制要求)
本工作流是一条严格的串行流水线。以下规则拥有最高优先级——违反任何一条都视为执行失败:
1. 串行执行(SERIAL EXECUTION) — 各步骤必须按顺序执行;前一步的输出是后一步的输入。一旦前置条件满足,相邻的非 BLOCKING 步骤可以连续进行,无需用户说"继续"
2. BLOCKING = 硬停止(BLOCKING = HARD STOP) — 标记为 ⛔ BLOCKING 的步骤需要完全停下;AI 必须等待用户明确回复后才能继续,绝不能替用户做任何决定
3. 禁止跨阶段打包(NO CROSS-PHASE BUNDLING) — 跨阶段打包是被禁止的。(注:Step 1 的流程闸口与 Step 4 的八项确认属于 ⛔ BLOCKING——AI 必须先呈现推荐方案并等待用户明确确认后才能继续。一旦用户确认,后续所有非 BLOCKING 步骤——设计规范输出、SVG 生成、讲者备注、后期处理——都可以自动进行,无需再次确认)
4. 进入前先过闸(GATE BEFORE ENTRY) — 每个 Step 顶部都列出了前置条件(🚧 GATE),开始该 Step 前必须先校验
5. 禁止投机执行(NO SPECULATIVE EXECUTION) — 禁止"预先准备"后续 Step 的内容(例如,在 Strategist 阶段就写 SVG 代码)
6. 禁止子代理生成 SVG(NO SUB-AGENT SVG GENERATION) — Executor Step 6 的 SVG 生成是上下文相关的,必须由当前主代理端到端完成。禁止把页面 SVG 生成委派给子代理
7. 只允许逐页顺序生成(SEQUENTIAL PAGE GENERATION ONLY) — 在 Executor Step 6 中,确认全局设计上下文后,SVG 页面必须以一次性连续过程逐页生成。禁止批量生成(例如一次 5 页)
8. 每页重读 SPEC_LOCK(SPEC_LOCK RE-READ PER PAGE) — 在生成每张 SVG 页面之前,Executor 必须 read_file <project_path>/spec_lock.md。所有颜色 / 字体 / 图标 / 图片都必须来自该文件——禁止凭记忆或临时编造。Executor 还必须查询当前页的 page_rhythm(anchor / dense / breathing)、page_layouts(如要继承的模板 SVG)以及 page_charts(如要套用的图表模板)。空 / 缺失条目是 Strategist 的有意信号——参见 executor-base.md §2.1。该规则是为了抵御长 deck 上的上下文压缩漂移,并打破"每页都是卡片网格"的统一默认
9. SVG 必须手写,禁止脚本生成(SVG MUST BE HAND-WRITTEN, NOT SCRIPT-GENERATED) — 每张 SVG 页面都由主代理直接逐页手写(参见规则 6 和 7)。禁止编写或运行 Python / Node / shell 脚本批量产出 SVG 文件——包括循环生成页面、数据模板化、或通过生成器发出——即便以"省 token"、"快速草稿"或"用户赶时间"为借口。脚本生成路径曾在特性分支上试过并被放弃:跨页视觉一致性依赖于带完整上游上下文的逐页手写,生成器脚本无法复现
[!IMPORTANT]
## 🌐 语言与沟通规则
- 回答语言:与用户输入及源材料保持一致。若用户明确指定(如"请用英文回答"),以用户指定为准。
- 模板格式:design_spec.md 必须保持其原始英文模板结构(章节标题、字段名),无论对话使用何种语言。内容值可使用用户语言。
[!IMPORTANT]
## 🔌 与通用编码技能的兼容性
- wtt-course-pptx-builder 是仓库级工作流,不是通用应用脚手架
- 默认不要创建 .worktrees/、tests/、分支工作流或通用工程结构
- 与通用编码技能冲突时,除非用户明确说明,否则以本技能为准

主要流水线脚本

脚本用途
${SKILL_DIR}/scripts/source_to_md/pdf_to_md.pyPDF 转 Markdown
${SKILL_DIR}/scripts/source_to_md/doc_to_md.py各类文档转 Markdown — DOCX/HTML/EPUB/IPYNB 用原生 Python;.doc/.odt/.rtf/.tex/.rst/.org/.typ 等遗留格式走 pandoc 兜底
${SKILL_DIR}/scripts/source_to_md/excel_to_md.pyExcel 工作簿转 Markdown — 支持 .xlsx/.xlsm;旧版 .xls 需另存为 .xlsx
${SKILL_DIR}/scripts/source_to_md/ppt_to_md.pyPowerPoint 转 Markdown
${SKILL_DIR}/scripts/source_to_md/web_to_md.py网页转 Markdown(通过 curl_cffi 支持微信公众号)
${SKILL_DIR}/scripts/project_manager.py项目初始化 / 校验 / 管理
${SKILL_DIR}/scripts/analyze_images.py图像分析
${SKILL_DIR}/scripts/latex_render.pyLaTeX 公式渲染(基于清单生成 PNG 资源)
${SKILL_DIR}/scripts/image_gen.pyAI 图像生成(多 provider)
${SKILL_DIR}/scripts/svg_quality_checker.pySVG 质量校验
${SKILL_DIR}/scripts/total_md_split.py讲者备注拆分
${SKILL_DIR}/scripts/finalize_svg.pySVG 后期处理(统一入口)
${SKILL_DIR}/scripts/svg_to_pptx.py导出为 PPTX
${SKILL_DIR}/scripts/update_spec.py在所有已生成 SVG 间传播 spec_lock.md 的颜色 / font_family 变更

完整工具文档请参见 ${SKILL_DIR}/scripts/README.md。

Windows 提示:若 python3 ... 命令失败(python.org 安装版本常见,只提供 python.exe 而无 python3.exe),请改用 python 重跑同一命令。

模板索引

索引路径用途
版式模板${SKILL_DIR}/templates/layouts/layouts_index.json查询可用的页面版式模板
品牌预设${SKILL_DIR}/templates/brands/brands_index.json查询可用的品牌识别预设(颜色 / 字体 / Logo / 语气)
完整 Deck${SKILL_DIR}/templates/decks/decks_index.json查询可用的完整 PPT 复刻模板(识别 + 结构 + 资源)
可视化模板${SKILL_DIR}/templates/charts/charts_index.json查询可用的 SVG 可视化模板(图表、信息图、示意图、框架图)
图标库${SKILL_DIR}/templates/icons/参见 ${SKILL_DIR}/templates/icons/README.md;按需用 `ls ${SKILL_DIR}/templates/icons/<library>/ \grep <keyword>` 搜索图标
三个模板索引(brands / layouts / decks)的每条条目都自带 kind 与 path 字段,供 Step 3 流程 1 的统一菜单与"有哪些模板?"带外问答共用。新模板经 register_template.py 注册后自动出现在索引与流程 1 菜单中。

独立工作流

工作流路径用途
topic-researchworkflows/topic-research.md流水线前——当用户只提供主题而没有源文件时,先抓取网络资料
template-fillworkflows/template-fill-pptx.md给定原生 PPTX 模板与源材料;挑选合适页面(一页可复用于多张输出幻灯片)并直接回填文字,无需 SVG 转换
use-user-templateworkflows/use-user-template.md流程 2 入口——用户提供 .pptx 模板,分析其设计身份后落到当前项目 templates/,可选入库
create-templateworkflows/create-template.md独立版式模板创建工作流(入库供未来流程 1 复用)
create-brandworkflows/create-brand.md独立品牌模板创建(识别预设;不含 SVG 页面清单;入库)
resume-executeworkflows/resume-execute.md阶段 B 入口——在另一个会话完成阶段 A(Step 1–5)后,在新会话中恢复执行(分阶段模式)
verify-chartsworkflows/verify-charts.md图表坐标校准——若 deck 含数据图表,在 SVG 生成后运行
customize-animationsworkflows/customize-animations.md对象级 PPTX 动画定制——仅当用户明确要求调整动画顺序/效果/时机时运行
live-previewworkflows/live-preview.md基于浏览器的实时预览——生成过程中自动启动,并在用户提到"live preview"、"preview"、"看效果"或希望点击/选中幻灯片元素时随时可重新进入
visual-reviewworkflows/visual-review.md基于评分细则的逐页可视化自检——仅当用户明确要求在生成的 SVG 上做一轮视觉复检时(位于 Executor 与后期处理之间)运行。仅作为可选步骤,主流水线不会主动调用。

工作流

Step 1:流程确认与源内容处理

🚧 GATE:用户已提供初始需求(主题 / 源文件 / 模板文件 / 文字描述——任何形式均可)。

1a. 流程确认(三选一闸口)

⛔ BLOCKING(仅当歧义时):向用户呈现三条流程并等待选择。若用户开场消息已隐含某条流程,则预选并在同一轮内确认,无需单独追问。

流程含义触发信号
流程 1 · 用 skill 库模板从本 skill 自带模板库选一个或多个,渐进式加载后走后续生成用户提到库中已知模板名 / 问"有哪些模板" / 想复用已有模板
流程 2 · 用用户提供的模板用户以 .pptx 文件形式提供模板,skill 分析其设计身份后构建用户附带 .pptx 模板 + 内容材料 / 说"套这份 pptx 模板"
流程 3 · 自由构建(默认)不用任何模板,Strategist 全程自由设计其余情况——纯主题 / 纯内容材料 / 无模板意图

推荐信号:附 .pptx 模板 → 推荐流程 2;提及库中模板名或明确要复用 → 推荐流程 1;其余 → 推荐流程 3。无信号或歧义时才 BLOCKING 三选一。

显式路径逃生口:用户若直接给出一个模板目录路径(如 templates/decks/招商银行/),视为流程 1 预选该模板,跳过 Step 3 的菜单选择,一轮确认即进入 Step 4。

确认后,所选流程决定 Step 3 的获取方式;Step 2 及之后的生成流水线三条流程完全一致。

1b. 源内容处理
没有源内容怎么办? 当用户只提供主题名或需求,没有任何文件或实质性描述时,请先运行 `topic-research` 工作流,再回到此处以其产物作为输入。

若用户提供的是非 Markdown 内容,请立即转换:

用户提供命令
PDF 文件python3 ${SKILL_DIR}/scripts/source_to_md/pdf_to_md.py <file>
DOCX / Word / Office 文档python3 ${SKILL_DIR}/scripts/source_to_md/doc_to_md.py <file>
XLSX / XLSM / Excel 工作簿python3 ${SKILL_DIR}/scripts/source_to_md/excel_to_md.py <file>
CSV / TSV直接以纯文本表格源读取
PPTX / PowerPoint 演示文稿python3 ${SKILL_DIR}/scripts/source_to_md/ppt_to_md.py <file>
EPUB / HTML / LaTeX / RST / 其他python3 ${SKILL_DIR}/scripts/source_to_md/doc_to_md.py <file>
网页链接python3 ${SKILL_DIR}/scripts/source_to_md/web_to_md.py <URL>
微信 / 高安全站点python3 ${SKILL_DIR}/scripts/source_to_md/web_to_md.py <URL>(需要 curl_cffi,已包含在 requirements.txt 中)
Markdown直接读取
流程 2 的 `.pptx` 模板文件不是内容源——它是设计参考。在 Step 2 import-sources 时随内容源一起进入 sources/,但 Step 1b 不对它做内容转换;它的设计分析发生在 Step 3 流程 2。
来自 DOCX/PPTX 源中的 Office 矢量资源(EMF/WMF):
doc_to_md.py / ppt_to_md.py 会提取内嵌的 Office 矢量图像(.emf/.wmf)
与位图一起被导出。import-sources 后,这些资源会落到 images/ 目录中,
与 image_manifest.json 一起作为 §VIII 图像资源清单中的一等资源。
不要把 EMF/WMF 转成 PNG。 课程 PPT 构建器流水线将它们作为外部引用保留
(finalize_svg.py 会跳过它们),svg_to_pptx.py 通过
image/x-emf / image/x-wmf MIME 嵌入为 PPTX 原生媒体——PowerPoint 以全矢量保真度渲染。
通过 LibreOffice/Inkscape 转换会引入 CJK 字体替换漂移以及
栅格化损失;原始 EMF/WMF 始终比转换后的 PNG 保真度更高。
基于浏览器的实时预览无法渲染 EMF(会显示空白)——这是预期行为;
PPTX 输出才是最终标准。

✅ 检查点 —— 确认流程已选定、源内容就绪后,进入 Step 2。


Step 2:项目初始化

🚧 GATE:Step 1 已完成;源内容已就绪(Markdown 文件、用户提供的文字、或对话中描述的需求均为有效)。

bash
python3 ${SKILL_DIR}/scripts/project_manager.py init <project_name> --format <format>

格式选项:ppt169(默认)、ppt43、xhs、story 等。完整格式列表请见 references/canvas-formats.md。

导入源内容(按情况选择):

情况操作
有源文件(PDF/MD 等)python3 ${SKILL_DIR}/scripts/project_manager.py import-sources <project_path> <source_files...> --move
用户直接在对话中提供文字无需导入——内容已在对话上下文中;后续步骤可直接引用
⚠️ 必须使用 `--move`(而不是拷贝):所有源文件——Step 1 生成的 Markdown、原始 PDF / MD / 图片——都会通过 import-sources --move 进入 sources/。执行完毕后,原始位置将不再保留。中间产物(如 _files/)会自动处理。

✅ 检查点 —— 确认项目结构创建成功,`sources/` 包含所有源文件,转换材料就绪。进入 Step 3。


Step 3:模板获取(按流程分支)

🚧 GATE:Step 2 已完成;项目目录结构就绪。按 Step 1a 选定的流程分支获取模板。

三条流程共用同一生成流水线——差异只在模板如何到达 <project>/templates/。无论哪条流程,一旦 <project>/templates/design_spec.md 就位,Step 4 Strategist 的读取与锁定逻辑完全一致。

流程 1 · 用 skill 库模板(渐进式目录)

Tier 1 — 读索引渲染菜单:读取三个 *_index.json(条目已含 kind / path,轻量),合并为统一菜单呈现给用户:

Read templates/brands/brands_index.json
Read templates/layouts/layouts_index.json
Read templates/decks/decks_index.json

每条展示:id / kind / summary / primary_color(brand、deck)/ canvas_format / page_count(layout、deck)。用户按编号或 id 选一个或多个(可跨 kind 融合,见下方"多选融合")。

兼容新增模板:register_template.py 自动把新模板注册进 *_index.json;本菜单实时读索引,新模板零代码改动即出现。不要在 skill 任何地方硬编码模板列表。
"有哪些模板?"属于带外问答——通过列出索引条目及其 path 回答。仅列举不推进流水线;用户必须在流程 1 的菜单里选定才能推进。

Tier 2 — 选定后加载模板:用户选定后,按各条目的 path 字段定位目录,cp -r <selected_dir>/* <project_path>/templates/(多选则先融合,见下)。选定前不读模板的 design_spec.md 或 SVG——渐进式加载,省 token。

显式路径逃生口:若用户在 Step 1a 已直接给出目录路径(或在流程 1 中直接给路径),跳过菜单,等价于预选该路径,直接 cp。AI 不应"贴心"地把裸名字解析成路径——用户必须走菜单或给路径。

三种模板类型(架构上有三个相互独立的参考包;完整 schema 见 `docs/zh/templates-architecture.md`):

类型物理目录包含Frontmatter
brandtemplates/brands/<id>/仅识别段:颜色 / 字体 / Logo / 语气 / 图标风格kind: brand
layouttemplates/layouts/<id>/仅结构段:画布 / 页面结构 / 页面类型 / SVG 清单kind: layout
decktemplates/decks/<id>/完整复刻:识别 + 结构 + 中段(模板概览)kind: deck

单选派发(按所选条目的 kind):

kindStep 3 操作
kind: brand复制 design_spec.md + Logo 文件 + 资源子目录(images/ / illustrations/ / icons/)到 <project>/templates/。Strategist 把识别段锁定为权威,结构保持自由。
kind: layout复制 design_spec.md + SVG 清单 + 资源文件到 <project>/templates/。Strategist 锁定结构;识别在八项确认 e–g 中决定。
kind: deck复制全部内容(design_spec.md + SVG + Logo + 资源)到 <project>/templates/。Strategist 锁定所有段;八项确认收窄到 deck 内容字段(受众 / 页数 / 大纲 / 语气微调)。
bash
TEMPLATE_DIR=<selected path from index>
cp -r ${TEMPLATE_DIR}/* <project_path>/templates/

一行复制对三种类型都够用——spec 中的 kind 字段会告诉 Strategist 如何读取;下游代码不做区分。

多选融合——当用户选了两个或以上不同 kind 的模板时,Step 3 将它们融合成单个 <project>/templates/design_spec.md。默认粒度是段级整体替换——识别 / 结构 / 中段这些整段内容从该段优先级最高的来源取,不做隐式的字段级混搭。

段的归属(决定融合覆盖优先级):

段子章节融合时的所有者 kind
识别(Identity)配色 / 字体 / Logo / 语气 / 图标风格brand
结构(Structure)画布 / 页面结构 / 页面类型 / SVG 清单layout
中段(Middle)模板概览(使用场景 / 设计意图)deck(其他 kind 不会写这段)

按段的覆盖优先级:

组合识别来自结构来自中段来自
仅 brandbrand(自由设计)(无)
仅 layout(自由设计)layout(无)
仅 deckdeckdeckdeck
brand + layoutbrandlayout(无)
brand + deckbrand(覆盖 deck)deckdeck
layout + deckdecklayout(覆盖 deck)deck
brand + layout + deckbrandlayoutdeck

字段级微调(例如"用 anthropic brand 但主色改为 #FF0000")不属于 Step 3 融合的范畴——它会作为普通用户请求流入 Strategist 的八项确认 e–g。

同 kind 多选——冲突解决:当用户选了两个同 kind 的模板(例如 brands/anthropic + brands/google)时,Step 3 会在融合前弹出一个冲突提示——类似于解决 git 合并冲突:

AI: 你选了两个 brand,检测到段级冲突:
- 配色(Anthropic 橙红 vs Google 多色)
- 字体(Styrene/AnthropicSans vs GoogleSans/Roboto)
- Logo(Anthropic 标 vs Google 标)
- 语气(克制 vs 友好)
- 图标风格(描边 vs 填充)
要 (a) 全部按 Anthropic / (b) 全部按 Google / (c) 逐段挑?

规则:

  • 默认:不做隐式排序——任何跨来源的段差异都报告为冲突
  • 仅当用户选择 (c) 时,AI 才会逐段过一遍
  • 字段级冲突不在范围内——只做段级
  • 三个或以上同 kind 选择不支持——请用户收敛到最多两个

融合后 spec 的来源说明:当发生融合时(任何多选情况),生成的 <project>/templates/design_spec.md 会在其 H1 标题正下方带一个来源说明块:

markdown
> **融合来源:**
> - deck: `templates/decks/招商银行/` (基底)
> - brand: `templates/brands/anthropic/` (识别覆盖)
> - layout: `templates/layouts/academic_defense/` (结构覆盖)
> - 已解决冲突:配色取自 anthropic(用户选了 a)

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/waterdjiang/wattter_openskills/wtt-course-pptx-builder/badge)](https://verified-skill.com/skills/waterdjiang/wattter_openskills/wtt-course-pptx-builder)

Something wrong with this skill or its page? Tell us.