Curated Claude Code catalog
Updated 07.05.2026 · 19:39 CET
01 / Skill
hugohe3

ppt-master

Quality
9.0

This skill converts PDFs, DOCXs, URLs, or Markdown into natively editable PowerPoint presentations, featuring real shapes, text boxes, and charts, not flattened images. It excels when you need to quickly produce professional, customizable decks with advanced features like template replication, animations, and voice narration, all while keeping data local and avoiding platform lock-in.

USP

Unlike other tools, PPT Master produces genuinely editable PPTX files with real DrawingML elements, supports template replication from any PPTX, and offers advanced features like integrated narration and animations, all while ensuring data…

Use cases

  • 01Creating business presentations from reports
  • 02Generating academic decks from research papers
  • 03Developing marketing slides from product descriptions
  • 04Producing product launch presentations
  • 05Automating slide creation for training materials

Detected files (2)

  • skills/ppt-master/SKILL.mdskill
    Show content (24038 bytes)
    ---
    name: ppt-master
    description: >
      AI-driven multi-format SVG content generation system. Converts source documents
      (PDF/DOCX/URL/Markdown) into high-quality SVG pages and exports to PPTX through
      multi-role collaboration. Use when user asks to "create PPT", "make presentation",
      "生成PPT", "做PPT", "制作演示文稿", or mentions "ppt-master".
    ---
    
    # PPT Master Skill
    
    > AI-driven multi-format SVG content generation system. Converts source documents into high-quality SVG pages through multi-role collaboration and exports to PPTX.
    
    **Core Pipeline**: `Source Document → Create Project → Template Option → Strategist → [Image_Generator] → Executor → Post-processing → Export`
    
    > [!CAUTION]
    > ## 🚨 Global Execution Discipline (MANDATORY)
    >
    > **This workflow is a strict serial pipeline. The following rules have the highest priority — violating any one of them constitutes execution failure:**
    >
    > 1. **SERIAL EXECUTION** — Steps MUST be executed in order; the output of each step is the input for the next. Non-BLOCKING adjacent steps may proceed continuously once prerequisites are met, without waiting for the user to say "continue"
    > 2. **BLOCKING = HARD STOP** — Steps marked ⛔ BLOCKING require a full stop; the AI MUST wait for an explicit user response before proceeding and MUST NOT make any decisions on behalf of the user
    > 3. **NO CROSS-PHASE BUNDLING** — Cross-phase bundling is FORBIDDEN. (Note: the Eight Confirmations in Step 4 are ⛔ BLOCKING — the AI MUST present recommendations and wait for explicit user confirmation before proceeding. Once the user confirms, all subsequent non-BLOCKING steps — design spec output, SVG generation, speaker notes, and post-processing — may proceed automatically without further user confirmation)
    > 4. **GATE BEFORE ENTRY** — Each Step has prerequisites (🚧 GATE) listed at the top; these MUST be verified before starting that Step
    > 5. **NO SPECULATIVE EXECUTION** — "Pre-preparing" content for subsequent Steps is FORBIDDEN (e.g., writing SVG code during the Strategist phase)
    > 6. **NO SUB-AGENT SVG GENERATION** — Executor Step 6 SVG generation is context-dependent and MUST be completed by the current main agent end-to-end. Delegating page SVG generation to sub-agents is FORBIDDEN
    > 7. **SEQUENTIAL PAGE GENERATION ONLY** — In Executor Step 6, after the global design context is confirmed, SVG pages MUST be generated sequentially page by page in one continuous pass. Grouped page batches (for example, 5 pages at a time) are FORBIDDEN
    > 8. **SPEC_LOCK RE-READ PER PAGE** — Before generating each SVG page, Executor MUST `read_file <project_path>/spec_lock.md`. All colors / fonts / icons / images MUST come from this file — no values from memory or invented on the fly. Executor MUST also look up the current page's `page_rhythm` (`anchor` / `dense` / `breathing`), `page_layouts` (which template SVG to inherit, if any), and `page_charts` (which chart template to adapt, if any). Empty / absent entries are intentional Strategist signals — see executor-base.md §2.1. This rule exists to resist context-compression drift on long decks and to break the uniform "every page is a card grid" default
    
    > [!IMPORTANT]
    > ## 🌐 Language & Communication Rule
    >
    > - **Response language**: match the user's input and source materials. Explicit user override (e.g., "请用英文回答") takes precedence.
    > - **Template format**: `design_spec.md` MUST follow its original English template structure (section headings, field names) regardless of conversation language. Content values may be in the user's language.
    
    > [!IMPORTANT]
    > ## 🔌 Compatibility With Generic Coding Skills
    >
    > - `ppt-master` is a repository-specific workflow, not a general application scaffold
    > - Do NOT create `.worktrees/`, `tests/`, branch workflows, or generic engineering structure by default
    > - On conflict with a generic coding skill, follow this skill unless the user explicitly says otherwise
    
    ## Main Pipeline Scripts
    
    | Script | Purpose |
    |--------|---------|
    | `${SKILL_DIR}/scripts/source_to_md/pdf_to_md.py` | PDF to Markdown |
    | `${SKILL_DIR}/scripts/source_to_md/doc_to_md.py` | Documents to Markdown — native Python for DOCX/HTML/EPUB/IPYNB, pandoc fallback for legacy formats (.doc/.odt/.rtf/.tex/.rst/.org/.typ) |
    | `${SKILL_DIR}/scripts/source_to_md/excel_to_md.py` | Excel workbooks to Markdown — supports .xlsx/.xlsm; legacy .xls should be resaved as .xlsx |
    | `${SKILL_DIR}/scripts/source_to_md/ppt_to_md.py` | PowerPoint to Markdown |
    | `${SKILL_DIR}/scripts/source_to_md/web_to_md.py` | Web page to Markdown |
    | `${SKILL_DIR}/scripts/source_to_md/web_to_md.cjs` | Node.js fallback for WeChat / TLS-blocked sites (use only if `curl_cffi` is unavailable; `web_to_md.py` now handles WeChat when `curl_cffi` is installed) |
    | `${SKILL_DIR}/scripts/project_manager.py` | Project init / validate / manage |
    | `${SKILL_DIR}/scripts/analyze_images.py` | Image analysis |
    | `${SKILL_DIR}/scripts/image_gen.py` | AI image generation (multi-provider) |
    | `${SKILL_DIR}/scripts/svg_quality_checker.py` | SVG quality check |
    | `${SKILL_DIR}/scripts/total_md_split.py` | Speaker notes splitting |
    | `${SKILL_DIR}/scripts/finalize_svg.py` | SVG post-processing (unified entry) |
    | `${SKILL_DIR}/scripts/svg_to_pptx.py` | Export to PPTX |
    | `${SKILL_DIR}/scripts/update_spec.py` | Propagate a `spec_lock.md` color / font_family change across all generated SVGs |
    
    For complete tool documentation, see `${SKILL_DIR}/scripts/README.md`.
    
    ## Template Index
    
    | Index | Path | Purpose |
    |-------|------|---------|
    | Layout templates | `${SKILL_DIR}/templates/layouts/layouts_index.json` | Query available page layout templates |
    | Visualization templates | `${SKILL_DIR}/templates/charts/charts_index.json` | Query available visualization SVG templates (charts, infographics, diagrams, frameworks) |
    | Icon library | `${SKILL_DIR}/templates/icons/` | See `${SKILL_DIR}/templates/icons/README.md`; search icons on demand with `ls templates/icons/<library>/ \| grep <keyword>` |
    
    ## Standalone Workflows
    
    | Workflow | Path | Purpose |
    |----------|------|---------|
    | `create-template` | `workflows/create-template.md` | Standalone template creation workflow |
    | `verify-charts` | `workflows/verify-charts.md` | Chart coordinate calibration — run after SVG generation if the deck contains data charts |
    | `visual-edit` | `workflows/visual-edit.md` | Browser-based visual editor for fine-grained edits — run only when the user explicitly requests it after export |
    
    ---
    
    ## Workflow
    
    ### Step 1: Source Content Processing
    
    🚧 **GATE**: User has provided source material (PDF / DOCX / EPUB / URL / Markdown file / text description / conversation content — any form is acceptable).
    
    When the user provides non-Markdown content, convert immediately:
    
    | User Provides | Command |
    |---------------|---------|
    | PDF file | `python3 ${SKILL_DIR}/scripts/source_to_md/pdf_to_md.py <file>` |
    | DOCX / Word / Office document | `python3 ${SKILL_DIR}/scripts/source_to_md/doc_to_md.py <file>` |
    | XLSX / XLSM / Excel workbook | `python3 ${SKILL_DIR}/scripts/source_to_md/excel_to_md.py <file>` |
    | CSV / TSV | Read directly as plain-text table source |
    | PPTX / PowerPoint deck | `python3 ${SKILL_DIR}/scripts/source_to_md/ppt_to_md.py <file>` |
    | EPUB / HTML / LaTeX / RST / other | `python3 ${SKILL_DIR}/scripts/source_to_md/doc_to_md.py <file>` |
    | Web link | `python3 ${SKILL_DIR}/scripts/source_to_md/web_to_md.py <URL>` |
    | WeChat / high-security site | `python3 ${SKILL_DIR}/scripts/source_to_md/web_to_md.py <URL>` (requires `curl_cffi`; falls back to `node web_to_md.cjs <URL>` only if that package is unavailable) |
    | Markdown | Read directly |
    
    **✅ Checkpoint — Confirm source content is ready, proceed to Step 2.**
    
    ---
    
    ### Step 2: Project Initialization
    
    🚧 **GATE**: Step 1 complete; source content is ready (Markdown file, user-provided text, or requirements described in conversation are all valid).
    
    ```bash
    python3 ${SKILL_DIR}/scripts/project_manager.py init <project_name> --format <format>
    ```
    
    Format options: `ppt169` (default), `ppt43`, `xhs`, `story`, etc. For the full format list, see `references/canvas-formats.md`.
    
    Import source content (choose based on the situation):
    
    | Situation | Action |
    |-----------|--------|
    | Has source files (PDF/MD/etc.) | `python3 ${SKILL_DIR}/scripts/project_manager.py import-sources <project_path> <source_files...> --move` |
    | User provided text directly in conversation | No import needed — content is already in conversation context; subsequent steps can reference it directly |
    
    > ⚠️ **MUST use `--move`** (not copy): all source files — Step 1's generated Markdown, original PDFs / MDs / images — go into `sources/` via `import-sources --move`. After execution they no longer exist at the original location. Intermediate artifacts (e.g., `_files/`) are handled automatically.
    
    **✅ Checkpoint — Confirm project structure created successfully, `sources/` contains all source files, converted materials are ready. Proceed to Step 3.**
    
    ---
    
    ### Step 3: Template Option
    
    🚧 **GATE**: Step 2 complete; project directory structure is ready.
    
    **Default — free design.** Proceed directly to Step 4. Do NOT query `layouts_index.json`. Do NOT ask the user an A/B template-vs-free-design question.
    
    **Template flow is opt-in.** Enter it only when an explicit trigger appears in the user's prior messages:
    
    1. Names a specific template (e.g., "用 mckinsey 模板" / "use the academic_defense template")
    2. Names a style / brand reference that maps to a template (e.g., "McKinsey 那种" / "Google style" / "学术答辩样式")
    3. Asks what templates exist (e.g., "有哪些模板可以用")
    
    When triggered: read `${SKILL_DIR}/templates/layouts/layouts_index.json`, resolve the match (or list options for trigger 3), and copy:
    
    ```bash
    cp ${SKILL_DIR}/templates/layouts/<template_name>/*.svg <project_path>/templates/
    cp ${SKILL_DIR}/templates/layouts/<template_name>/design_spec.md <project_path>/templates/
    cp ${SKILL_DIR}/templates/layouts/<template_name>/*.png <project_path>/images/ 2>/dev/null || true
    cp ${SKILL_DIR}/templates/layouts/<template_name>/*.jpg <project_path>/images/ 2>/dev/null || true
    ```
    
    **Soft hint (non-blocking).** When content is an obvious strong match for an existing template (e.g., academic defense, government report, McKinsey-style deck) AND no template trigger fired, emit a single-sentence notice and continue without waiting:
    
    > Note: the library has a template `<name>` that matches this scenario closely. Say the word if you want to use it; otherwise I'll continue with free design.
    
    Hint, not question — do NOT block. Skip entirely on weak/ambiguous match.
    
    > To create a new global template, read `workflows/create-template.md`
    
    **✅ Checkpoint — Default path proceeds to Step 4 without user interaction. If a template trigger fired, template files are copied before advancing.**
    
    ---
    
    ### Step 4: Strategist Phase (MANDATORY — cannot be skipped)
    
    🚧 **GATE**: Step 3 complete; default free-design path taken, or (if triggered) template files copied into the project.
    
    First, read the role definition:
    ```
    Read references/strategist.md
    ```
    
    > ⚠️ **Mandatory gate**: before writing `design_spec.md`, Strategist MUST `read_file templates/design_spec_reference.md` and follow its full I–XI section structure. See `strategist.md` Section 1.
    
    **Eight Confirmations** (full template: `templates/design_spec_reference.md`):
    
    ⛔ **BLOCKING**: present the Eight Confirmations as a bundled recommendation set and **wait for explicit user confirmation or modification** before outputting Design Specification & Content Outline. This is the single core confirmation point — once confirmed, all subsequent steps proceed automatically.
    
    1. Canvas format
    2. Page count range
    3. Target audience
    4. Style objective
    5. Color scheme
    6. Icon usage approach
    7. Typography plan
    8. Image usage approach
    
    If the user provided images, run analysis **before outputting the design spec**:
    ```bash
    python3 ${SKILL_DIR}/scripts/analyze_images.py <project_path>/images
    ```
    
    > ⚠️ **Image handling**: NEVER directly read / open / view image files (`.jpg`, `.png`, etc.). All image info comes from `analyze_images.py` output or the Design Spec's Image Resource List.
    
    **Output**:
    - `<project_path>/design_spec.md` — human-readable design narrative
    - `<project_path>/spec_lock.md` — machine-readable execution contract (skeleton: `templates/spec_lock_reference.md`); Executor re-reads before every page
    
    **✅ Checkpoint — Phase deliverables complete, auto-proceed to next step**:
    ```markdown
    ## ✅ Strategist Phase Complete
    - [x] Eight Confirmations completed (user confirmed)
    - [x] Design Specification & Content Outline generated
    - [x] Execution lock (spec_lock.md) generated
    - [ ] **Next**: Auto-proceed to [Image_Generator / Executor] phase
    ```
    
    ---
    
    ### Step 5: Image Acquisition Phase (Conditional)
    
    🚧 **GATE**: Step 4 complete; Design Specification & Content Outline generated and user confirmed.
    
    > **Trigger**: At least one row in the resource list has `Acquire Via: ai` and/or `Acquire Via: web`. If every row is `user` or `placeholder`, skip to Step 6.
    
    **Always load the common framework**:
    
    ```
    Read references/image-base.md
    ```
    
    Then **lazy-load the path-specific reference** for each row that actually needs it:
    
    | Acquire Via | Load reference (only if any such row exists) | Run |
    |---|---|---|
    | `ai` | `references/image-generator.md` | `python3 ${SKILL_DIR}/scripts/image_gen.py ...` |
    | `web` | `references/image-searcher.md` | `python3 ${SKILL_DIR}/scripts/image_search.py ...` |
    | `user` / `placeholder` | (skip) | (skip) |
    
    A deck with only `ai` rows never loads `image-searcher.md`; a deck with only `web` rows never loads `image-generator.md`. A mixed deck loads both, processes each row through its own path, and writes both `image_prompts.md` and `image_sources.json`.
    
    Workflow:
    
    1. Extract all rows with `Status: Pending` and `Acquire Via ∈ {ai, web}` from the design spec
    2. Generate prompts (ai rows) and/or run search (web rows) per [image-base.md](references/image-base.md) §2 dispatch table
    3. Verify every row reaches a terminal status: `Generated` (ai success), `Sourced` (web success), or `Needs-Manual`
    
    **✅ Checkpoint — Confirm acquisition attempted for every row, proceed to Step 6**:
    ```markdown
    ## ✅ Image Acquisition Phase Complete
    - [x] image_prompts.md created (when any ai rows processed)
    - [x] image_sources.json created (when any web rows processed)
    - [x] Each row: status is `Generated` / `Sourced` / `Needs-Manual` (no `Pending` remaining)
    ```
    
    > On acquisition failure, do NOT halt — follow the Failure Handling rule in [image-base.md](references/image-base.md) §5: retry once, then mark the row `Needs-Manual`, report to user, and continue to Step 6.
    
    ---
    
    ### Step 6: Executor Phase
    
    🚧 **GATE**: Step 4 (and Step 5 if triggered) complete; all prerequisite deliverables are ready.
    
    Read the role definition based on the selected style:
    ```
    Read references/executor-base.md          # REQUIRED: common guidelines
    Read references/shared-standards.md       # REQUIRED: SVG/PPT technical constraints
    Read references/executor-general.md       # General flexible style
    Read references/executor-consultant.md    # Consulting style
    Read references/executor-consultant-top.md # Top consulting style (MBB level)
    ```
    
    > Only read executor-base + shared-standards + one style file.
    
    **Design Parameter Confirmation (Mandatory)**: before the first SVG, output key design parameters from the spec (canvas dimensions, color scheme, font plan, body font size). See executor-base.md §2.
    
    **Pre-generation Batch Read (Mandatory)**: before the first SVG, batch-read every distinct layout SVG referenced in `spec_lock.page_layouts` and every distinct chart SVG referenced in `spec_lock.page_charts` (plus any §VII backup charts). One read per file, up front — do not re-read these during page generation. See executor-base.md §1.0.
    
    **Per-page spec_lock re-read (Mandatory)**: before **each** SVG page, `read_file <project_path>/spec_lock.md` and use only its colors / fonts / icons / images, plus the per-page `page_rhythm` / `page_layouts` / `page_charts` lookups (resolves to template SVGs already loaded in the batch read above). Resists context-compression drift on long decks. See executor-base.md §2.1.
    
    > ⚠️ **Main-agent only**: SVG generation MUST stay in the current main agent — page design depends on full upstream context. Do NOT delegate to sub-agents.
    > ⚠️ **Generation rhythm**: generate pages sequentially, one at a time, in the same continuous context. Do NOT batch (e.g., 5 per group).
    
    **Visual Construction Phase**: generate SVG pages sequentially, one at a time, in one continuous pass → `<project_path>/svg_output/`
    
    **Quality Check Gate (Mandatory)** — after all SVGs, BEFORE speaker notes:
    ```bash
    python3 ${SKILL_DIR}/scripts/svg_quality_checker.py <project_path>
    ```
    - Any `error` (banned SVG features, viewBox mismatch, spec_lock drift, etc.) MUST be fixed before proceeding — return to Visual Construction, regenerate that page, re-run check.
    - `warning` entries (low-res image, non-PPT-safe font tail, etc.): fix when straightforward, otherwise acknowledge and release.
    - Run against `svg_output/` (not after `finalize_svg.py` — finalize rewrites SVG and masks violations).
    
    **Logic Construction Phase**: generate speaker notes → `<project_path>/notes/total.md`
    
    **✅ Checkpoint — Confirm all SVGs and notes are fully generated and quality-checked. Proceed directly to Step 7 post-processing**:
    ```markdown
    ## ✅ Executor Phase Complete
    - [x] All SVGs generated to svg_output/
    - [x] svg_quality_checker.py passed (0 errors)
    - [x] Speaker notes generated at notes/total.md
    ```
    
    > **Chart pages?** If this deck contains data charts (bar / line / pie / radar / etc.), run the standalone [`verify-charts`](workflows/verify-charts.md) workflow before Step 7 to calibrate coordinates. AI models routinely introduce 10–50 px errors when mapping data to pixel positions; verify-charts eliminates that class of error. Skip if no chart pages.
    
    ---
    
    ### Step 7: Post-processing & Export
    
    🚧 **GATE**: Step 6 complete; all SVGs generated to `svg_output/`; speaker notes `notes/total.md` generated.
    
    🚧 **Image readiness GATE** (when Step 5 left ai rows in `Needs-Manual`): every expected file must exist at `project/images/<filename>` before running 7.1.
    
    > If files are missing: PAUSE, list the missing filenames, point the user to `images/image_prompts.md` (each `### Image N:` block is paste-ready for ChatGPT / Gemini / Midjourney) and the required placement `project/images/<filename>`. Resume Step 7.1 only after all expected files are in place. `finalize_svg.py` and `svg_to_pptx.py` do not detect missing files at this layer — proceeding with gaps produces a deck with broken image references.
    
    > ⚠️ Run the three sub-steps **one at a time** — each must complete successfully before the next.
    > ❌ **NEVER** combine them into a single code block or shell invocation.
    
    Canonical three-command pipeline (mirrors `references/shared-standards.md` §5):
    
    **Step 7.1** — Split speaker notes:
    ```bash
    python3 ${SKILL_DIR}/scripts/total_md_split.py <project_path>
    ```
    
    **Step 7.2** — SVG post-processing (icon embedding / image crop & embed / text flattening / rounded rect to path):
    ```bash
    python3 ${SKILL_DIR}/scripts/finalize_svg.py <project_path>
    ```
    
    **Step 7.3** — Export PPTX (embeds speaker notes by default):
    ```bash
    python3 ${SKILL_DIR}/scripts/svg_to_pptx.py <project_path>
    # Output:
    #   exports/<project_name>_<timestamp>.pptx           ← main native pptx (reads svg_output/, high fidelity)
    #   backup/<timestamp>/<project_name>_svg.pptx        ← SVG preview pptx (reads svg_final/)
    #   backup/<timestamp>/svg_output/                    ← Executor SVG source backup
    ```
    
    > The two products now read from different sources by design: native pptx
    > consumes `svg_output/` so the converter can preserve high-fidelity primitives
    > (icon `<use>` placeholders, image `preserveAspectRatio` → `srcRect`, rounded
    > rect `rx/ry` → `prstGeom roundRect`). The legacy/preview pptx still consumes
    > `svg_final/` because PowerPoint's internal SVG parser cannot handle those
    > primitives. Pass `-s output` or `-s final` to force a single source on both
    > products if you need the older single-source behaviour.
    
    **Optional animation flags** (the defaults already enable rich entrance animations — adjust only when the user asks for something different):
    - `-t <effect>` — page transition. Default `fade`. Options: `fade` / `push` / `wipe` / `split` / `strips` / `cover` / `random` / `none`.
    - `-a <effect>` — per-element entrance animation. Default `mixed` (auto-vary across the deck). Pass `none` to disable, or pick a specific effect like `fade`. Requires top-level `<g id="...">` groups (already required by Executor).
    - `--animation-trigger {on-click,with-previous,after-previous}` — Start mode (matches PowerPoint's animation-pane Start dropdown). Default `after-previous` (click-free cascade; pace via `--animation-stagger`). Use `on-click` for presenter-paced reveals, or `with-previous` for all-at-once.
    - `--auto-advance <seconds>` — kiosk-style auto-play.
    
    **Optional recorded narration** (only when the user asks for narrated/video export):
    
    Run the standalone [`generate-audio`](workflows/generate-audio.md) workflow. The AI picks a narration backend (`edge` by default, or a configured cloud provider such as ElevenLabs / MiniMax / Qwen / CosyVoice for high-quality or cloned voices), asks the user once (backend + voice + rate/settings + embed-or-not, all with recommended values), then executes `notes_to_audio.py` and (if chosen) re-exports the PPTX with `--recorded-narration audio`.
    
    Do NOT call `notes_to_audio.py` directly without going through the workflow — `--voice` / `--voice-id` is required and the workflow produces the locale/provider-aware recommendation that makes the choice meaningful.
    
    Full effect list, anchor logic, and limits: [`references/animations.md`](references/animations.md).
    
    > ❌ **NEVER** substitute `cp` for `finalize_svg.py` — finalize performs multiple critical processing steps
    > ❌ **NEVER** force `-s output` for the legacy/preview pptx (PowerPoint's internal SVG parser drops icons and rounded corners). The default auto-split already gives native the high-fidelity source it needs without touching legacy.
    > ❌ **NEVER** use `--only` (it suppresses one of the two output files)
    
    > Post-export iteration: whenever the user asks to change anything on a generated slide ("改一下", "调字号", "那里看着不对", "把图片换大点"), the [`visual-edit`](workflows/visual-edit.md) workflow is available — surface it as an option. If the user describes the change with enough specificity to apply directly ("第 3 页副标题字号改 32"), edit the SVG directly instead; if they're vaguely pointing at "somewhere" on the deck, run the workflow.
    
    ---
    
    ## Role Switching Protocol
    
    Before switching roles, **MUST first read** the corresponding reference file. Output marker:
    
    ```markdown
    ## [Role Switch: <Role Name>]
    📖 Reading role definition: references/<filename>.md
    📋 Current task: <brief description>
    ```
    
    ---
    
    ## Reference Resources
    
    | Resource | Path |
    |----------|------|
    | Shared technical constraints | `references/shared-standards.md` |
    | Canvas format specification | `references/canvas-formats.md` |
    | Image layout specification | `references/image-layout-spec.md` |
    | SVG image embedding | `references/svg-image-embedding.md` |
    | Icon library | `templates/icons/README.md` |
    
    ---
    
    ## Notes
    
    - Local preview: `python3 -m http.server -d <project_path>/svg_final 8000`
    - **Troubleshooting**: on generation issues (layout overflow, export errors, blank images, etc.), check `docs/faq.md` for known solutions
    
  • .claude-plugin/marketplace.jsonmarketplace
    Show content (1374 bytes)
    {
      "$schema": "https://json.schemastore.org/claude-code-marketplace.json",
      "name": "ppt-master",
      "owner": {
        "name": "Hugo He",
        "email": "heyug3@gmail.com",
        "url": "https://github.com/hugohe3"
      },
      "metadata": {
        "description": "PPT Master skill — AI generates natively editable PPTX from any document",
        "version": "2.6.0"
      },
      "plugins": [
        {
          "name": "ppt-master",
          "source": "./",
          "description": "Generate natively editable PPTX from PDF / DOCX / URL / Markdown — real DrawingML shapes, text boxes, charts, and animations. Note: this plugin ships only the skill files; you must also `pip install -r requirements.txt` from the project root for the Python post-processing scripts to run.",
          "version": "2.6.0",
          "author": {
            "name": "Hugo He",
            "email": "heyug3@gmail.com",
            "url": "https://www.hehugo.com/"
          },
          "homepage": "https://github.com/hugohe3/ppt-master",
          "repository": "https://github.com/hugohe3/ppt-master",
          "license": "MIT",
          "category": "productivity",
          "keywords": [
            "pptx",
            "presentation",
            "powerpoint",
            "svg",
            "drawingml",
            "ai",
            "skill",
            "office",
            "document-conversion"
          ],
          "strict": false,
          "skills": [
            "./skills/ppt-master"
          ]
        }
      ]
    }
    

README

PPT Master — AI generates natively editable PPTX from any document

Version License: MIT GitHub stars AtomGit stars

English | 中文

This project is kept free and open source with the support of PackyCode and other sponsors.

PackyCodeThanks to PackyCode for sponsoring this project! PackyCode is a reliable and efficient API relay service provider, offering relay services for Claude Code, Codex, Gemini, and more. PackyCode provides special discounts for our project users: register using this link and enter the promo code ppt-master during recharge to get 10% off.

Live Demo · About Hugo He · Examples · FAQ · Contact

Demo: generating a 12-page PPT from a WeChat article with Claude Opus 4.7

↑ A 12-page natively editable deck, generated end-to-end from a single WeChat article URL using Claude Opus 4.7. No manual design. No image export. Every shape, text box, and chart is clickable and editable in PowerPoint.


Drop in a PDF, DOCX, URL, or Markdown — get back a natively editable PowerPoint with real shapes, real text boxes, and real charts. Not images. Click anything and edit it.

Template Replication — hand the AI any .pptx you like and say "replicate it as a template via /create-template" — you get a layout set PPT Master can invoke directly. Theme colors, fonts, master/layout structure, reusable images, even sprite-sheet crop relationships are extracted straight from OOXML, so covers, chapter dividers and decoration-heavy pages all reproduce reliably. You're no longer limited to the built-in templates: a company brand deck, a client's winning template, or any high-quality reference can become a private template in your own library. See Templates Guide →.

Animations — exported decks support page transitions and per-element entrance animations as real OOXML, not embedded video. By default, elements cascade in automatically on slide entry — no clicking needed. Plays natively in PowerPoint and Keynote, no extra tooling. See Animations & Transitions →.

Narration & Video — generate per-slide voice narration from the speaker notes (edge-tts by default, optional cloud TTS providers for high-quality narration), embed the audio back into the PPTX, and let PowerPoint export the deck as an MP4 video — synced narration + transitions, no third-party tools. See Audio Narration & Video Export →.

Voice Cloning — bring your own cloned voice from ElevenLabs / MiniMax / Qwen / CosyVoice and have the entire deck narrated in your voice (or a presenter's, with permission). Clone once in the provider's console, then pass the voice_id — PPT Master reads every slide's notes in that voice and embeds the result back into the PPTX. See Use a cloned voice →.

How it works — PPT Master is a workflow (a "skill") that works inside AI IDEs like Claude Code, Cursor, VS Code + Copilot, or Codebuddy. You chat with the AI — "make a deck from this PDF" — and it follows the workflow to produce a real editable .pptx on your computer. No coding on your side; the IDE is just where the conversation happens.

What you'll do: install Python, install an AI IDE, drop in your material.

PPT Master is different:

  • Real PowerPoint — if a file can't be opened and edited in PowerPoint, it shouldn't be called a PPT. Every element PPT Master outputs is directly clickable and editable
  • Transparent, predictable cost — the tool is free and open source; the only cost is your AI model usage. As AI tools move to usage-based billing, you pay exactly what you consume — no separate PPT subscription added on top
  • Data stays local — your files shouldn't have to be uploaded to someone else's server just to make a presentation. Apart from AI model communication, the entire pipeline runs on your machine
  • No platform lock-in — your workflow shouldn't be held hostage by any single company. Works with Claude Code, Cursor, VS Code Copilot, and more; supports Claude, GPT, Gemini, Kimi, and other models

AI presentation tools roughly fall into four categories. PPT Master only does the last one:

CategoryOutputEditable element-by-element in PowerPoint?
Template fill-inPPTX built from a fixed templatePartially — limited by the template
Image-basedOne large image per slide, packed into PPTX❌ each slide is a picture
HTML presentationWeb-based deck❌ not a PPTX
Native editable (PPT Master)Real DrawingML shapes, text boxes, charts✅ click any element to edit

See live examples → · examples/ — 22 projects, 309 pages · Why PPT Master?

Gallery

Magazine style — Garden building guide
Magazine — warm earthy tones, photo-rich layout
Academic style — Medical image segmentation research
Academic — structured research format, data-driven
Dark art style — Music video analysis
Dark Art — cinematic dark background, gallery aesthetic
Nature style — Wildlife wetland documentary
Nature Documentary — immersive photography, minimal UI
Tech style — Claude AI subscription plans
Tech / SaaS — clean white cards, pricing table layout
Product launch style — Xiaomi spring release
Product Launch — high contrast, bold specs highlight

Built by Hugo He

I'm a finance professional (CPA · CPV · Consulting Engineer (Investment)) who regularly reviews and edits presentation decks. I wanted AI-generated slides to remain editable in PowerPoint, not flattened into images — so I built this.

🌐 Personal website · 📧 heyug3@gmail.com · 🐙 @hugohe3


Quick Start

1. Prerequisites

You only need Python. Everything else is installed via pip install -r requirements.txt.

DependencyRequired?What it does
Python 3.10+YesCore runtime — the only thing you actually need to install

TL;DR — Install Python, run pip install -r requirements.txt, and you're ready to generate presentations.

Windows — see the dedicated step-by-step guide ⚠️

Windows requires a few extra steps (PATH setup, execution policy, etc.). We wrote a step-by-step guide specifically for Windows users:

📖 Windows Installation Guide — from zero to a working presentation in 10 minutes.

Quick version: download Python from python.orgcheck "Add to PATH" during install → pip install -r requirements.txt → done.

macOS / Linux — install and go
# macOS
brew install python
pip install -r requirements.txt

# Ubuntu / Debian
sudo apt install python3 python3-pip
pip install -r requirements.txt
Edge-case fallbacks — 99% of users don't need these

Two external tools exist as fallbacks for edge cases. Most users will never need them — install only if you hit one of the specific scenarios below.

FallbackInstall only if…
Node.js 18+You need to import WeChat Official Account articles and curl_cffi (part of requirements.txt) has no prebuilt wheel for your Python + OS + CPU combination. In normal setups web_to_md.py handles WeChat directly through curl_cffi.
PandocYou need to convert legacy formats: .doc, .odt, .rtf, .tex, .rst, .org, or .typ. .docx, .html, .epub, .ipynb are handled natively by Python — no pandoc required.
# macOS (only if the above conditions apply)
brew install node
brew install pandoc

# Ubuntu / Debian
sudo apt install nodejs npm
sudo apt install pandoc

2. Pick an Agent

PPT Master runs in any tool with agent capability — read/write files, execute commands, and sustain multi-turn conversation.

TypeExamplesNotes
IDE-native agent• VS Code architecture (VS Code itself, plus forks & derivatives): Cursor, Trae, Codebuddy IDE, Windsurf, Void, etc.
• Other architectures: Zed, etc.
Editor with a built-in agent
IDE plugin / extensionGitHub Copilot, Claude Code (VS Code / JetBrains extension), Cline, Continue, Roo Code, etc.Installed inside hosts like VS Code or JetBrains
CLI agentClaude Code CLI, Codex CLI, Aider, Gemini CLI, etc.Runs in the terminal; suits scripting, remote, or server use

Model recommendation: Claude Opus / Sonnet works best and is most tested. Other mainstream models (GPT, Gemini, Kimi, MiniMax, etc.) also work, but SVG absolute-coordinate layout precision varies.

🔑 Want to use Claude / GPT / Gemini but don't have access yet? Project sponsor PackyCode can help — whether you lack an API key, can't connect directly, have no way to subscribe, or just don't want to pay a full monthly fee for occasional use, PackyCode lets you call Claude, GPT, Gemini and more on a pay-as-you-go basis, no subscription required. Enter promo code ppt-master when topping up for 10% off.

3. Set Up

Option A — Download ZIP (no Git required): click Code → Download ZIP on the GitHub page, then unzip.

Option B — Git clone (requires Git installed):

git clone https://github.com/hugohe3/ppt-master.git
cd ppt-master

Then install dependencies:

pip install -r requirements.txt

To update later (Option A / B): python3 skills/ppt-master/scripts/update_repo.py

Option C — Skill marketplace: the repo ships .claude-plugin/marketplace.json, so it can be installed through the Claude Code plugin marketplace ecosystem:

# Cross-agent CLI (Claude Code, Cursor, Codex, etc.)
npx skills add hugohe3/ppt-master

# Or inside Claude Code
/plugin marketplace add hugohe3/ppt-master
/plugin install ppt-master@ppt-master

Both install paths above only fetch the skill files (not the full repo); you still need to pip install -r requirements.txt from the installed location for the post-processing scripts to run.

4. Create

Provide source materials (recommended): Place your PDF, DOCX, images, or other files in the projects/ directory, then tell the AI chat panel which files to use. The quickest way to get the path: right-click the file in your file manager or IDE sidebar → Copy Path (or Copy Relative Path) and paste it directly into the chat.

You: Please create a PPT from projects/q3-report/sources/report.pdf

Paste content directly: You can also paste text content straight into the chat window and the AI will generate a PPT from it.

You: Please turn the following into a PPT: [paste your content here...]

Either way, the AI will first confirm the design spec:

AI:  Sure. Let's confirm the design spec:
     [Template] B) Free design
     [Format]   PPT 16:9
     [Pages]    8-10 pages
     ...

The AI handles everything — content analysis, visual design, SVG generation, and PPTX export.

Output: Main native-shapes .pptx (directly editable) saved to exports/<name>_<timestamp>.pptx. The SVG snapshot _svg.pptx and a copy of svg_output/ are archived to backup/<timestamp>/ for visual reference and pptx rebuild without re-running the LLM. Requires Office 2016+.

AI lost context? Ask it to read skills/ppt-master/SKILL.md.

Something went wrong? Check the FAQ — it covers model selection, layout issues, export problems, and more. Continuously updated from real user reports.

5. Image Acquisition (Optional)

Two paths for non-user images, mixable per row in the same deck:

For API-backed features, put credentials in .env. Clone installs can use cp .env.example .env; skill marketplace installs should use a persistent user config:

mkdir -p ~/.ppt-master
cp /path/to/installed/ppt-master/.env.example ~/.ppt-master/.env

PPT Master reads the current process environment first, then the first .env found in this order: current working directory, clone repo root, ~/.ppt-master/.env.

A) AI generationimage_gen.py. Set IMAGE_BACKEND plus the provider's *_API_KEY (OPENAI_API_KEY, GEMINI_API_KEY, etc.), and the pipeline calls it automatically. Run python3 skills/ppt-master/scripts/image_gen.py --list-backends for the full backend list. gpt-image-2 is currently the best default.

B) Web image searchimage_search.py. Zero-config works, but configure PEXELS_API_KEY / PIXABAY_API_KEY (both free) for higher-quality results. Without keys, search uses Openverse / Wikimedia Commons only; this is useful as a fallback, but image quality can be uneven because many results are ordinary user uploads. With keys, the default provider chain also appends Pexels / Pixabay, which materially improves modern stock photography, people, workplace, lifestyle, and illustration coverage. The default is quality-first: CC0, Public Domain, Pexels / Pixabay no-attribution licenses, CC BY, and CC BY-SA are considered together, and Executor adds a small inline credit whenever the selected image requires attribution. Use --strict-no-attribution only when a slide cannot tolerate any credit line. For high-impact covers, product shots, portraits, and branded scenes, prefer this order: user-provided high-resolution assets / AI generation > web search with Pexels / Pixabay keys > zero-config web search.

