This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Configuration

Configure Navidrome to suit your needs

1 - Navidrome Configuration Options

How to customize Navidrome to your environment

Navidrome allows some customization using environment variables, loading from a configuration file or using command line arguments.

Configuration File

Navidrome tries to load the configuration from a navidrome.toml file in the current working directory, if it exists. You can create this file and put any of the configuration options below in it. Example of a configuration file (select your OS):

# This is just an example! Please see available options to customize Navidrome for your needs at

# https://www.navidrome.org/docs/usage/configuration/options/#available-options

LogLevel = 'DEBUG'
Scanner.Schedule = '@every 24h'
TranscodingCacheSize = '150MiB'

# IMPORTANT: Use single quotes for paths in Windows

MusicFolder = 'C:\Users\JohnDoe\Music'

# Set this to the path of your ffmpeg executable

FFmpegPath = 'C:\Program Files\ffmpeg\bin\ffmpeg.exe'
# This is just an example! Please see available options to customize Navidrome for your needs at

# https://www.navidrome.org/docs/usage/configuration/options/#available-options

LogLevel = 'DEBUG'
Scanner.Schedule = '@every 24h'
TranscodingCacheSize = '150MiB'
MusicFolder = '/Users/JohnDoe/Music'

# This is the default path for Homebrew installed ffmpeg

FFmpegPath = '/opt/homebrew/bin/ffmpeg'
# This is just an example! Please see available options to customize Navidrome for your needs at

# https://www.navidrome.org/docs/usage/configuration/options/#available-options

LogLevel = 'DEBUG'
Scanner.Schedule = '@every 24h'
TranscodingCacheSize = '150MiB'
MusicFolder = '/mnt/music'

You can also specify a different path for the configuration file, using the -c/--configfile option. Navidrome can load the configuration from toml, json, yml and ini files.

The example below assume you have created a navidrome.toml file in your home directory:

C:\> navidrome --configfile "c:\User\JohnDoe\navidrome.toml"
$ navidrome --configfile "/User/JohnDoe/navidrome.toml"
$ navidrome --configfile "/home/johndoe/navidrome.toml"

Command Line Arguments

You can set most of the config options below passing arguments to navidrome executable.

The example below shows how to set the MusicFolder using the command line, assuming you have your music library under your home directory:

C:\> navidrome --musicfolder "c:\User\JohnDoe\Music"
$ navidrome --musicfolder "/User/JohnDoe/Music"
$ navidrome --musicfolder "/mnt/music"

Please note that command line arguments must be all lowercase. For a list of all available command line options, just call navidrome --help.

Environment Variables

Any configuration option can be set as an environment variable, just add a the prefix ND_ and make it all uppercase. Ex: ND_LOGLEVEL=debug. See below for all available options

Available Options

Basic configuration

