# How to Create a Custom Presentation Template in PPT Master from an Existing PowerPoint File

> Effortlessly create a custom presentation template in PPT Master from an existing PowerPoint file. Import your design and generate reusable templates.

- Repository: [HugoHe/ppt-master](https://github.com/hugohe3/ppt-master)
- Tags: how-to-guide
- Published: 2026-04-24

---

**Convert any existing PowerPoint file into a reusable PPT Master template by importing it with [`pptx_template_import.py`](https://github.com/hugohe3/ppt-master/blob/main/pptx_template_import.py), extracting SVG references, designing AI-compatible layouts, validating with [`svg_quality_checker.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_quality_checker.py), and registering the template ID in [`layouts_index.json`](https://github.com/hugohe3/ppt-master/blob/main/layouts_index.json).**

The `hugohe3/ppt-master` repository enables AI-driven presentation generation through standardized, reusable layout packages. When you need to create a custom presentation template in PPT Master from an existing corporate deck, the platform provides a strict serial workflow defined in [`skills/ppt-master/workflows/create-template.md`](https://github.com/hugohe3/ppt-master/blob/main/skills/ppt-master/workflows/create-template.md) that transforms proprietary `.pptx` files into AI-editable SVG components.

## Understanding the Template Architecture

PPT Master treats reusable templates as **self-contained layout packages** stored under `skills/ppt-master/templates/layouts/`. Each template consists of:

- **SVG layout files** (`01_cover.svg`, `02_chapter.svg`, `03_content.svg`, `04_ending.svg`) representing distinct slide masters
- A **[`design_spec.md`](https://github.com/hugohe3/ppt-master/blob/main/design_spec.md)** defining placeholder variables such as `{{TITLE}}`, `{{PAGE_NUM}}`, and `{{AUTHOR}}`
- **Normalized assets** ([`manifest.json`](https://github.com/hugohe3/ppt-master/blob/main/manifest.json), [`master_layout_refs.json`](https://github.com/hugohe3/ppt-master/blob/main/master_layout_refs.json), [`normalized_assets.json`](https://github.com/hugohe3/ppt-master/blob/main/normalized_assets.json)) tracking extracted images and metadata
- **Global registration** in [`layouts_index.json`](https://github.com/hugohe3/ppt-master/blob/main/layouts_index.json) enabling discovery by the PPT Master engine

This architecture ensures that once registered, any future presentation generation can invoke your custom template by specifying its unique template ID.

## The Six-Step Template Creation Workflow

According to the source code in [`skills/ppt-master/workflows/create-template.md`](https://github.com/hugohe3/ppt-master/blob/main/skills/ppt-master/workflows/create-template.md), the creation process follows **strict serial execution** (no batching) across six discrete phases:

### 1. Import the Source PPTX

Run [`skills/ppt-master/scripts/pptx_template_import.py`](https://github.com/hugohe3/ppt-master/blob/main/skills/ppt-master/scripts/pptx_template_import.py) to extract metadata, assets, and per-slide SVGs from your existing PowerPoint file. This script externalizes inline images and optimizes the SVGs for AI inspection.

```bash
python3 skills/ppt-master/scripts/pptx_template_import.py path/to/brand_template.pptx

```

The script creates a folder named `brand_template_template_import/` beside your source file containing [`manifest.json`](https://github.com/hugohe3/ppt-master/blob/main/manifest.json), cleaned SVGs under `svg/`, and extracted assets.

### 2. Analyze the Exported SVGs

The import process generates [`reference_svg_selection.json`](https://github.com/hugohe3/ppt-master/blob/main/reference_svg_selection.json), a curated JSON file listing representative slides (cover, chapter, TOC, content, ending) that serve as references for the Template Designer. This file ensures the AI understands the visual hierarchy and layout variations present in your original deck.

### 3. Generate the Template Directory

Create a new directory using a short ASCII slug that will serve as your template ID:

```bash
mkdir -p skills/ppt-master/templates/layouts/my_company

```

This folder name (`my_company`) becomes the key in [`layouts_index.json`](https://github.com/hugohe3/ppt-master/blob/main/layouts_index.json) and must match the template's identifier throughout the system.

### 4. Design the Template

The `Template_Designer` role—defined in [`skills/ppt-master/references/template-designer.md`](https://github.com/hugohe3/ppt-master/blob/main/skills/ppt-master/references/template-designer.md)—uses the imported assets to author fresh SVG layout files. For manual creation, copy the representative SVGs and create a design specification:

```bash
cp brand_template_template_import/svg/slide_01.svg skills/ppt-master/templates/layouts/my_company/01_cover.svg
cp brand_template_template_import/svg/slide_02.svg skills/ppt-master/templates/layouts/my_company/02_chapter.svg

```

Create [`design_spec.md`](https://github.com/hugohe3/ppt-master/blob/main/design_spec.md) describing your placeholders:

```markdown

# Design Specification for My Company Template

- **Cover**: `{{TITLE}}`, `{{SUBTITLE}}`, `{{DATE}}`, `{{AUTHOR}}`
- **Chapter**: `{{CHAPTER_NUM}}`, `{{CHAPTER_TITLE}}`
- **Content**: `{{PAGE_TITLE}}`, `{{CONTENT_AREA}}`, `{{PAGE_NUM}}`
- **Ending**: `{{THANK_YOU}}`, `{{CONTACT_INFO}}`

```

### 5. Validate SVG Quality

Execute [`skills/ppt-master/scripts/svg_quality_checker.py`](https://github.com/hugohe3/ppt-master/blob/main/skills/ppt-master/scripts/svg_quality_checker.py) to enforce technical constraints before registration:

```bash
python3 skills/ppt-master/scripts/svg_quality_checker.py skills/ppt-master/templates/layouts/my_company --format ppt169

```

The validator confirms:
- **viewBox** matches the `ppt169` canvas (`0 0 1280 720`)
- All required **placeholders** are present and consistently named
- Referenced **asset files** exist in the expected paths

### 6. Register the Template

Add your template to the global registry in [`skills/ppt-master/templates/layouts/layouts_index.json`](https://github.com/hugohe3/ppt-master/blob/main/skills/ppt-master/templates/layouts/layouts_index.json):

```json
{
  "my_company": {
    "label": "My Company Brand Template",
    "summary": "A corporate template with custom branding, colors, and placeholders",
    "keywords": ["Brand", "Corporate", "Marketing"]
  }
}

```

Update the human-readable [`templates/layouts/README.md`](https://github.com/hugohe3/ppt-master/blob/main/templates/layouts/README.md) to document the new template. Once committed, the PPT Master engine can discover and invoke your template by the `my_company` key.

## Key Components Reference

| Component | Role in Template Creation | Key Artifacts |
|-----------|---------------------------|---------------|
| **[`pptx_template_import.py`](https://github.com/hugohe3/ppt-master/blob/main/pptx_template_import.py)** | Converts source PPTX into a reference workspace | [`manifest.json`](https://github.com/hugohe3/ppt-master/blob/main/manifest.json), `assets/`, `svg/`, [`reference_svg_selection.json`](https://github.com/hugohe3/ppt-master/blob/main/reference_svg_selection.json) |
| **[`create-template.md`](https://github.com/hugohe3/ppt-master/blob/main/create-template.md)** workflow | Orchestrates sequential steps (gather brief, import, design, validate, register) | Structured checklist, hard-gate rules |
| **`Template_Designer` role** | Generates final SVG layouts and [`design_spec.md`](https://github.com/hugohe3/ppt-master/blob/main/design_spec.md) | `01_cover.svg`, `02_chapter.svg`, [`design_spec.md`](https://github.com/hugohe3/ppt-master/blob/main/design_spec.md) |
| **[`svg_quality_checker.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_quality_checker.py)** | Enforces SVG technical constraints | Validation output, pass/fail status |
| **[`layouts_index.json`](https://github.com/hugohe3/ppt-master/blob/main/layouts_index.json)** | Global lookup table for template discovery | Template metadata with labels, summaries, keywords |

## Summary

- **Templates are self-contained packages** under `skills/ppt-master/templates/layouts/` containing SVGs, specifications, and asset manifests
- **Import existing decks** using [`pptx_template_import.py`](https://github.com/hugohe3/ppt-master/blob/main/pptx_template_import.py) to extract structured SVGs and metadata
- **Follow strict serial execution**: import → analyze → design → validate → register
- **Validate technical constraints** with [`svg_quality_checker.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_quality_checker.py) ensuring proper viewBox (`0 0 1280 720`) and placeholder consistency
- **Register in [`layouts_index.json`](https://github.com/hugohe3/ppt-master/blob/main/layouts_index.json)** to make templates discoverable by the PPT Master generation pipeline

## Frequently Asked Questions

### What placeholder variables can I use in a custom PPT Master template?

According to the `Template_Designer` role definition in [`skills/ppt-master/references/template-designer.md`](https://github.com/hugohe3/ppt-master/blob/main/skills/ppt-master/references/template-designer.md), you can define any semantic placeholders in [`design_spec.md`](https://github.com/hugohe3/ppt-master/blob/main/design_spec.md) such as `{{TITLE}}`, `{{PAGE_NUM}}`, `{{AUTHOR}}`, `{{CHAPTER_TITLE}}`, or `{{CONTENT_AREA}}`. These variables are replaced during the slide generation phase when the template is invoked.

### Can I import multiple PowerPoint files simultaneously?

No. The workflow explicitly follows **strict serial execution** as defined in the project's [`AGENTS.md`](https://github.com/hugohe3/ppt-master/blob/main/AGENTS.md) guidelines. You must process one source PPTX at a time through [`pptx_template_import.py`](https://github.com/hugohe3/ppt-master/blob/main/pptx_template_import.py), completing the full six-step workflow (including validation and registration) before starting the next template.

### What canvas size should my SVG template files use?

For standard 16:9 presentations, set your SVG viewBox to `0 0 1280 720`. The [`svg_quality_checker.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_quality_checker.py) script validates this when invoked with the `--format ppt169` flag. Other aspect ratios may be supported depending on your specific PPT Master configuration, but `ppt169` is the standard format.

### How does PPT Master locate my custom template during generation?

The engine searches [`skills/ppt-master/templates/layouts/layouts_index.json`](https://github.com/hugohe3/ppt-master/blob/main/skills/ppt-master/templates/layouts/layouts_index.json) for the template ID you specify. This JSON file acts as a global registry containing metadata objects with `label`, `summary`, and `keywords` for each available template. Ensure your template slug matches exactly between the directory name and the JSON key.