A free, privacy-focused image resizer and converter that runs entirely in your browser. No uploads, no servers, no tracking.
-
Multiple Input Methods
- Drag & drop images
- File picker
- Paste from clipboard (Ctrl+V / Cmd+V)
- Load from URL
-
Format Conversion
- Input: JPEG, PNG, WebP, GIF, BMP
- Output: JPEG, PNG, WebP
- Smart format recommendations
-
Resize & Optimize
- Percentage-based scaling (1-150%)
- Manual width/height with aspect ratio lock
- Quality control for lossy formats
- Real-time preview
-
Security First
- 7-layer file validation
- Magic byte verification
- SVG blocking (XSS prevention)
- SSRF protection for URL inputs
- CSP headers
-
Privacy Focused
- 100% client-side processing
- No data uploaded to servers
- No tracking or analytics
- React 18 + TypeScript
- Vite - Lightning-fast build tool
- Tailwind CSS + shadcn/ui - Beautiful, accessible components
- Canvas API - Native image processing
- file-type - Magic byte validation
- Total: ~111 KB gzipped
- React vendor: ~45 KB
- App code: ~62 KB
- Styles: ~4 KB
The app implements multiple security layers:
- File Extension Allowlist - Only approved image formats
- Magic Byte Verification - Detects file spoofing
- MIME Type Validation - Cross-checks file headers
- Image Decode Test - Ensures valid, renderable images
- SVG Blocking - Prevents XSS attacks
- Size Limits - 10 MB maximum file size
- Content Security Policy - Blocks inline scripts
Additional protections:
- URL validation (blocks javascript:, data:, file: schemes)
- SSRF prevention (blocks localhost and private IPs)
- EXIF data stripping on output
- Rate limiting (1 conversion per minute)
- Node.js 20+
- npm or yarn
# Install dependencies
npm install
# Start dev server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewThe app is configured for GitHub Pages deployment via GitHub Actions.
- Push to the
mainbranch - GitHub Actions automatically builds and deploys
- Enable GitHub Pages in repository settings (Source: GitHub Actions)
-
Upload an Image
- Drag & drop, choose file, paste, or enter URL
-
Configure Settings
- Select output format (JPEG, PNG, or WebP)
- Adjust size using percentage slider or manual dimensions
- Set quality (for JPEG/WebP)
-
Convert & Download
- Click "Convert Image"
- Compare before/after results
- Download your optimized image
Input:
- JPEG (.jpg, .jpeg)
- PNG (.png)
- WebP (.webp)
- GIF (.gif) -
⚠️ Animations converted to static - BMP (.bmp)
Output:
- JPEG - Best for photos (quality 70-95%)
- PNG - Lossless, supports transparency
- WebP - Modern format, smaller files (quality 65-90%)
Blocked:
- SVG - Security risk (XSS)
- TIFF - Not supported by Canvas API
- HEIC/HEIF - Limited browser support
- Transparency Loss - Alerts when converting PNG with alpha to JPEG
- GIF Animations - Warns that animations will be lost
- Large Images - Warns when dimensions exceed 5000px
- Upscaling - Notifies about potential quality loss
- 1 conversion per minute (primary limit)
- 10 conversions per session before progressive delays
- Progressive throttling for excessive use
- Visual countdown timer
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - feel free to use this project however you'd like!
- Chrome 90+
- Firefox 88+
- Safari 14+
- Edge 90+
WebP support available in 96%+ of modern browsers.
Made with ❤️ by the community
No servers. No tracking. Just pure, client-side image processing.