slide-upgrade
Skill23 starsChanged 9 months agoMITView on GitHub
Convert PPTX files or Markdown into stunning, Canva-quality HTML slide decks. Use when asked to upgrade a PowerPoint, re-render slides as HTML, convert a presentation, or create modern slides from markdown/text. Triggers on phrases like 'upgrade this pptx', 're-render as html slides', 'convert this presentation', 'make canva-style slides', 'slide-upgrade', 'turn this into html slides', 'redesign these slides', 'beautiful slides'. Produces an .html file (images base64-encoded; videos in a media/ folder) with bold typography, modern layouts, and full presentation navigation.
- Deletes or force-pushes
In this repository3 other files it gives its agents.
- astro-websiteSkill
- book-editorSkill
- video-analyseSkill
The file
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 5 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 27
Read each slide XML to extract text, images, videos, tables, and backgrounds
- Very specific: line 32
Read the .md file
- Very specific: line 34
If no explicit breaks, use heading hierarchy: # H1 = section dividers, ## H2 = individual slides
- Very specific: line 53
Read ppt/presentation.xml + ppt/_rels/presentation.xml.rels to determine slide order
- Very specific: line 55
Check each ppt/slides/_rels/slideN.xml.rels to map media → slides
- Very specific: line 56
Read each ppt/slides/slideN.xml to extract text, tables, backgrounds, and layout
- Distinctive: line 59
For Markdown: Read the file and identify slide breaks and content hierarchy.
- Very specific: line 72
Use the base template from the html-slides skill (~/.claude/skills/html-slides/references/base-template.md), but:
- Distinctive: line 98
When in doubt, go larger. Slides are viewed from a distance.
- Distinctive: line 102
Use Playwright to screenshot each slide:
- Distinctive: line 147
Ask if adjustments are needed
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Slide Upgrade
Convert any input — PPTX, Markdown, or a plain prompt — into a visually stunning, Canva-quality HTML slide deck. Images are base64-encoded into the HTML; videos (too large for inline embedding) are copied to a media/ folder alongside the HTML with relative path references. The output looks like it was designed in Canva or Figma, not PowerPoint.
Design Philosophy
The output should feel like a contemporary creative portfolio or Canva template, not a corporate PowerPoint. Key principles:
- Massive, bold typography — headings should dominate the slide (100-200px, condensed, uppercase)
- Full-colour backgrounds — bold yellow, deep blue, rich black, vibrant red — not just white
- Confident whitespace — don't fill every pixel; let elements breathe
- Photo-forward layouts — images bleed to edges, use geometric crops (circles, arches, diagonals)
- Visual hierarchy through scale — the difference between heading and body should be dramatic (5-10x)
- Slide numbering — prominent slide numbers (01, 02, 03) add editorial structure
- Horizontal rules — use lines to separate and structure content, not boxes
- Type as hero — on many slides, the typography IS the design; no images needed
Inputs
PPTX File
- Unzip the PPTX and parse the raw XML (see
references/pptx-extractor.md) — do not use python-pptx, it misses videos, shape-fill images, and SVGs - Read each slide XML to extract text, images, videos, tables, and backgrounds
- Redesign from scratch — don't try to replicate the PPTX layout; reimagine it with Canva-quality design
- Base64-encode images for self-contained HTML; copy videos to a
media/folder alongside the HTML with relative path references
Markdown File
- Read the
.mdfile - Split on
---horizontal rules for slide breaks (if present) - If no explicit breaks, use heading hierarchy:
# H1= section dividers,## H2= individual slides - Parse content per slide, then design
Prompt Only
- Plan the slide structure with the user
- Generate content and design simultaneously
Workflow
Step 1: Extract & Understand
For PPTX: Unzip and parse the raw XML (see references/pptx-extractor.md):
rm -rf /tmp/pptx-unpacked && mkdir -p /tmp/pptx-unpacked
cd /tmp/pptx-unpacked && unzip -o "path/to/file.pptx" > /dev/null 2>&1Then:
- Read
ppt/presentation.xml+ppt/_rels/presentation.xml.relsto determine slide order - List
ppt/media/to see all images (png/jpeg/svg) and videos (mp4) - Check each
ppt/slides/_rels/slideN.xml.relsto map media → slides - Read each
ppt/slides/slideN.xmlto extract text, tables, backgrounds, and layout - Copy videos to
media/folder next to output HTML; base64-encode images
For Markdown: Read the file and identify slide breaks and content hierarchy.
For prompts: Confirm the slide outline with the user.
Step 2: Plan the Design
- Choose a theme — pick from presets (see
references/canva-aesthetic.md) or create a custom palette based on the content/brand - Choose fonts — pick a display font and body font from Google Fonts. For the Canva aesthetic, strongly prefer bold condensed display fonts: Bebas Neue, Anton, Oswald, Archivo Black, Syne
- Map each slide to a layout type — assign from the patterns in
references/canva-aesthetic.md - Plan variety — alternate between dark/light backgrounds, image/text-only slides, and layout styles. Never use the same layout twice in a row.
Step 3: Build the HTML
Use the base template from the html-slides skill (~/.claude/skills/html-slides/references/base-template.md), but:
- Override the theme with the chosen palette
- Override the fonts with the chosen display/body pair
- Add the enhanced CSS classes from
references/canva-aesthetic.md - Build each slide using the Canva-style patterns
Critical Rules
- Minimal files — one
.htmlfile with CSS/JS embedded and images base64-encoded. Videos go in amedia/folder alongside the HTML (too large for base64). If no videos, the output is a single self-contained file. - 16:9 canvas — 1920x1080 internal resolution, CSS-scaled to viewport.
- Content density — max 5 bullets, max 30 words per text block, 40%+ whitespace, one idea per slide.
- Font loading — Google Fonts via
<link>in<head>. Always include the display font + body font + fallbacks. - Keyboard nav — arrow keys, space, click, touch, F for fullscreen.
Typography Priorities
- Display headings: condensed, uppercase, 120-200px, weight 800-900
- Section headings: 60-96px, weight 700
- Card/table headings: 36-48px, weight 700
- Body text: 26-32px, weight 400, generous line-height — err on the side of very large
- Table cells: 28-32px — tables must be legible from the back of the room
- Labels/tags in diagrams: 24-28px, weight 600
- Captions/sources: 20-22px, weight 500-600, uppercase with letter-spacing
- Stat numbers: 100-160px, weight 300 (light) or 900 (black)
- Absolute minimum 20px for any text on screen — never use 12-18px range
- When in doubt, go larger. Slides are viewed from a distance.
Step 4: Screenshot & QA
Use Playwright to screenshot each slide:
npx playwright install chromium 2>/dev/null
node -e "
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage({ viewport: { width: 1920, height: 1080 } });
await page.goto('file://FILEPATH');
await page.waitForLoadState('networkidle');
const count = await page.evaluate(() => document.querySelectorAll('.slide').length);
for (let i = 0; i < count; i++) {
await page.evaluate(n => { window.currentSlide = n; showSlide(n); }, i);
await page.waitForTimeout(300);
await page.screenshot({ path: '/tmp/html-slides/slide-' + i + '.png' });
}
await browser.close();
})();
"Or use headless Chrome:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless --screenshot=/tmp/slide.png --window-size=1920,1080 file:///path/to/slides.htmlALWAYS visually inspect screenshots with the Read tool. Check for:
- Text overflow or clipping
- Font fallback (wrong font rendering)
- Colour contrast / readability — especially text over gradients, images, or colour transitions. If a gradient goes light-to-dark, text colour must work against ALL zones, or replace with a solid overlay
- Any text below 20px — if found, increase it
- Layout balance and whitespace
- Image distortion or cropping issues
Step 5: Deliver
- Save the
.htmlfile to the working directory - Show screenshots of key slides (at minimum: title, a content slide, closing)
- Presenting instructions:
- Open in Chrome/Safari/Firefox
- Press F for fullscreen
- Arrow keys or space to navigate
- Escape to exit fullscreen
- Cmd+P to export as PDF
- Ask if adjustments are needed
Reference Files
references/pptx-extractor.md— XML-based approach for extracting PPTX content, images, and videosreferences/canva-aesthetic.md— Canva-style themes, layout patterns, and CSS techniques~/.claude/skills/html-slides/references/base-template.md— HTML/CSS/JS boilerplate (from html-slides skill)~/.claude/skills/html-slides/references/design-system.md— Base theme presets and typography scale~/.claude/skills/html-slides/references/slide-patterns.md— Standard layout patterns
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

