1 / 1

presentation skills · local install & workflow

Presentation Skills Guide

Complete walkthrough for generate-outline-deck (HTML) & pptx (PowerPoint) with local execution & GitHub Pages.

generate-outline-deck pptx skill claude-plugins-local GitHub Pages

Two Skills for Two Presentation Worlds

1. generate-outline-deck

Format: Single-file standalone HTML (CSS + JS inline)

Core strength: Left outline navigation, laser pointer, dark mode, deep links.

Best for: Web-first technical walkthroughs, internal documentation, instant GitHub Pages hosting.

2. pptx skill

Format: Native Microsoft PowerPoint (.pptx / .potx)

Core strength: Programmatic creation via pptxgenjs or corporate template surgery.

Best for: Executive decks, offline presentations, enterprise templates.

Which Skill Should You Choose?

generate-outline-deck

• Trigger: "做个演示 / make a deck / generate presentation"

• Audience can open in browser

• Needs sidebar outline & fast jump

• Zero runtime build dependencies

pptx skill

• Trigger: "做个PPT / make a pptx / .pptx file"

• Audience expects PowerPoint attachment

• Requires corporate .potx template

• Needs native charts & presenter notes

Plain Markdown (---)

• Trigger: "快速整理3页大纲"

• Short, linear lightning talks

• No navigation or design polish needed

generate-outline-deck: Core Features

Derived Outline

Left navigation automatically groups slides by data-section. Highlight and page counter sync live as you advance.

Presenter Tools

☰ Outline toggle · ● Laser pointer (mouse cursor tracking) · ⛶ Fullscreen · 📄 PDF export · ⚙ Theme & Font settings.

Deep Links & Themes

deck.html#5 opens directly to slide 5. Default dark theme (#0b0b0d) with one-click light theme switch.

Outline Deck: Slide Anatomy

Every slide is a <section class="slide"> with three metadata attributes:

<section class="slide"
         data-deck="v1"        <!-- Deck version group (keep "v1" for single-version) -->
         data-section="Guide"  <!-- Section group heading in left outline -->
         data-title="Install"> <!-- Clickable item title in outline sidebar -->
  <h2>Slide Content</h2>
  <p>Paragraph, lists, or layout grids here.</p>
</section>

Adding, removing, or reordering sections automatically updates the outline tree, counter, and progress bar.

Outline Deck: Keyboard Shortcuts

Slide Navigation

/ Space / PageDown — Next slide

/ PageUp — Previous slide

Home / End — Jump to first / last slide

Presenter Utilities

o — Toggle left outline sidebar

l — Toggle laser pointer dot

f — Toggle fullscreen mode

p — Open browser PDF print dialog

s / Esc — Open / close settings modal

Install Outline Skill: Local Marketplace

Manage the skill locally via claude-plugins-local git marketplace:

# 1. Local marketplace repository location
cd ~/projects/claude-plugins-local
# Contains: plugins/presentation-skills/skills/generate-outline-deck/

# 2. Register in Claude Code (~/.claude/plugins/known_marketplaces.json)
{
  "claude-plugins-local": {
    "source": "git",
    "url": "file:///Users/wangyong/projects/claude-plugins-local"
  }
}

