Skip to content

Repository files navigation

Presentation Speaker Notes

把已经做好的 PowerPoint,变成真正能讲的逐页演讲稿

先理解整套演示,再生成逐页讲稿;只把干净、可朗读的正文写入 PowerPoint 备注,并在交付前重新打开验证。

Release Python Tests Codex Skill PowerPoint License

下载 v1.0.0 · 中文用户手册 · 版本说明 · Skill 定义


presentation-speaker-notes 是一个 Codex Skill 和 Python CLI。它接收已有的 .pptx,创建一份新的、可继续编辑的 PowerPoint,并为每一页写入与听众、时长、页面角色和表达风格匹配的演讲者备注。

它不是“逐页把文字扩写一遍”。系统会先分析整套演示的目标、章节、叙事和风险,再分配时长、生成 Slide Brief、写逐页讲稿、检查跨页一致性,最后才接触 PowerPoint 备注区。

为什么需要它

普通的 PPT 讲稿生成很容易出现四类问题:

  • 每一页各写各的,整套演示没有叙事;
  • 把标题、编号和页面文字机械念一遍;
  • “进一步看”“这里可以看到”等模板词跨页重复;
  • 把建议时间、备用稿、模型状态和“待复核”一起塞进备注。

本项目把“内容工作台”和“最终讲稿”分开。质量报告可以复杂,但 PowerPoint 备注必须简单:默认只包含现场可以直接朗读的 main_script 正文。

工作方式

flowchart LR
    A["输入 PPTX"] --> B["预检与安全复制"]
    B --> C["提取文字、表格、图表与已有备注"]
    C --> D["渲染页面并理解整套叙事"]
    D --> E["分配时长与解析表达风格"]
    E --> F["Slide Brief + 三层讲稿"]
    F --> G["事实、口语、时长与一致性复核"]
    G --> H["只写入最终主讲稿"]
    H --> I["重新打开并验证新 PPTX"]
Loading

文件处理和模型推理被刻意分层:确定性代码负责复制、解析、Schema、备注写入和完整性验证;模型只负责语义理解与语言生成。即使生成内容听起来流畅,也不能绕过文件安全和交付门禁。

核心能力

能力 具体行为
整套理解 先识别目标、章节、叙事弧、页面角色、缺口、重复与风险,再逐页写稿
讲稿模式 支持 verbatim 逐字稿、outline 提纲和 hybrid 混合模式
三层脚本 主讲稿、可选扩展稿、时间不足时的压缩稿分别保存
时长控制 按总时长、章节和单页要求分配秒数,并估算实际朗读时间
风格引擎 10 个 0–100 表达维度、10 个预设、自然语言偏好与逐页覆盖
内容边界 strictexplanatoryresearch_enhanced 三种模式
备注策略 replacepreservemerge,正式交付默认 replace
局部修订 可按页码或章节重试,随后重新执行整套一致性检查
安全交付 不覆盖源文件;验证页数、顺序、Slide XML、关系、Notes 拓扑和备注正文
可恢复运行 使用源文件、配置、Prompt、Schema、资源和实现指纹判断缓存是否仍然有效

Speaker Style Engine

风格不是一个模糊的“更专业一点”。系统使用以下十个可审计维度:

professionalismhumordetailstorytellingemotionalityinteractionpersuasivenessaccessibilitydirectnesspace

内置预设覆盖正式汇报、管理层简报、深度讲解、培训、销售提案、学术表达、故事化和自然互动等场景。页面类型、章节和单页可以继续覆盖,但医疗安全、临床数据、风险和合规规则始终最后生效。

五分钟开始

方式一:作为 Codex Skill 使用

GitHub Releases 下载 presentation-speaker-notes-1.0.0-skill.zip,解压后把其中的 presentation-speaker-notes/ 放入 Codex Skills 目录:

mkdir -p ~/.codex/skills
cp -R presentation-speaker-notes ~/.codex/skills/
cd ~/.codex/skills/presentation-speaker-notes
python -m pip install .

然后在 Codex 中附上 .pptx,直接说:

请使用 $presentation-speaker-notes 处理我附上的 PPTX。

