html-deck-to-pptx
Skill8 starsChanged 12 days agoMITView on GitHub
Convert an existing HTML slide deck (reveal.js, section.slide or .slide layouts, keyboard-driven decks) into a native, editable PowerPoint file: real text runs, shapes, linear gradients, tables, bullets, hyperlinks, speaker notes and embedded videos, with only icons and diagrams rasterized. Includes automatic visual QA that renders the PPTX in PowerPoint or LibreOffice and ranks slides by difference from the HTML. Local Node.js and Playwright tooling; no Azure resources. USE FOR: html to pptx, html deck to powerpoint, convert slides to editable pptx, export reveal.js to powerpoint, make the HTML deck reusable in PowerPoint, share deck as pptx, recycle slides. DO NOT USE FOR: planning or building a deck from scratch (use gbb-pptx or html-presentation), image-only PDF export, editing an existing PPTX file.
- Installs packages
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 44
Read the summary: slide count, navigation used (native, scroll, keys, forced), font mapping, warnings for slides with no text or isolated …
- Distinctive: line 110
Never modify the source deck or its repository.
- Distinctive: line 111
Do not claim fidelity without looking at the QA sheets.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 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
HTML deck → editable PowerPoint
One command converts every slide of an HTML deck into native PowerPoint objects, then a second command proves the result visually. Work from evidence: run QA, look at the worst sheets, fix, rerun.
Setup (once per machine)
S="$SKILL_DIR/scripts" # SKILL_DIR = this skill's absolute directory
[ -d "$S/node_modules" ] || (cd "$S" && npm ci --silent)Needs Node ≥ 18. A browser is resolved automatically: Playwright Chromium, else installed
Microsoft Edge, else Google Chrome. Optional: ffmpeg (video re-encode/captions), pdftoppm
(poppler) plus Microsoft PowerPoint (macOS) or LibreOffice for QA. Everything runs locally:
no Azure resources, models or network services are used beyond the npm install and any remote
assets the deck itself loads.
Workflow
- Convert (the input folder is served read-only over a local HTTP server; nothing is written next to it):
Read the summary: slide count, navigation used (node "$S/html2pptx.mjs" deck.html -o out/Deck.pptx [options]native,scroll,keys,forced), font mapping, warnings for slides with no text or isolated via CSS. - QA:
node "$S/qa.mjs" out/Deck.pptxrenders the PPTX, compares every slide with the HTML screenshot taken during conversion, writesout/Deck.work/qa/sheet-NN.png(HTML left, PPTX right) and prints the most different slides. Typical healthy values: 2–8% (anti-aliasing and font metrics). Look at the sheets of the top slides yourself — a low score cannot detect slides that are empty in both renders, which is why the converter warns about empty slides. - Fix with options (below) or small HTML/CSS changes in a copy of the deck, rerun 1–2. Use
--slides 3,7-9to iterate quickly on a few slides. - Deliver: offer the full file and, when videos are large, a
--no-videovariant (poster images, usually a few MB) for people who only want to recycle slides. State what is native and what is an image, and carry over any confidentiality label of the source deck.
Options
| Option | Use |
--selector CSS | Slides are not auto-detected (default tries reveal.js, section.slide, .slide, [data-slide], …) |
--size WxH | Override design size (default: slide/stage layout size; 16:9 → 13.333×7.5 in) |
--slides 1,3,5-8 | Convert a subset |
--hide CSS | Deck chrome that still shows (nav arrows, counters, watermarks) |
--player-selector CSS | Wrapper of a custom video player (default: closest .player/.video around a <video>) |
--no-video | Poster image instead of embedded video |
--burn-captions | Burn <track> VTT or data-cues captions into the embedded video (PowerPoint has no portable caption track) |
--video-speed 1.25 / --video-crf 28 | Re-time / re-encode embedded videos |
--font-map "Inter=Aptos,Roboto=Arial" | Map web fonts to installed fonts |
--keep-fonts | Keep original font names (recipients must have them installed) |
--font-fallback NAME | Font for generic families (default Segoe UI) |
--no-builds | Keep build steps/fragments hidden (default shows the final state) |
--settle MS | Longer wait for decks with slow transitions (default 350) |
--browser msedge | Force a browser |
--title/--author/--company/--subject | Document properties |
What becomes what
- Native & editable: text (runs, bold/italic/underline, colour, letter-spacing, highlights,
hyperlinks incl. in-deck
#slidelinks), single linear-gradient fills, gradient borders, gradient text, rounded rectangles/ovals, borders (dashed), drop shadows, tables (cell fills, padding, bottom borders, spans), bullets/numbering, speaker notes (aside.notes,.notes,data-notes,.notes [data-for=N]), embedded MP4 with poster. - Images:
<svg>,<img>,<canvas>, iframes, elements with filters/masks/transforms/clip-path, multi-layer or radial/conic backgrounds, pseudo-element decorations. Blend-mode/masked images are baked into the slide background image. - Fonts: each CSS stack resolves to its first Office-safe font (Segoe UI, Aptos, Calibri, Georgia, Palatino Linotype, Consolas, …); otherwise serif → Georgia, mono → Consolas, sans → fallback. Segoe weights map to Segoe UI Light/Semilight/Semibold. Single-line table cells are shrunk slightly when the substitute font would wrap.
See references/fidelity.md for limitations, authoring tips that maximise editability and troubleshooting.
Self-test
tests/fixture/deck.html is a self-contained synthetic deck (gradient cards with SVG icons,
bullets, numbering, a table, in-deck and external links, speaker notes). Convert it and run QA to
check a new machine before converting real decks:
node "$S/html2pptx.mjs" "$SKILL_DIR/tests/fixture/deck.html" -o /tmp/h2p-fixture/Fixture.pptx
node "$S/qa.mjs" /tmp/h2p-fixture/Fixture.pptxExpect 4 native slides, 3 rasterized icons and per-slide differences of a few percent.
Rules
- Never modify the source deck or its repository; convert from it and write outputs elsewhere.
- Do not claim fidelity without looking at the QA sheets; report residual differences honestly.
- Large outputs are usually videos: check
--video-crf, offer--no-video. - Decks often contain internal or confidential material: keep the PPTX in the same distribution scope as the source and say so when handing it over.
In this repository46 other files it gives its agents.
- AGENTS.mdAGENTS.md
- docs/llms.txtllms.txt
- agent-framework-harnessSkill
- auto-demo-producerSkill
- azd-patternsSkill
- azure-backup-readinessSkill
- azure-monitor-alert-baselineSkill
- azure-resource-diagnosticsSkill
- azure-sre-agentSkill
- azure-tenant-isolationSkill
- citadel-hub-deploySkill
- citadel-spoke-onboardingSkill
- copilot-doctorSkill
- foundry-agentopsSkill
- foundry-agtSkill
- foundry-caphost-lifecycleSkill
- foundry-cost-monitoringSkill
- foundry-cross-resourceSkill
- foundry-doc-vision-speechSkill
- foundry-evalsSkill
- foundry-hosted-agentsSkill
- foundry-iqSkill
- foundry-mcp-aca-jobsSkill
- foundry-mcp-acaSkill
- foundry-mcp-authSkill
- foundry-network-runbookSkill
- foundry-observabilitySkill
- foundry-prompt-agentsSkill
- foundry-rbac-auditSkill
- foundry-routinesSkill
- foundry-skill-catalogSkill
- foundry-teams-botSkill
- foundry-toolboxSkill
- foundry-vnet-deploySkill
- foundry-voice-agentsSkill
- foundry-voice-liveSkill
- gbb-humanizerSkill
- gbb-pptxSkill
- ghcp-cli-configSkill
- ghcp-hosted-agentsSkill
- html-presentationSkill
- ip-catalogSkill
- paygo-ptu-cost-analyzerSkill
- progress-guardSkill
- token-economicsSkill
- web-experience-designSkill
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.

