MCPInstall

pptx

Create, edit, and analyze PowerPoint decks (.pptx). Build new decks from HTML slides, fill an existing template, duplicate or reorder slides, edit slide XML, and read or write speaker notes. Use when a task produces or modifies a .pptx file, or needs text, layout, or notes read from one.

Installs
839
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/appautomaton/document-skills --skill pptx
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads pptx automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

PowerPoint decks

You already know python-pptx and PptxGenJS. This skill adds a converter that turns HTML slides into native, editable PowerPoint objects, scripts that make template work reliable, and checks that show whether a deck is valid and looks right.

Running scripts

<skill> is the directory containing this file. Run bundled scripts by absolute path from the user's working directory, so relative paths to their files keep working:

uv run <skill>/scripts/thumbnail.py deck.pptx

Run Python you write with its dependencies declared, either uv run --with python-pptx script.py or a PEP 723 header. Run Node scripts as NODE_PATH=<skill>/node_modules node build.js; if <skill>/node_modules is missing, run npm install in <skill> once. Rendering needs LibreOffice (soffice) and poppler (pdftoppm).

Choosing a workflow

TaskWorkflow
Read a deck's textuv run --with 'markitdown[pptx]' python -m markitdown deck.pptx
New deck, no templatehtml2pptx, below. Read html2pptx.md and design.md first.
New deck from a templateTemplate workflow, below
Change an existing deckpython-pptx for text and shapes. Slide XML (ooxml.md) for what python-pptx can't reach.
Speaker notesscripts/notes.py

markitdown labels slides from 1 (<!-- Slide number: 1 -->); every script here counts from 0. To take on an existing deck's look, read ppt/theme/theme1.xml from the unpacked file (<a:clrScheme>, <a:fontScheme>) and look at its thumbnail grid.

New deck: html2pptx

  1. Settle the design system (design.md): palette, type scale, grid. State it in two sentences before writing code.
  2. Write one HTML file per slide, following the rules in html2pptx.md. Mark chart and table areas with class="placeholder".
  3. Write a build script that calls html2pptx() for each slide, adds charts and tables at the placeholders with PptxGenJS, and calls pptx.writeFile({ fileName }). html2pptx throws every problem on a slide at once; fix them all and rerun.
  4. Check the output (below).

New deck from a template

  1. See the template. Extract its text with markitdown, and make a thumbnail grid with uv run <skill>/scripts/thumbnail.py template.pptx grid. Look at the grid images.

  2. Inventory its layouts. List every slide by 0-based index with its purpose, e.g. "12: two columns, heading + bullets each".

  3. Map content to layouts. Count the pieces of content for each slide first, then pick a layout with exactly that many slots:

    • two items to a two-column layout, three to three columns
    • image layouts only when there are images
    • quote layouts only for real quotes with attribution
    • four or more items split across slides or into a list

    Never leave a placeholder empty or invent filler to occupy one.

  4. Assemble the slides. Duplicates are complete, with charts, embedded workbooks, notes and links:

    uv run <skill>/scripts/rearrange.py template.pptx working.pptx 0,12,12,31,40
    
  5. Inventory the text. Read all of inventory.json:

    uv run <skill>/scripts/inventory.py working.pptx inventory.json
    
  6. Write the replacements (format below), then apply them:

    uv run <skill>/scripts/replace.py working.pptx replacements.json output.pptx
    
  7. Check the output (below).

Inventory and replacements

inventory.json maps slide-N to shape-N, both 0-based. Shapes are ordered top to bottom, then left to right, and slide numbers are left out. Each shape has left, top, width and height in inches, and paragraphs. It also carries:

  • placeholder_type (TITLE, CENTER_TITLE, SUBTITLE, BODY, OBJECT, …), only for placeholders
  • default_font_size, when the layout sets one
  • overflow, overlap and warnings, when it detects them

Paragraphs list only the properties that differ from the default.

The replacements file has the same shape, with paragraphs for each shape to fill:

{
  "slide-0": {
    "shape-0": {"paragraphs": [{"text": "Revenue grew 18%", "bold": true}]},
    "shape-1": {"paragraphs": [
      {"text": "Renewals drove two thirds of growth"},
      {"text": "Churn fell to 4%", "bullet": true, "level": 0}
    ]}
  }
}
  • Paragraph fields:
    • text, bold, italic, underline
    • font_size, font_name
    • color ("C0392B") or theme_color ("ACCENT_1")
    • alignment (LEFT, CENTER, RIGHT, JUSTIFY)
    • space_before, space_after, line_spacing (in points)
    • bullet with level
  • Carry over the properties the inventory shows for the slot, so the template's styling holds.
  • Never type bullet characters. Bulleted paragraphs are left-aligned automatically.
  • On each slide listed, every text shape is cleared and then filled. A shape left out of the file ends up empty, which removes leftover template text. Slides not listed are untouched.
  • replace.py saves nothing if a key doesn't exist ("Shape 'shape-9' not found on 'slide-0'. Available shapes: …") or if new text overflows its box more than the old text did ("Text overflow worsened: slide-0/shape-2: …"). Shorten the text or choose a roomier layout.

