A desktop karaoke application inspired by Karafun, featuring automatic vocal separation using Spleeter.
This application allows users to:
- Play audio/video karaoke files
- Automatically separate vocals from instrumental tracks using Spleeter
- Display synchronized lyrics
- Control audio playback (play, pause, volume, pitch, tempo)
- Manage a karaoke song library
- Search and filter songs
- Frontend: egui/eframe (native Rust GUI framework)
- Audio Engine: rodio + symphonia for playback, cpal for low-level audio
- Vocal Separation: Spleeter (Python) via PyO3 bindings
- Async Runtime: Tokio for background tasks
# Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh# Install Python (Debian/Ubuntu)
sudo apt-get update
sudo apt-get install python3 python3-pip python3-dev python3-venv
# Or on macOS with Homebrew
brew install python@3.11
# Install Spleeter in a virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install spleeterLinux (Debian/Ubuntu):
sudo apt-get install -y \
libasound2-dev \
libgtk-3-dev \
libxcb-render0-dev \
libxcb-shape0-dev \
libxcb-xfixes0-dev \
libspeechd-dev \
libxkbcommon-dev \
libssl-dev \
libpython3-dev \
pkg-config \
ffmpegLinux (Fedora):
sudo dnf install -y \
alsa-lib-devel \
gtk3-devel \
python3-devel \
openssl-devel \
pkg-config \
ffmpegmacOS:
brew install python3 pkg-config ffmpegWindows:
- Install Python 3.8+
- Install Visual Studio Build Tools
- Install ffmpeg and add to PATH
FFmpeg must be installed and available in your system PATH for Spleeter to work properly.
# Clone the repository
git clone <repository-url>
cd pwe
# Set up Python virtual environment for Spleeter
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install Spleeter
pip install spleeter
# Note: Keep the virtual environment activated when running the app# Development build
cargo build
# Release build (optimized)
cargo build --release# Make sure Python virtual environment is activated
source venv/bin/activate # On Windows: venv\Scripts\activate
# Run in development mode
cargo run
# Run release version
cargo run --release- eframe (0.29): Main GUI framework
- egui (0.29): Immediate mode GUI library
- egui_extras (0.29): Additional widgets and utilities
- rodio (0.19): High-level audio playback
- symphonia (0.5): Audio decoding for multiple formats
- cpal (0.15): Cross-platform audio I/O
- pyo3 (0.22): Rust bindings for Python (for Spleeter integration)
- tokio (1.40): Async runtime for background tasks
- serde (1.0) + serde_json: Serialization/deserialization
- anyhow (1.0): Error handling
- thiserror (1.0): Custom error types
- tracing (0.1) + tracing-subscriber (0.3): Logging
- rfd (0.15): Native file dialogs
- walkdir (2.5): Directory traversal
- spleeter: Vocal separation engine by Deezer
- Audio file playback (MP3, WAV, FLAC, OGG, etc.)
- Video file support (MP4, MKV, AVI with embedded audio)
- Real-time vocal separation using Spleeter (2stems, 4stems, 5stems)
- Synchronized lyrics display (LRC format)
- Playback controls (play, pause, stop, seek)
- Audio effects (pitch shift, tempo change, reverb)
- Volume control (master, vocals, instrumentals separately)
- Song library with metadata (title, artist, duration, etc.)
- Search and filter functionality
- Playlist creation and management
- Favorites system
- Import songs from folders
- Modern, responsive GUI
- Waveform/spectrum visualization
- Lyrics display with highlighting
- Queue management
- Settings panel
pwe/
βββ src/
β βββ main.rs # Application entry point
β βββ app.rs # Main app state and UI
β βββ audio/ # Audio engine module
β β βββ mod.rs
β β βββ player.rs # Audio playback
β β βββ processor.rs # Audio processing
β βββ spleeter/ # Spleeter integration
β β βββ mod.rs
β β βββ separator.rs # Vocal separation logic
β βββ library/ # Song library management
β β βββ mod.rs
β β βββ database.rs # Library database
β β βββ scanner.rs # Folder scanning
β βββ lyrics/ # Lyrics handling
β β βββ mod.rs
β β βββ parser.rs # LRC parser
β βββ ui/ # UI components
β βββ mod.rs
β βββ player_view.rs # Main player UI
β βββ library_view.rs # Library browser
β βββ settings_view.rs # Settings panel
βββ assets/ # Application assets
βββ Cargo.toml # Rust dependencies
βββ Cargo.lock # Locked dependencies
βββ venv/ # Python virtual environment (not in git)
βββ README.md # This fileSet PYTHON_SYS_EXECUTABLE if PyO3 cannot find your Python installation:
export PYTHON_SYS_EXECUTABLE=/path/to/your/python3# Activate virtual environment
source venv/bin/activate
# Test Spleeter directly
spleeter separate -i path/to/audio.mp3 -o output_folder
# The app will use the same Spleeter installation via PyO3- Ensure Python development headers are installed (
python3-devorpython3-devel) - Set
PYTHON_SYS_EXECUTABLEenvironment variable - Make sure Python version is 3.8 or higher
- Install ALSA development libraries:
sudo apt-get install libasound2-dev - Check audio permissions: Add user to
audiogroup
- Verify Spleeter is installed:
pip list | grep spleeter - Make sure virtual environment is activated
- Check FFmpeg is installed:
ffmpeg -version
- Install GTK3 development files:
sudo apt-get install libgtk-3-dev
C.F LICENSE file for details.
Hosquet Gabriel Bregent Julien