听众:第一次了解这个主题的非专业听众
总时长:20 分钟,预留 3 分钟问答
讲稿:混合模式,专业但不生硬,结论先行
内容边界:只使用 PPT 和我提供的材料,不补充未经核验的外部事实
已有备注:替换
交付:生成新的 PPTX,源文件不要修改;备注区只保留最终可朗读正文

更完整的对话模板、逐页反馈方式和验收清单见 中文用户手册

方式二:安装 CLI

直接安装 Release wheel:

python -m pip install \
  https://github.com/Nathanielguo/presentation-speaker-notes/releases/download/v1.0.0/presentation_speaker_notes-1.0.0-py3-none-any.whl

或从源码安装:

git clone https://github.com/Nathanielguo/presentation-speaker-notes.git
cd presentation-speaker-notes
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e '.[dev]'

检查安装:

presentation-notes --version
presentation-notes --help

运行完整项目

准备环境变量:

cp .env.example .env
# 在 .env 中填写 OPENAI_API_KEY
set -a
source .env
set +a

运行模型驱动的完整流程:

presentation-notes run \
  --input ./deck.pptx \
  --config ./examples/config-product-presentation.json \
  --provider openai \
  --output ./output

解析自然语言表达偏好:

presentation-notes style \
  --text '结论先行,产品部分详细一些,数据页严谨,不要像念报告' \
  --preset professional_engaging \
  --output ./style-preference.json

需要单独控制流程时,可以使用九个子命令:

inspect  render  analyze  generate  retry
inject   validate style    run

例如只重写第 2、4 页:

presentation-notes retry \
  --project ./output/<project-id> \
  --slides 2,4

离线工程测试

没有模型凭据时,可以验证 PPTX 复制、解析、数据合同、备注写入和重新打开链路:

presentation-notes run \
  --input ./tests/fixtures/executive-review-synthetic.pptx \
  --config ./examples/config-executive-review.json \
  --provider offline \
  --artifact-purpose engineering_test \
  --project-id offline-smoke-test \
  --output ./output

离线产物只会写入 engineering-preview/,文件名包含 NON_DELIVERABLE。它可以证明工程链路,不代表真实模型的视觉理解或讲稿质量,也不能生成正式交付文件。

输出内容

每次运行创建独立项目,并先复制源文件:

