- SmartStack: AI, Self-Hosting & Smart Finance/
- Posts/
- Nightingale SelfâHosted Karaoke: Turn Your Music Library into a CloudâFree SingâAlong Party/
Nightingale SelfâHosted Karaoke: Turn Your Music Library into a CloudâFree SingâAlong Party
Table of Contents
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 loved | What 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 #
| Feature | Nightingale | Cloud Karaoke SaaS (e.g., Smule) | Traditional Karaoke Machine |
|---|---|---|---|
| Privacy | âï¸ 100% local | â Data sent to cloud | âï¸ No network |
| Cost | Free (openâsource) | Subscription required | Upfront hardware cost |
| Setup Complexity | Moderate (CLI) | None (app install) | High (hardware install) |
| Music Flexibility | Your own library | Limited catalog | Requires physical media |
| Scalability | Multiâroom via same binary | Unlimited (cloud) | Single room |
| Latency | Nearâzero (local) | Variable (internet) | Nearâzero |
| Lyrics Accuracy | Dependent on local model | Professional curated | Preâ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
}
}