github navidrome/navidrome v0.49.0

latest releases: v0.53.1, v0.53.0, v0.52.5...
19 months ago

New in this release

Sharing (preview)

A new nice feature is the ability to generate a sharing link for a track/album/artist/playlist to send to friends, so that they can listen to the music without having an account on your Navidrome server. This is a nice alternative to YouTube links to share music. Sharing works from the UI and from Subsonic clients that support this feature.

NOTE: The sharing feature is complete but misses fine-grained permissions. Because of that it is disabled by default. If you want to give it a try, you can enable it by setting EnableSharing=true in your config, or the environment var ND_ENABLESHARING=true. Just remember that once enabled all users (not only admins) will have full permission to share and change existing shares.

Revamped Artwork Resolution

Various issues with artwork were resolved in this release, including support for local artists images. Also, playlist covers are now generated as a tiled (2x2) image from the album covers (only supported in Subsonic clients for now). To learn more, see Artwork Resolution in the documentation.

Internet Radio

You can now add your favorite Internet Radio streams to Navidrome and listen to them directly in the UI or in Subsonic clients that support this feature. Big thanks to @kgarner7 for implementing this.

As usual, a big thanks to all contributors who helped in this release.

Other highlights

  • [UI] New Gruvbox Dark theme #2092. Thanks to @vlfldr
  • [UI] Add ReplayGain support #1988. Thanks to @kgarner7
  • [UI] Add Internet Radios support #2063. Thanks to @kgarner7
  • [UI] Add keyboard shortcut shift-C to go to current playing song
  • [UI] Add option to transcode when downloading #1667. Thanks @kgarner7
  • [UI] Show album description from Last.fm if enabled and available #2061. Thanks @kgarner7
  • [UI] Fix "Play Next" resetting the play queue #1472
  • [UI] More columns to select in List views
  • [UI] Hide toggleable columns when in Album Grid view mode. Fix #2064
  • [UI] Hide Links to external services if they are disabled
  • [UI] Respect prefers-reduced-motion browser configuration #2090. Thanks to @gildesmarais
  • [UI] New DefaultUIVolume config option. Fix #1679
  • [Server] Much improved artwork handling. See Artwork Resolution in documentation
  • [Server] Support local artist images. Fix #394
  • [Server] Uses ffmpeg to extract images as a fallback. Should handle all filetypes with embedded images now. Fix #1492
  • [Server] Add Downsampling feature #1575. Thanks to @gauth-fr
  • [Server] Fix compatibility with Maloja #1994. Thanks to @rhamzeh
  • [Server] New command line option (navidrome pls) to export playlists in M3U format #1914
  • [Server] Create accounts automatically when authenticating from HTTP header #2087. Thanks to @selfhoster1312
  • [Server] Expose more Prometheus metrics #2002. Thanks @AlekseyLobanov
  • [Server] Downloads of multi-disc albums now create subfolders for each disc. Fix #2121
  • [Subsonic] Add Internet Radio endpoints #2063
  • [Subsonic] Add initial Sharing support (if EnableSharing is set to true)
  • [Subsonic] Add coverArt to playlists
  • [Subsonic] Make artist artwork handling more compatible with Subsonic clients
  • [Subsonic] getTopSongs return starred and 5-star rated songs if ExternalServices are disabled
  • [Subsonic] Add getAlbumInfo and getAlbumInfo2 endpoints. Thanks to @kgarner7
  • [Subsonic] New SubsonicArtistParticipations to show album participations under artists (ex: in Various Artists compilations)
  • [Build] Fix ARMv5 and v6 builds #1968
  • [Build] Fix Illumos build #2067. Thanks @bardo

Changelog

  • 25374b3 Update translations
  • 68e6115 Rename DevEnableShare to EnableSharing
  • a651d65 Add a comment to the generated zip
  • dc56c52 Refactor zip archiver.
  • 5163df6 Rollback changes to Chinese translations
  • fc693e5 Update translations
  • 731bd7e Fix update translations job
  • 9f684e5 Add job to create translations PRs
  • e2ea5eb Disable creation of shares when feature is disabled.
  • b825d3c Fix versioning releases in the pipeline (#2101)
  • 1950c07 Disable external links when EnableExternalServices is false. Fix #2022
  • e0fc997 Fix Share dialog titles for Album and Playlist
  • 5eefb26 Simplify radio CRUD code
  • 39161fd Playlist view: optionally show comment column (#2073)
  • 1e24809 Create accounts automatically when authenticating from HTTP header (#2087)
  • 9721ef8 Fix download translation key
  • 16850a9 Revert "Replace the LoveButton with ArtistContextMenu in the artist page - #1979"
  • 457e1fc Base SQL metrics in MetricsWorker (#2002)
  • d31faf5 Bump github.com/onsi/gomega from 1.25.0 to 1.26.0
  • 2082948 Fix downloadOriginalFormat term in English translation
  • 39dc9c4 Disable Subsonic Share endpoints if feature is disabled
  • 0c263cf Make AlbumSongs BulkActionsToolbar more responsive
  • 85084cd Add button to share selected songs
  • 69b36c7 Add meta tags to show cover and share description in social platforms
  • cab43c8 Mark Share.LastVisited optional in Subsonic API
  • 433da37 Add Share to Context menus, also share artist
  • 051e9c5 Use redux for ShareDialog
  • 17d9573 Refactor dialogs, make it simple to add a new dialog to all views
  • 26be5b8 Keep order of shared mediafiles
  • c770229 Add Share capability to Subsonic user's info
  • ef4765c Fix getShares sort order
  • 6c05fcb Create contents label for group of shared mediafiles
  • 63e67bd Make Share list responsive
  • 230f2fd Reduce spacing between album buttons, to avoid breaking the toolbar in two
  • d639da9 Enable sharing only selected songs with the Subsonic API
  • e34f265 Fix empty entry collection in Shares
  • c994ed7 Fix expireAt update error
  • 40cac5c Fix JS console warning
  • 34277f2 Make Share icon dynamic
  • dbf80d8 Change public/share path to /share - DSub does not use the URL from the API response... :(
  • d5df102 Implement updateShare and deleteShare Subsonic endpoints
  • 20271df Workaround to detect empty dates in some Subsonic clients
  • d4c1d2e Handle expired shares
  • d0dceae Add getShares and createShare Subsonic endpoints
  • 94cc2b2 Fix tests and lint errors, plus a bit of refactor
  • 72a12e3 More share translations
  • 12bb6c3 Don't expose empty dates in share info
  • 58fc271 Share playlists
  • 65174d3 Refactor DownloadMenuDialog to use useTranscodingOptions hook
  • c8293fc Extract transcoding options to its own hook
  • d9c42b3 Add share's contents and description to the DB
  • 364fdfb Use defaultDownsamplingFormat in share options
  • 63b4a12 Fine tune SharePlayer
  • 357c0e1 Refactor URL builders in UI
  • 84aa094 More work on Shares
  • ab04e33 Initial work on Shares
  • 5331de1 Fixes the slide bar clickable area (#2113)
  • 199f66b Bump @testing-library/react from 12.1.2 to 12.1.5 in /ui (#2109)
  • 535171f Bump github.com/onsi/gomega from 1.24.2 to 1.25.0 (#2111)
  • bee39ad Bump github.com/spf13/viper from 1.14.0 to 1.15.0 (#2110)
  • 2de570f Fix order of gain menu options (#2105)
  • 33f033b Fix artist image not caching on browser
  • b993479 Increase size of artist image
  • adea15a Use constant
  • 0c27e7a Fix Illumos build - #2067 (#2069)
  • 8956f5e Fix Album.MaxYear calculation
  • 7073d18 Make private methods unpublished
  • 7fc964a Don't wake CacheWarmer every 10 seconds, let it sleep :)
  • 136d5f9 Add config option to show album participations under artists in Subsonic clients
  • 8ae0bcb Add Gruvbox Dark color theme (#2092)
  • 127c75e Don't try to downsample if requested bitrate is equal or greater than original. Fix #2066
  • d5c9cf0 Fix Playlist show
  • 701e301 Increase timeout for obtaining login background image list
  • 580e9ae Fix timer going awry
  • feb774a Change genre.Put() to upsert. Fix #1918 and #1564 (#1920)
  • 17eab6a Fix resized image cache key
  • bedd2b2 Implement better artwork cache keys
  • 93adda6 Get album info (when available) from Last.fm, add getAlbumInfo endpoint (#2061)
  • 5564f00 Some refactor, log message changes
  • 1324a16 ReplayGain support + audio normalization (web player) (#1988)
  • 9ae156d Remove unused prop
  • 438d45c Change Internet Radio UX
  • e760808 Fix pipeline lint error help message
  • 0a65bf1 Change Players icon, to distinguish it from Internet Radios
  • e40da18 Move artwork id encoding to public package
  • 13ba081 Add Size column to Album Songs view
  • 7682fdd Add Size column to Artist and Album views
  • 4a054de Hide togglable columns when in Album Grid view mode. Fixes #2064
  • b6233e5 Bump @material-ui/styles from 4.11.4 to 4.11.5 in /ui (#2093)
  • c00040d Bump github.com/dustin/go-humanize from 1.0.0 to 1.0.1 (#2094)
  • c748d66 Sort radio stations by name
  • d319b66 Make Radio Create and Edit forms consistent
  • a8478ca Fix Subsonic XML Internet Radio response
  • 8877b16 Add Internet Radio support (#2063)
  • aa21a2a Respect prefers-reduced-motion browser configuration (#2090)
  • e3496c7 Fix artist folder detection. Now works when the artist has only one album.
  • d3e4a52 "Touch" playlists to force some clients to reload cover art
  • 12dd219 Don't refresh artistInfo when setting artist's love/rating
  • 1d6b04e Replace the LoveButton with ArtistContextMenu in the artist page - #1979
  • dfbf86c Allow any HTTP methods for public images endpoint. Fix artist covers in Subtracks
  • 16c869e Optimize playlist cover generation
  • c46a2a5 New dev options to control getCoverArt throttling
  • ab7668f Use a custom artist image cache key.
  • 94c6d47 More descriptive error when artist.jpg not found
  • 0ffef05 Remove "Biography not available" when agents are not available
  • 3f2d246 PreCache artist images
  • cbe3adf Don't show error when it is nil
  • c90468b Find artist.* image in Artist folder
  • 69e0a26 Remove size from public image ID JWT
  • 8f0d002 Add local TopSongs
  • 77a99a7 Always access artist images through Navidrome (proxy calls to external URLs)
  • 918fee3 Artwork reader for Artist
  • bf46147 Add local agent, only for images
  • 387acc5 Add public endpoint to expose images
  • 7fbcb29 Add function number.RandomInt64
  • 7a617d3 Remove unused "embed" build tag
  • 769e8be Rename WeightedChooser's method Put to Add, a better name
  • 291455f Fix Download Dialog not showing in Artist page
  • b1b081e Move react-scripts to devDependencies
  • 9ea9b48 Bump golang.org/x/tools from 0.4.0 to 0.5.0
  • e6e9260 Bump decode-uri-component from 0.2.0 to 0.2.2 in /ui
  • 224e3b3 Bump json5 from 1.0.1 to 1.0.2 in /ui
  • 023e103 Bump prettier from 2.4.1 to 2.8.2 in /ui
  • 53ef50d Bump golang.org/x/text from 0.5.0 to 0.6.0
  • feabcdf Show help message when goimports/go mod tidy breaks the build
  • 1374dab Disable buildvcs flag
  • 18aac7c Bump github.com/onsi/ginkgo/v2 from 2.6.1 to 2.7.0
  • c8ecf3b Bump github.com/go-chi/httprate from 0.7.0 to 0.7.1
  • 7e03f8c Upgrade to Go 1.19.5
  • fdbece5 Use custom sanitize package, fix #2070
  • df0f140 Don't refresh smart playlists when generating covers
  • 950cc28 Add coverArt to Subsonic playlist response
  • 6260927 Serve artist placeholder directly, instead of using LastFM's CDN
  • b8c171d Hide LastFM icons if config.lastFMEnabled is false (#1935)
  • 80ded63 Add test for mapTrackTitle
  • cc14485 When trying to PreCache, wait for ImageCache to be available
  • 0c7c6ba PreCache Playlists CoverArt
  • 14032a5 Reduce retention in CacheWarmer
  • 61e5523 Handle "naked" CoverArtIDs (IDs of album, mediafiles and playlists)
  • bc09de6 Better error handling
  • 949331e GetCoverArt generates a tiled (2x2) image for playlists
  • 501386b Parse correctly playlist CoverArt ids
  • 8f3387a Fix tests and clean up code a bit
  • 3329007 Rename DevFastAccessCoverArt to EnableMediaFileCoverArt
  • 722a00c Fix artwork caching
  • 92ddae4 Created dedicated artwork readers
  • c1c4645 Move artwork handling to its own package
  • 8cf78ef Add timeout for artwork extraction
  • 52a4721 Remove empty (invalid) entries from the cache
  • e89d99a Also caches resized images
  • dc16ccd Make tests compatible with GoLang 1.18
  • b6eb60f Add new Artwork Cache Warmer
  • 8c1cd9c Refactor file type functions
  • 9ec349d Make sure album is updated if external cover changes
  • f5719a7 Fix spaces in CoverArtPriority, more trace logs in artwork resolution
  • 3dbd5c8 Remove unnecessary cache invalidator, as ID nows contains the updatedAt value
  • 73bb010 Cache original images
  • 26a7ada Change Image cache key format
  • 04eab56 Add back CoverArtPriority
  • 045b023 Fix DevFastAccessCoverArt flag
  • 57c3334 Remove unused DevPreCacheAlbumArtwork config option
  • 847a043 If resize fails, send the artwork as is. Closes #1102
  • 8e640bb Implement new Artist refresh
  • bce7b16 Skip trying to read cover art from mediafile if it does not have one
  • 2923f01 Fix UI artwork id creation
  • a087f57 Handle request (context) cancellation
  • 9fcd1c9 Make internal method unexported
  • 2814c81 go mod tidy
  • 73719c3 Fix cover detection on M4A containers
  • e0da1d1 Log artwork origin (tag, file, etc...)
  • 92b42b3 Fallback extracting tags using ffmpeg
  • abd3274 Handle empty cover art ID in subsonic API
  • 0da27e8 Add image cache back
  • 40bb211 Small test refactor
  • 87d4db7 Handle mediafile covers
  • 213ceec Resize if requested
  • 7b873860 Load artwork from embedded
  • c36e77d Remove CoverArtID, fix tests
  • 38bde0d Remove current Image Cache implementation
  • c430401 Remove current artwork implementation
  • 0130c6d Add all images found for each album in the database
  • 2f90fc9 Move album refresh to scanner
  • 566ae93 Remove old refresh code
  • 83ff44f Move cover art discovery (temporarily) to model
  • 28e7371 Moved logic of collapsing songs into albums to model package
  • e03ccb3 Replace MinInt/MaxInt with generic versions
  • 6f5aaa1 Move alternative tag names mapping to metadata
  • 0c22af3 Invert dependency of metadata and extractors
  • 55b0227 Add Date Added column in Album and Song lists (#2055)
  • db6e8e4 Fix build badge: badges/shields#8671
  • 5943e8f Rename log.LevelCritical to log.LevelFatal
  • 28389fb Add command line M3U exporter. Closes #1914
  • 5d8318f Change "Go to current song" hotkey.
  • 75596a6 Bump github.com/onsi/gomega from 1.24.1 to 1.24.2 (#2048)
  • a9ddb2d Bump github.com/beego/beego/v2 from 2.0.6 to 2.0.7 (#2047)
  • fe1a6a7 Bump github.com/onsi/ginkgo/v2 from 2.5.1 to 2.6.1 (#2046)
  • 9cb1fc4 Bump github.com/go-chi/chi/v5 from 5.0.7 to 5.0.8 (#2040)
  • 24d5208 Don't cache transcoded files if the request was cancelled (#2041)
  • 54395e7 Enable transcoding of downlods (#1667)
  • 6489dd4 Fix overriding previous logger in context
  • 6c4a0be Add endpoints in Subsonic API logs
  • 982b604 Add username to authenticated log messages
  • f206d81 Some cleanup, fixes typos and grammar errors
  • c5f7cf9 Some cleanup, adding missing context handling
  • 55ba39c Add global Downsampling feature (#1575)
  • 0cc1db5 Bump github.com/bradleyjkemp/cupaloy to v2.8.0
  • 879992e Change "current song" hotkey English label
  • b5b01f7 Keyboard shortcut to go to current song (#2029)
  • cdddd4c Bump golang.org/x/text from 0.4.0 to 0.5.0 (#2030)
  • 4489c34 Fix Misleading Error Message on unreadable Media due to Permission (#1873)
  • 51b67d1 Increase number of "Shuffle All" songs
  • c4d1569 Fix bug in duration format logic (#2026)
  • 68ceeb9 Fix build for non-unix
  • 4549b91 Fix build for non-unix
  • 9ffd145 Add log for signal received
  • 5713010 Bump github.com/spf13/viper from 1.13.0 to 1.14.0 (#2019)
  • 00c6545 Bump github.com/go-chi/jwtauth/v5 from 5.0.2 to 5.1.0
  • 3f45a4e Bump github.com/beego/beego/v2 from 2.0.5 to 2.0.6 (#2016)
  • 46c09e4 Bump github.com/prometheus/client_golang from 1.13.0 to 1.14.0 (#2018)
  • 40395f4 Use forked react-player. May fix issue #1472
  • 2c21415 Add nakedret linter
  • 03640ca Fix background images when BaseURL is specified
  • d8c5944 Fix race condition in scanner
  • 10cd315 Remove misplaced import
  • 950b5dc Remove math/rand and only use crypto/rand
  • 195f391 Host default login background images in Navidrome's own website
  • 334ccac Spotify-ish Improvement (#2012)
  • 676de79 Don't abort scan if all audio files are in the MediaFolder's root. Fix #868 (#893)
  • d5fe0f2 fix: send content type header in listenbrainz requests - #1944 (#1994)
  • 6ae6e02 Bump some NPM dependencies
  • 7bafbce Reduce number of goroutines in test, to avoid hitting the hard limit of 8128
  • a69a31a Use custom atomic.Bool, as it is not supported in Go 1.18
  • 88823fc Fix race conditions in tests
  • 0bb133a Kill ffmpeg if context is cancelled
  • 76a94ec Update GH actions
  • 1b5f855 Compress more http content-types.
  • 472f99b Add AAC default transcoding (#2010)
  • 4d660a2 Bump github.com/golangci/golangci-lint from 1.49.0 to 1.50.1 (#1954)
  • 3981018 Bump golang.org/x/tools from 0.1.12 to 0.3.0 (#1991)
  • d76985e Bump github.com/kr/pretty from 0.3.0 to 0.3.1 (#1924)
  • e17e4ef Bump github.com/microcosm-cc/bluemonday from 1.0.20 to 1.0.21 (#1905)
  • 0a4a9d4 Bump github.com/mattn/go-sqlite3 from 1.14.15 to 1.14.16 (#1965)
  • ce2c579 Bump github.com/spf13/cobra from 1.5.0 to 1.6.1 (#1966)
  • 4e19c5e Bump github.com/stretchr/testify from 1.8.0 to 1.8.1 (#1951)
  • ab6be8d Listenbrainz Scrobble (#2009)
  • 586f5c4 Bump github.com/onsi/ginkgo/v2 from 2.2.0 to 2.5.1 (#2007)
  • e6a93da Bump github.com/onsi/gomega from 1.20.2 to 1.24.1 (#1990)
  • fcb891e Add an id attribute to Search boxes. Should fix #1998
  • 19af11e Simplify Subsonic API handler implementation
  • cd41d9a Shutdown gracefully, close DB connection
  • 5f3f7af Add note about unstable state of master branch
  • 1467036 Add DefaultUIVolume option. Closes #1679
  • ff6c8f7 Bump loader-utils from 2.0.0 to 2.0.3 in /ui (#1978)
  • 3a462c7 Fix ARM v5 and v6 builds, by going back to armel.
  • 9c433b5 Add missing context to logger calls
  • daa428e Update Chinese translations (#1945)
  • 76517ca Fix potential nil pointer dereference
  • 8f02daf Reduce spurious error/warn messages, if loglevel != debug
  • 80b7311 Add TrackNumber to "fake" generated filenames. Fixes #1912
  • ca2cb26 Add played field to Subsonic API responses. Fix #1971
  • 081cfe5 Fix build badge
  • 5f38d9d Fix 60 seconds (again). Fixes #1956
  • 64e2a0b Optimize static images (#1941)
  • aab4925 Restore DefaultLanguage case-sensitiveness by reverting commit bfeb8ef.

Don't miss a new navidrome release

NewReleases is sending notifications on new releases.