Go CLI for inspecting, editing, creating, validating, reviewing, and rendering editable PowerPoint .pptx files.
2
stars
177
commits
Go
primary language
Sep 2, 2026
updated
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.
Download release artifacts and checksums from GitHub Releases.
Install from source:
go install github.com/artpar/puppt/cmd/puppt@latest
Build the local binary:
make build
Puppt 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.
| Command | Slide |
|---|---|
| ![]() |
Use render to produce PNGs from the .pptx itself. The JSON tells you which
slide part was painted and where the images were written.
| Command | Rendered PNGs |
|---|---|
|
![]() ![]()
|
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 | Before / After |
|---|---|
|
Before![]() After
|
| 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> --help
During development, use:
go run ./cmd/puppt --help
Puppt treats .pptx files as structured Open XML packages, not as screenshots.
The normal edit flow is:
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 build
Run the repository verification handoff:
make verify
User workflows:
Capability and status:
Engineering and completion:
The product core, CLI, public API surface, tests, and fixtures are implemented in Go.
177 commits
Go
97.3%
Python
2.6%
Go CLI for inspecting, editing, creating, validating, reviewing, and rendering editable PowerPoint .pptx files.
2
stars
177
commits
Go
primary language
Sep 2, 2026
updated
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.
Download release artifacts and checksums from GitHub Releases.
Install from source:
go install github.com/artpar/puppt/cmd/puppt@latest
Build the local binary:
make build
Puppt 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.
| Command | Slide |
|---|---|
| ![]() |
Use render to produce PNGs from the .pptx itself. The JSON tells you which
slide part was painted and where the images were written.
| Command | Rendered PNGs |
|---|---|
|
![]() ![]()
|
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 | Before / After |
|---|---|
|
Before![]() After
|
| 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> --help
During development, use:
go run ./cmd/puppt --help
Puppt treats .pptx files as structured Open XML packages, not as screenshots.
The normal edit flow is:
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 build
Run the repository verification handoff:
make verify
User workflows:
Capability and status:
Engineering and completion:
The product core, CLI, public API surface, tests, and fixtures are implemented in Go.
177 commits
Go
97.3%
Python
2.6%