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.
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o ppt-template-creator.zip https://jpskill.com/download/22554.zip && unzip -o ppt-template-creator.zip && rm ppt-template-creator.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/22554.zip -OutFile "$d\ppt-template-creator.zip"; Expand-Archive "$d\ppt-template-creator.zip" -DestinationPath $d -Force; ri "$d\ppt-template-creator.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
ppt-template-creator.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
ppt-template-creatorフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[スキル名] ppt-template-creator
PPTテンプレートクリエーター
このスキルはプレゼンテーションではなく、スキルを作成します。 ユーザーがPowerPointテンプレートを、後でプレゼンテーションを生成できる再利用可能なスキルに変換したい場合に使用してください。ユーザーが単にプレゼンテーションを作成したい場合は、代わりに pptx スキルを使用してください。
生成されるスキルには以下が含まれます。
assets/template.pptx- テンプレートファイルSKILL.md- 完全な手順書(このメタスキルへの参照は不要です)
一般的なスキル構築のベストプラクティスについては、skill-creator スキルを参照してください。このスキルは、PPT固有のパターンに焦点を当てています。
ワークフロー
- ユーザーがテンプレートを提供 (.pptx または .potx)
- テンプレートを分析 - レイアウト、プレースホルダー、寸法を抽出します
- スキルを初期化 -
skill-creatorスキルを使用してスキル構造を設定します - テンプレートを追加 - .pptx を
assets/template.pptxにコピーします - SKILL.md を記述 - 以下のテンプレートに従い、PPT固有の詳細を記入します
- 例を作成 - サンプルプレゼンテーションを生成して検証します
- パッケージ化 -
skill-creatorスキルを使用して .skill ファイルにパッケージ化します
ステップ2:テンプレートの分析
重要:正確なプレースホルダーの位置を抽出してください - これがコンテンツ領域の境界を決定します。
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
記録すべき主要な測定値:
- タイトルの位置: タイトルプレースホルダーはどこにありますか?
- サブタイトル/説明: サブタイトルの行はどこにありますか?
- フッタープレースホルダー: フッター/ソースはどこに表示されますか?
- コンテンツ領域: サブタイトルとフッターの間のスペースがコンテンツ領域です
真のコンテンツ開始位置を見つける
重要: コンテンツ領域は、常にサブタイトルプレースホルダーの直後から始まるわけではありません。多くのテンプレートには、サブタイトルとコンテンツ領域の間に視覚的な境界線、線、または予約スペースがあります。
最良のアプローチ: レイアウト2、または「コンテンツ」レイアウトに似た、OBJECTプレースホルダーを持つレイアウトを見てください。このプレースホルダーの y 位置が、コンテンツが実際に開始すべき場所を示しています。
# 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
例: テンプレートには以下があるかもしれません。
- サブタイトルが y=1.38" で終了
- しかし、OBJECTプレースホルダーが y=1.90" で開始
- このギャップ (0.52") は境界線/線のために予約されています - ここにコンテンツを配置しないでください
コンテンツの開始位置として、サブタイトルの終了位置ではなく、OBJECTプレースホルダーの y 位置を使用してください。
ステップ5:SKILL.md の記述
生成されるスキルは、この構造を持つべきです。
[company]-ppt-template/
├── SKILL.md
└── assets/
└── template.pptx
生成される SKILL.md テンプレート
生成される SKILL.md は、すべての指示が埋め込まれた自己完結型である必要があります。このテンプレートを使用し、分析から得られた括弧内の値を記入してください。
---
name: [company]-ppt-template
description: [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
```python
from pptx import Presentation
prs = Presentation("path/to/skill/assets/template.pptx")
# DELETE all existing slides first
while len(prs.slides) > 0:
rId = prs.slides._sldIdLst[0].rId
prs.part.drop_rel(rId)
del prs.slides._sldIdLst[0]
# Add slides from layouts
slide = 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
**重要:各プレースホルダーの正確な位置(x, y 座標)を含めてください。**
### 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
**カスタムの図形/テーブル/グラフのための安全なコンテンツ領域を文書化してください。**
```
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]"
```
**これが重要な理由:** カスタムコンテンツ(テキストボックス、テーブル、グラフ)は、タイトル、フッター、ソース行などのテンプレートプレースホルダーと重ならないように、これらの境界内に留まる必要があります。
## Filling Content
**手動で箇条書き文字を追加しないでください** - スライドマスターが書式設定を処理します。
```python
# Fill title
for shape in slide.shapes:
if hasattr(shape, 'placeholder_format'):
if shape.placeholder_format.type == 1: # TITLE
shape.text = "Slide Title"
# Fill con 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
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 fileSKILL.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-creatorskill 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-creatorskill 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 with all instructions embedded. Use this template, filling in the bracketed values from your analysis:
---
name: [company]-ppt-template
description: [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
```python
from pptx import Presentation
prs = Presentation("path/to/skill/assets/template.pptx")
# DELETE all existing slides first
while len(prs.slides) > 0:
rId = prs.slides._sldIdLst[0].rId
prs.part.drop_rel(rId)
del prs.slides._sldIdLst[0]
# Add slides from layouts
slide = 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 title
for 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
```python
slide = 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
```python
slide = 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
- Template in assets/ - always bundle the .pptx file
- Self-contained SKILL.md - all instructions embedded, no external references
- No manual bullets - use
paragraph.levelfor hierarchy - Delete slides first - always clear existing slides before adding new ones
- Document placeholders by idx - placeholder idx values are template-specific