Python SDK for the PowerPoint Engine API - generate, edit, merge and PDF-convert PowerPoint decks over HTTP
Project description
PowerPoint Engine — Python SDK
Python client for the PowerPoint Engine API: generate .pptx from Markdown or a structured template, edit / merge / replace inside existing decks, and convert PPTX to PDF — over plain HTTP, no PowerPoint or LibreOffice install needed.
Install
Not on PyPI yet — install from GitHub:
pip install git+https://github.com/powerpoint-engine-api/powerpoint-engine-python.git
Quick start
from powerpoint_engine import PowerPointEngine
engine = PowerPointEngine() # anonymous: works, but files are watermarked
result = engine.generate(markup="""
# Q3 Business Review
## Highlights
- Revenue up 24% QoQ
- 3 new enterprise customers
## Quarterly Numbers
| Region | Q1 | Q2 | Q3 |
|--------|-----|-----|-----|
| EU | 1.0 | 1.2 | 1.4 |
| US | 2.0 | 2.4 | 2.6 |
""", theme="corporate")
engine.download(result, "review.pptx")
Markdown tables become native PowerPoint tables. A fenced ```chart block under a ## heading becomes a real editable chart (col / bar / line / pie / combo with a secondary axis):
## Revenue vs Margin
```chart
type: combo
categories: Q1, Q2, Q3
Revenue: 120, 150, 170
Margin % (line, secondary): 10, 12, 14
## Work with existing decks
```python
# Replace {{placeholders}} without breaking formatting
engine.replace("template.pptx", {"client": "ACME", "year": "2026"})
# Duplicate / delete / reorder slides (1-based)
engine.edit("deck.pptx", [
{"op": "duplicate", "slide": 2},
{"op": "delete", "slide": 5},
{"op": "move", "slide": 3, "to": 1},
])
# Merge 2-5 decks; each keeps its own design
engine.merge(["intro.pptx", "results.pptx", "outro.pptx"])
# Convert to PDF
pdf = engine.to_pdf("deck.pptx")
engine.download(pdf, "deck.pdf")
# Translate in place (layout preserved)
engine.translate("deck.pptx", "Spanish")
Every call returns a dict with result.downloadUrl — a signed link valid for 24 hours. engine.download(result, path) fetches it.
Branding
engine.generate(
markup="# Deck\n\n## Slide\n- point",
brand={"primary": "#E4002B", "secondary": "#111827"},
font="Georgia",
)
Accounts and credits
Pass your account id to tie calls to your quota and remove the watermark (Pro plan):
engine = PowerPointEngine(session_id="your-account-id")
Billing is credit-based: 1 credit = up to 10 slides. Free tier: 5 credits/month (watermarked); Pro ($9/mo) removes the watermark. Details: powerpointengine.io/#pricing.
AI agents
The same engine is exposed as a remote MCP server — one line in Claude Code / any MCP client:
claude mcp add --transport http powerpoint-engine https://powerpointengine.io/api/mcp/mcp
Errors
All errors raise PowerPointEngineError subclasses: ValidationError (400), AuthenticationError (401), NotFoundError (404), RateLimitError (429), ServerError (5xx).
License
MIT
Project details
Release history Release notifications | RSS feed
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 powerpoint_engine_api-2.0.0.tar.gz.
File metadata
- Download URL: powerpoint_engine_api-2.0.0.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
498f1a5e89da516cda307be0cbe07a1d2ba38bc6b190326ad30739ad6f48ba2c
|
|
| MD5 |
8856fab5588453b9d7fd7099667236a5
|
|
| BLAKE2b-256 |
3126a4a294272381d0ccc3e50a74739015748e38ba31f5a9a7131d3e1dffed9a
|
File details
Details for the file powerpoint_engine_api-2.0.0-py3-none-any.whl.
File metadata
- Download URL: powerpoint_engine_api-2.0.0-py3-none-any.whl
- Upload date:
- Size: 8.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1fdc38f4b2e74ef540f5310435fe3955add0ed419c932b70cb0dcc1572b06817
|
|
| MD5 |
29914d5eaecb856bdccfab25fbea7aa1
|
|
| BLAKE2b-256 |
53ad31b632b532810e4b8f06da23d4600091235baa89ca8cb25dda7f3a1de577
|