In config fileAs an env varDescriptionDefault Value
-ND_CONFIGFILELoad configurations from an external config file"./navidrome.toml"
MusicFolderND_MUSICFOLDERFolder where your music library is stored. Can be read-only. This becomes the default library when using multi-library setup"./music"
DataFolderND_DATAFOLDERFolder to store application data (DB)"./data"
CacheFolderND_CACHEFOLDERFolder to store cache data (transcoding, images…)"<DataFolder>/cache"
LogLevelND_LOGLEVELLog level. Useful for troubleshooting. Possible values: error, warn, info, debug, trace"info"
LogFileND_LOGFILEPath to log file for output. When specified, logs will be written to this file instead of stderrEmpty (log to stderr)
AddressND_ADDRESSAddress the server will bind to. Can be an IPv4, IPv6 or a UNIX socket file (unix:/path/to/file)0.0.0.0 and :: (all IPs)
BaseUrlND_BASEURLBase URL to configure Navidrome behind a proxy (examples: /music, https://music.example.com)Empty
PortND_PORTHTTP port Navidrome will listen to4533
EnableInsightsCollectorND_ENABLEINSIGHTSCOLLECTORControls whether the server will run its Anonymous Data Collection feature to help improve the project.true

Advanced configuration

In config fileAs an environment variableDescriptionDefault Value
AgentsND_AGENTSComma-separated list of metadata agents to use for retrieving artist information, biographies, and images. Available agents: lastfm, spotify, and deezer. The order determines priority - agents are tried in the specified order until one succeeds. Only enabled and configured agents will be used."lastfm,spotify,deezer"
AlbumPlayCountModeND_ALBUMPLAYCOUNTMODEChange how album play count is computed. When set to "normalized", album play count will be divided by the number of album tracks"absolute"
AuthRequestLimit*ND_AUTHREQUESTLIMITHow many login requests can be processed from a single IP during the AuthWindowLength. Set to 0 to disable the limit rater5
AuthWindowLength*ND_AUTHWINDOWLENGTHWindow Length for the authentication rate limit"20s"
AutoImportPlaylistsND_AUTOIMPORTPLAYLISTSEnable/disable .m3u playlist auto-importtrue
AutoTranscodeDownloadND_AUTOTRANSCODEDOWNLOADUse the client’s transcoding configuration for downloads, if the client does not specify the desired format. If false, the original format will be used, without any transcoding.false
DefaultPlaylistPublicVisibilityND_DEFAULTPLAYLISTPUBLICVISIBILITYSet imported playlists as public by defaultfalse
ArtistArtPriority*ND_ARTISTARTPRIORITYConfigure the order to look for artist images."artist.*, album/artist.*, external"
Backup.PathND_BACKUP_PATHPath to store backups. Set to "" to disable backups. Click here for details"" (disabled)
Backup.ScheduleND_BACKUP_SCHEDULESchedule for automatic backups. Use Cron syntax"" (disabled)
Backup.CountND_BACKUP_COUNTNumber of backups to keep0 (disabled)
CoverArtPriority*ND_COVERARTPRIORITYConfigure the order to look for cover art images. Use special embedded value to get embedded images from the audio filescover.*, folder.*, front.*, embedded, external
CoverJpegQualityND_COVERJPEGQUALITYSet JPEG quality percentage for resized cover art images75
Deezer.Enabled*ND_DEEZER_ENABLEDSet this to false to completely disable Deezer integration for artist imagestrue
Deezer.LanguageND_DEEZER_LANGUAGELanguage to be used by Deezer integration"en"
DefaultDownsamplingFormatND_DEFAULTDOWNSAMPLINGFORMATFormat to transcode to when client requests downsampling (specify maxBitrate without a format)"opus"
DefaultLanguageND_DEFAULTLANGUAGESets the default language used by the UI when logging in from a new browser. This value must match one of the file names in the resources/i18n. Ex: for Chinese Simplified it has to be zh-Hans (case sensitive)"en"
DefaultThemeND_DEFAULTTHEMESets the default theme used by the UI when logging in from a new browser. This value must match one of the options in the UI“Dark”
DefaultShareExpirationND_DEFAULTSHAREEXPIRATIONSets the default expiration time for new shares (public links). Accepts durations like “24h” or “45m”."8760h" (1 year)
DefaultDownloadableShareND_DEFAULTDOWNLOADABLESHARESets the default downloadable state for new shares (public links). When enabled, newly created shares will be downloadable by defaultfalse
DefaultUIVolumeND_DEFAULTUIVOLUMESets the default volume used by the UI when logging in from a new browser. This value must be between 0 and 100100
EnableArtworkPrecacheND_ENABLEARTWORKPRECACHEEnable image pre-caching of new added musictrue
EnableCoverAnimationND_ENABLECOVERANIMATIONControls whether the player in the UI will animate the album cover (rotation)true
EnableDownloadsND_ENABLEDOWNLOADSEnable the option in the UI to download music/albums/artists/playlists from the servertrue
EnableExternalServicesND_ENABLEEXTERNALSERVICESSet this to false to completely disable ALL external integrations, including the anonymous data collection and the nice login background imagestrue
EnableFavouritesND_ENABLEFAVOURITESEnable toggling “Heart”/“Loved” for songs/albums/artists in the UI (maps to “Star”/“Starred” in Subsonic Clients)true
EnableGravatarND_ENABLEGRAVATARUse Gravatar images as the user profile image. Needs the user’s email to be filledfalse
EnableLogRedactingND_ENABLELOGREDACTINGWhether or not sensitive information (like tokens and passwords) should be redacted (hidden) in the logstrue
EnableMediaFileCoverArt*ND_ENABLEMEDIAFILECOVERARTIf set to false, it will return the album CoverArt when a song CoverArt is requestedtrue
EnableNowPlayingND_ENABLENOWPLAYINGEnable/disable the Now Playing feature that tracks what songs users are currently listening to. When disabled, the “Now Playing” functionality and admin panel will be unavailabletrue
EnableReplayGainND_ENABLEREPLAYGAINEnable ReplayGain options in the UItrue
EnableScrobbleHistoryND_ENABLESCROBBLEHISTORYEnable/disable scrobble historytrue
EnableSharingND_ENABLESHARINGEnable the Sharing featurefalse
EnableStarRatingND_ENABLESTARRATINGEnable 5-star ratings in the UItrue
EnableTranscodingCancellationND_ENABLETRANSCODINGCANCELLATIONEnables transcoding cancellation when a client disconnects during streaming. When enabled, transcoding processes are stopped if the client closes the connection, saving server resources. Useful for preventing unnecessary transcoding work when users skip or stop playbackfalse
EnableTranscodingConfig*ND_ENABLETRANSCODINGCONFIGEnables transcoding configuration in the UIfalse
EnableUserEditingND_ENABLEUSEREDITINGEnable regular users to edit their details and change their passwordtrue
ExtAuth.TrustedSources*ND_EXTAUTH_TRUSTEDSOURCESComma separated list of IP CIDRs (or when listening on a UNIX socket the special value @) which are allowed to use reverse proxy authentication. Empty means “deny all”. Click here for details. Note: This option is unnecessary for most reverse proxy setups, only for authenticating reverse proxies.Empty
ExtAuth.UserHeader*ND_EXTAUTH_USERHEADERHTTP header containing the user name from an authenticating proxy. Click here for details."Remote-User"
FFmpegPathND_FFMPEGPATHPath to ffmpeg executable. Use it when Navidrome cannot find it, or you want to use a specific versionEmpty (search in the PATH)
GATrackingIDND_GATRACKINGIDSend basic info to your own Google Analytics account. Must be in the format UA-XXXXXXXXEmpty (disabled)
HTTPHeaders.FrameOptionsND_HTTPHEADERS_FRAMEOPTIONSAllows the X-Frame-Options header value to be set with a custom value. Ex: "SAMEORIGIN""DENY"
IgnoredArticlesND_IGNOREDARTICLESList of ignored articles when sorting/indexing artists"The El La Los Las Le Les Os As O A"
ImageCacheSizeND_IMAGECACHESIZESize of image (art work) cache. Set to "0" to disable cache"100MB"
Inspect.BacklogLimitND_INSPECT_BACKLOGLIMITBacklog limit for inspect request throttling100
Inspect.BacklogTimeoutND_INSPECT_BACKLOGTIMEOUTBacklog timeout for inspect request throttling"1m"
Inspect.EnabledND_INSPECT_ENABLEDEnable/disable inspect endpointstrue
Inspect.MaxRequestsND_INSPECT_MAXREQUESTSMaximum concurrent inspect requests1
Jukebox.EnabledND_JUKEBOX_ENABLEDEnable Jukebox mode (play audio on server’s hardware) Click here for detailsfalse
Jukebox.AdminOnlyND_JUKEBOX_ADMINONLYBy default, Jukebox mode is only available to Admins. Set this option to false to allow any valid user to control ittrue
Jukebox.Devices(cannot be set as an environment variable)List of devices that can be used by the Jukebox. Click here for detailsEmpty (auto detect)
Jukebox.DefaultND_JUKEBOX_DEFAULTDevice to use for Jukebox mode, if there are multiple Jukebox.Devices entries. Click here for detailsEmpty (auto detect)
LastFM.EnabledND_LASTFM_ENABLEDSet this to false to completely disable Last.fm integrationtrue
LastFM.ApiKey*ND_LASTFM_APIKEYLast.fm API KeyEmpty
LastFM.Secret*ND_LASTFM_SECRETLast.fm API SecretEmpty
LastFM.LanguageND_LASTFM_LANGUAGETwo letter-code for language to be used to retrieve biographies from Last.fm"en"
LastFM.ScrobbleFirstArtistOnlyND_LASTFM_SCROBBLEFIRSTARTISTONLYWhen enabled, only the first artist will be scrobbled for tracks with multiple artists, instead of the display artist or concatenated listfalse
ListenBrainz.BaseURLND_LISTENBRAINZ_BASEURLSet this to override the default ListenBrainz base URL (useful with self-hosted solutions like Maloja*https://api.listenbrainz.org/1/
ListenBrainz.EnabledND_LISTENBRAINZ_ENABLEDSet this to false to completely disable ListenBrainz integrationtrue
LyricsPriorityND_LYRICSPRIORITYControls the order and sources for fetching lyrics. Comma-separated list of sources checked in order: embedded (from tags), file extensions like .lrc, .txt, or any custom extension. Navidrome will search for lyrics files with the same name as the audio file but with the specified extension.".lrc,.txt,embedded"
MaxSidebarPlaylistsND_MAXSIDEBARPLAYLISTSSet the maximum number of playlists shown in the UI’s sidebar. Note that a very large number can cause UI performance issues.100
MPVPathND_MPVPATHPath to mpv executable. Used for Jukebox modeEmpty (search in PATH)
MPVCmdTemplateND_MPVCMDTEMPLATECmd template used to construct the call of the mpv executable. Used for Jukebox modempv --audio-device=%d --no-audio-display %f --input-ipc-server=%s
PasswordEncryptionKey*ND_PASSWORDENCRYPTIONKEYPassphrase used to encrypt passwords in the DB. Click here for details-
PID.AlbumND_PID_ALBUMSet the tag(s) to use as the Album ID. Click here for detailsmusicbrainz_albumid|albumartistid,album,albumversion,releasedate
PID.TrackND_PID_TRACKSet the tag(s) to use as the Track ID. Click here for detailsmusicbrainz_trackid|albumid,discnumber,tracknumber,title
PlaylistsPathND_PLAYLISTSPATHLimit where to search for and import playlists from. Can be a list of folders/globs (separated by : (or ; on Windows). Paths MUST be relative to MusicFolderEmpty (meaning any playlist files in your library will be imported)
PreferSortTagsND_PREFERSORTTAGSUse Sort_* tags to sort columns in the UI.false
Prometheus.EnabledND_PROMETHEUS_ENABLEDEnable extra endpoint with Prometheus metrics.false
Prometheus.MetricsPathND_PROMETHEUS_METRICSPATHCustom path for Prometheus metrics. Useful for blocking unauthorized metrics requests."/metrics"
Prometheus.PasswordND_PROMETHEUS_PASSWORDEnables Basic Auth protection for Prometheus endpoint. User will be navidrome. Leave empty to disable Basic Auth protection.Empty (no password/authentication)
RecentlyAddedByModTimeND_RECENTLYADDEDBYMODTIMEUses music files’ modification time when sorting by “Recently Added”. Otherwise use import timefalse
Scanner.EnabledND_SCANNER_ENABLEDEnable/disable the scanner. Set to false to disable automatic scanning of the music library.true
Scanner.ScheduleND_SCANNER_SCHEDULESchedule for automatic scans. Use Cron syntax0 (disabled)
Scanner.WatcherWaitND_SCANNER_WATCHERWAITTime to wait after a file change is detected before starting a scan. Useful to avoid scanning incomplete files. Set it to 0 to disable the watcher"5s"
Scanner.ScanOnStartupND_SCANNER_SCANONSTARTUPEnable/disable scanning the music library on startup. Set to false to disabletrue
Scanner.ArtistJoinerND_SCANNER_ARTISTJOINERCharacter string used to join multiple artists in display. Change this if you prefer a different separator between artist names" • "
Scanner.FollowSymlinksND_SCANNER_FOLLOWSYMLINKSWhether to follow symbolic links when scanning directories. When enabled, the scanner will traverse symlinked directories and include their contents in the library. When disabled, symlinked directories are ignored during scanningtrue
Scanner.PurgeMissingND_SCANNER_PURGEMISSINGControls when missing files, albums, and artists are purged from the database during scans. Possible values: "never" (default, just mark as missing), "always" (purge after every scan), "full" (purge only after a full scan)."never"
SearchFullStringND_SEARCHFULLSTRINGMatch query strings anywhere in searchable fields, not only in word boundaries. Useful for languages where words are not space separatedfalse
SessionTimeoutND_SESSIONTIMEOUTHow long Navidrome will wait before closing web ui idle sessions"48h"
ShareURLND_SHAREURLBase URL for shared links. Useful when your server address is not a public (ex: when using Tailscale). See discussion hereEmpty (use server address)
SmartPlaylistRefreshDelayND_SMARTPLAYLISTREFRESHDELAYHow often to refresh Smart Playlists. Check the smart playlists docs"5s"
Spotify.ID*ND_SPOTIFY_IDSpotify Client ID. Required if you want Artist imagesEmpty
Spotify.Secret*ND_SPOTIFY_SECRETSpotify Client Secret. Required if you want Artist imagesEmpty
Subsonic.AppendSubtitleND_SUBSONIC_APPENDSUBTITLEAppend the subtitle tag to the song title in all Subsonic API responsestrue
Subsonic.ArtistParticipationsND_SUBSONIC_ARTISTPARTICIPATIONSWhen Subsonic clients request artist’s albums, include albums where the artist participates (ex: Various Artists compilations)false
Subsonic.DefaultReportRealPathND_SUBSONIC_DEFAULTREPORTREALPATHSet to true to report the real path of the music files in the API. Can be customized individually for each client/player. This can be a security risk, so it is disabled by defaultfalse
Subsonic.LegacyClientsND_SUBSONIC_LEGACYCLIENTSList of clients that does not work with the new OpenSubsonic API improvements."DSub"
Tags(cannot be set as an environment variable)Configure custom tags to be imported from your music files. Click here for detailsEmpty
TLSCertND_TLSCERTPath for the TLS certificate file, which should include the signature chain if anyEmpty (disable TLS)
TLSKeyND_TLSKEYPath for the TLS key fileEmpty (disable TLS)
TranscodingCacheSizeND_TRANSCODINGCACHESIZESize of transcoding cache. Set to "0" to disable cache"100MB"
UILoginBackgroundUrlND_UILOGINBACKGROUNDURLChange background image used in the Login pagerandom music image from this Unsplash.com collection
UIWelcomeMessageND_UIWELCOMEMESSAGEAdd a welcome message to the login screenEmpty
UnixSocketPermND_UNIXSOCKETPERMSet file permissions for Unix Socket File.*"0660"

Notes

  • Durations are specified as a number and a unit suffix, such as “24h”, “30s” or “1h10m”. Valid time units are “s”, “m”, “h”.
  • Sizes are specified as a number and an optional unit suffix, such as “1GB” or “150 MiB”. Default unit is bytes. Note: “1KB” == “1000”, “1KiB” == “1024”
  • Transcoding can be required in some situations. For example: trying to play a WMA file in a webbrowser, will only work for natively supported formats by the browser you are using. (so playing that with Mozilla Firefox on Linux, will not work. Mozilla even has their own guide about audio codecs).

2 - Using custom tags with Navidrome

How to import and use custom tags in Navidrome. This page explains the available options to configure custom tags, including aliases, tag type, maximum length, custom separators and album-level settings.

Overview

As all tags imported are stored and indexed in the database, to improve performance and reduce storage requirements, Navidrome only imports a predefined set of tags. The complete list of default tags imported are listed here.

However, Navidrome supports importing and using custom tags from your music files. Custom tags allow you to extend the metadata beyond the default supported tags. This functionality can be configured via the configuration file.

Configuring custom tags

Custom tags are defined under the Tags configuration section. A custom tag configuration accepts the following properties:

  • Aliases: A list of all alternative names that can found in your music files, but should be considered the same tag. Ex: album artist, albumartist. This is a required field.
  • Type: Specifies the type of data stored in the tag. It can be used to validate or transform values. Supported types are int,float, date, uuid. If not specified, the tag will be treated as a string.
  • MaxLength: The length limit for the tag value. Default is 1024 characters.
  • Album: A boolean flag indicating whether this tag applies to an album as well. Default is false. If set to true, the tag will be considered when generating the PID for an album.
  • Split: Tags are always considered multivalued, but you can specify a list of delimiters used to split a tag value into multiple entries.
  • Ignore: A boolean flag indicating whether this tag should be ignored. Default is false. Useful for disabling tags that are imported by default. See example below.

Note that tags are case-insensitive, so you don’t need to specify all possible case variations in the Aliases list.

Example configuration

Below is an example of how to set up custom tag options in your configuration file.

Tags.MyCustomTag.Aliases = ["mycustomtag", "customtag"]
Tags.MyCustomTag.MaxLength = 50
Tags.MyCustomTag.Album = false
Tags.MyCustomTag.Split = ["; ", " / "]

In this example, the custom tag mycustomtag is configured with two aliases, a type of string (default), and a maximum length of 50 characters. Additionally, it sets the splitting delimiters so that if a tag value contains ; or / it will be split into multiple values.

Common use cases

Here are some common use cases for custom tags.

Adding a new tag for disambiguation

By default, Navidrome uses MusicBrainz IDs to identify albums and tracks. However, if your music library is tagged with information from other DBs, like Discogs, you can add custom tags to store the Discogs IDs.

Example:

Tags.discogs_release_id.Aliases = ['discogs_release_id']
Tags.discogs_release_id.Album = true
PID.Album = 'discogs_release_id|albumartistid,album,albumversion,releasedate'

See the PID configuration for more information on how to configure album disambiguation.

Disabling tags

Any custom tag found in your music files, but not defined with the Tags configuration option will be ignored by Navidrome. If you need to disable a tag that is already imported by default, you can do so by explicitly setting its Ignore flag to true.

Example: disabling the subtitle tag

Tags.Subtitle.Ignore = true

Changing separators

The preferable way to have multivalued tags is to use your tag editor and add multiple values for the same tag. However, if your library is already tagged with multiple values separated by a known delimiter, you can configure Navidrome to split the tag value by that delimiter into multiple entries. Just keep in mind that this can have unwanted side effects if the delimiter is used in other contexts. (Ex: using '/' as an artist delimiter can break artists like AC/DC, '&' as a delimiter can break artists like Simon & Garfunkel)

Example: Splitting the artist tag by \ and ;

Tags.Artist.Split = ['\', '; ']

If you want to disable splitting for a tag, you can set the Split option to an empty list.

Tags.Genre.Split = []

Artist splitting

By default, Navidrome will split the artist tag value by various common separators (e.g., feat., ft., /, etc.) to identify multiple artists. To customize the separators used for artist splitting, you can configure the Tags.Artist.Split option:

Tags.Artist.Split = ["/", " / ", " feat. ", " feat ", " ft. ", " ft ", "; "]

Note that the separators are case insensitive, so both FEAT. and feat. will be recognized by default.

Separating Writer and Composer tags

By default, Navidrome maps both composer and writer tag values to a single (multi-valued) composer field in its database. If you want to keep these as separate metadata fields, you can define custom tags for each one:

Tags.Composer.Aliases = ['composer', 'tcom', 'composer', '©wrt', 'wm/composer', 'imus']
Tags.Writer.Aliases = ['writer', 'txxx:writer', 'iwri']

This will allow you to filter or sort by writer in Smart Playlists.

Adding tags for custom filtering/sorting in Smart Playlists

If you want to create a Smart Playlist that filters or sorts by a custom tag, you can define the tag in the configuration file, then use it in the Smart Playlist as a regular field.

3 - Customizing Persistent IDs in Navidrome

Learn how to configure and customize Persistent IDs (PIDs) in Navidrome to customize disambiguation and improve media management.

Persistent IDs in Navidrome

Persistent IDs (PIDs) are configurable identifiers introduced to provide stable references for Tracks and Albums in Navidrome, significantly improving how media is managed and identified.

Overview of Persistent IDs

Persistent IDs are unique, user-configurable identifiers for tracks and albums, enabling Navidrome to accurately detect and manage moved or re-tagged files, and disambiguate albums with identical names or duplicated entries.

Key Features

  • Configurable and Flexible: Users can define their PID structure using various tags, including musicbrainz_trackid, albumid, discnumber, tracknumber, title, folder, albumartistid, catalognum, Discogs IDs, or even custom tags
  • Accurate File Detection: Navidrome recognizes moved or re-tagged files, preventing duplication or mismatches.
  • Album Disambiguation: Easily differentiate albums with identical names through custom tags like albumversion (e.g., Deluxe Editions).

Default Configuration

The default configuration prioritizes MusicBrainz IDs (MBIDs) when available:

PID.Track = "musicbrainz_trackid|albumid,discnumber,tracknumber,title"
PID.Album = "musicbrainz_albumid|albumartistid,album,albumversion,releasedate"
  • Track PID:

    • Uses musicbrainz_trackid if available.
    • Otherwise, combines albumid, discnumber, tracknumber, and title. (albumid is derived from PID.Album.)
  • Album PID:

    • Uses musicbrainz_albumid if available.
    • Otherwise, combines albumartistid, album, albumversion, and releasedate.

Customizing PIDs

You can create custom PID configurations to meet specific needs, such as:

  • Grouping albums by folder:

    PID.Album = "folder"
    
  • Using Discogs or custom IDs for albums:

    Tags.discogs_release_id.Aliases = ['DISCOGS_RELEASE_ID']
    PID.Album = 'discogs_release_id|albumartistid,album,albumversion,releasedate'
    
  • Using the pre-0.55.0 (pre-BFR) behaviour:

    PID.Album = "album_legacy"
    PID.Track = "track_legacy"
    

    This will use the old ID generation method, which is based on the file path for tracks and name+releaseDate for albums.

Handling File Moves and Retagging

When files are moved, Navidrome uses PIDs to accurately identify and reconnect these files on the next scan:

  • First, Navidrome attempts to match a missing file with new ones based on exact tags.
  • If exact tags do not match, Navidrome checks for a matching PID.
  • Finally, if no PID match is found, it attempts to match the file based on the original file path, excluding the file extension (ex: /artist/album/01-track.mp3/artist/album/01-track.flac).

This ensures minimal disruption to playlists, ratings, and play counts when managing your media library.

You can also retag your files, and Navidrome will automatically update the PIDs based on the new tags.

Artist IDs

Currently, Artist PIDs rely solely on the artist name due to limitations in TagLib/Picard regarding MBIDs for composer and other roles, potentially causing duplicate entries. For this reason they are not configurable. Future enhancements are planned to address this.

Troubleshooting and Support

If issues arise when enabling or configuring PIDs: