nightingale is a free, open source miscellaneous project written in TypeScript and released under GPL-3.0. It has 1,463 GitHub stars, 105 forks and 13 open issues, and was last pushed 13 days ago. On this registry it ranks #22 of 25 tracked projects in Miscellaneous, with 5 head-to-head comparisons available. It gained 7 stars over the last 6 tracked days.

What is nightingale?

What it is

Nightingale is a machine-learning powered karaoke application that turns songs from a personal music library into scored karaoke sessions. It scans folders, Plex Media Server, Jellyfin server, Navidrome server, or a self-hosted web library, then separates vocals, transcribes lyrics, and plays the result with synchronized highlighting and pitch scoring.

The project solves the problem of building a usable karaoke experience from ordinary media libraries without manually preparing vocal stems, timed lyrics, or scoring files. It lives in the self-hosted media and machine-learning audio ecosystem, combining React and TypeScript interfaces with Rust, AI, Demucs, and karaoke-game topics.

Key capabilities

  • It imports audio, video, covers, read-only playlists, and UltraStar files from local folders, Plex, Jellyfin, Navidrome, or playlist files.
  • It separates lead vocals from instrumentals with the UVR Karaoke model or Demucs, adjusting guide vocal volume while preserving backing vocals in the instrumental.
  • It creates word-level lyrics through WhisperX alignment, LRCLIB fetching, or pasted LRC and Enhanced LRC text, with an editor for corrections.
  • It supports Japanese, Chinese, Cantonese, and Korean songs with per-character forced alignment and romanized readings shown above each token.
  • It offers pitch scoring, synchronized highlighting, key and tempo controls, profiles, dynamic backgrounds, and experimental pluggable ASR or alignment options.

Who uses it and how

  • Home users point Nightingale at an existing music folder or media server, then use Analyze All or optional auto-analysis to queue library processing.
  • Plex users connect local, remote, or LAN-only servers, select music libraries, and import tracks, associated music video clips, covers, and read-only playlists.
  • Jellyfin and Navidrome users play from those libraries, with Jellyfin songs cached locally on first play so karaoke behaves like a folder library.
  • Party hosts run self-hosted web mode on a Linux box on a home network and open the app from phones, laptops, tablets, and TVs at .local.

Getting started

Typical use starts by running the single binary, choosing a data folder, and letting Nightingale download ffmpeg, uv, Python, PyTorch, and ML packages on first launch. Deployment options include self-hosted web mode on a Linux box and Docker on CPU or CUDA/GPU hardware.

When to use it — and when not to

It is a good fit when you want a self-hosted karaoke tool that reuses an existing Plex, Jellyfin, Navidrome, or folder library and can run audio analysis locally. It is less suitable when you want a stable, production-ready service, because the repository is young, has thirteen open issues, and lists zero contributors, and marks several lyric, ASR, alignment, and UltraStar features as experimental. A self-hoster must manage storage paths for cache, models, videos, and vendor tools, plus optional Docker, CUDA, or local network exposure.

project readme (upstream, from github) — read inline

Karaoke from any song in your music library, powered by neural networks.

Build Docker Pulls Stars License Patreon Ko-fi


Nightingale scans your music folder, Plex Media Server, Jellyfin server, Navidrome server, or self-hosted web library; separates lead vocals from instrumentals using the UVR Karaoke model (or Demucs); transcribes lyrics with word-level timestamps via WhisperX; and plays it all back with synchronized highlighting, pitch scoring, key/tempo controls, profiles, and dynamic backgrounds.

Ships as a single binary. No manual installation of Python, ffmpeg, or ML models required — everything is downloaded and bootstrapped automatically on first launch.

Features

Library & sources

📁 Folder library — point at any folder and Nightingale scans supported audio, video, and UltraStar files inside.

🟠 Plex — connect to a local, remote, or LAN-only Plex Media Server, select one or more music libraries, and import tracks, associated music video clips, covers, and read-only playlists. Hosted Plex sign-in discovers servers; an advanced PMS URL + token flow works without plex.tv during normal operation.

🎬 Jellyfin — play straight from your Jellyfin library. Songs cache locally on first play so karaoke runs the same as a folder library.

💿 Navidrome — connect to Navidrome for audio libraries. Login details are kept encrypted on disk.

🌐 Self-hosted web mode — run Nightingale on a Linux box on your home network and open it from phones, laptops, tablets, and TVs at .local. See docs/self-hosted. Also runs in Docker (CPU or CUDA/GPU).

🧭 Sidebar + library filters — browse by quick filters, metadata cleanup buckets, artists, albums, and existing playlists from Plex, Jellyfin, Navidrome, or folder-library .m3u / .m3u8 / .pls files. Analyze All and optional auto-analysis help queue your library faster, and the sidebar/song list remember scroll position when you come back.

🗂️ Flexible storage — choose the main data folder during setup, then split cache, models, videos, and vendor tools into separate folders from Settings when needed.

📦 Self-contained — ffmpeg, uv, Python, PyTorch, and ML packages are downloaded automatically during setup. Video backgrounds are pre-downloaded so the first session is ready to go.

