Add pptx-plugin
This commit is contained in:
155
plugins/pptx-plugin/skills/ppt-orchestra-skill/SKILL.md
Normal file
155
plugins/pptx-plugin/skills/ppt-orchestra-skill/SKILL.md
Normal file
@@ -0,0 +1,155 @@
|
||||
---
|
||||
name: ppt-orchestra-skill
|
||||
description: "Plan and orchestrate multi-slide PowerPoint creation from scratch. Use before generating a full deck with subagents: classify each slide type, enforce visual variety, set typography/spacing rules, and run text-based QA to catch content issues."
|
||||
license: Proprietary. LICENSE.txt has complete terms
|
||||
---
|
||||
|
||||
# Slide Page Types (Standard)
|
||||
|
||||
For slide-by-slide generation (one JS file per slide), classify **every slide** as **exactly one** of these 5 page types. This keeps structure consistent and prevents "random layout drift".
|
||||
|
||||
1. **Cover Page**
|
||||
- **Use for**: opening + tone setting
|
||||
- **Content**: big title, subtitle/presenter, date/occasion, strong background/motif
|
||||
2. **Table of Contents**
|
||||
- **Use for**: navigation + expectation setting (3–5 sections)
|
||||
- **Content**: section list (optional icons / page numbers)
|
||||
3. **Section Divider**
|
||||
- **Use for**: clear transitions between major parts
|
||||
- **Content**: section number + title (+ optional 1–2 line intro)
|
||||
4. **Content Page** (pick a subtype)
|
||||
- **Text**: bullets/quotes/short paragraphs (still add icons/shapes)
|
||||
- **Mixed media**: two-column / half-bleed image + text overlay
|
||||
- **Data visualization**: chart + 1–3 key takeaways + **source**
|
||||
- **Comparison**: side-by-side columns/cards (A vs B, pros/cons)
|
||||
- **Timeline / process**: steps with arrows, journey, phases
|
||||
- **Image showcase**: hero image, gallery, or visual-first layout
|
||||
5. **Summary / Closing Page**
|
||||
- **Use for**: wrap-up + action
|
||||
- **Content**: key takeaways, CTA/next steps, contact/QR, thank-you
|
||||
|
||||
**Layout options:**
|
||||
- Two-column (text left, illustration on right)
|
||||
- Icon + text rows (icon in colored circle, bold header, description below)
|
||||
- 2x2 or 2x3 grid (image on one side, grid of content blocks on other)
|
||||
- Half-bleed image (full left or right side) with content overlay
|
||||
|
||||
**Data display:**
|
||||
- Large stat callouts (big numbers 60-72pt with small labels below)
|
||||
- Comparison columns (before/after, pros/cons, side-by-side options)
|
||||
- Timeline or process flow (numbered steps, arrows)
|
||||
|
||||
**Visual polish:**
|
||||
- Icons in small colored circles next to section headers
|
||||
- Italic accent text for key stats or taglines
|
||||
|
||||
### Typography
|
||||
|
||||
**Choose an interesting font pairing** — don't default to Arial. Pick a header font with personality and pair it with a clean body font.
|
||||
|
||||
| Header Font | Body Font |
|
||||
|-------------|-----------|
|
||||
| Georgia | Calibri |
|
||||
| Arial Black | Arial |
|
||||
| Calibri | Calibri Light |
|
||||
| Cambria | Calibri |
|
||||
| Trebuchet MS | Calibri |
|
||||
| Impact | Arial |
|
||||
| Palatino | Garamond |
|
||||
| Consolas | Calibri |
|
||||
|
||||
| Element | Size |
|
||||
|---------|------|
|
||||
| Slide title | 36-44pt bold |
|
||||
| Section header | 20-24pt bold |
|
||||
| Body text | 14-16pt |
|
||||
| Captions | 10-12pt muted |
|
||||
|
||||
### Spacing
|
||||
|
||||
- 0.5" minimum margins
|
||||
- 0.3-0.5" between content blocks
|
||||
- Leave breathing room—don't fill every inch
|
||||
|
||||
### Avoid (Common Mistakes)
|
||||
|
||||
- **Don't repeat the same layout** — vary columns, cards, and callouts across slides
|
||||
- **Don't center body text** — left-align paragraphs and lists; center only titles
|
||||
- **Don't skimp on size contrast** — titles need 36pt+ to stand out from 14-16pt body
|
||||
- **Don't default to blue** — pick colors that reflect the specific topic
|
||||
- **Don't mix spacing randomly** — choose 0.3" or 0.5" gaps and use consistently
|
||||
- **Don't style one slide and leave the rest plain** — commit fully or keep it simple throughout
|
||||
- **Don't create text-only slides** — add images, icons, charts, or visual elements; avoid plain title + bullets
|
||||
- **Don't forget text box padding** — when aligning lines or shapes with text edges, set `margin: 0` on the text box or offset the shape to account for padding
|
||||
- **Don't use low-contrast elements** — icons AND text need strong contrast against the background; avoid light text on light backgrounds or dark text on dark backgrounds
|
||||
- **NEVER use accent lines under titles** — these are a hallmark of AI-generated slides; use whitespace or background color instead
|
||||
|
||||
## Compiling Slides
|
||||
|
||||
After all slide JS files are generated in `slides/`, create `slides/compile.js` to compile them into a single PPTX:
|
||||
|
||||
```javascript
|
||||
// slides/compile.js
|
||||
const pptxgen = require('pptxgenjs');
|
||||
const pres = new pptxgen();
|
||||
pres.layout = 'LAYOUT_16x9';
|
||||
|
||||
const theme = {
|
||||
primary: "22223b", // dark color for backgrounds/text
|
||||
secondary: "4a4e69", // secondary accent
|
||||
accent: "9a8c98", // highlight color
|
||||
light: "c9ada7", // light accent
|
||||
bg: "f2e9e4" // background color
|
||||
};
|
||||
|
||||
for (let i = 1; i <= 12; i++) { // adjust count as needed
|
||||
const num = String(i).padStart(2, '0');
|
||||
const slideModule = require(`./slide-${num}.js`);
|
||||
slideModule.createSlide(pres, theme);
|
||||
}
|
||||
|
||||
pres.writeFile({ fileName: './output/presentation.pptx' });
|
||||
```
|
||||
|
||||
Run with: `cd slides && node compile.js`
|
||||
|
||||
---
|
||||
|
||||
## QA (Required)
|
||||
|
||||
**Assume there are problems. Your job is to find them.**
|
||||
|
||||
Your first render is almost never correct. Approach QA as a bug hunt, not a confirmation step. If you found zero issues on first inspection, you weren't looking hard enough.
|
||||
|
||||
### Content QA
|
||||
|
||||
```bash
|
||||
python -m markitdown output.pptx
|
||||
```
|
||||
|
||||
Check for missing content, typos, wrong order.
|
||||
|
||||
**When using templates, check for leftover placeholder text:**
|
||||
|
||||
```bash
|
||||
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|this.*(page|slide).*layout"
|
||||
```
|
||||
|
||||
If grep returns results, fix them before declaring success.
|
||||
|
||||
### Verification Loop
|
||||
|
||||
1. Generate slides → Extract text with `python -m markitdown output.pptx` → Review content
|
||||
2. **List issues found** (if none found, look again more critically)
|
||||
3. Fix issues
|
||||
4. **Re-verify affected slides** — one fix often creates another problem
|
||||
5. Repeat until a full pass reveals no new issues
|
||||
|
||||
**Do not declare success until you've completed at least one fix-and-verify cycle.**
|
||||
|
||||
---
|
||||
|
||||
## Dependencies
|
||||
|
||||
- `pip install "markitdown[pptx]"` - text extraction
|
||||
- `npm install -g pptxgenjs` - creating from scratch
|
||||
Reference in New Issue
Block a user