Editing slide XML

Read ooxml.md first. Then unpack, edit, validate after each change, and pack:

uv run <skill>/ooxml/scripts/unpack.py deck.pptx unpacked
uv run <skill>/ooxml/scripts/validate.py unpacked --original deck.pptx
uv run <skill>/ooxml/scripts/pack.py unpacked edited.pptx

Speaker notes

uv run <skill>/scripts/notes.py deck.pptx                    # print {"slide-0": "…", …}
uv run <skill>/scripts/notes.py deck.pptx notes.json -o out.pptx

The JSON maps slide keys to plain text, with one paragraph per line. An empty string clears a slide's notes, and slides not listed keep theirs. In an html2pptx build, use slide.addNotes('…') instead.

Checking the output

A deck is done when it validates and every slide has been looked at.

  1. Validate. For a new deck, run uv run <skill>/ooxml/scripts/validate.py deck.pptx. For an edited deck or one built from a template, add --original template.pptx so only new problems are reported. Fix everything it lists.

    On duplicated slides, validate.py also reports schema errors the template already had. Compare them with the source slide before chasing them.

  2. Look. Run uv run <skill>/ooxml/scripts/render.py deck.pptx pages and read every image. Look for:

    • text cut off, overlapping, or crowding an edge
    • weak contrast
    • leftover template text or empty placeholders
    • anything off the grid

    thumbnail.py deck.pptx grid --outline-placeholders gives an overview, with every text box outlined.

  3. Fix and repeat until both are clean.

Pitfalls that fail silently

  • PptxGenJS colours take no #. '#C0392B' corrupts the file.
  • Text that fits in the browser overflows in PowerPoint when a font is substituted. Keep to the font policy in design.md.
  • Duplicating a slide by copying its XML by hand loses charts and shares notes between slides. Use rearrange.py.
  • Slide indices are 0-based everywhere except in markitdown's output.

FAQ

What does the pptx skill do?

Create, edit, and analyze PowerPoint decks (.pptx). Build new decks from HTML slides, fill an existing template, duplicate or reorder slides, edit slide XML, and read or write speaker notes. Use when a task produces or modifies a .pptx file, or needs text, layout, or notes read from one.

How do I install pptx?

Run npx skills add https://github.com/appautomaton/document-skills --skill pptx in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/pptx/ (personal) or .claude/skills/pptx/ (project).

Which AI agents can use pptx?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is pptx safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains pptx?

It is published by appautomaton in appautomaton/document-skills. It has 839 recorded installs.

More from appautomaton/document-skills

View all →

xlsx

appautomaton/document-skills

Create, edit, analyze, and recalculate Excel workbooks (.xlsx, .xlsm) with live formulas, formatting, and charts. Use when a task produces or modifies a spreadsheet file, turns CSV/TSV data into one, or needs values, formulas, or formatting read from one.

Data & Databases1.3K installs

docx

appautomaton/document-skills

Create, edit, review, and read Word documents (.docx), including tracked changes (redlines), comments, footnotes, tables, images, headers and page setup. Use when a task produces or modifies a .docx, reviews or redlines one, or needs its text, comments or tracked changes read.

Docs & Writing1.3K installs

pdf

appautomaton/document-skills

Read, create, fill, and transform PDF files. Covers extracting text and tables, OCR of scanned pages, filling fillable and flat forms, and flattening, merging, splitting, rotating, stamping and encrypting. Use when a task takes a .pdf as input or must produce one.

Docs & Writing704 installs

Popular docs & writing skills

View category →

grill-with-docs

mattpocock/skills

A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.

Docs & Writing1.2M installs

lark-markdown

open.feishu.cn

飞书 Markdown:查看、创建、上传、编辑和比较飞书中的原生 Markdown 文件。当用户要操作飞书 Markdown 文件,或比较其远端版本及本地草稿时使用。纯本地 Markdown 文件操作不触发本 skill。不负责将 Markdown 导入为飞书在线文档,也不负责文件搜索、权限、评论、移动、删除等云空间管理操作。

Docs & Writing778.7K installs

writing-beats

mattpocock/skills

Writing, exploit; assemble raw material into a journey of beats, grounding each term before a beat leans on it.

Docs & Writing490.7K installs

writing-shape

mattpocock/skills

Writing, exploit: shape raw material into an article, paragraph by paragraph.

Docs & Writing490.2K installs

writing-fragments

mattpocock/skills

Writing, explore: mine raw fragments, no structure yet.

Docs & Writing489.6K installs

writing-for-agents

mattpocock/skills

Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.

Docs & Writing479.3K installs