A modern, premium all-in-one web utility built with Next.js (App Router), featuring social media downloaders, an advanced QR code generator, file tools, and secure file sharing — wrapped in a stunning glassmorphism UI with dynamic per-tool color themes.
| Platform | Supported Content |
|---|---|
| YouTube | Videos (all resolutions), Audio (MP3/M4A) with server-side FFmpeg remuxing |
| Public videos | |
| Reels & public videos | |
| TikTok | Videos (no watermark via yt-dlp) |
| Photos (original resolution) & Videos — auto-detects type |
- Server-Side Remuxing (FFmpeg): Merges separate video + audio tracks (no silent 1080p/4K)
- Smart URL Validation: No backend calls for invalid URLs
- Pinterest: Pure HTML scraping — no yt-dlp required, faster and more reliable
- Solid & Gradient Colors: Single color or two-color linear blend
- Custom Dot Shapes: Square, Dots, Rounded, Classy, Extra Rounded
- Error Correction Levels: L / M / Q / H
- Custom Frame: Editable text around the QR (e.g. "SCAN ME")
- Logo Upload: Embed any image at the center
- Export: Download as PNG (2× resolution) or Copy to Clipboard
Share files securely with self-destructing links:
| Expiry Mode | Behavior |
|---|---|
| 1× Download | Link deletes itself after a single download |
| 24 Hours | Link expires automatically after 24 hours |
- Max file size: 50 MB
- Files stored in server temp directory (
os.tmpdir()) with auto-cleanup - Shareable link — works from any device on the same network
⚠️ Uses in-memory store. For multi-instance/Vercel deployments, use Redis or a persistent DB.
| Tool | Description |
|---|---|
| Compress Image | Reduce JPEG/PNG/WebP size with quality slider (10–100%) |
| Resize Image | Auto (keep aspect ratio) or Custom (W × H) with Fit or Fill/Crop |
| Image to PDF | Combine multiple images into a single PDF (client-side, pdf-lib) |
| PDF to Image | Extract each PDF page as high-res PNG (2× scale, client-side, pdfjs-dist) |
- Dynamic themed backgrounds — each tool has its own gradient palette
- Glassmorphism sidebar with collapsible groups, persistent state via
localStorage - Tree-line navigation — clean, connected sidebar tree view
- Modern slim scrollbar — 4px translucent, matches each theme
- Developer card at sidebar bottom with social links & Saweria support button
- Mobile responsive with
safe-area-insetsupport - URL hash sync — active tab persists on page refresh (
#youtube,#pinterest, etc.) - Non-blocking font loading — Google Fonts via
<link>preload, not@import
- Node.js v18+
- Python 3 — required by
youtube-dl-exec/yt-dlp - FFmpeg — required for merging high-res video + audio tracks
Windows:
winget install gyan.ffmpegRestart terminal after installation.
Linux (Ubuntu / Debian / Armbian / CasaOS):
sudo apt update && sudo apt install ffmpeg -y# 1. Clone the repository
git clone https://github.com/Irnhakim/ToolsDownloader.git
cd ToolsDownloader
# 2. Install dependencies
npm install
# 3. Start dev server (default port 3000)
npm run dev
# Custom port
npm run dev -- -p 3001Open http://localhost:3000 in your browser.
For 24/7 self-hosted deployment (CasaOS, Ubuntu Server, Armbian, etc.):
# Install PM2
npm install -g pm2
# Build for production
npm run build
# Start with PM2
pm2 start npm --name "tools-downloader" -- start
# Auto-start on reboot
pm2 startup
pm2 saveEdit package.json:
"start": "next start -p 3001"Or with PM2:
pm2 start npm --name "tools-downloader" -- start -- -p 3001Optional: Expose via Nginx Reverse Proxy or Cloudflare Tunnel for external access.
| Package | Purpose |
|---|---|
next |
App framework (App Router) |
youtube-dl-exec |
yt-dlp wrapper — YouTube, Facebook, Instagram, TikTok |
sharp |
Server-side image compression & resizing |
pdf-lib |
Client-side Image → PDF |
pdfjs-dist |
Client-side PDF → Image |
qr-code-styling |
Advanced QR code with custom styling |
html-to-image |
Capture QR frame as PNG |
lucide-react |
Icon library |
Pinterest uses native
fetch()HTML scraping — no extra dependency needed.
- Private Content: Only public posts can be downloaded. Private accounts return an error.
- Temp Files: Processed videos saved to
os.tmpdir(), cleaned up automatically after streaming. - yt-dlp Updates: Social platforms change APIs frequently. If downloads break:
npm update youtube-dl-exec
- Image & PDF Processing:
- Compress & Resize → server-side (Sharp)
- Image→PDF & PDF→Image → client-side (no upload needed)
- Pinterest: Uses JSON-LD + OG scraping — works without yt-dlp or cookies.
- Temp Link Store: In-memory only. Restarting the server clears all active links.
Irnhakim — @irnhakim
☕ Support the project: saweria.co/irnhakim
Built with ❤️ to make everyday digital tasks easier.