Full reference: image-generator.md (AI) · image-searcher.md (web).


Documentation

DocumentDescription
🆚Why PPT MasterHow it compares to Gamma, Copilot, and other AI tools
🪟Windows InstallationStep-by-step setup guide for Windows users
📖SKILL.mdCore workflow and rules
🎨Templates GuideUse, derive (the focus), and template boundaries; covers standard vs fidelity modes
📐Canvas FormatsPPT 16:9, Xiaohongshu, WeChat, and 10+ formats
🎬Animations & TransitionsPage transitions and per-element entrance animations
🎙️Audio Narration & Video ExportTTS narration in 90+ locales, embed audio, export as MP4
🛠️Scripts & ToolsAll scripts and commands
💼Examples22 projects, 309 pages
🏗️Technical DesignArchitecture, design philosophy, why SVG
FAQModel selection, cost, layout troubleshooting, custom templates

Contributing

See CONTRIBUTING.md for how to get involved.

License

MIT

Acknowledgments

SVG Repo · Tabler Icons · Simple Icons · Phosphor Icons · Robin Williams (CRAP principles)

Contact & Collaboration

Looking to collaborate, integrate PPT Master into your workflow, or just have questions?


Star History

Star History Chart

Sponsors & Support

PPT Master is currently built and maintained primarily by me. Every new template, bug fix, and documentation update takes ongoing resources — currently shared by the sponsors and individual supporters below.

Corporate sponsors

PackyCode   Powered by DigitalOcean

Individual support

If PPT Master has been helpful to you, individual support of any amount helps keep the project moving and free.

Sponsor via PayPal

Alipay QR Code

Made with ❤️ by Hugo He — if this project helps you, please give it a ⭐ and consider sponsoring.

Official distribution: GitHub (primary) · AtomGit (mirror). Redistributions on other platforms are unofficial. MIT licensed — attribution required.

⬆ Back to Top