A fast, lightweight web application that converts multiple images into a single PDF with optional smart compression. Built with modern web technologies for optimal performance.
- Batch Image Processing — Convert up to 50 images in one session
- Smart Compression — Three compression modes: uncompressed, 5MB, or 20MB targets
- Auto Page Orientation — Automatically detects and applies portrait/landscape orientation per image
- Off-Thread Compression — Uses Web Workers to compress images without blocking the UI
- Drag & Drop — Simple drag-and-drop interface for adding images
- Image Preview — See all images before generating the PDF
- Multi-Format Support — JPEG, PNG, WebP, GIF, BMP (up to 15MB per image)
| Layer | Technology |
|---|---|
| Framework | Solid.js — Lightweight reactive library |
| Build Tool | Vite 8 — Lightning-fast bundler |
| Styling | Tailwind CSS v4 — Utility-first CSS |
| PDF Generation | jsPDF — PDF creation library |
| Language | TypeScript (strict mode, ES2023 target) |
| Background Tasks | Web Workers — Offload heavy compression work |
- Node.js 16+
- npm, pnpm, or yarn
npm installnpm run devOpens dev server at http://localhost:5173
npm run buildOutputs optimized bundle to dist/
npm run previewTest production build locally
App.tsx (State Container)
├── Navbar (Header)
├── UploadZone (Drag-drop interface)
├── ImageList (Preview thumbnails)
├── Toolbar (Generate, Clear, Size selector)
└── Services
├── ImageService (Validation)
├── PdfService (PDF generation)
└── Workers (compress.worker.ts)
- Upload — Drag images or click to browse (formats validated, max 15MB each)
- Preview — See all selected images before processing
- Configure — Choose PDF size target and compression level
- Generate — Creates PDF with smart compression on background thread
- Download — Automatically downloads with timestamp filename
- Binary search algorithm finds optimal JPEG quality for target file size
- 10 iterations provide precision within ~0.1% quality variance
- Off-thread processing keeps UI responsive during compression
- PNG transparency handled by compositing on white background
| Constraint | Value |
|---|---|
| Max images per session | 50 |
| Max file size per image | 15 MB |
| PDF size targets | Uncompressed, 5MB, 20MB |
| Supported formats | JPEG, PNG, WebP, GIF, BMP |
- Dark/light mode support via Tailwind
- Responsive design (mobile-first)
- Real-time file validation feedback
- Progress indication during PDF generation
- Accessible drag-drop zone
Built with ❤️ by Pritom LinkedIn