Puppt is a Go CLI for inspecting, editing, validating, reviewing, and
rendering editable PowerPoint .pptx files.
It is built for agent and automation workflows where a deck must stay editable: Puppt reads the PowerPoint Open XML package, plans mutations before writing, rejects ambiguous or unsupported edits before mutation, and preserves unrelated deck content wherever the package structure allows it.
- Inspect decks and return structured facts as JSON: slide order, titles, visible text, notes, media, layouts, masters, metadata, and unsupported content signals.
- Plan targeted edits without writing output, so agents and humans can review what will change before mutation.
- Edit supported content, including text, notes, metadata, slide order, slide add/delete/move/duplicate operations, image replacement, and simple editable shape additions.
- Validate package structure and expected content after edits.
- Review changes by combining prior command results, inspection facts, skipped items, unsupported items, and validation status.
- Render a slide to PNG through Puppt-owned Go code for visual review and diagnostics.
Download release artifacts and checksums from GitHub Releases.
Install from source:
go install github.com/artpar/puppt/cmd/puppt@latestBuild the local binary:
make buildPuppt works best as a tight loop: inspect the real .pptx, plan a targeted
change, write a new editable deck, review the result, and render the slides that
need a visual check.
The screenshots below are committed render outputs from the local renderer
corpus; use the same commands with any media-heavy .pptx.
Use inspect to turn a slide into stable JSON targets: text object IDs, text
runs, and media relationship targets.
Use render to produce PNGs from the .pptx itself. The JSON tells you which
slide part was painted and where the images were written.
Use the object id from inspect to mutate one editable object without touching
unrelated slide content.
Save this as .tmp/readme-edit-visual/replace-title.json:
| Command | Use |
|---|---|
inspect |
Read a .pptx deck and return structured facts. |
plan |
Resolve targets and validate an edit request without writing output. |
edit |
Apply supported targeted edits and write a new .pptx. |
validate |
Check package structure and expected content. |
review |
Summarize deck changes for agents and human reviewers. |
render |
Render one slide to a PNG image. |
version |
Print Puppt version information. |
Run command help for exact flags:
puppt --help
puppt <command> --helpDuring development, use:
go run ./cmd/puppt --helpPuppt treats .pptx files as structured Open XML packages, not as screenshots.
The normal edit flow is:
- Inspect the deck to find stable targets.
- Plan the edit and check whether the target is ready, ambiguous, missing, or unsupported.
- Apply the edit only when the plan is supported.
- Validate the written deck.
- Review the result as JSON for downstream agents or human reviewers.
Ambiguous targets and unsupported advanced visual edits are rejected before the deck is mutated. Supported edits are written through Puppt-owned package handling so unrelated parts of the deck stay intact.
puppt render is a Puppt-owned Go renderer. It does not shell out to
LibreOffice, PowerPoint, Keynote, browser renderers, SaaS renderers, or
image-conversion tools.
The renderer currently covers practical static PPTX content including slide dimensions, backgrounds, themes, layouts and masters, placeholders, pictures, common image metadata, shape fills and outlines, connectors, text, bullets, tables, selected shadows/effects, simple diagram fallback drawings, and explicit JSON reports for content that is not painted or only partially painted.
Renderer parity is still in progress. Puppt is useful for visual review and
diagnostics today, but final renderer conformance is not claimed yet. See
docs/RENDERING.md, docs/RENDERER_COMPLETION_GOAL.md, and
docs/RENDERER_COMPLETION_CHECKLIST.md for the current renderer status and
completion path.
Puppt has fixture-backed v1 workflows for inspection, edit planning, supported mutations, image replacement, simple editable additions, validation, review, and rendering. Full production-grade compliance is not claimed yet.
All required v1 command names are implemented: inspect, plan, edit,
validate, review, render, and version.
Run the baseline test suite:
go test ./...Build the local binary:
make buildRun the repository verification handoff:
make verifyUser workflows:
Capability and status:
Engineering and completion:
The product core, CLI, public API surface, tests, and fixtures are implemented in Go.



