Desktop application for PDF presentations with mobile remote control, presenter view, and real-time annotation tools.
- Full screen presentation — Renders PDFs on an external display with smooth transitions
- Presenter view — Current slide, next slide, speaker notes, and timer
- Mobile remote control — Control the presentation from your phone by scanning a QR code
- Annotation tools — Flashlight, freehand drawing, laser pointer, and zoom
- Presenter notes — Import notes from PowerPoint (.pptx) files
- YouTube videos — Embed YouTube videos over any slide
- Organization — Folders, search, and sorting for presentations
- Multi-language — Interface in Spanish and English
# 1. Clone the repository
git clone <repository-url>
cd pdfpresenter
# 2. Install dependencies
npm installnpm startThis opens the main Electron window and starts a local server on port 3491 for remote control.
npm run devnpm test┌─────────────┐ WebSocket ┌──────────────────┐
│ Mobile │ ◄───────────────────► │ Express Server │
│ (Browser) │ │ port 3491 │
└─────────────┘ └────────┬─────────┘
│ IPC
┌───────────────┼───────────────┐
▼ ▼ ▼
┌────────────┐ ┌─────────────┐ ┌────────────────┐
│ Main │ │ Presentation│ │ Presenter │
│ Window │ │ (Audience) │ │ View │
└────────────┘ └─────────────┘ └────────────────┘
- Import a PDF from the main window
- Start the presentation — opens in full screen (external display if two are connected)
- Activate presenter mode — see current slide, next slide, and your notes
- Scan the QR code with your phone to control the presentation remotely
| Tool | Shortcut | Description |
|---|---|---|
| Flashlight | Cmd+L |
Dims everything except a circular area |
| Draw | Cmd+D |
Draw on the slide in real time |
| Pointer | Cmd+P |
Shows a visible laser dot |
| Zoom | Cmd+Z |
Magnifying lens over the slide |
pdfpresenter/
├── main.js # Electron main process
├── preload.js # Secure bridge between processes
├── server.js # Express + WebSocket server
├── package.json
├── public/
│ └── logo.png # App logo
├── src/
│ ├── index.html # Main window (PDF management)
│ ├── presentation.html # Audience view (full screen)
│ ├── presenter.html # Presenter view
│ ├── js/
│ │ ├── i18n.js # Internationalization system
│ │ ├── pptx-parser.js # PowerPoint notes extractor
│ │ └── renderer.js # Main window logic
│ ├── mobile/
│ │ ├── index.html # Remote control interface
│ │ ├── app.js # Remote control logic
│ │ └── style.css # Mobile styles
│ └── styles/
│ ├── main.css
│ ├── presentation.css
│ └── presenter.css
└── tests/
├── server.test.js
├── pptx-parser.test.js
└── i18n.test.js
| Technology | Purpose |
|---|---|
| Electron | Cross-platform desktop app |
| Express | HTTP server for API and static content |
| WebSocket (ws) | Real-time communication with mobile |
| PDF.js | PDF rendering in the browser |
| JSZip | Reading .pptx (ZIP) files |
| QRCode | QR code generation |
MIT
