Skip to main content

POTX theme editor

Project description

potxkit

Make PowerPoint templates consistent without manual, slide-by-slide cleanup.

Install Claude Desktop Add to Cursor

Links

Why this project exists (plain English)

PowerPoint decks get messy fast: different people paste content, change colors and fonts by hand, and override styles on individual slides. That makes branding drift and turns “fix the template” into a long, manual job. potxkit gives you a way to audit and fix those problems in bulk.

How PowerPoint styling works (simple view)

PowerPoint styling is layered:

  1. Theme: global colors + fonts for the file.
  2. Slide master: the base look for all slides.
  3. Layouts: variations like “Title Slide,” “Section Header,” etc.
  4. Local overrides: formatting applied directly on a slide or shape.

When local overrides are everywhere, layouts and the master stop controlling the look. potxkit helps you see where formatting is coming from and move it back into the master/layouts so your deck stays consistent.

How potxkit unlocks this (and why agents help)

  • Audit where colors/fonts/backgrounds/images are coming from.
  • Strip local overrides so layouts and masters drive the look.
  • Apply a consistent palette mapping across slides.
  • Set theme fonts, sizes, and layout images programmatically.
  • Run as an MCP server so an agent can build or standardize templates automatically.

What you can do

  • Audit decks to see which slides override the master (colors, text, backgrounds, images).
  • Normalize or strip local formatting so slides inherit from layouts/master.
  • Create a layout from an existing slide (shapes/images included) and apply it across ranges.
  • Apply palettes and font families across templates or decks.
  • Reindex/prune layouts and validate OOXML structure.

Choose your interface

MCP server (recommended for agents)

Runs over stdio and exposes all commands as tools.

uvx potxkit

Example config (docs/mcp.json):

{
  "mcpServers": {
    "potxkit": {
      "command": "uvx",
      "args": ["potxkit"]
    }
  }
}

CLI (recommended for humans)

poetry run potxkit-cli --help

SDK (recommended for developers)

from potxkit import PotxTemplate

tpl = PotxTemplate.open("template.potx")
tpl.theme.colors.set_accent(1, "#1F6BFF")
tpl.theme.fonts.set_major("Aptos Display")
tpl.save("brand-template.potx")

MCP client setup

potxkit runs as a local MCP server. Most clients accept this config:

{
  "mcpServers": {
    "potxkit": {
      "command": "uvx",
      "args": ["potxkit"]
    }
  }
}

One-click installs

  • Claude Desktop: download potxkit.mcpb from GitHub releases and install via Settings -> Extensions -> Advanced Settings -> Install Extension.
  • Cursor: Add to Cursor link:
    • cursor://anysphere.cursor-deeplink/mcp/install?name=potxkit&config=eyJwb3R4a2l0Ijp7ImNvbW1hbmQiOiJ1dngiLCJhcmdzIjpbInBvdHhraXQiXX19

CLI or config installs

Claude Code

claude mcp add --transport stdio potxkit -- uvx potxkit

If you already installed the Claude Desktop extension, you can import it:

claude mcp add-from-claude-desktop

Codex (OpenAI)

codex mcp add potxkit -- uvx potxkit

Or add to ~/.codex/config.toml (or project .codex/config.toml):

[mcp_servers.potxkit]
command = "uvx"
args = ["potxkit"]

Gemini CLI

Add to your project .gemini/settings.json under mcpServers:

{
  "mcpServers": {
    "potxkit": {
      "command": "uvx",
      "args": ["potxkit"]
    }
  }
}

Roo Code

Add to .roo/mcp.json (project) or mcp_settings.json (global):

{
  "mcpServers": {
    "potxkit": {
      "command": "uvx",
      "args": ["potxkit"]
    }
  }
}

