Converts one or multiple HTML files into a single PowerPoint (.pptx) file with pixel-perfect visual fidelity by rendering each HTML file in a headless browser and inserting high-resolution screenshots as full-bleed slide images.
- Node.js 18+ (LTS recommended)
- A Chromium-compatible environment (Puppeteer downloads its own Chromium)
# Install dependencies
npm install
# Start the server
npm startOpen http://localhost:3000 in your browser.
- Open the web UI at
http://localhost:3000 - Drag & drop (or click to browse) one or more
.htmlfiles - Choose resolution: 720p (1280×720) or 1080p (1920×1080)
- Click Convert to PPTX
- The generated
presentation.pptxdownloads automatically
Files are sorted alphabetically by filename. Name your files accordingly to control slide order:
slide01.htmlslide02.htmlslide03.html
WeeklyAcacia/
├── package.json
├── server/
│ ├── index.js # Express API + Puppeteer + pptxgenjs
│ ├── uploads/ # Temp uploaded HTML files (auto-cleaned)
│ ├── output/ # Temp PPTX output (auto-cleaned)
│ └── screenshots/ # Temp PNG screenshots (auto-cleaned)
├── client/
│ ├── index.html # Upload UI
│ └── script.js # Frontend logic
└── slide1.html # Example HTML slide
- Upload — HTML files are sent to
POST /api/convertvia multipart form - Render — Each HTML is opened in Puppeteer (headless Chromium) at the chosen viewport size with 2× device scale for crisp images
- Screenshot — A pixel-perfect PNG is captured for each slide
- PPTX Build —
pptxgenjscreates a 16:9 presentation with each screenshot as a full-bleed slide image - Download — The
.pptxfile is streamed to the browser - Cleanup — All temp files (uploads, screenshots, output) are deleted after download
Multipart form with:
htmlFiles— one or more.htmlfilesresolution—720p(default) or1080p
Returns the .pptx file as a binary download.
Returns { "status": "ok", "resolutions": ["720p", "1080p"] }.
- HTML slides should have a fixed container matching the target resolution (e.g., 1280×720) for best results
- Web fonts loaded via Google Fonts / CDN are fully supported (Puppeteer waits for
document.fonts.ready) - Local CSS, images, and assets referenced with relative paths work when the HTML is self-contained or paths resolve correctly from the uploaded file location