Help us improve
Share bugs, ideas, or general feedback.
From agent-slides
Extract template contracts from a .pptx file. Produces layout catalogs, archetypes, resolved manifest, and a clean base template for slides-build. Use when the user provides a PowerPoint template, says "use this template", "extract layouts", "analyze this pptx", or wants to prepare a template before building slides.
npx claudepluginhub mpuig/agent-slides --plugin agent-slidesHow this skill is triggered — by the user, by Claude, or both
Slash command
/agent-slides:slides-extractThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a template analyst. Your job is to extract structured contracts from PowerPoint templates so that downstream skills can generate pixel-perfect decks without guessing.
Creates, edits, reads, and extracts content from .pptx files. Activates whenever presentations, slides, decks, or .pptx filenames are mentioned.
Reads, extracts text from, edits, and generates .pptx presentations using Python scripts and pptxgenjs. Handles templates, thumbnails, XML unpacking.
Creates, reads, edits, and extracts content from .pptx files. Handles slide decks, templates, speaker notes, and combining or splitting presentations.
Share bugs, ideas, or general feedback.
You are a template analyst. Your job is to extract structured contracts from PowerPoint templates so that downstream skills can generate pixel-perfect decks without guessing.
Extract template contracts from a .pptx template or sample deck.
/slides-build for a given template.pptx file (template or sample deck with example slides)Create a dedicated directory for this project's artifacts:
mkdir -p output/<project-name>
All subsequent commands and outputs go in this directory.
Use uvx --from agent-slides slides docs method:extract to verify the current contract, then:
uvx --from agent-slides slides extract <template_or_sample.pptx> \
--output-dir output/<project> \
--base-template-out output/<project>/base_template.pptx \
--compact
Optional: add --layout-preview-dir output/<project>/layout_previews for per-layout PNGs
(legacy override), or specific --*-out paths for one-off custom filenames.
| Artifact | Purpose |
|---|---|
template_layout.json | Physical layout families, placeholders, geometry |
content_layout.json | Archetype-to-layout compatibility map |
archetypes.json | Available archetypes with usage constraints |
resolved_manifest.json | Merged contract — theme palette, per-archetype resolved layout bindings. Primary reference for /slides-build. |
slides_manifest.json | Slide-by-slide inventory of the source |
slide_analysis.json | Deep per-slide structural analysis |
slide_screenshots/ | Visual reference screenshots |
icons/ | Vector icons extracted from template slides (freeform/group shapes). Available via add_icon when icon_pack_dir is set in design profile. |
base_template.pptx | Clean .pptx — all masters/layouts/theme, zero content slides |
Read resolved_manifest.json and verify you can answer these questions before proceeding:
theme.palette.accent1 … accent6)resolved_layouts? Name them. (Note: archetypes is a dict keyed by archetype ID, not a list — iterate with for aid, arch in archetypes.items())text_color does each color zone use?If any answer is unclear, re-read the manifest. Do not proceed to the design profile until all four are answered.
Write design-profile.json in the project directory:
{
"name": "<project-name>",
"template_path": "base_template.pptx",
"content_layout_catalog_path": "content_layout.json"
}
Add these fields from the extracted theme:
| Field | Source | Purpose |
|---|---|---|
primary_color_hex | Theme accent1 | Brand accent color for subheadings |
text_color_light | Theme lt1 | Light text for dark backgrounds |
text_color_dark | Theme dk1 | Dark text for light backgrounds |
default_font_size_pt | Template body size | Default for add_text |
icon_pack_dir | icons/ (if extracted) | Directory of template-specific vector icons for add_icon |
Always use base_template.pptx (not the original) as template_path.
If the extraction produced an icons/ directory with .xml files, add "icon_pack_dir": "icons" to the design profile. These icons become available via add_icon alongside the built-in icon library.
Only add fields listed above or in the schema. The profile uses extra="forbid" — any unknown field (e.g., secondary_color_hex, accent_color_hex, font_name) causes a validation error.
Use uvx --from agent-slides slides docs schema:design-profile for the full schema.
Before handing the project off to /slides-build or /slides-full, verify the extracted artifacts and profile:
uvx --from agent-slides slides preflight --project-dir output/<project> --profile output/<project>/design-profile.json --compact
If preflight fails, fix the project structure or profile paths before continuing.
This skill produces the project directory consumed by all other slides skills:
base_template.pptx + contract JSONs -> /slides-builddesign-profile.json -> all post-build skillsOn any slides error, run uvx --from agent-slides slides docs method:extract to verify the current contract before retrying.
resolved_manifest.json contains at least one archetype with resolved layouts.base_template.pptx opens without errors.design-profile.json references base_template.pptx and content_layout.json.slides preflight reports "ok": true.