Maintainer release checklist (one-click installs)

  • Build or update the potxkit.mcpb bundle.
  • Upload potxkit.mcpb to the latest GitHub release so the Claude Desktop link works.
  • If the MCP command or args change, update the Cursor deep link config (base64 of {\"potxkit\":{\"command\":\"uvx\",\"args\":[\"potxkit\"]}}).
  • Click both install links to verify they still open correctly.

Common workflows

Audit a deck to find local formatting:

poetry run potxkit-cli audit path/to/template.pptx --summary --group-by p,b,l

Create a new layout from slide 7 and apply it to a range:

poetry run potxkit-cli make-layout --from-slide 7 --name "Layout Bob" \
  --assign-slides 1-7,9-10 output.pptx --input path/to/template.pptx

Strip inline colors/fonts so slides inherit from layouts/master:

poetry run potxkit-cli set-slide --slides 1-11 --palette-none --fonts-none \
  output.pptx --input path/to/template.pptx

Normalize a deck to a palette mapping:

poetry run potxkit-cli normalize examples/mapping.json output.pptx \
  --input path/to/template.pptx --slides 1,3-5

Update theme colors, fonts, and friendly names:

poetry run potxkit-cli set-colors output.potx --input path/to/template.potx \
  --accent1 #1F6BFF --hlink #1F6BFF
poetry run potxkit-cli set-fonts output.potx --input path/to/template.potx \
  --major "Aptos Display" --minor "Aptos"
poetry run potxkit-cli set-theme-names output.potx --input path/to/template.potx \
  --theme "Code Janitor" --colors "Code Janitor Colors" --fonts "Code Janitor Fonts"

Images, palettes, fonts, and sizes

Add a background image to a layout:

poetry run potxkit-cli set-layout-bg --layout "Layout Bob" \
  --image path/to/hero.png output.pptx --input path/to/template.pptx

Add an image layer (x/y/w/h in inches unless --units emu):

poetry run potxkit-cli set-layout-image --layout "Layout Bob" \
  --image path/to/overlay.png --x 1 --y 1 --w 3 --h 2 \
  output.pptx --input path/to/template.pptx

Apply a palette mapping:

poetry run potxkit-cli normalize examples/mapping.json output.pptx \
  --input path/to/template.pptx --slides 1,3-5

Set fonts:

poetry run potxkit-cli set-fonts output.potx --input path/to/template.potx \
  --major "Aptos Display" --minor "Aptos"

Set text sizes (points) and bold/regular for a layout:

poetry run potxkit-cli set-text-styles --layout "Layout Bob" \
  --title-size 30 --title-bold --body-size 20 --body-regular \
  output.pptx --input path/to/template.pptx

Examples

See examples/README.md for step-by-step walkthroughs and the reason each command exists.

SDK documentation

Full API reference in docs/SDK.md.

Project layout

  • src/potxkit/: library + MCP/CLI implementation
  • examples/: runnable scripts and sample inputs
  • docs/: reference docs and MCP config
  • tests/: pytest suite

Notes and limitations

  • potxkit edits theme data and slide/layout formatting. It does not render slides.
  • For complex branded layouts, start from a PowerPoint-authored .potx and use potxkit to standardize themes and remove local overrides.

License

MIT License. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

potxkit-0.2.1.tar.gz (62.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

potxkit-0.2.1-py3-none-any.whl (66.8 kB view details)

Uploaded Python 3

File details

Details for the file potxkit-0.2.1.tar.gz.

File metadata

  • Download URL: potxkit-0.2.1.tar.gz
  • Upload date:
  • Size: 62.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for potxkit-0.2.1.tar.gz
Algorithm Hash digest
SHA256 35fef872642fbfa46264188101b88754993d8b08fc8e0834defa1df21502004b
MD5 9e51316d6a847ac482315d90e65b023c
BLAKE2b-256 92b5c4cf7dd4a5ada66cebf152edba87c19c54e6962c2be64b824f0144213d14

See more details on using hashes here.

Provenance

The following attestation bundles were made for potxkit-0.2.1.tar.gz:

Publisher: publish.yml on thevgergroup/potxkit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file potxkit-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: potxkit-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 66.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for potxkit-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 16b8e789fc92e88b96c78d99515ae7460eaa6b810864700cafc2183e5fb21b94
MD5 5edb836ec99dda4673b079916cfc945e
BLAKE2b-256 1ce98ce4c491c9c7c925a2dd95cb293f24bd0d63f05deb59035a431181ed94e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for potxkit-0.2.1-py3-none-any.whl:

Publisher: publish.yml on thevgergroup/potxkit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page