keynote-parser
A tool for manipulating Apple Keynote presentation files.
What it is and what it does
keynote-parser is a command-line tool and Python library that converts Apple Keynote presentations from their proprietary binary format into editable YAML files and back. Keynote stores presentations as zip archives containing Snappy-compressed Protobuf files; this tool unpacks those into human-readable YAML, making presentations versionable in Git and scriptable via text editors or external tools. You can unpack a presentation, modify text or images in the resulting directory structure, then re-pack it into a working .key file.
The package is built on top of protobuf, python-snappy, and PyYAML to handle decompression, deserialization, and format conversion. It includes a CLI with commands to unpack, pack, list archive contents, dump individual files, and perform bulk text or image replacement. The tool is actively maintained and supports Keynote version 14.4 as of April 2025, though backwards compatibility between keynote-parser versions and older Keynote file formats is not yet fully supported.
Use it for:
- Version Keynote presentations in Git with human-readable diffs instead of binary blobs.
- Automate text replacement in Keynote files—e.g., update figures or data from external databases before presenting.
- Batch-replace images across multiple presentations using a JSON replacements file.
- Extract and inspect the structure and metadata of Keynote files programmatically.
- Integrate Keynote editing into CI/CD pipelines or content generation workflows.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Unpack, edit, and re-pack Apple Keynote .key files by converting their proprietary compressed binary format into editable YAML, then back into working Keynote archives.
Yes, if you need to version or automate Keynote presentations. The package is actively maintained, has low install friction, uses a permissive MIT license, and solves a real problem—making binary Keynote files editable and diffable. Be aware that backwards compatibility between keynote-parser versions is limited; if you upgrade the tool, older unpacked YAML files may not re-pack correctly. Requires libsnappy system libraries.
Install
keynote-parser on PyPI
pip
pip install keynote-parseruv
uv add keynote-parserpoetry
poetry add keynote-parserInstalling keynote-parser
Before you install
Low install friction; pure Python wheel with seven runtime dependencies including protobuf, python-snappy, and PyYAML. Repository is active with a recent release (6 days old) and 209 stars. Requires Python 3.9 or later.
License in practice
MIT License (permissive) allows unrestricted use, modification, and distribution with minimal restrictions—suitable for both commercial and personal projects.
Quickstart
pip install keynote-parser
keynote-parser unpack MyPresentation.key
keynote-parser pack ./MyPresentation/
Requires libsnappy development headers; install via brew install snappy (macOS), apt-get install libsnappy-dev (Linux), or equivalent for your OS.
Verify before relying
- Whether the package can reliably handle Keynote files from versions older than 14.4 or newer than the current release.
- Performance characteristics when working with large presentations or high-resolution images.
- Whether Git diffs on unpacked YAML files remain stable across keynote-parser version upgrades.
Package facts
| License | MIT License (permissive) |
| Python support | supports the current Python release (>=3.9) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 7 — protobuf, tqdm, python-snappy, PyYAML, Pillow, future, colorama |
| Maintenance | actively maintained — 6 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 74,420/month — #14,838 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: keynote_parser-1.14.5.0-py3-none-any.whl
Keywords: keynote, macOS, apple, presentation, powerpoint
Tags
More Build Tools packages
Provides reusable utilities for Python…
permissive · top 100 on PyPI
tqdmWraps any iterable to display a real-time…
copyleft · top 100 on PyPI
pippip is the standard installer for Python…
permissive · top 100 on PyPI
hatchlingHatchling is a standards-compliant Python build…
permissive · top 100 on PyPI
grpcio-toolsGenerates Python gRPC service stubs and message…
permissive · top 1,000 on PyPI
pre-commitpre-commit is a framework for installing and…
permissive · top 1,000 on PyPI
numbers-parserRead, edit, and write Apple Numbers spreadsheet…
permissive · top 5,000 on PyPI
yamlloaderProvides specialized loaders and dumpers for…
permissive · top 15,000 on PyPI
mlx-whisperRuns OpenAI's Whisper speech recognition models…
permissive · top 15,000 on PyPI
yamlordereddictloaderProvides YAML loaders and dumpers for PyYAML…
permissive · top 15,000 on PyPI
yamlcoreAdds YAML 1.2 Core Schema support to PyYAML,…
permissive · top 15,000 on PyPI
coremltoolsConverts trained machine learning models from…
permissive · top 5,000 on PyPI
pyimg4PyIMG4 parses Apple's Image4 format through a…
permissive · top 15,000 on PyPI
mlx-audioMLX-Audio provides text-to-speech,…
permissive · top 15,000 on PyPI
sigstore-protobuf-specsProvides Python protobuf message definitions…
permissive · top 15,000 on PyPI