A curated set of carefully made, useful tools.
Batch compress images entirely in your browser using WebAssembly.
- No uploads — all processing is 100% client-side
- Parallel compression via Web Workers (uses all CPU cores)
- Batch processing — compress as many images as your device can handle
- Re-compress — tweak settings and re-process without re-uploading
- One-click download — individual files or ZIP archive
| Input Formats | Output Formats |
|---|---|
| JPEG, PNG, WebP, HEIC/HEIF | JPEG, WebP |
More tools coming soon.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| UI | React 19, Radix UI, Tailwind CSS 4, shadcn/ui |
| Compression | jSquash (WebP, JPEG, PNG WASM codecs) |
| HEIC Support | heic2any |
| Animations | Motion (Framer Motion) |
| Concurrency | Web Workers (parallel, pool-based) |
| Downloads | Browser Blob API, JSZip |
| Analytics | PostHog (anonymous, privacy-respecting) |
| Build | Turbopack, esbuild (worker bundling) |
- Node.js (v18+) and npm
git clone https://github.com/leonidlouis/nice-tools.git
cd nice-tools
npm install # also copies WASM files and builds the worker
npm run dev # start dev server with TurbopackOpen http://localhost:3000.
npm run build
npm startdocker build -t tools-bylouis .
docker run -p 3000:3000 tools-bylouis| Script | Description |
|---|---|
npm run dev |
Start dev server (Turbopack) |
npm run dev:worker |
Watch & rebuild compression worker |
npm run dev:all |
Dev server + worker watcher concurrently |
npm run build |
Production build |
npm run build:worker |
Bundle compression worker |
npm start |
Start production server |
npm run copy-wasm |
Copy WASM files to public/ |
- Zero uploads — images and data never leave your browser
- Works offline after initial page load
- Anonymous telemetry via PostHog (aggregate usage stats only — no personal data, no image content, no filenames)
MIT © 2026 Louis