Complete walkthrough for generate-outline-deck (HTML) & pptx (PowerPoint) with local execution & GitHub Pages.
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.
Format: Native Microsoft PowerPoint (.pptx / .potx)
Core strength: Programmatic creation via pptxgenjs or corporate template surgery.
Best for: Executive decks, offline presentations, enterprise templates.
• Trigger: "做个演示 / make a deck / generate presentation"
• Audience can open in browser
• Needs sidebar outline & fast jump
• Zero runtime build dependencies
• Trigger: "做个PPT / make a pptx / .pptx file"
• Audience expects PowerPoint attachment
• Requires corporate .potx template
• Needs native charts & presenter notes
• Trigger: "快速整理3页大纲"
• Short, linear lightning talks
• No navigation or design polish needed
Left navigation automatically groups slides by data-section. Highlight and page counter sync live as you advance.
☰ Outline toggle · ● Laser pointer (mouse cursor tracking) · ⛶ Fullscreen · 📄 PDF export · ⚙ Theme & Font settings.
deck.html#5 opens directly to slide 5. Default dark theme (#0b0b0d) with one-click light theme switch.
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.
→ / Space / PageDown — Next slide
← / PageUp — Previous slide
Home / End — Jump to first / last slide
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
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).
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.
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
A PowerPoint .pptx file is a ZIP package containing OpenXML structures.
• 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.
• Unpack existing .potx template: zipfile.extractall().
• Duplicate slide layout: python scripts/add_slide.py.
• Edit ppt/slides/slideN.xml via minidom, then clean & zip.
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
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.
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.
#, never 8 digits! Use color: "FF0000". Including # or hex alpha corrupts the file.LAYOUT_16x9 is 10" × 5.625". For widescreen 16:9 use LAYOUT_WIDE (13.3" × 7.5").angle: 270 for upward shadows.dataLabelPosition: "ctr" | "inEnd" | "inBase".# 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/
~/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
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"
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
✔ 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
✔ Node.js + pptxgenjs available
✔ Python 3 + markitdown, defusedxml, lxml
✔ LibreOffice installed in /Applications/
✔ Poppler (pdftoppm) installed via Homebrew
hidden, not auto-shrunk. Split crowded content across multiple slides./tmp/*.png is already generated.var(--accent) and var(--bg-card) so light/dark switching works properly."directory" in known_marketplaces.json; always use "git" + "file://...".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
Use generate-outline-deck for instant, interactive, outline-navigated presentations with zero build tools, hosted directly on GitHub Pages.
Use pptx skill for strictly formatted, native PowerPoint decks with validated XML structures and automated layout generation.
Open the live presentation in your browser, press f for fullscreen, o for outline, or l for laser pointer.