Local, read-only preflight checks for PowerPoint delivery.
Project description
🏠 产品首页 · 🔬 案例实验室 · 📈 真实 Proof Loop · English
|
🏠
|
🔬
|
📈
|
同一份可编辑 PPT,交付修复前(左)与修复后(右)——按当前规则从 83 到 100。点击查看 12 个前后对比案例 →
它解决的不是“好不好看”,而是“能不能放心发”
一份 PPT 在自己电脑上看着正常,并不代表已经适合交付:
- 会上出丑:字体替换后标题换行,最后一行被截掉,两个文本框压在一起;
- 换电脑变样:特殊字体、外部 Excel、音视频或动画离开原电脑后失效;
- 别人无法接手:整页其实是一张图,对方想改一个数字也选不中;
- 内部内容被带出去:讲者备注、隐藏页、批注、作者信息或本地链接仍留在文件里;
- 文件本身不稳:包内对象缺失、重复媒体过多,打开时弹出修复或等待很久。
PPTLint 在本机只读检查 .pptx,生成离线 HTML 与 JSON 报告。它不上传文件、不调用模型、不修改源文件、不收集遥测数据。
一分钟开始
把下面这句话发给 Codex、Claude Code 或其他 Coding Agent:
请安装 PPTLint,检查这份 PowerPoint 是否适合发给客户。
按“必须修、建议看、可以忽略”告诉我先处理哪几页,
并给出在 PowerPoint 里的具体操作。不要修改原文件。
或者直接运行:
uvx pptlint check output.pptx --scenario present --lang zh-CN
希望检查完成后直接打开本地报告,可以使用:
uvx pptlint start output.pptx --scenario present --lang zh-CN
排查安装、Python 或真实渲染器问题时运行 uvx pptlint doctor;反馈问题时优先附上该诊断结果,不要上传原 PPT。
默认 present 代表会议室投屏。屏幕阅读或文档型 PPT 可改用:
uvx pptlint check output.pptx --scenario screen --lang zh-CN
uvx pptlint check output.pptx --scenario document --lang zh-CN
每次检查都会生成:
pptlint-report.html:给人看的离线报告,先说后果,再说处理方法;pptlint-report.json:给 Agent、CI 和其他工具读取的稳定数据。
完整报告可能包含页面预览、文字和文档属性,应与原 PPT 同级保护。如需提交问题或发给外部协作者,先生成安全分享版:
uvx pptlint check output.pptx --lang zh-CN --report-mode shareable --output pptlint-safe
安全分享版会隐藏文件名、页面标题、预览和对象级证据,但保留规则、结论和处理步骤。
先看证据,再决定要不要用
- 🏠 产品首页:30 秒理解 PPTLint 在交付前帮你挡住什么。
- 🔬 案例实验室:12 个交付风险前后对比,覆盖投屏、换电脑、隐私、可编辑交接、文件体积和团队规范。
- 📈 真实 Proof Loop:同一份 9 页可编辑 PPT 按当前规则从 83 → 100,修改前后文件、完整报告和机器可读数据全部公开。
- 修改前 PPTX 与 修改后 PPTX。
- 检查方法档案:说明 PPTLint 如何面对不同 AI PPT 项目。
真实 Proof Loop 使用同一份 9 页可编辑 PPT。报告中的 103 项问题和提醒得到处理,修改后没有新增高置信问题。100 分只是规则检查结果,不是审美满分,也不是绝对零风险。
报告直接给出三种结论
| 结论 | 普通用户该做什么 |
|---|---|
| ✅ 可以交付 | 没有发现高置信的交付问题,仍应做最终人工预览 |
| 👀 建议检查 | 打开报告点名的页面,确认低置信或需要业务判断的内容 |
| ⛔ 暂勿交付 | 先处理报告列出的阻断问题,再另存副本并复检 |
同一条规则在 200 个对象上重复出现时,HTML 会合并成一个问题组;完整对象级证据仍保留在 JSON 中。PPTLint 不会用几百条重复提醒制造焦虑。
修改后生成完整对比证据
始终保留原文件,只修改独立副本:
uvx pptlint proof before.pptx after.pptx \
--scenario present --lang zh-CN --output comparison
它会生成修改前、修改后和对比报告,明确列出:已经处理、仍然存在、修改后新增的问题。
如果要把修复工作交给 Agent:
uvx pptlint plan pptlint-report.json --format json --output repair-plan.json
uvx pptlint plan pptlint-report.json --adapter generic-agent --lang zh-CN --output repair-brief.md
uvx pptlint plan pptlint-report.json --adapter ultimate-ppt-master --lang zh-CN --output ultimate-brief.md
uvx pptlint plan pptlint-report.json --adapter powerpoint-copilot --lang zh-CN --output copilot-prompt.md
修复计划会覆盖报告中的全部问题,而不是只取前三项。每项都说清位置、实际后果、谁适合处理以及复检条件;未知规则一律要求人工判断,不会擅自编造修改指令。
团队交付规范
生成一份安全的 YAML 模板:
uvx pptlint policy init pptlint-policy.yml
uvx pptlint check output.pptx --policy pptlint-policy.yml --lang zh-CN
策略可以约束批准字体、品牌色、最小字号、外部链接、备注、隐藏页和图片说明。未知字段会直接报错,不会悄悄忽略。
确有业务原因需要保留例外时,在策略中记录规则、页面、原因和到期日:
exceptions:
- ruleId: readability.small-font
slides: [12]
reason: 法律免责声明已经材料责任人确认
expires: 2026-12-31
生效和过期的例外都会记录在报告中;没有理由的例外会被拒绝。
检查范围与边界
| 你真正关心的问题 | PPTLint 检查什么 |
|---|---|
| 文件能否正常打开 | PPTX 包结构、关系、内容类型、媒体、页面列表和真实渲染 |
| 会议室里是否看得清 | 越界、实质重叠、裁切风险、字号、对比度和页面比例 |
| 换电脑后是否稳定 | 字体、外部文件、动画、转场、音视频和备注关系 |
| 别人能否继续编辑 | 原生文字、表格、图表、形状,以及整页图片覆盖 |
| 是否把内部内容带出去 | 备注、批注、隐藏页、作者信息、本地文件和外部链接 |
| 文件是否便于交接 | 文件体积、重复媒体、嵌入字体和动态内容事实 |
PPTLint 不判断审美、论点、事实正确性或说服力;低置信提醒不会阻断交付。如果要先生成或人工修复 PPT,可以使用 Ultimate PPT Master,再由 PPTLint 独立复检。
GitHub Actions
- uses: kdnsna/pptlint@v1
with:
path: output.pptx
profile: ai-generated
renderer: wireframe
即使检查没有通过,HTML 和 JSON 报告仍会上传。Action 默认生成 shareable 安全分享版;仅在受控仓库确需页面预览时设置 report-mode: full。
稳定接口与开发
- 当前报告:
pptlint-report/v2 - 旧版报告:
decklint-report/v1 - 前后对比:
decklint-comparison/v1 - 退出码
0:完成;1:需要修改;2:文件或运行错误。
uv venv --python 3.13
uv pip install -e '.[dev]'
PYTHONPATH=src .venv/bin/python -m pytest
.venv/bin/ruff check src tests tools
decklint 作为兼容别名继续保留;所有新用户文档和命令统一使用 pptlint。
MIT · 本地 · 只读 · 不上传 · 不调用模型 · 不收集遥测
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pptlint-1.1.0.tar.gz.
File metadata
- Download URL: pptlint-1.1.0.tar.gz
- Upload date:
- Size: 3.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d10cba02abe4a35bf593d66ab4a09a6c9a5d5b033ecf40d5c2a6d5ffbe967f69
|
|
| MD5 |
548b0c7cff0355e771aeaae98e35a382
|
|
| BLAKE2b-256 |
a4dd80d1cca54a28fe9e0b3bb806b76994a98a17149a33746d6aee5c81e085d7
|
Provenance
The following attestation bundles were made for pptlint-1.1.0.tar.gz:
Publisher:
publish-pypi.yml on kdnsna/pptlint
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pptlint-1.1.0.tar.gz -
Subject digest:
d10cba02abe4a35bf593d66ab4a09a6c9a5d5b033ecf40d5c2a6d5ffbe967f69 - Sigstore transparency entry: 2152439020
- Sigstore integration time:
-
Permalink:
kdnsna/pptlint@7950222bac4754758a97fd2e16789652da202dbf -
Branch / Tag:
refs/heads/main - Owner: https://github.com/kdnsna
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@7950222bac4754758a97fd2e16789652da202dbf -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file pptlint-1.1.0-py3-none-any.whl.
File metadata
- Download URL: pptlint-1.1.0-py3-none-any.whl
- Upload date:
- Size: 68.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1fed67505add51805c1c1072ad8b189c1c4add41d3e3969b21d14d0a5802ad1c
|
|
| MD5 |
93ab80299de41b90c8233970167a65d3
|
|
| BLAKE2b-256 |
2ca10aaea74be0e6655d361189dcaf254101b4527ede0899bd6bc1a31365e908
|
Provenance
The following attestation bundles were made for pptlint-1.1.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on kdnsna/pptlint
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pptlint-1.1.0-py3-none-any.whl -
Subject digest:
1fed67505add51805c1c1072ad8b189c1c4add41d3e3969b21d14d0a5802ad1c - Sigstore transparency entry: 2152439052
- Sigstore integration time:
-
Permalink:
kdnsna/pptlint@7950222bac4754758a97fd2e16789652da202dbf -
Branch / Tag:
refs/heads/main - Owner: https://github.com/kdnsna
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@7950222bac4754758a97fd2e16789652da202dbf -
Trigger Event:
workflow_dispatch
-
Statement type: