Open-source PPT/PPTX preflight checks for AI-generated PowerPoint files.
Project description
PPTLint
Check an AI-generated PowerPoint before you send or present it.
简体中文 · Live example · Before/after report
AI tools can make a PowerPoint quickly. They can also leave behind missing files, clipped text, overlapping text boxes, unreadable type, flattened slides, speaker notes, comments, and personal information.
PPTLint checks the .pptx on your computer and answers three questions:
- Ready to send — no high-confidence delivery problem was found.
- Check before sending — open the named slides and confirm the highlighted items.
- Fix before sending — fix the listed problem before sending the file.
PPTLint does not upload the presentation, call an AI model, or change the source file.
Ask your coding agent
Copy this into Codex, Claude Code, or another coding agent:
Install PPTLint and check whether this AI-generated PowerPoint is ready to send.
Show me the slides I must fix first and the exact PowerPoint steps for each one.
Run it yourself
Until the first PyPI release is verified, run the release wheel:
uvx --from https://github.com/kdnsna/pptlint/releases/download/v0.3.1/pptlint-0.3.1-py3-none-any.whl \
pptlint check output.pptx --profile ai-generated
PPTLint writes two files:
pptlint-report.html— an offline report for people;pptlint-report.json— the same result for agents and automation.
The first screen shows whether the file is ready and the three most important actions. The numerical score is secondary and is intended only for comparing the same presentation before and after changes.
See real examples
- Ready example
- Problem example
- Real editable PowerPoint improvement: 49 → 100
- Before PPTX and after PPTX
- Open method for checking five AI PowerPoint projects
Check changes
Keep the original file, check a separate edited copy, and compare the two reports:
pptlint check before.pptx --output before
pptlint check after.pptx --output after
pptlint compare before.json after.json --output comparison
The comparison separates problems that were fixed, problems that remain, and problems introduced by the edit.
Use it in GitHub Actions
- uses: kdnsna/pptlint@v0
with:
path: output.pptx
profile: ai-generated
renderer: wireframe
The reports are uploaded even when the check fails.
What PPTLint checks
| User concern | Checks |
|---|---|
| Will it open correctly? | PPTX package, relationships, content types, media, slide list, real rendering |
| Will it fail on screen? | Off-slide text, substantial text overlap, explicit clipping risk, small type, low contrast, unusual page size |
| Can someone edit it later? | Full-slide images and native text, table, chart, shape coverage |
| Is it safe to send? | Notes, comments, hidden slides, author information, external files and links |
Low-confidence hints never block delivery. PPTLint does not judge whether a presentation is beautiful, persuasive, or factually correct.
Stable interfaces
- Current report:
pptlint-report/v2 - Previous report:
decklint-report/v1 - Comparison format:
decklint-comparison/v1 - Exit code
0: completed;1: changes required;2: file or runtime error.
The previous decklint command remains available through v0.4. Existing v1 reports can still be compared.
Development
uv venv --python 3.13
uv pip install -e '.[dev]'
PYTHONPATH=src .venv/bin/python -m pytest
.venv/bin/ruff check src tests tools
PPTLint is local, read-only, model-free, telemetry-free, and MIT licensed.
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-0.3.1.tar.gz.
File metadata
- Download URL: pptlint-0.3.1.tar.gz
- Upload date:
- Size: 4.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d5f462dcd7a74721724a639aa604787c60299a99cc19d3acab16eb114ddf697
|
|
| MD5 |
7a3778fbd9aebeb88f7ecb8da1df089a
|
|
| BLAKE2b-256 |
30ff743248e8b04d011bcde3903f9a920f8bb068cc0453c9dad9600093b70773
|
Provenance
The following attestation bundles were made for pptlint-0.3.1.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-0.3.1.tar.gz -
Subject digest:
4d5f462dcd7a74721724a639aa604787c60299a99cc19d3acab16eb114ddf697 - Sigstore transparency entry: 2144123122
- Sigstore integration time:
-
Permalink:
kdnsna/pptlint@329e68482b658a6b060ab1dbf55c287b8ab9ab45 -
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@329e68482b658a6b060ab1dbf55c287b8ab9ab45 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file pptlint-0.3.1-py3-none-any.whl.
File metadata
- Download URL: pptlint-0.3.1-py3-none-any.whl
- Upload date:
- Size: 40.4 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 |
36d89c8b6b7edc9a8ac15cfb3058706ba4ecb05ac585d6626f6fb9ead3bc6c22
|
|
| MD5 |
0a635b02435dd3b804816e135627c5df
|
|
| BLAKE2b-256 |
6882aaace3acfa823f78777e02dac2f70562692202215d084cdfe64e8f87e5c7
|
Provenance
The following attestation bundles were made for pptlint-0.3.1-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-0.3.1-py3-none-any.whl -
Subject digest:
36d89c8b6b7edc9a8ac15cfb3058706ba4ecb05ac585d6626f6fb9ead3bc6c22 - Sigstore transparency entry: 2144123235
- Sigstore integration time:
-
Permalink:
kdnsna/pptlint@329e68482b658a6b060ab1dbf55c287b8ab9ab45 -
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@329e68482b658a6b060ab1dbf55c287b8ab9ab45 -
Trigger Event:
workflow_dispatch
-
Statement type: