npx skills add ...
npx skills add reason-machines/trending-skills --skill nightingale-karaoke
ML-powered Karaoke app in Rust using Bevy, WhisperX, and Demucs for stem separation, lyrics transcription, and pitch scoring.
npx skills add reason-machines/trending-skills --skill nightingale-karaoke
Skill by ara.so — Daily 2026 Skills collection.
Nightingale is a self-contained, ML-powered karaoke application written in Rust (Bevy engine). It scans a local music folder, separates vocals from instrumentals (UVR Karaoke model or Demucs), transcribes lyrics with word-level timestamps (WhisperX), and plays back with synchronized highlighting, real-time pitch scoring, player profiles, and GPU shader / video backgrounds. Everything — ffmpeg, Python, PyTorch, ML models — is bootstrapped automatically on first launch.
Download the latest release from the Releases page for your platform and run it.
macOS only — remove quarantine after extracting:
Prerequisites:
libasound2-dev libudev-dev libwayland-dev libxkbcommon-devOutputs a .tar.gz (Linux/macOS) or .zip (Windows) ready for distribution.
On first run, Nightingale downloads and configures:
ffmpeg binaryuv (Python package manager)large-v3 modelThis takes 2–10 minutes depending on network speed. A progress screen is shown in-app.
To force re-bootstrap at any time:
Bootstrap completion is marked by ~/.nightingale/vendor/.ready.
| Flag | Description |
|---|---|
--setup | Force re-run of the first-launch bootstrap (re-downloads vendor deps) |
| Action | Keyboard | Gamepad |
|---|---|---|
| Move | Arrow keys | D-pad / Left stick |
| Confirm | Enter | A (South) |
| Back | Escape | B (East) / Start |
| Switch panel | Tab | — |
| Search | Type to filter | — |
| Action | Keyboard | Gamepad |
|---|---|---|
| Pause / Resume | Space | Start |
| Exit to menu | Escape | B (East) |
| Toggle guide vocals | G | — |
| Guide volume up/down | + / - | — |
| Cycle background | T | — |
| Cycle video flavor | F | — |
| Toggle microphone | M | — |
| Next microphone | N | — |
| Toggle fullscreen | F11 | — |
Located at ~/.nightingale/config.json. Edit directly or via in-app settings.
separator options: "uvr" (default, preserves backing vocals) | "demucs"
background_theme options: "plasma", "aurora", "waves", "nebula", "starfield", "video", "source_video"
video_flavor options: "nature", "underwater", "space", "city", "countryside"
Located at ~/.nightingale/profiles.json:
API key is embedded in release builds. For local development, create .env at project root:
The release script (make-release.sh) sources .env automatically.
Cache keys are blake3 hashes of the source file — re-analysis only triggers if the file changes or is manually invalidated.
Audio: .mp3, .flac, .ogg, .wav, .m4a, .aac, .wma
Video: .mp4, .mkv, .avi, .webm, .mov, .m4v
Video files: audio track is extracted, vocals separated, original video plays as background automatically.
PyTorch backend is auto-detected:
| Backend | Device | Notes |
|---|---|---|
| CUDA | NVIDIA GPU | Fastest; ~2–5 min/song |
| MPS | Apple Silicon | macOS; WhisperX alignment falls back to CPU |
| CPU | Any | Always works; ~10–20 min/song |
UVR Karaoke model uses ONNX Runtime with CUDA (NVIDIA) or CoreML (Apple Silicon) automatically.
nvidia-smi shows your GPU.~/.nightingale/vendor/venv — if PyTorch installed the CPU-only build, re-bootstrap after installing CUDA drivers.Then re-open the song in Nightingale to re-analyze.
Ensure ALSA/PulseAudio/PipeWire is running. Install missing deps:
Video backgrounds are pre-downloaded during setup via the Pixabay API. For development builds, ensure .env contains a valid PIXABAY_API_KEY. If videos are missing in a release build, run --setup to re-trigger the download.
| Platform | Target Triple |
|---|---|
| Linux x86_64 | x86_64-unknown-linux-gnu |
| Linux aarch64 | aarch64-unknown-linux-gnu |
| macOS ARM | aarch64-apple-darwin |
| macOS Intel | x86_64-apple-darwin |
| Windows x86_64 | x86_64-pc-windows-msvc |
Cross-compile with:
GPL-3.0-or-later. See LICENSE.