Skip to main content

Open-source PPT/PPTX preflight checks for AI-generated PowerPoint files.

Project description

PPTLint

Do not send the PowerPoint yet. Problems that stay invisible on your laptop often appear on your client's computer or in the meeting room.

简体中文 · Product site · 12 before/after cases · Current 83 → 100 proof

CI Pages PyPI License: MIT

The same editable PowerPoint under the current rules, from 83 to 100

Not “is it beautiful?” — “is it safe to send?”

A deck can look finished and still fail at handoff:

  • a substituted font wraps the title and clips the final line;
  • two text boxes overlap only on another computer;
  • the entire slide is one image, so a recipient cannot edit one number;
  • notes, hidden slides, comments, author data, or local file links leave with the deck;
  • a missing package part triggers a PowerPoint repair warning;
  • duplicated media turns nine slides into an 86 MB file.

PPTLint runs locally, reads the .pptx, and writes offline HTML and JSON reports. It does not upload the deck, call a model, modify the source, or collect telemetry.

Start in one minute

Give this to Codex, Claude Code, or another coding agent:

Install PPTLint and check whether this PowerPoint is ready to send to a client.
Separate must-fix items from human-review suggestions, name the affected slides,
and give me the exact PowerPoint steps. Do not modify the source file.

Or run it directly:

uvx pptlint check output.pptx --scenario present

present is the default meeting-room scenario. Use screen for close screen reading or document for report-like decks.

Each run writes:

  • pptlint-report.html — an offline human report that explains consequences and next steps;
  • pptlint-report.json — stable evidence for agents, CI, and integrations.

Inspect the evidence first

In the published nine-slide Proof Loop, 103 items are no longer reported, 21 still need review, three new low-confidence reminders appear, and no new high-confidence problem appears. A score of 100 is a scoring result, not an aesthetic grade or a zero-risk guarantee.

Three outcomes people can act on

Result What to do
Ready to send No high-confidence delivery problem was found; still perform the final human preview
Check before sending Open the named slides and confirm suggestions that need context or human judgment
Fix before sending Resolve the listed blocker, save a separate delivery copy, and check again

Repeated object-level findings are grouped in HTML so 200 instances of one root cause do not become 200 noisy tasks. Full evidence remains in JSON.

Prove the edit

Keep the original and edit a separate copy:

uvx pptlint proof before.pptx after.pptx \
  --scenario present --output comparison

The proof pack separates resolved, remaining, and newly introduced findings.

Create a repair brief for a coding agent:

uvx pptlint plan pptlint-report.json --output repair-brief.md

The brief tells the agent to preserve the source and not damage an existing design merely to raise a score.

Team delivery policy

uvx pptlint policy init pptlint-policy.yml
uvx pptlint check output.pptx --policy pptlint-policy.yml

Policies can define approved fonts and colors, minimum type size, and rules for external links, notes, hidden slides, and alt text. Unknown policy fields fail explicitly instead of being ignored.

Scope and boundaries

Delivery question What PPTLint checks
Will the file open? PPTX package structure, relationships, content types, media, slide list, and real rendering
Will people see it? Off-canvas text, substantial overlap, clipping risk, type size, contrast, and aspect ratio
Will it survive another computer? Fonts, external files, motion, transitions, audio, video, and notes relationships
Can someone edit it? Native text, tables, charts, shapes, and full-slide image coverage
Is it safe to send? Notes, comments, hidden slides, author data, local files, and external links
Is handoff practical? Package size, duplicated media, embedded fonts, and dynamic-content facts

PPTLint does not judge aesthetics, persuasion, or factual accuracy. Low-confidence hints never block delivery. Need to create or repair the deck first? Use Ultimate PPT Master, then run PPTLint as the independent check.

GitHub Actions

- uses: kdnsna/pptlint@v0
  with:
    path: output.pptx
    profile: ai-generated
    renderer: wireframe

Reports are uploaded even when the check fails.

Stable interfaces and 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

decklint remains as a compatibility alias. All new documentation and commands use pptlint.

MIT · Local · Read-only · No upload · No model · No telemetry

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

pptlint-0.7.1.tar.gz (3.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pptlint-0.7.1-py3-none-any.whl (57.4 kB view details)

Uploaded Python 3

File details

Details for the file pptlint-0.7.1.tar.gz.

File metadata

  • Download URL: pptlint-0.7.1.tar.gz
  • Upload date:
  • Size: 3.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pptlint-0.7.1.tar.gz
Algorithm Hash digest
SHA256 27a94b7dc748adc23f97bc9cf8ee954d2abe0c3732140254afb6aabdae0b4e25
MD5 7e96c4c5db4c33858d8e5cfceb322825
BLAKE2b-256 b54d6717456f0698fb77fadc1eea920f771be8b15dd45d0ac908091e40f69310

See more details on using hashes here.

Provenance

The following attestation bundles were made for pptlint-0.7.1.tar.gz:

Publisher: publish-pypi.yml on kdnsna/pptlint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pptlint-0.7.1-py3-none-any.whl.

File metadata

  • Download URL: pptlint-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 57.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pptlint-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 350beb4071733797d0cd3db39c627cf2bca3385dd4b31f820fdb5a6558d66957
MD5 dc18656d2cbad7039f2aa67486d7d181
BLAKE2b-256 f33c8bc46f3a15390a962582a403825ffc7f97e75e974a105da6a9c535c1f0c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pptlint-0.7.1-py3-none-any.whl:

Publisher: publish-pypi.yml on kdnsna/pptlint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page