A feature-rich, cross-platform music downloader built in Rust with a sleek GUI. Download individual songs and entire playlists from various online sources with ease.
- 🎵 Download Individual Songs - Download single tracks with metadata preservation
- 📋 Playlist Downloads - Batch download entire playlists at once
- 🎨 Modern GUI - Intuitive Slint-based user interface
- ⚙️ Configurable Codecs - Support for multiple audio formats
- 🔄 Async Processing - Fast, non-blocking downloads using Tokio
- 🛠️ Multi-threaded - Efficient resource utilization with threadpool support
- 💾 Smart Directory Handling - Automatic platform-specific directory management
- 🔍 Filename Sanitization - Safe, valid filenames across all platforms
- Rust 1.70+ (2024 edition)
- yt-dlp - Required for downloading content (automatically integrated via the yt-dlp crate)
git clone https://github.com/yourusername/music_downloader.git
cd music_downloader
cargo build --releaseThe compiled binary will be available at target/release/music_downloader.
cargo run --releaseOr if you've already built it:
./target/release/music_downloader- Start the application - A window will open with the music downloader interface
- Enter URL - Paste a URL to a song or playlist
- Configure Settings - Select your preferred audio codec and output directory
- Start Download - Click the download button to begin
- Monitor Progress - Track the download status in real-time
The application stores configuration in platform-specific directories:
- Windows:
%APPDATA%\music_downloader\ - macOS:
~/Library/Application Support/music_downloader/ - Linux:
~/.config/music_downloader/
Configuration is stored in JSON format for easy customization.
src/
├── main.rs # Application entry point
├── config/ # Configuration management
├── dowloaders/ # Download engine implementations
│ ├── music.rs # Single song downloader
│ ├── playlist.rs # Playlist downloader
│ └── dowloader_base.rs# Base downloader interface
├── ui/ # GUI components (Slint)
│ └── components/ # Reusable UI elements
├── events/ # Event handling system
├── enums/ # Type definitions
│ └── codec.rs # Audio codec options
└── setup.rs # Initialization logic
- tracing - Enable debug tracing for development (useful with
RUST_LOG=debug)
To enable:
cargo run --features tracingcargo buildFor detailed debug output:
RUST_LOG=debug cargo run --features tracingOptimized build for production:
cargo build --releaseKey dependencies:
- slint - Cross-platform GUI framework
- tokio - Async runtime and concurrency
- yt-dlp - Audio/video download library
- serde/serde_json - Serialization/deserialization
- chrono - Date and time handling
- uuid - Unique identifier generation
- directories - Platform-specific directory handling
- ✅ Linux
- ✅ macOS
- ✅ Windows
[Add your license here]
Contributions are welcome! Please feel free to submit a Pull Request.
- Ensure
yt-dlpis installed and accessible in your system PATH - Check that you have an active internet connection
- Verify the URL is valid and supported by yt-dlp
- On Linux, ensure you have required graphics libraries installed
- Check terminal output for error messages
- Ensure you have write permissions to the output directory
- Try running with elevated permissions (if necessary for your platform)
For issues, feature requests, or questions, please open an issue on GitHub.