output/<project-id>/
├── source/original.pptx
├── slides/                         # 页面图、原始文字、表格、图表和元数据
├── deck-manifest.json
├── deck-analysis.json
├── slide-briefs.json
├── speaker-profile.json
├── style-resolution.json
├── style-report.json
├── speaker-script.md               # 只包含最终主讲稿
├── speaker-script-main.md
├── speaker-script-optional-expansion.md
├── speaker-script-compressed.md
├── quality-report.json
├── quality-report.md
├── run-log.jsonl
├── final/*_with-speaker-notes_*.pptx
└── engineering-preview/*_NON_DELIVERABLE.pptx

正式 PowerPoint 备注默认严格等于对应页面的最终主讲稿,不包含:

  • 建议时间或倒计时;
  • 备用扩展稿或压缩稿;
  • “待复核”、风险标记或置信度;
  • provider、模型、缓存或工程诊断;
  • 互动建议、转场标签或内部字段名。

这些信息保留在独立 JSON/Markdown 报告中,不污染现场讲述正文。

内容安全

模式 允许范围 典型场景
strict 只使用 PPT、已有备注和用户提供的材料 医疗、合规、财务、正式汇报
explanatory 可增加解释、类比和过渡,但不能添加外部事实 培训、产品介绍、一般科普
research_enhanced 只有显式允许并提供、核验来源后才使用 需要外部证据的演示

医疗和患者教育默认采用保守边界。系统不得虚构研究、指南、适应证、剂量、禁忌、疗效、安全结论或诊疗建议;高风险声明依赖不可读内容时,正式写入会被阻断。

渲染依赖

  • Python 3.11+
  • PowerPoint .pptx 文件;不支持旧 .ppt
  • LibreOffice (soffice / libreoffice) 用于可移植页面渲染
  • Poppler (pdftoppm) 用于 PDF 到页面图转换
  • 模型凭据仅在选择外部模型 provider 时需要

PowerPoint 本身不是包级备注写入与验证的硬依赖,但最终交付仍建议在目标电脑的 Microsoft PowerPoint 演讲者模式中打开一次。第三方库无法完整模拟每个字体、动画、嵌入对象和桌面版本。

东亚文字渲染采用保守策略:原始 slide.png 始终保留;只有确认目标区域为空、坐标映射可靠且不存在可见字形证据时,才生成单独的 slide-semantic-overlay.png。语义辅助图会明确标记降级,不能冒充 PowerPoint 原生保真。

验证状态

Version 1.0.0 的发布证据:

  • 170 passed,覆盖单元、集成、端到端和发布包合同;
  • Python 源码编译通过;
  • 官方 Skill quick_validate.py 校验通过;
  • wheel 在独立虚拟环境中安装并验证 CLI 与 33 项运行时资源;
  • Skill ZIP 解压后再次完成结构校验与源码编译;
  • 真实 25 页 ZEISS PPTX 完成离线工程链路、Notes 精确投影和包级重新打开验证;
  • offline provider 的正式交付阻断已验证有效。

本次发布没有使用真实在线模型凭据完成内容质量验收。因此可确认的是工程链路、数据合同、文件安全和交付门禁;不能据此宣称离线文案等价于真实多模态模型质量。

运行测试:

pytest
python -m compileall src

隐私与数据处理

  • PPTX 文件默认在本地复制、解析、写入和验证;
  • 只有显式选择外部 provider 时,才会发送模型所需的最小页面上下文;
  • API Key 只从环境变量读取,不应写入配置、日志、报告或仓库;
  • 页面截图、已有备注、客户名称和患者信息都应视为敏感数据;
  • 处理受监管或机密材料前,应核对模型服务商的数据保留和区域策略;
  • 外部模型调用前,应尽可能去标识化个人信息和受保护健康信息。

项目结构

presentation-speaker-notes/
├── SKILL.md                         # Codex Skill 行为合同
├── agents/openai.yaml              # Skill 展示与默认提示
├── src/presentation_speaker_notes/ # Python 包与 CLI
├── config/                          # 默认配置和预设
├── schemas/                         # 可验证的数据合同
├── prompts/                         # 分阶段模型提示
├── references/                      # 讲稿、时长、风格与安全规则
├── examples/                        # 场景配置示例
├── scripts/build_release.py         # 可复现 Skill 打包器
└── tests/                            # 单元、集成、E2E 与合成 PPTX fixtures

已知边界

  • 只支持 .pptx;加密、损坏和旧 .ppt 文件需先转换或修复;
  • SmartArt、动画顺序、嵌入对象、音视频、公式和截图文字可能无法完整提取;
  • 渲染结果受操作系统、字体和 LibreOffice 版本影响;
  • 自然语言风格解析是有限、确定性的规则系统,不是通用语义解释器;
  • 风格匹配分数是工程指标,不是听众研究或个人声音模仿证明;
  • 自动网页检索和自主来源核验不属于 Version 1.0;
  • 包级验证不能替代在目标 PowerPoint 环境中的最终人工检查。

贡献与反馈

欢迎通过 Issues 提交:

  • 无法解析或验证的 PPTX 兼容性问题;
  • 可复现的讲稿污染、跨页重复或时长控制问题;
  • 渲染器、字体和 Notes Slide 兼容性结论;
  • 新的页面类型、场景预设或安全边界建议。

提交问题时请去除敏感信息,并尽量提供最小可复现文件、运行环境、命令、错误信息和预期行为。不要上传客户、患者或内部机密原始演示文稿。

许可说明

本仓库当前未附带开源许可证。公开可见不等于自动授予复制、修改、分发或商业使用权;如需使用、二次开发或再分发,请先联系项目所有者取得授权。后续如确定开源范围,将在单独的许可证文件中明确。


Built for presentations that must be spoken, reviewed, and trusted — not merely generated.

About

Codex Skill and Python CLI that turns PPTX decks into validated, timed speaker notes without overwriting the source.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages