2021-10-08 10:51:09 -04:00
<a href="https://www.navidrome.org"><img src="resources/logo-192x192.png" alt="Navidrome logo" title="navidrome" align="right" height="60px" /></a>
2021-10-05 12:15:44 -04:00
2023-04-11 14:00:44 -04:00
# Navidrome Music Server [](https://twitter.com/intent/tweet?text=Tired%20of%20paying%20for%20music%20subscriptions%2C%20and%20not%20finding%20what%20you%20really%20like%3F%20Roll%20your%20own%20streaming%20service%21&url=https://navidrome.org&via=navidrome)
2016-02-24 18:28:23 -05:00
2021-06-19 11:32:22 -04:00
[](https://github.com/navidrome/navidrome/releases)
2022-12-21 18:41:22 -05:00
[](https://nightly.link/navidrome/navidrome/workflows/pipeline/master)
2021-06-19 11:32:22 -04:00
[](https://github.com/navidrome/navidrome/releases/latest)
[](https://hub.docker.com/r/deluan/navidrome)
[](https://discord.gg/xh7j7yF)
2024-09-27 15:52:27 -04:00
[](https://www.reddit.com/r/navidrome/)
2021-04-01 17:38:55 -04:00
[](CODE_OF_CONDUCT.md)
2024-11-24 01:29:00 +03:00
[](https://gurubase.io/g/navidrome)
2016-02-26 10:56:57 -05:00
2022-11-11 21:23:01 -05:00
Navidrome is an open source web-based music collection server and streamer. It gives you freedom to listen to your
2020-02-05 08:40:15 -05:00
music collection from any browser or mobile device. It's like your personal Spotify!
2020-01-25 12:35:28 -05:00
2022-11-11 21:23:01 -05:00
**Note**: The `master` branch may be in an unstable or even broken state during development.
Please use [releases ](https://github.com/navidrome/navidrome/releases ) instead of
the `master` branch in order to get a stable set of binaries.
## [Check out our Live Demo!](https://www.navidrome.org/demo/)
2020-01-25 22:01:37 -05:00
__Any feedback is welcome!__ If you need/want a new feature, find a bug or think of any way to improve Navidrome,
2020-08-01 23:29:27 -04:00
please file a [GitHub issue ](https://github.com/navidrome/navidrome/issues ) or join the discussion in our
2020-03-31 15:11:33 -04:00
[Subreddit ](https://www.reddit.com/r/navidrome/ ). If you want to contribute to the project in any other way
2020-05-03 00:01:33 -04:00
([ui/backend dev ](https://www.navidrome.org/docs/developers/ ),
[translations ](https://www.navidrome.org/docs/developers/translations/ ),
[themes ](https://www.navidrome.org/docs/developers/creating-themes )), please join the chat in our
2020-03-31 19:54:38 -04:00
[Discord server ](https://discord.gg/xh7j7yF ).
2020-01-27 08:04:55 -05:00
2020-06-10 11:34:51 -04:00
## Installation
2023-03-13 19:34:47 -04:00
See instructions on the [project's website ](https://www.navidrome.org/docs/installation/ )
2020-06-10 11:34:51 -04:00
2023-03-13 19:32:13 -04:00
## Cloud Hosting
[PikaPods ](https://www.pikapods.com ) has partnered with us to offer you an
[officially supported, cloud-hosted solution ](https://www.navidrome.org/docs/installation/managed/#pikapods ).
A share of the revenue helps fund the development of Navidrome at no additional cost for you.
[](https://www.pikapods.com/pods?run=navidrome)
2021-12-09 12:24:43 -05:00
2020-06-10 11:34:51 -04:00
## Features
- Handles very **large music collections **
- Streams virtually **any audio format ** available
- Reads and uses all your beautifully curated **metadata **
2020-07-27 15:00:03 -04:00
- Great support for **compilations ** (Various Artists albums) and **box sets ** (multi-disc albums)
2020-06-10 11:34:51 -04:00
- **Multi-user**, each user has their own play counts, playlists, favourites, etc...
- Very **low resource usage **
- **Multi-platform**, runs on macOS, Linux and Windows. **Docker ** images are also provided
2020-08-11 16:05:23 -04:00
- Ready to use binaries for all major platforms, including **Raspberry Pi **
2020-06-10 11:34:51 -04:00
- Automatically **monitors your library ** for changes, importing new files and reloading new metadata
feat(subsonic): add structured sidecar lyrics support with OpenSubsonic v2 karaoke cues and agent layers (#5076)
Expand backend lyrics support with richer sidecar formats and upgrade the
OpenSubsonic songLyrics implementation to the version 2 structured karaoke
contract, while preserving version 1 behavior by default.
Sidecar formats and parsing:
- Add a TTML parser (core/lyrics/ttml.go): clock time, offset time, bare
decimal seconds, nested timing contexts, and token-level <span> timing for
word/syllable karaoke. Parses Apple Music-style metadata tracks (translation
and pronunciation/transliteration) and agent metadata into per-track agents[]
plus per-cue-line agentId. Hydrates missing line timing from cue timing.
- Add an SRT parser (core/lyrics/srt.go).
- Add a LRCLIB Lyricsfile (.yaml/.yml) parser (model/lyricsfile.go): maps
per-word lines[].words[] to cues with inclusive UTF-8 byte offsets and
attributes overlapping lines to synthetic voice agents so parallel vocals
split correctly in the enhanced response.
- Extend LRC parsing for Enhanced LRC inline <mm:ss.xx> word-timing markers.
- Add UTF-8 BOM and UTF-16 LE support for TTML/LRC sidecars.
- Parse the above formats from embedded tags as well as sidecar files.
Source resolution:
- Default lyricspriority is now
".ttml,.yaml,.yml,.elrc,.lrc,.srt,.txt,embedded" so the new formats are
discoverable without manual configuration.
- Preserve configured source priority across duplicate media-file candidates
instead of only checking the first DB match, so higher-priority sidecar
lyrics on older duplicates can still win.
- Raise the embedded-lyrics tag maxLength to 1 MB to fit word-timed
TTML/Enhanced-LRC karaoke for a full song.
OpenSubsonic songLyrics v2:
- Advertise songLyrics versions [1, 2].
- With enhanced=true, getLyricsBySongId may return structuredLyrics.kind
(main/translation/pronunciation), cueLine[] line-level karaoke groupings,
cueLine.cue[] timed words/syllables with required UTF-8 byteStart/byteEnd,
reusable structuredLyrics.agents[], and cueLine.agentId references.
- Without enhanced=true, the response stays v1-compatible: no kind, no cueLine,
no agents, no non-main tracks; the existing line[] payload is always
populated so legacy clients keep working.
Contract details:
- cueLine is emitted only for synced lyrics with cue data.
- Within a cueLine, cue.end is normalized all-or-none and overlaps are removed;
overlaps across separate cueLines remain valid for parallel vocal layers.
- Missing cue end-times are filled from the next cue or the parent line.
- When cueLines share an index, the one whose agent has role "main" is first.
- LyricCue.Value is serialized as XML chardata; cues with nil start are skipped
rather than serialized as 0.
Refactoring:
- Move pure format parsers into model/ (lyrics.go, lyrics_ttml.go,
lyrics_srt.go, lyrics_embedded.go, lyricsfile.go) and extract Subsonic
response building into server/subsonic/lyrics.go.
- Centralize lyric-kind constants and add Lyrics.EffectiveKind/IsMainKind.
- Add gg.Clone helper.
Spec references:
https://github.com/opensubsonic/open-subsonic-api/discussions/213
https://github.com/opensubsonic/open-subsonic-api/pull/218 (songLyrics v2)
https://github.com/opensubsonic/open-subsonic-api/pull/228 (cue byte offsets)
2026-06-19 19:00:58 +03:00
- Supports **lyrics ** from sidecar .ttml, .yaml/.yml Lyricsfile, .elrc, .lrc, .srt, .txt files and embedded TTML, Enhanced LRC, LRC, SRT, and plain-text tags (via `lyricspriority` )
2020-06-10 11:34:51 -04:00
- **Themeable**, modern and responsive **Web interface ** based on [Material UI ](https://material-ui.com )
- **Compatible** with all Subsonic/Madsonic/Airsonic [clients ](https://www.navidrome.org/docs/overview/#apps )
- **Transcoding** on the fly. Can be set per user/player. **Opus encoding is supported **
- Translated to **various languages **
2024-09-30 13:25:03 -04:00
## Translations
Navidrome uses [POEditor ](https://poeditor.com/ ) for translations, and we are always looking
for [more contributors ](https://www.navidrome.org/docs/developers/translations/ )
<a href="https://poeditor.com/">
<img height="32" src="https://github.com/user-attachments/assets/c19b1d2b-01e1-4682-a007-12356c42147c">
</a>
2020-05-03 00:01:33 -04:00
## Documentation
2020-06-10 11:34:51 -04:00
All documentation can be found in the project's website: https://www.navidrome.org/docs.
2020-05-03 00:01:33 -04:00
Here are some useful direct links:
2020-01-25 12:35:28 -05:00
2020-05-03 00:01:33 -04:00
- [Overview ](https://www.navidrome.org/docs/overview/ )
- [Installation ](https://www.navidrome.org/docs/installation/ )
- [Docker ](https://www.navidrome.org/docs/installation/docker/ )
- [Binaries ](https://www.navidrome.org/docs/installation/pre-built-binaries/ )
- [Build from source ](https://www.navidrome.org/docs/installation/build-from-source/ )
- [Development ](https://www.navidrome.org/docs/developers/ )
2020-05-06 08:08:43 -04:00
- [Subsonic API Compatibility ](https://www.navidrome.org/docs/developers/subsonic-api/ )
2020-03-21 12:57:15 +01:00
2020-01-23 22:57:51 -05:00
## Screenshots
2020-05-03 00:01:33 -04:00
<p align="left">
<img height="550" src="https://raw.githubusercontent.com/navidrome/navidrome/master/.github/screenshots/ss-mobile-login.png">
<img height="550" src="https://raw.githubusercontent.com/navidrome/navidrome/master/.github/screenshots/ss-mobile-player.png">
<img height="550" src="https://raw.githubusercontent.com/navidrome/navidrome/master/.github/screenshots/ss-mobile-album-view.png">
2020-08-14 17:00:24 -04:00
<img width="550" src="https://raw.githubusercontent.com/navidrome/navidrome/master/.github/screenshots/ss-desktop-player.png">
2020-01-23 22:57:51 -05:00
</p>