Ppt Template Creator

作者 anthropics574ed3624aeb無授權條款39K 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫2 週前更新

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.

AI 產生的概覽

將使用者的 PowerPoint 範本轉換為可重用的技能,用來產生品牌簡報。

功能
此技能引導使用者從提供的 .pptx 或 .potx 檔案建立自成一體的 PPT 範本技能。流程涵蓋分析版面配置與預留位置、初始化技能結構、將範本放入 assets、撰寫自成一體的 SKILL.md、產生範例簡報並封裝。最終產出是可重用的技能資料夾,而非簡報本身。
適用情境
當使用者想把自己的 PowerPoint 範本轉換成可重用技能,以便日後產生簡報時使用。它不用於製作實際簡報,那應改用 pptx 技能。
執行需求
需要使用者提供 PowerPoint 範本(.pptx 或 .potx),並使用 python-pptx 套件進行分析。依賴 skill-creator 技能完成結構建立與封裝。不含指令碼,僅為指示文件。

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

  1. User provides template (.pptx or .potx)
  2. Analyze template - extract layouts, placeholders, dimensions
  3. Initialize skill - use the skill-creator skill to set up the skill structure
  4. Add template - copy .pptx to assets/template.pptx
  5. Write SKILL.md - follow template below with PPT-specific details
  6. Create example - generate sample presentation to validate
  7. 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.

python
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.

python
# Find the OBJECT placeholder to determine true content startfor 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 with all instructions embedded. Use this template, filling in the bracketed values from your analysis:

markdown
---name: [company]-ppt-templatedescription: [Company] PowerPoint template for creating presentations. Use when creating [Company]-branded pitch decks, board materials, or client presentations.---
# [Company] PPT Template
Template: `assets/template.pptx` ([WIDTH]" x [HEIGHT]", [N] layouts)
## Creating Presentations
```pythonfrom pptx import Presentation
prs = Presentation("path/to/skill/assets/template.pptx")
# DELETE all existing slides firstwhile len(prs.slides) > 0:    rId = prs.slides._sldIdLst[0].rId    prs.part.drop_rel(rId)    del prs.slides._sldIdLst[0]
# Add slides from layoutsslide = prs.slides.add_slide(prs.slide_layouts[LAYOUT_IDX])```
## Key Layouts
| Index | Name | Use For ||-------|------|---------|| [0] | [Layout Name] | [Cover/title slide] || [N] | [Layout Name] | [Content with bullets] || [N] | [Layout Name] | [Two-column layout] |
## Placeholder Mapping
**CRITICAL: Include exact positions (x, y coordinates) for each placeholder.**
### Layout [N]: [Name]| idx | Type | Position | Use ||-----|------|----------|-----|| [idx] | TITLE (1) | y=[Y]" | Slide title || [idx] | BODY (2) | y=[Y]" | Subtitle/description || [idx] | BODY (2) | y=[Y]" | Footer || [idx] | BODY (2) | y=[Y]" | Source/notes |
### Content Area Boundaries
**Document the safe content area for custom shapes/tables/charts:**
```Content Area (for Layout [N]):- Left margin: [X]" (content starts here)- Top: [Y]" (below subtitle placeholder)- Width: [W]"- Height: [H]" (ends before footer)
For 4-quadrant layouts:- Left column: x=[X]", width=[W]"- Right column: x=[X]", width=[W]"- Top row: y=[Y]", height=[H]"- Bottom row: y=[Y]", height=[H]"```
**Why this matters:** Custom content (textboxes, tables, charts) must stay within these boundaries to avoid overlapping with template placeholders like titles, footers, and source lines.
## Filling Content
**Do NOT add manual bullet characters** - slide master handles formatting.
```python# Fill titlefor shape in slide.shapes:    if hasattr(shape, 'placeholder_format'):        if shape.placeholder_format.type == 1:  # TITLE            shape.text = "Slide Title"
# Fill content with hierarchy (level 0 = header, level 1 = bullet)for shape in slide.shapes:    if hasattr(shape, 'placeholder_format'):        idx = shape.placeholder_format.idx        if idx == [CONTENT_IDX]:            tf = shape.text_frame            for para in tf.paragraphs:                para.clear()
            content = [                ("Section Header", 0),                ("First bullet point", 1),                ("Second bullet point", 1),            ]
            tf.paragraphs[0].text = content[0][0]            tf.paragraphs[0].level = content[0][1]            for text, level in content[1:]:                p = tf.add_paragraph()                p.text = text                p.level = level```
## Example: Cover Slide
```pythonslide = prs.slides.add_slide(prs.slide_layouts[[COVER_IDX]])for shape in slide.shapes:    if hasattr(shape, 'placeholder_format'):        idx = shape.placeholder_format.idx        if idx == [TITLE_IDX]:            shape.text = "Company Name"        elif idx == [SUBTITLE_IDX]:            shape.text = "Presentation Title | Date"```
## Example: Content Slide
```pythonslide = prs.slides.add_slide(prs.slide_layouts[[CONTENT_IDX]])for shape in slide.shapes:    if hasattr(shape, 'placeholder_format'):        ph_type = shape.placeholder_format.type        idx = shape.placeholder_format.idx        if ph_type == 1:            shape.text = "Executive Summary"        elif idx == [BODY_IDX]:            tf = shape.text_frame            for para in tf.paragraphs:                para.clear()            content = [                ("Key Findings", 0),                ("Revenue grew 40% YoY to $50M", 1),                ("Expanded to 3 new markets", 1),                ("Recommendation", 0),                ("Proceed with strategic initiative", 1),            ]            tf.paragraphs[0].text = content[0][0]            tf.paragraphs[0].level = content[0][1]            for text, level in content[1:]:                p = tf.add_paragraph()                p.text = text                p.level = level```

Step 6: Create Example Output

Generate a sample presentation to validate the skill works. Save it alongside the skill for reference.

PPT-Specific Rules for Generated Skills

  1. Template in assets/ - always bundle the .pptx file
  2. Self-contained SKILL.md - all instructions embedded, no external references
  3. No manual bullets - use paragraph.level for hierarchy
  4. Delete slides first - always clear existing slides before adding new ones
  5. Document placeholders by idx - placeholder idx values are template-specific

來源與署名

來源:anthropics/financial-services位於plugins/vertical-plugins/financial-analysis/skills/ppt-template-creator提交574ed36

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架