Crucial Rule: Marketplace source must be "git" + "file://...". Do NOT use "directory" due to known Claude Code relative path resolution bugs (#23978 / #26861).

Run Outline Deck Locally

1. Direct File Opening

Double-click deck.html or run in terminal:

open deck.html
# Or specify Google Chrome:
open -a "Google Chrome" deck.html

All client-side JS works offline without any web server.

2. Local Static HTTP Server

Ideal for testing query params (?deck=v2) and deep links:

cd ~/projects/github/wangyong1972/docs/
python3 -m http.server 8000
# Visit http://127.0.0.1:8000/presentation-skills/deck.html

pptx Skill: Architecture & Approaches

A PowerPoint .pptx file is a ZIP package containing OpenXML structures.

Approach A: Programmatic (pptxgenjs)

• Write a Node.js script using require('pptxgenjs').

• Build slides, shapes, tables, and native charts from scratch.

• Validate output with python scripts/office/validate.py.

Approach B: Template Surgery

• Unpack existing .potx template: zipfile.extractall().

• Duplicate slide layout: python scripts/add_slide.py.

• Edit ppt/slides/slideN.xml via minidom, then clean & zip.

pptx Skill: Local Environment Setup

Run these once on macOS to equip your machine for PPTX authoring and rendering:

# 1. Node.js environment (for pptxgenjs script execution)
npm install -g pptxgenjs react-icons react react-dom sharp

# 2. Python parsing & validation tools
pip install "markitdown[pptx]" Pillow defusedxml lxml

# 3. Headless PDF & image conversion tools (macOS Homebrew)
brew install poppler           # provides pdftoppm for visual rendering
brew install --cask libreoffice # provides soffice for headless PDF conversion

pptx Skill: Script Toolchain

Validation & Conversion

scripts/office/validate.py deck.pptx
Verifies OpenXML schemas, rels, and native charts.

scripts/office/soffice.py --headless --convert-to pdf deck.pptx
Safe LibreOffice wrapper for headless PDF conversion.

Layout & Packaging

scripts/thumbnail.py deck.pptx [prefix]
Generates labeled thumbnail grid of all slides.

scripts/add_slide.py unpacked/ slide2.xml -o out.pptx
Duplicates slide layout with full package bookkeeping.

scripts/clean.py unpacked/
Removes orphaned slides, media, and unused relationships.

pptx Skill: Critical Gotchas & Rules

  • Colors: Never #, never 8 digits! Use color: "FF0000". Including # or hex alpha corrupts the file.
  • Layout sizing: Default LAYOUT_16x9 is 10" × 5.625". For widescreen 16:9 use LAYOUT_WIDE (13.3" × 7.5").
  • Shadow offset: Offset MUST be ≥ 0. Negative offset corrupts file. Use angle: 270 for upward shadows.
  • Fresh options object: pptxgenjs mutates option objects in place into EMUs — never reuse an options object.
  • Charts: Stacked bar charts require dataLabelPosition: "ctr" | "inEnd" | "inBase".

Publish to GitHub Pages (wangyong1972/docs)

# 1. Create remote repository via GitHub CLI
gh repo create wangyong1972/docs --public --description "Docs & Presentations"

# 2. Push repository structure to origin main
git add . && git commit -m "Add presentation-skills deck"
git push -u origin main

# 3. Enable GitHub Pages on main branch
gh repo edit wangyong1972/docs --enable-pages --pages-branch main

# 4. Access live presentation URL
# https://wangyong1972.github.io/docs/presentation-skills/

Multi-Deck Documentation Repository Layout

~/projects/github/wangyong1972/docs/
├── index.html                    # Root portal landing page with links to all decks
├── README.md                     # Repo overview, presentation links & quickstart
└── presentation-skills/          # Specific presentation directory
    ├── deck.html                 # Outline presentation deck (master source)
    ├── index.html                # Entry copy for clean URL access
    ├── SKILL.md                  # generate-outline-deck skill documentation
    ├── PPTX-SKILL.md             # pptx skill documentation
    ├── components.md             # Visual component copy-paste reference
    └── publishing.md             # Multi-target publishing guide

Visual QA & PDF Export

Outline Deck QA & Export

In-browser: Click 📄 (or press p) → print to PDF.

Headless Chrome:

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
  --headless=new --disable-gpu --no-sandbox \
  --screenshot=/tmp/deck-slide1.png \
  --window-size=1500,980 \
  "file://$(pwd)/deck.html#1"

PPTX QA & Export

Schema QA: python scripts/office/validate.py deck.pptx

Visual slide render:

python scripts/office/soffice.py --headless \
  --convert-to pdf deck.pptx
pdftoppm -jpeg -r 150 deck.pdf slide

Local Machine Installation Checklist

Outline Deck Readiness

claude-plugins-local cloned in ~/projects/

✔ Registered in ~/.claude/plugins/known_marketplaces.json

deck-template.html available in assets

✔ Local browser opens deck.html cleanly

PPTX Readiness

✔ Node.js + pptxgenjs available

✔ Python 3 + markitdown, defusedxml, lxml

✔ LibreOffice installed in /Applications/

✔ Poppler (pdftoppm) installed via Homebrew

Common Pitfalls & Troubleshooting

  • Fixed 1400×900 Canvas: Slide overflow is hidden, not auto-shrunk. Split crowded content across multiple slides.
  • Sandboxed Chrome Hanging: Chrome may appear to time out due to GoogleUpdater background processes, but /tmp/*.png is already generated.
  • CSS Color Variables: Always use var(--accent) and var(--bg-card) so light/dark switching works properly.
  • Marketplace Source: Never use "directory" in known_marketplaces.json; always use "git" + "file://...".

Repository & Documentation Links

Live GitHub Pages Presentation:
https://wangyong1972.github.io/docs/presentation-skills/

GitHub Docs Repository:
https://github.com/wangyong1972/docs

Local Marketplace Path: ~/projects/claude-plugins-local

Obsidian Note: my-wiki/03-HowTo/用generate-outline-deck生成演示文稿.md

Summary: Two Powerful Skillsets

Modern Web Presenting

Use generate-outline-deck for instant, interactive, outline-navigated presentations with zero build tools, hosted directly on GitHub Pages.

Enterprise Office Presenting

Use pptx skill for strictly formatted, native PowerPoint decks with validated XML structures and automated layout generation.

Ready to Present.

Open the live presentation in your browser, press f for fullscreen, o for outline, or l for laser pointer.

https://wangyong1972.github.io/docs/presentation-skills/