Lyrics & audio

🎤 Stem separation — isolates lead vocals from instrumentals using the UVR Karaoke model (default) or Demucs, with adjustable guide vocal volume. The karaoke model preserves backing vocals in the instrumental for a more natural sound.

📝 Word-level lyrics — automatic transcription with alignment, or fetched from LRCLIB when available.

✏️ Lyrics editor with LRCLIB browser — edit lyrics, browse LRCLIB matches, or paste your own LRC / Enhanced LRC from a song's Actions button. Timed LRC is used as-is (optionally skipping stem separation to sing over the original mix); plain lyrics run alignment.

🈯 CJK lyric support — Japanese, Chinese, Cantonese, and Korean songs get per-character forced alignment and romanized readings (Hepburn / pinyin / Jyutping / Revised Romanization) shown above each token.

🗣️ Pluggable ASR engines — choose Whisper (default, broad language coverage) or Parakeet v3 (experimental) for ~25 European languages, with NeMo on CUDA and ONNX Runtime everywhere else.

Pluggable forced alignment — keep WhisperX's aligner (default) or switch on an experimental backend: GPU forced alignment (torchaudio forced_align) for faster word timestamps on CUDA and Apple Silicon, or the Qwen aligner (Qwen3-ForcedAligner-0.6B) which timestamps 11 languages incl. CJK in a single pass on CUDA/MPS/CPU. Both fall back to WhisperX automatically.

🎼 UltraStar Deluxe songs (experimental) — drop USDX song folders (.txt or .usdx plus sibling audio/vocals/instrumental/video) into your library; pitch and lyric data come from the file directly, no analyzer pass needed. See docs/usdx.

Playback & visuals

🎯 Pitch scoring — real-time microphone input with pitch detection, star ratings, and per-song scoreboards.

🎚️ Key & tempo shifts — adjust song key and tempo after analysis, with cached playback variants for quick retries.

🎬 Video files — drop video files (.mp4, .mkv, etc.) into your music folder; vocals are separated from the audio track and the original video plays as a synchronized background.

🌌 Audio-reactive backgrounds — 10 GPU shaders that react to your microphone in real time (Plasma, Waves, Nebula, Starfield, Sonar, Voronoi, Vortex, Metaballs, Spectrum, Oscilloscope), Pixabay video loops in 5 flavors (Nature, Underwater, Space, City, Countryside), plus source-video playback for video files.

🎙️ Mic monitoring + latency test — optionally route your live mic into playback, adjust monitor gain (0–200%), and run a beep-based latency test from Settings so scoring lines up with your room.

Quality of life

👤 Profiles — create and switch between player profiles; scores are tracked per profile.

🎮 Gamepad support — full navigation and control via gamepad (D-pad, sticks, face buttons).

📺 Adaptive + touch-friendly UI — scales from phones/tablets to 4K TVs, with on-screen playback controls on touch devices.

⬆️ In-app updates — on macOS and Windows, auto-checks for new releases at launch, badges the sidebar avatar when one is available, and downloads and installs signed updates with one click. Linux is manual: the Update entry opens GitHub Releases for you to grab the new build.

Quick start

Download the latest release for your platform from the Releases page and run it. On first launch, Nightingale shows setup steps, lets you pick a data folder, then installs the Python environment and ML models automatically.

Updates

On macOS and Windows, Nightingale checks for new releases once at launch. When one is available, the sidebar avatar grows a small green dot and the Update entry in the dropdown menu opens a dialog with the release notes. Click Install & Restart and the app downloads the signed bundle, installs it, and relaunches. On Windows the installer runs in passive mode — a small progress window flashes and the app comes back automatically once the install finishes.

Linux

Auto-update is not supported on Linux — the app ships without the updater plugin. The Update entry still appears in the sidebar menu, but it just opens a dialog explaining this with a one-click button to the Releases page so you can grab the new .deb or .rpm and install it the usual way for your distro.

macOS

macOS quarantines files downloaded from the internet. Since Nightingale isn't signed with an Apple Developer ID, Gatekeeper will block it with a message like "app is damaged and can't be opened". To fix this, remove the quarantine attribute after moving the Nightingale.app to Applications:

xattr -cr /Applications/Nightingale.app

Supported formats

Audio: .mp3, .flac, .ogg, .opus, .wav, .m4a, .aac, .wma. Video: .mp4, .mkv, .avi, .webm, .mov, .m4v. UltraStar: .usdx, plus .txt files whose contents look like USDX.

Controls

Navigation

Action Keyboard Gamepad
Move Arrow keys D-pad / Left stick
Confirm / Select Enter A (South)
Back / Cancel Escape B (East) / S

readme truncated — read the full docs on github

Frequently asked questions

Is nightingale free to use?

nightingale is open source under the GPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does nightingale do?

Machine learning powered Karaoke app (with scores!)

What is nightingale written in?

nightingale is primarily written in TypeScript. Its source is publicly available at https://github.com/rzru/nightingale, and it has 1,463 GitHub stars.