首次启动会下载数 GB 的 ffmpeg、Python、分析器依赖和 ML 模型,需预留时间和磁盘;需 Rust 1.94.1(由 rust-toolchain.toml 固定)、Node.js 22.12+、pnpm 11.2.2;Windows ASIO 与 Linux WebKit 等平台构建依赖需另查 building guide。

git clone https://github.com/rzru/nightingale.git
cd nightingale
pnpm --dir client install --frozen-lockfile
cargo desktop devGPU 加速可选,CUDA 或 Apple Silicon 不可用时分析自动回退到 CPU;桌面版支持 Linux x86_64/aarch64、macOS Apple Silicon/Intel、Windows x86_64,自托管二进制支持 Linux x86_64/aarch64。README 未说明具体显存要求。
把本地音乐库变成带评分和同步歌词的卡拉OK,桌面端和自托管网页都能跑
用机器学习给卡拉OK打分的应用,能分离人声并自动评分,适合聚会娱乐场景。
核心能力
- 用 UVR Karaoke 或 Demucs 在本地分离人声
- 用 LRCLIB、LRC 或自动转写对齐生成逐词歌词
- 用麦克风做音高评分,可调音调和速度
- 支持 2~4 人本地多人分麦与记分板
- 接入 Plex、Jellyfin、Navidrome 及本地文件夹
容易踩的坑
- v1.4.1最新正式版2026-11-09 · 2026-11-09 10:33 UTC
Fixes
- Song titles and other Latin text no longer show a wide gap around typographic quotes and dashes.
- Song covers are visible again in installed desktop builds, where they had been blocked from loading.
- v1.4.02026-11-06 · 2026-11-06 10:25 UTC
查看更新说明
Features
- Added an interface language selector with English, German, and Simplified Chinese, plus contributor-friendly translation catalogs for the whole app. The choice is saved with your Nightingale settings, so it follows you to the playback window and self-hosted sessions. Switching language updates every surface, including the separate playback window and later system changes, and counted text follows each language's own plural rules.
- Quickly analyze, play, or queue songs from the song list and card menus.
- Added a full-screen pitch graph with scrolling target notes, stable live pitch tracking, octave guidance, audio-reactive visuals, and color-coded multiplayer trails.
- Added playback scrubbing and controls to jump by one second or one lyric line.
- Added
.ngesong bundles that play directly without unpacking, with clear read-only actions. - Added
.ngeexport for analyzed songs from local folders, Jellyfin, Navidrome, and Plex on desktop and self-hosted web. - Playback now shows your score as five stars that fill in as you sing, with the score as a plain number beneath them.
- Added a phone queue link: scan the QR code in the sidebar header and control the queue, playback, and playback settings from a phone on the same network.
- The results screen now offers Auto-continue, which starts the next queued song after a five-second countdown. Your choice is remembered, so a queue keeps running hands-free.
Fixes
- The phone now hides the playback transport, seek bar, and settings once the playback window or browser tab closes, instead of leaving controls for a playback that is gone.
- The phone no longer offers Skip Outro while the results screen is already showing on the host.
- The analysis status badge now names the lyrics source on its own instead of appending it in parentheses, so long labels no longer spill over the actions column in the song list.
- Session mode now opens browser playback directly so audio can start, and desktop playback windows show cover art while loading.
- Playback now waits for the background, lyrics, and HUD to finish loading before the music starts, with a smooth loading backdrop that stays responsive while playback prepares.
- Multiplayer guest names now number only guest singers, while a single guest is simply labeled Guest.
- Singer trails now follow the song's octave from the first note, and singers sharing a room no longer appear in separate octaves.
- The playback score divider now matches the score width instead of the settings block beneath it.
- Seeking backward during playback now rewinds the pitch graph and removes score earned after the new position.
- Microphone monitoring now pauses with playback and toggles without restarting the microphone stream, preventing buffer underrun warning floods.
- Desktop cover thumbnails now load through the authenticated local media server instead of a custom URL scheme that some webviews block as cross-origin.
- v1.3.02026-10-15 · 2026-10-15 19:36 UTC
查看更新说明
Features
- Added independent Combine multi-channel controls for solo and multiplayer scoring, shown when a multi-channel desktop input is available.
- Added custom playback backgrounds from uploaded files or HTTPS links, automatically recognizing supported static image, Nightingale GLSL shader, and silent looping video extensions.
- Added a master volume control to Playback settings.
- Added local multiplayer playback for two to four singers, with per-player microphone and profile selection, editable queue lineups, keyboard and gamepad navigation, live scores, and ranked results.
- Rescan library now also picks up analyses that another machine left in a shared cache folder: songs already in the library whose stems and transcript exist in the cache are marked ready without re-running analysis, and a toast summarizes how many were updated.
- The lyrics editor pre-fills from a
.lrc/.elrcfile next to a local song's audio when the song has no lyrics yet, and offers a Use local .lrc action otherwise; nothing is written until Save. - Added the ability to toggle the display of romanized lyrics for CJK languages in Settings.
- Added a Folders section to the sidebar for local folder libraries: it keeps the library's subfolder hierarchy, subfolders open and close with their chevron (or by selecting the folder again), and selecting a folder shows its songs and those of its subfolders.
- Lyrics can carry a note above any word with
{word|note}in the lyrics editor, in every language: it replaces the automatic reading (romaji, pinyin, Jyutping, romanization) of the characters it covers or adds one (e.g.{君|kimi},{行|háng},{colour|color}). For Japanese, a kana note ({彷徨|さまよ}って) also guides alignment. - Line-timed LRC can now guide alignment: the lyrics editor's new Align words timing keeps each line's LRC timing and has the AI time only the words inside it, so one misheard passage can no longer shift the rest of the song. Each word stays lit until the next one starts and a line stays on screen until its LRC end, unless the singing stops for a long pause.
Improvements
- Desktop and Playback windows now remember their size and whether they were maximized between launches.
- Albums now appear beneath expandable artists in the sidebar, while both artist and album rows remain selectable.
- Desktop IPC and self-hosted HTTP commands now use one shared backend dispatcher, keeping command behavior and validation consistent across both runtimes.
- Migrated library persistence from handwritten runtime SQL to Diesel's typed SQLite query builder without changing existing databases or library behavior.
- Playback queue songs can now be reordered by dragging or with Alt+Arrow keys.
- The playback screen now shows the song's cover art, title, and artist on a loading screen while audio is still downloading/decoding, instead of a blank/shader background.
- The lyrics editor shows the LRC timing syntax (
[mm:ss.xx]per line,<mm:ss.xx>per word) under the text box. - Multiplayer setup now lets each player choose a color used in the playback HUD, pitch graph, and results.
- Multiplayer setup now remembers player profile and microphone assignments in app settings and closes after starting playback.
Fixes
- Desktop drag-resizing no longer performs macOS window queries or renderer IPC; dimensions are captured from native resize events and persisted when the window closes.
- Audio-reactive backgrounds in multiplayer now respond to the merged microphone waveform from every player instead of only Player 1.
- Self-hosted web mode now requests microphone permission before enumerating inputs, so browsers expose the available devices.
- Closing the main desktop window now exits after its native webview is destroyed, preventing a lingering event loop and WebView2 window-class cleanup errors.
- Fixed the Docker image's frontend build by matching the Node 22 and pnpm 11 versions that `cl
- v1.2.02026-09-02 · 2026-09-02 13:36 UTC
查看更新说明
Features
- Added a playback queue to the song browser with a queue count, compact next-up sidebar, per-song removal, confirmed queue clearing, and keyboard and gamepad navigation.
- Added Session playback mode, which opens playback in a dedicated desktop window or browser tab while the menu remains available for live queue management.
- Playback settings now have a dedicated tab with a proportional live preview, lyric placement controls, and 50–250% lyric and pitch-graph scaling (100% by default).
- Added bulk song actions and a Refresh Metadata action for reloading metadata from the library source.
- Queued or in-progress song analysis can now be cancelled per song or in bulk across filtered songs.
- Added compact sortable song-table headers with persisted multi-level priorities, immediate list reordering, displayed-duration tie-breaking, and stable duplicate-file rendering.
Improvements
- Source setup now warns that changing the data source clears the current library and its analysis state, with confirmation before choosing a replacement folder.
- Leaderboard entries now show when each score was achieved beneath the profile name.
- Long gaps between lyric lines now show a compact countdown beneath the song details, while the circular three-second countdown bubble stays beside the lyric line as the next line approaches. The next lyric block is no longer previewed across an instrumental break.
- Changed "AI generated" to "AI transcribed" in the song list.
- Added Windows ASIO microphone support and a microphone recording/playback test in Settings.
- Analyzer setup now installs the released
transformers5.13+ package instead of cloning a pinned Git commit.
Fixes
- Analyzer setup now keeps WhisperX on a release compatible with
transformers5, preventing Windows lyrics analysis failures in pyannote. - Video files now use audio-stream title metadata, preventing subtitle titles from replacing song names.
- The lyrics editor now allows re-aligning analyzed songs without requiring a lyrics change.
- Empty transcription results now finish without attempting forced alignment.
Documentation
- Updated the website and user guide for the v1.2.0 queue, Session mode, playback customization, bulk library actions, and multi-level sorting.
- v1.1.02026-08-14 · 2026-08-14 12:44 UTC
查看更新说明
Features
- Leaderboards — open a global top-10 ranking across every profile and song from the profile menu, or open a song-specific leaderboard to compare each profile's personal best. Scored songs expose the per-song board directly from their details panel.
- Personal-best ratings — song cards, table rows, and song details now show the active profile's best score as a five-star rating, with the exact score available on hover.
Improvements
- Instant key and tempo controls — stepper changes are now staged immediately, then prepared together when playback starts. The Play button shows preparation progress and enters playback only after the adjusted audio is ready.
- Prebuilt Docker distribution — release tooling can publish multi-architecture CPU images and CUDA images to Docker Hub and GHCR. The Docker quick start now uses the published image, a persistent named data volume, and host port
64448, while local builds remain supported. - Theme-aware scrollbars — scrollable app surfaces now use compact scrollbar colors that follow the active light or dark theme.
Fixes
- Setup errors now wrap and scroll within the modal instead of overflowing the dialog.
- UVR stem separation now converts source audio to WAV before loading it, preventing failures on input formats the separator cannot read directly.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Nightingale turns music you already have into karaoke. It can separate lead vocals, find or produce word-timed lyrics, and play tracks with synchronized highlighting, pitch scoring, key and tempo controls, multiplayer, and dynamic backgrounds. Use the native desktop app on Linux, macOS, or Windows, or run the same experience as a self-hosted web app.
Highlights
- Bring your library — scan local audio, video, and UltraStar files, or connect Plex, Jellyfin, or Navidrome. Existing provider and folder playlists appear as read-only navigation.
- Prepare tracks locally — separate vocals with UVR Karaoke or Demucs, then use LRCLIB, local or pasted LRC, or automatic transcription and alignment for lyrics.
- Sing your way — follow synchronized lyrics, score microphone pitch, adjust key and tempo, mix guide vocals, monitor the microphone, and compensate for room latency.
- Run a karaoke night — build a playback queue, keep managing it during Session mode, switch profiles, compare scoreboards, or assign separate microphones to two to four local players.
- Set the stage — use source video, GPU shaders, Pixabay loops, or custom image, video, and shader backgrounds; reposition and scale lyrics and the pitch graph.
- Use the screen you have — desktop and self-hosted modes share the same karaoke core, with keyboard, gamepad, touch, and layouts ranging from phones to 4K displays.
Detailed behavior, supported media formats, controls, analyzer options, and current limitations live in the user guide.
Get Nightingale
| Mode | Start here |
|---|---|
| Desktop | Download the latest release |
| Self-hosted Linux | Installation guide |
| Docker | CPU and CUDA images |
Desktop releases support Linux x86_64/aarch64, macOS Apple Silicon/Intel, and Windows x86_64. Self-hosted release binaries support Linux x86_64/aarch64.
First launch prepares an isolated copy of ffmpeg, Python, the analyzer packages, and required ML models. No system Python setup is needed, but the initial download is several gigabytes. GPU acceleration is optional; analysis falls back to CPU when CUDA or Apple Silicon acceleration is unavailable.
See Getting Started for setup, platform-specific notes, updates, and adding music. For failures, check Troubleshooting.
Documentation
- Library sources
- Lyrics and transcription
- Controls
- Scoring and multiplayer
- Backgrounds
- Self-hosted web mode and Docker
- Building from source
Architecture
Desktop and self-hosted delivery share one Rust application core and one React frontend. Transport adapters stay thin so karaoke behavior does not diverge between Tauri and the web server.
flowchart LR
UI["React UI"] --> Bridge["Typed bridge / client"]
Bridge --> Tauri["Tauri IPC adapter"]
Bridge --> Web["HTTP + WebSocket adapter"]
Tauri --> API["app-api command contract"]
Web --> API
API --> Core["app-core"]
Core --> Sources["Folder / Plex / Jellyfin / Navidrome"]
Core --> Storage["SQLite library + cache"]
Core --> Analyzer["Local Python analyzer"]
The analyzer runs as a persistent local process over token-authenticated loopback IPC, avoiding model startup cost for every song. Analysis artifacts are cached by BLAKE3 source hash, so unchanged tracks reuse stems, transcripts, lyrics, and shifted playback variants.
Repository layout
| Path | Responsibility |
|---|---|
app-core/ | Shared application behavior, source adapters, persistence, media serving, analyzer orchestration, and analyzer scripts |
app-api/ | Shared command contract, dispatch, state, events, and error classification |
client/src/ | React interface, feature modules, typed runtime bridge, playback, and microphone processing |
client/src-tauri/ | Tauri desktop adapter and native capabilities |
client/src-server/ | Axum HTTP/WebSocket adapter and embedded web bundle |
site/ | Astro website and mdBook user guide |
docker/, scripts/ | Container and bare-metal self-hosted distribution |
Development
Prerequisites
| Tool | Version |
|---|---|
| Rust | 1.94.1, pinned by rust-toolchain.toml |
| Node.js | 22.12 or newer |
| pnpm | 11.2.2 |
Platform build packages, including Windows ASIO and Linux WebKit requirements, are listed in the building guide.
Run the desktop app
git clone https://github.com/rzru/nightingale.git
cd nightingale
pnpm --dir client install --frozen-lockfile
cargo desktop dev
Create a production bundle for the current platform with:
cargo desktop build
Before submitting application changes, run the repository checks:
pnpm --dir client format
pnpm --dir client quality
Website and guide tooling runs separately from site/; use pnpm --dir site build to validate those changes.
Contributing
Nightingale follows a discussion-first workflow. Before implementing a feature or behavior change, open a GitHub Discussion and wait for it to be approved. Small documentation corrections and obvious bug fixes can go directly to a pull request. Read CONTRIBUTING.md before starting.
Releasing
Tags matching v* trigger the release workflow. It verifies the tag against the desktop manifests, extracts release notes from CHANGELOG.md, and creates a draft containing desktop installers, updater artifacts, and self-hosted server archives. Smoke-test the draft artifacts, then publish the release through GitHub.
git tag v<version>
git push origin v<version>
The workflow and its helper scripts are the canonical source for artifact and signing details.
Support the project
Nightingale is free, open source, and maintained in spare time. Support ongoing development through Patreon or Ko-fi.
License
GPL-3.0-or-later — see LICENSE.