Claude Skill

PPT Template Creator

Creates self-contained PPT template SKILLS (not presentations) from user-provided PowerPoint templates. Use ONLY when a user wants to create a reusable skill from their template. For creating actual presentations, use the pptx skill instead.

Editor's Note

Creates self-contained PPT template SKILLS (not presentations) from user-provided PowerPoint templates. Use ONLY when a user wants to create a reusable skill from their template. For creating actual presentations, use the pptx skill instead. Covers workflow, step 2: analyze template, step 5: write skill.md.

Page Outline

WorkflowStep 2: Analyze TemplateStep 5: Write SKILL.md

Source Content

Normalized top-level metadata comes from the directory layer. The body below is the upstream source content for this item.

PPT Template Creator

**This skill creates SKILLS, not presentations.** Use this when a user wants to turn their PowerPoint template into a reusable skill that can generate presentations later. If the user just wants to create a presentation, use the `pptx` skill instead.

The generated skill includes:

  • `assets/template.pptx` - the template file
  • `SKILL.md` - complete instructions (no reference to this meta skill needed)

**For general skill-building best practices**, refer to the `skill-creator` skill. This skill focuses on PPT-specific patterns.

Workflow

  • **User provides template** (.pptx or .potx)
  • **Analyze template** - extract layouts, placeholders, dimensions
  • **Initialize skill** - use the `skill-creator` skill to set up the skill structure
  • **Add template** - copy .pptx to `assets/template.pptx`
  • **Write SKILL.md** - follow template below with PPT-specific details
  • **Create example** - generate sample presentation to validate
  • **Package** - use the `skill-creator` skill to package into a .skill file

Step 2: Analyze Template

**CRITICAL: Extract precise placeholder positions** - this determines content area boundaries.

from pptx import Presentation

prs = Presentation(template_path)
print(f"Dimensions: {prs.slide_width/914400:.2f}\" x {prs.slide_height/914400:.2f}\"")
print(f"Layouts: {len(prs.slide_layouts)}")

for idx, layout in enumerate(prs.slide_layouts):
    print(f"\n[{idx}] {layout.name}:")
    for ph in layout.placeholders:
        try:
            ph_idx = ph.placeholder_format.idx
            ph_type = ph.placeholder_format.type
            # IMPORTANT: Extract exact positions in inches
            left = ph.left / 914400
            top = ph.top / 914400
            width = ph.width / 914400
            height = ph.height / 914400
            print(f"    idx={ph_idx}, type={ph_type}")
            print(f"        x={left:.2f}\", y={top:.2f}\", w={width:.2f}\", h={height:.2f}\"")
        except:
            pass

**Key measurements to document:**

  • **Title position**: Where does the title placeholder sit?
  • **Subtitle/description**: Where is the subtitle line?
  • **Footer placeholders**: Where do footers/sources appear?
  • **Content area**: The space BETWEEN subtitle and footer is your content area

Finding the True Content Start Position

**CRITICAL:** The content area does NOT always start immediately after the subtitle placeholder. Many templates have a visual border, line, or reserved space between the subtitle and content area.

**Best approach:** Look at Layout 2 or similar "content" layouts that have an OBJECT placeholder - this placeholder's `y` position indicates where content should actually start.

# Find the OBJECT placeholder to determine true content start
for idx, layout in enumerate(prs.slide_layouts):
    for ph in layout.placeholders:
        try:
            if ph.placeholder_format.type == 7:  # OBJECT type
                top = ph.top / 914400
                print(f"Layout [{idx}] {layout.name}: OBJECT starts at y={top:.2f}\"")
                # This y value is where your content should start!
        except:
            pass

**Example:** A template might have:

  • Subtitle ending at y=1.38"
  • But OBJECT placeholder starting at y=1.90"
  • The gap (0.52") is reserved for a border/line - **do not place content there**

Use the OBJECT placeholder's `y` position as your content start, not the subtitle's end position.

Step 5: Write SKILL.md

The generated skill should have this structure:

[company]-ppt-template/
├── SKILL.md
└── assets/
    └── template.pptx

Generated SKILL.md Template

The generated SKILL.md must be **self-contained**

<!-- truncated -->

Related Items

Deploy agents, MCP servers, and backends fast logo

Railway - Deploy agents and MCP servers fast

Try Railway