The engine is a separate file, fetched only when needed. A page left open quietly pulls it in while idle.
html → pptx
The model hands you a web page.
PowerPoint gets objects.
MPGA rebuilds an HTML deck into a real .pptx: every heading, paragraph and shape becomes an ordinary object — selectable, editable, movable. Not a picture of a slide, but a slide.
in the browser · offline · your file never leaves it
What happens to your slide
The engine does not photograph the page. It measures every element, decides which PowerPoint object it becomes, and builds the file from scratch.
Drag the slider — or just watch
Screenshot versus objects
The two earlier scripts shot each slide as a PNG and dropped it in full-bleed. Pixel-perfect — and nothing left to edit. Drag the divider.
One object per slide. Text will not select, a typo cannot be fixed, a colour cannot be changed.
Nineteen objects instead of one: every heading is a text box, every card a shape with a fill.
What turns into what
The mapping table is the engine. On the left, what the model writes; on the right, what PowerPoint opens.
h1 · h2 · p · b · smallText boxeditablePosition comes from the ink box of the letters, not the element box.
div with background · border · border-radiusShapeeditableFill, border and radius travel as values, not as pixels.
border-left on a calloutShape + bareditableA PPTX shape can only be bordered on all four sides, so the bar ships as its own object.
<i data-lucide="globe">Picture from the built-in setrasterisedThe icons live inside the tool: nothing to link, no internet needed.
<svg viewBox="0 0 900 290">Picture + native captionseditableDiagram artwork is rasterised with its text hidden; the captions are laid on top as objects.
[data-raster]Escape hatch: anything as a picturerasterisedFor artwork no set of shapes would reproduce safely. An honest price for the freedom.
What it cost
No number here is invented: every one of them is measurable on the built site.
Not a promise but a header: the page ships connect-src ‘none’. Kill your network and build a file — it takes a minute to check.
The only box the engine treats as a slide. Anything around it — toolbars, navigation — never reaches the file.
MPGA.html is the whole program in one file: download it, double-click, forget about the internet.
Tests open the built .pptx, render it and compare against how the same deck looks in a browser.
No sign-up, no subscription, no cap on how many decks you convert.
The price of precision
Four things, each paid for with a rebuild. Together they explain why “just take a screenshot” is not an answer.
× 0.75 · × 10510.34Two units, easily confused
Font size converts to points (72/96); shape coordinates convert to EMU. Correct shapes with mis-scaled text mean exactly one thing: the font size was multiplied by the wrong number.
Range.selectNodeContents(el)The element box is not the letter box
getBoundingClientRect returns a border box, padding and slack included. The only way to hit the position that centring inside a card produces is the ink box of a selection range.
h > size × 1.6Wrapping breaks short captions
“Преподаватель” came out as “Преподавател” plus a lone “ь” on the next line: Arial is a touch wider in PowerPoint than in Chromium. Wrapping is now enabled only for genuinely multi-line text.
text { visibility: hidden }Diagrams: a picture without its captions
Diagram artwork cannot be rebuilt from shapes reliably. So the SVG is shot with its text hidden and the captions are placed on top as native objects — identical on screen, still editable.