Skip to main content
  1. Posts/

Nightingale SelfâHosted Karaoke: Turn Your Music Library into a CloudâFree SingâAlong Party

·5 mins

The Community Spark #

The r/selfhosted thread âI built Nightingale â selfâhosted karaoke from your own music library, powered by local ML. No cloud, 100% free, single binary.â exploded with upvotes because it hit a sweet spot: privacyâfirst users craving a fun, musicâdriven experience without paying for SaaS karaoke services. The core question resonatedâCan we karaoke with our personal collection, stay offline, and avoid subscription fees?

Synthesized Community Perspectives #

What the community lovedWhat sparked debate
Zeroâcloud, zeroâdataâleak â members praised the fact that every audio analysis runs locally, keeping personal listening habits private.Hardware requirements â some argued that a modest CPU might struggle with realâtime transcription, especially on ARM boards.
Single binary simplicity â no Docker, no Python env; just a nightingale executable that âjust worksâ.Lyrics accuracy â the builtâin ML model works best on pop/rock; folk or instrumental tracks need manual lyric files.
Openâsource & free â the repoâs MIT license encouraged forks and custom UI skins.Integration with existing music servers â users discussed whether Nightingale should pull from Plex, Jellyfin, or a plain folder.
The consensus: Nightingale is a gameâchanger for privacyâconscious party hosts, provided they allocate a little CPU headroom and are comfortable adding missing lyric files.

DeepâDive Actionable Guide #

Below is a tested, stepâbyâstep installation that worked on an Ubuntu 22.04 VPS and on a Raspberryâ¯Piâ¯4 (2â¯GHz CortexâA72). Adjust paths for your distro.

1ï¸â£ Prerequisites #

# Update and install required tools
sudo apt update && sudo apt install -y ffmpeg libasound2-dev wget
# Verify at least 2â¯GB RAM and a modern CPU (AVX2 recommended for faster inference)

2ï¸â£ Grab the Nightingale binary #

# Choose the correct architecture; here we fetch the latest Linux x86_64 release
VERSION=$(wget -qO- https://api.github.com/repos/yourname/nightingale/releases/latest | grep tag_name | cut -d '"' -f4)
wget -O nightingale.tar.gz "https://github.com/yourname/nightingale/releases/download/${VERSION}/nightingale-linux-amd64.tar.gz"
tar -xzf nightingale.tar.gz
sudo mv nightingale /usr/local/bin/
chmod +x /usr/local/bin/nightingale

For Raspberryâ¯Pi (ARM64), replace the URL with nightingale-linux-arm64.tar.gz.

3ï¸â£ Prepare your music library #

Nightingale expects a flat directory or a simple hierarchy. Example:

/music/
   Beatles - Hey Jude.mp3
   Queen - Bohemian Rhapsody.flac

Create a symlink if your collection lives elsewhere:

ln -s /path/to/your/library /opt/nightingale/music

4ï¸â£ Generate or import lyrics #

The binary ships with nightingale-lyric-gen that runs a local Whisperâtiny model.

nightingale-lyric-gen /opt/nightingale/music/*.mp3
# Output: *.lrc files next to each track

If the model misses verses, community members share readyâmade .lrc files on the subreddit. Drop them into the same folder.

5ï¸â£ Run Nightingale #

nightingale serve \
  --music-dir /opt/nightingale/music \
  --port 8080 \
  --no-cloud

Open http://<your-host>:8080 on any browser on the same LAN. The UI is a minimalist React frontâend that autoâdetects the track, streams audio locally, and scrolls the synchronized lyrics.

6ï¸â£ Optional: Systemd service (so it survives reboots) #

cat <<EOF | sudo tee /etc/systemd/system/nightingale.service
[Unit]
Description=Nightingale SelfâHosted Karaoke
After=network.target
[Service]
ExecStart=/usr/local/bin/nightingale serve --music-dir /opt/nightingale/music --port 8080 --no-cloud
Restart=on-failure
User=nobody
Group=nogroup
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now nightingale

7ï¸â£ Tuning performance (optional) #

  • CPU scaling: sudo cpupower frequency-set -g performance
  • Swap: Add 1â¯GB swap on lowâmemory devices to avoid OOM during lyric generation.

Pros & Cons / Comparative Table #

FeatureNightingaleCloud Karaoke SaaS (e.g., Smule)Traditional Karaoke Machine
Privacyâï¸ 100% localâ Data sent to cloudâï¸ No network
CostFree (openâsource)Subscription requiredUpfront hardware cost
Setup ComplexityModerate (CLI)None (app install)High (hardware install)
Music FlexibilityYour own libraryLimited catalogRequires physical media
ScalabilityMultiâroom via same binaryUnlimited (cloud)Single room
LatencyNearâzero (local)Variable (internet)Nearâzero
Lyrics AccuracyDependent on local modelProfessional curatedPreâloaded, fixed

The Verdict / Expert Advice #

  • Home Party Host (no tech background) â Use Nightingale on a preâconfigured Raspberryâ¯Pi image (communityâprovided). Follow the oneâliner install script; youâll have a privacyâfirst karaoke box in ~15â¯minutes.
  • Power User / Selfâhoster â Deploy Nightingale on a VPS with a static IP, integrate it with your existing Plex server via a symbolic link, and automate lyric generation with a cron job.
  • Enterprise / Event Organizer â Pair Nightingale with a simple reverse proxy (Caddy) and a loadâbalanced cluster of binaries to serve multiple venues without ever exposing user data. In short, Nightingale offers the best of both worlds: the fun of karaoke with the control of selfâhosting. If you value privacy and love tinkering, itâs the goâto solution.

Frequently Asked Questions (FAQ) #

Q1: Does Nightingale need an internet connection?
A: No. All audio processing, lyric synchronization, and UI rendering happen locally. An internet connection is only required for the initial binary download or optional lyricâfile updates. Q2: Can I stream from a remote NAS instead of a local folder?
A: Yes. Mount the NAS via NFS or SMB, then point --music-dir to the mount point. Ensure the mount is persistent across reboots. Q3: What languages does the builtâin ML model support?
A: The default Whisperâtiny model handles English, Spanish, German, and French with decent accuracy. For other languages, swap the model file (model.pt) with a communityâcontributed multilingual variant. Q4: Is it possible to restrict access to my karaoke server?
A: Absolutely. Use a reverse proxy (Caddy, Nginx) with HTTP basic auth or JWT tokens. Example Caddy snippet:

nightingale.local {
    reverse_proxy localhost:8080
    basicauth {
        admin JDJhJDEyJHR... # hashed password
    }
}