Skip to content

Paste the link to any HTML presentation (Reveal.js, Quarto, Marp, Sli.dev, etc.) to generate a clean, fully-paged PDF ;). Built with Node.js, Puppeteer, and PDF-lib.

License

Notifications You must be signed in to change notification settings

R0mb0/Web_slides_converter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

55 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

🌐 Web slides converter πŸ“š

Codacy Badge Maintenance Open Source Love svg3 MIT Donate

Paste the link to any HTML presentation (Reveal.js, Quarto, Marp, Sli.dev, etc.) to generate a clean, fully-paged PDF ;). Built with Node.js, Puppeteer, and PDF-lib.

πŸ“„ Links to test the page


πŸš€ Features

  • Universal Compatibility: Works out-of-the-box with Reveal.js, Quarto, Marp, Sli.dev, and custom HTML presentations.
  • Smart Animation & Fragment Detection: Captures step-by-step CSS animations and lists accurately, preserving the original reading flow.
  • Safe-Batch Technology β„’: Processes heavy presentations in chunks. Say goodbye to server timeouts or memory crashes!
  • Manual Safety Limit: Built-in anti-loop mechanism. Set a max page limit to force completion on tricky or infinitely looping presentations.
  • High-Quality Vector Export: Preserves text crispness and formatting without relying on blurry screenshots.
  • Modern UI: Fast, responsive, and adaptive Dark/Light mode interface powered by TailwindCSS.

πŸ› οΈ How it works

  1. Paste the URL of your web-based slide deck.
  2. Set a Safety Limit (e.g., 100 slides) to prevent infinite loops.
  3. The Puppeteer Backend opens a headless Chromium browser and navigates the presentation slide by slide, triggering the 'Next' events natively.
  4. It blocks native print overrides, forcing the browser to take a vector PDF snapshot of every single fragment and animation state.
  5. The process runs in batches, sending chunks back to your browser to prevent serverless timeouts (e.g., on Vercel).
  6. The Frontend uses PDF-lib to merge all chunks locally into a single, cohesive PDF file ready for download.

πŸ† What makes it special?

  • Overcomes Vercel Limits: Standard Puppeteer scripts timeout after 10-60 seconds on serverless platforms. This tool's chunking architecture allows it to process hundreds of slides flawlessly.
  • Respects Fragments: Standard "Print to PDF" features in browsers often break Quarto/Reveal.js fragments (bullet points that appear one by one), showing them all at once or not at all. This tool captures them precisely as the author intended.

πŸ’‘ Why use this tool?

  • Offline Archiving: Convert dynamic web lectures, webinars, or conference talks into standard PDFs for offline study.
  • Printing: Easily print web presentations without messing up the CSS layouts.
  • Sharing: Share slide decks with people who don't have internet access or prefer standard document formats.

⚑ Getting Started

Online

Simply visit the Live Demo.

Local Installation

To run this tool on your own machine (requires Node.js):

  1. Clone this repository.
  2. Install dependencies:
    npm install
  3. Start the server:
    npm start
  4. Open http://localhost:3000 in your browser.

✨ Limitations & Notes

  • Interactive Elements: Embedded videos (YouTube, Vimeo) or interactive 3D WebGL elements will be captured as static images at the moment the slide is reached.
  • AcroJS / PDF Animations: The output is a standard static PDF. CSS/JS animations are preserved as sequential pages, not as interactive PDF scripts, ensuring 100% compatibility across all PDF readers.

πŸ™ Credits & Inspiration

Not made by AI

About

Paste the link to any HTML presentation (Reveal.js, Quarto, Marp, Sli.dev, etc.) to generate a clean, fully-paged PDF ;). Built with Node.js, Puppeteer, and PDF-lib.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project