Skip to content

hautlythird211/RCompress

Repository files navigation

Media Compressor

A powerful cross-platform desktop application for compressing images and videos with adaptive quality settings and minimal file sizes optimized for web delivery.

Features

  • 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)

Installation

Build from Source

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-build

Prebuilt Binaries

Download the latest release from the Releases page.

Usage

  1. Select Folder: Click "Browse Folder" to choose the directory containing your media files
  2. Scan: Click "Scan Folder" to discover all supported image and video files
  3. Configure: Adjust compression settings using presets or custom quality sliders
  4. Compress: Click "Start Compression" to begin processing

Compression Settings

  • 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

Presets

  • 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

Architecture

Frontend (React + TypeScript)

  • 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

Backend (Rust + Tauri)

Modules:

  • main.rs: Application entry point and Tauri commands
  • file_handler.rs: Directory scanning and file discovery
  • compression.rs: Image and video compression engine
  • models.rs: Data structures for files, settings, and results
  • config.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 image crate
  • WebP encoding using the webp crate for optimal compression
  • PNG optimization with oxipng for lossless compression
  • FFmpeg integration ready for video processing

Project Structure

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

Compression Algorithm

  1. File Detection: Scans directory for supported formats using extension and magic bytes
  2. Metadata Extraction: Reads image dimensions and video properties
  3. Format Selection: Chooses optimal output format based on settings and file type
  4. Quality Adjustment: Applies adaptive quality based on content analysis
  5. Compression: Encodes using specialized codecs (WebP, AVIF, optimized JPEG)
  6. Validation: Verifies output file is valid and readable
  7. Comparison: Checks if compressed size < original size
  8. Fallback: If compression unsuccessful, tries alternative formats or keeps original

Performance

  • 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

Supported Formats

Images

  • JPEG (input/output)
  • PNG (input/output)
  • WebP (input/output)
  • AVIF (output)
  • GIF (input)

Videos

  • 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 Files

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

Development

Running in Development Mode

npm run tauri-dev

This starts both the Vite dev server and Tauri development window with hot reload.

Building for Production

npm run tauri-build

Generates platform-specific installers and applications.

Type Checking

npm run typecheck

Troubleshooting

Issue: "Cannot find module @tauri-apps/api"

  • Solution: Run npm install to 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

Future Enhancements

  • 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

License

MIT

Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

Support

For issues, feature requests, or questions, please open an issue on GitHub.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors