A powerful cross-platform desktop application for compressing images and videos with adaptive quality settings and minimal file sizes optimized for web delivery.
- Universal Format Support: Compresses JPEG, PNG, WebP, AVIF, GIF, MP4, WebM, AVI, MOV, MKV, and FLV files
- Adaptive Compression: Automatically adjusts quality based on image type and content
- Batch Processing: Process entire folders recursively with parallel compression
- Multiple Output Formats: Convert and compress to WebP, AVIF, JPEG, or keep original format
- Real-time Statistics: Monitor compression progress, space savings, and time remaining
- Intelligent Fallback: If compressed file is larger than original, keeps the original or tries alternative formats
- Cross-Platform: Native applications for Windows, macOS, and Linux
- Web Optimized: Default presets target web usage with responsive image dimensions
- Configuration Presets: Pre-configured profiles (Web Rápida, Balanceado, Qualidade Máxima, Tamanho Mínimo)
Requirements:
- Node.js 18+
- Rust 1.70+
- Tauri CLI
# Install dependencies
npm install
# Install Tauri CLI globally (optional)
npm install -g @tauri-apps/cli
# Development
npm run tauri-dev
# Build for production
npm run tauri-buildDownload the latest release from the Releases page.
- Select Folder: Click "Browse Folder" to choose the directory containing your media files
- Scan: Click "Scan Folder" to discover all supported image and video files
- Configure: Adjust compression settings using presets or custom quality sliders
- Compress: Click "Start Compression" to begin processing
- Quality: 1-100 scale controlling output quality
- Target Format: Choose between WebP, AVIF, JPEG, or original format
- Overwrite Original: Replace original files or save as new files
- Adaptive Compression: Automatically adjust settings based on file type
- Web Rápida: 60% quality, 1920x1080 max, fastest compression
- Balanceado: 80% quality, full resolution, recommended for most use cases
- Qualidade Máxima: 95% quality, AVIF format, best visual quality
- Tamanho Mínimo: 40% quality, 1280x720 max, maximum space saving
- Modern UI built with React 18 and Tailwind CSS
- Real-time file list and compression monitoring
- Responsive design with tab-based navigation
- Statistics dashboard showing compression metrics
Modules:
main.rs: Application entry point and Tauri commandsfile_handler.rs: Directory scanning and file discoverycompression.rs: Image and video compression enginemodels.rs: Data structures for files, settings, and resultsconfig.rs: Configuration management and presets
Key Features:
- Parallel processing with Rayon for multi-threaded compression
- Intelligent format detection via file extensions and magic bytes
- Dimension extraction for images using the
imagecrate - WebP encoding using the
webpcrate for optimal compression - PNG optimization with
oxipngfor lossless compression - FFmpeg integration ready for video processing
media-compressor/
├── src/ # React frontend
│ ├── App.tsx
│ ├── components/
│ │ ├── CompressorInterface.tsx
│ │ ├── FileListView.tsx
│ │ ├── SettingsPanel.tsx
│ │ └── ResultsView.tsx
│ └── index.css
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── main.rs
│ │ ├── file_handler.rs
│ │ ├── compression.rs
│ │ ├── models.rs
│ │ └── config.rs
│ ├── Cargo.toml
│ └── tauri.conf.json
├── package.json
├── vite.config.ts
└── tsconfig.json
- File Detection: Scans directory for supported formats using extension and magic bytes
- Metadata Extraction: Reads image dimensions and video properties
- Format Selection: Chooses optimal output format based on settings and file type
- Quality Adjustment: Applies adaptive quality based on content analysis
- Compression: Encodes using specialized codecs (WebP, AVIF, optimized JPEG)
- Validation: Verifies output file is valid and readable
- Comparison: Checks if compressed size < original size
- Fallback: If compression unsuccessful, tries alternative formats or keeps original
- Parallel Processing: Uses all CPU cores for batch compression
- Memory Efficient: Streams file processing to minimize memory usage
- Optimized Codecs: Uses best-in-class compression libraries
- Smart Defaults: Presets tuned for typical web usage scenarios
- JPEG (input/output)
- PNG (input/output)
- WebP (input/output)
- AVIF (output)
- GIF (input)
- MP4 (input, compression coming soon)
- WebM (input, compression coming soon)
- AVI (input, compression coming soon)
- MOV (input, compression coming soon)
- MKV (input, compression coming soon)
- FLV (input, compression coming soon)
Configuration is stored in platform-specific locations:
- Windows:
%APPDATA%\MediaCompressor\config.json - macOS:
~/Library/Application Support/MediaCompressor/config.json - Linux:
~/.config/media-compressor/config.json
npm run tauri-devThis starts both the Vite dev server and Tauri development window with hot reload.
npm run tauri-buildGenerates platform-specific installers and applications.
npm run typecheckIssue: "Cannot find module @tauri-apps/api"
- Solution: Run
npm installto install all dependencies
Issue: Rust compilation errors
- Solution: Ensure Rust is installed:
rustup install stable
Issue: No files found after scanning
- Solution: Verify folder path is correct and contains supported image/video files
- Video compression with FFmpeg integration
- Batch scheduling and automation
- Drag-and-drop folder support
- Preview comparison (before/after)
- Advanced color space and metadata handling
- GPU-accelerated compression
- Cloud storage integration
- Detailed quality metrics (SSIM, PSNR)
- Custom compression profiles
- Compression history and rollback
MIT
Contributions are welcome! Please feel free to submit issues and pull requests.
For issues, feature requests, or questions, please open an issue on GitHub.