compono
Agent-oriented, code-based PPTX generation. Describe a deck as typed primitives — an LLM agent never writes raw coordinates or touches OOXML.
compono lets an LLM agent (or a human) describe a slide deck as data —
headers, bullet text, stats, tables, charts, images, process sequences,
shapes — and get back a real, editable .pptx file. The agent never writes
raw x/y/w/h coordinates: a constraint-based layout resolver computes
every position from a small set of typed primitives.
Every rendered element is a genuine, editable native shape (p:sp, p:pic,
p:graphicFrame) — never a flattened image or embedded video. Open the
result in PowerPoint and drag a box around; it's a real object, not a
picture of one.
Install
pip install compono
# or
uv add compono
Quickstart
from compono import render_deck
spec = {
"slides": [
{
"header": {"title": "Q3 Results", "subtitle": "Engineering team"},
"body": [
{
"primitive": "text",
"mode": "bullets",
"content": [
"Shipped the new layout resolver",
"Cut render time by 40%",
"Zero overflow bugs in production",
],
"emphasis_indices": [1],
}
],
}
]
}
report = render_deck(spec, "deck.pptx")
print(report.pptx_path, report.warnings)
Or from the command line:
compono validate spec.json
compono render spec.json -o deck.pptx
Three verbs in total — render_deck, validate (cheap, no file write,
run it first), and review (design-quality suggestions, never blocking).
See docs/ for everything past this point.
Documentation
- Getting started — install, quickstart, core concepts
- API reference — verbs, error shape, the feedback loop, design review
- Primitives — full catalog, image placeholders, worked examples
- Templates and fonts —
Deck.template,font_family - CLI
- MCP server —
compono-mcp, and what to do when compono has no context - Claude Code plugin
- Examples — rendered screenshots across genres, from real
examples/*.jsonspecs
Agents: the full reference in one file is compono reference /
compono.reference(), or skills/compono/SKILL.md — that's the doc
written for you, not this page.
Contributing
See CONTRIBUTING.md for dev setup, branching, and code style. If you're
using Claude Code, .claude/README.md describes the build-workflow skill,
review subagent, and commit/format hooks set up for this repo.
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 compono-0.1.5.tar.gz.
File metadata
- Download URL: compono-0.1.5.tar.gz
- Upload date:
- Size: 27.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
854ae3064406b80a0d37e40c6c8811724f80c8dc2b98bb6033bba06019c2ec1e
|
|
| MD5 |
6b7739ed7dddc044ee1a42fb4daab5f5
|
|
| BLAKE2b-256 |
a2e0b683228c6e99d611dd1b82246ded83408a91138ffea1378d1a32b7df7739
|
File details
Details for the file compono-0.1.5-py3-none-any.whl.
File metadata
- Download URL: compono-0.1.5-py3-none-any.whl
- Upload date:
- Size: 34.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b0cdcf894ad5c24ad680b29b9b2c9c26d27a3d98ebeb8d3792190262ffd35d5
|
|
| MD5 |
cfe1e39c9ad7ca7e756cf18cf457f281
|
|
| BLAKE2b-256 |
562e7cea4893b3e48d60e3bb73b0ff02668c7fcfab0f06e7fc6a73e67147cf8d
|