Aller au contenu principal
Kgaut's links

Navigation principale

  • Accueil
Menu du compte de l'utilisateur
  • Se connecter

Fil d'Ariane

  1. Accueil

GitHub - WB2024/WBs-Guide-to-Navidrome

Par Anonyme (non vérifié) , 14 mars 2026
URL
GitHub - WB2024/WBs-Guide-to-Navidrome
body
WB2024 / WBs-Guide-to-Navidrome Public
  • Notifications You must be signed in to change notification settings
  • Fork 1
  • Star 59
  • Code
  • Issues 0
  • Pull requests 0
  • Actions
  • Projects
  • Security 0
  • Insights
Additional navigation options
  • Code
  • Issues
  • Pull requests
  • Actions
  • Projects
  • Security
  • Insights

WB2024/WBs-Guide-to-Navidrome

BranchesTags
Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
7 Commits
.gitignore
.gitignore
 
 
README.md
README.md
 
 
README_FR.md
README_FR.md
 
 

Repository files navigation

  • README

🎵 The Ultimate Navidrome Setup Guide

A complete, beginner-friendly guide to getting the very best out of your self-hosted Navidrome music server — from installation to perfect metadata, playback, and beyond.

Based on community recommendations and best practices.


📋 Table of Contents

  1. Overview — What Are We Building?
  2. Step 1: Install Navidrome (Docker)
  3. Step 2: Tag Your Music with MusicBrainz Picard
  4. Step 3: Fix Genre Tags
  5. Step 4: Set Up Playback Apps
  6. Step 5: Remote Access with Tailscale
  7. Step 6: Add Radio Stations
  8. Step 7: Create Smart Playlists
  9. Step 8: View Your Listening Stats (Navidrome Wrapped)
  10. Audio Quality Tips
  11. Alternatives Considered
  12. Quick Reference Links

🗺️ Overview — What Are We Building?

Here's the full stack at a glance:

Component Purpose Link
Navidrome Self-hosted music server navidrome.org
MusicBrainz Picard Auto-tag metadata (artist, album, track, etc.) picard.musicbrainz.org
Picard Filenaming Script Generator Generate Picard file-naming scripts without coding GitHub
Essentia Music Tagger AI-powered genre/mood tagging (replaces Picard's genres) GitHub
Artist Genre Metadata Enforcer Define your own genre per artist, enforce it everywhere GitHub
Navidrome Radio Station Manager Add internet radio stations to Navidrome GitHub
Navidrome Smart Playlist Creator Build dynamic .nsp smart playlists via guided menus — no JSON editing GitHub
Navidrome Wrapped Spotify Wrapped–style listening stats GitHub
Feishin Desktop music player (Spotify-like UI) GitHub
Symfonium Mobile music player (Android) symfonium.app
Tailscale Secure remote access (no port forwarding) tailscale.com
┌─────────────┐     ┌──────────────┐     ┌──────────────┐
│  Your Music  │────▶│   Picard     │────▶│  Genre Fix   │
│  (files)     │     │  (tagging)   │     │  (Essentia   │
│              │     │              │     │   or Manual)  │
└─────────────┘     └──────────────┘     └──────┬───────┘
                                                 │
                                                 ▼
┌─────────────┐     ┌──────────────┐     ┌──────────────┐
│  Feishin    │◀────│  Navidrome   │◀────│  Clean Music  │
│  (desktop)  │     │  (server)    │     │  Library      │
├─────────────┤     │              │     └──────────────┘
│  Symfonium  │◀────│              │
│  (mobile)   │     └──────┬───────┘
└─────────────┘            │
                    ┌──────┴───────┐
                    │  Tailscale   │
                    │  (remote)    │
                    └──────────────┘

🐳 Step 1: Install Navidrome (Docker)

Prerequisites

  • Docker and Docker Compose installed on your machine
  • A music library folder on your system
  • (Optional) Spotify and Last.fm API keys for artist images and scrobbling

Docker Compose Configuration

Create a docker-compose.yml file:

services:
  navidrome:
    image: ghcr.io/navidrome/navidrome:latest
    container_name: navidrome
    environment:
      - ND_MUSICFOLDER=/music
      - ND_PORT=4533
      - ND_SPOTIFY_ID=your_spotify_client_id        # For artist images
      - ND_SPOTIFY_SECRET=your_spotify_client_secret  # For artist images
      - ND_LASTFM_APIKEY=your_lastfm_api_key         # For scrobbling
      - ND_LASTFM_SECRET=your_lastfm_secret           # For scrobbling
      - ND_LOGLEVEL=info
    volumes:
      - /path/to/your/navidrome/data:/data       # Navidrome database & config
      - /path/to/your/music/library:/music:ro    # Your music (read-only)
    ports:
      - "4533:4533"
    restart: unless-stopped

Getting Your API Keys

Spotify (for artist images & artwork)

  1. Go to developer.spotify.com
  2. Log in and create a new app
  3. Copy the Client ID and Client Secret
  4. Paste them into ND_SPOTIFY_ID and ND_SPOTIFY_SECRET

Last.fm (for scrobbling)

  1. Go to last.fm/api
  2. Create a new API account/application
  3. Copy the API Key and Shared Secret
  4. Paste them into ND_LASTFM_APIKEY and ND_LASTFM_SECRET

Launch Navidrome

docker compose up -d

Visit http://your-server-ip:4533 in your browser. On first launch, you'll create an admin account.

💡 Tip: Mount your music folder as :ro (read-only) so Navidrome can't accidentally modify your files.


🏷️ Step 2: Tag Your Music with MusicBrainz Picard

MusicBrainz Picard is the go-to tool for automatically tagging your music with accurate metadata (artist, album, title, track number, cover art, etc.). It looks up your music against the massive MusicBrainz database — which has excellent coverage for Japanese and Korean music too.

Option A: Run Picard via Docker (Recommended for Servers)

If your music is on a headless server, run Picard as a web-accessible Docker container:

services:
  picard-web:
    image: aandree5/picard-web:latest
    container_name: picard-web
    restart: unless-stopped
    ports:
      - "8086:5000"
    volumes:
      - /path/to/picard/config:/picard-web:rw    # Picard config/state
      - /path/to/your/music:/music:rw            # Your music (read-write!)
docker compose up -d

Access Picard in your browser at http://your-server-ip:8086.

⚠️ Important: The music volume must be :rw (read-write) here because Picard needs to write tags to your files.

Option B: Run Picard on Desktop

Download from picard.musicbrainz.org and install normally on Windows, macOS, or Linux.

How to Use Picard (Quick Workflow)

  1. Add files — Drag & drop your music folder into Picard
  2. Cluster — Click "Cluster" to group files by album
  3. Lookup — Click "Lookup" to match against MusicBrainz
  4. Review — Check the matches are correct (green = good match)
  5. Save — Click "Save" to write the tags to your files

Generate a File Naming Script

Picard can also rename and reorganize your files based on metadata. Writing these scripts manually is complex, so use the Picard Filenaming Script Generator:

📦 WB's Picard Filenaming Script Generator

This interactive CLI tool lets you:

  • Choose from 6 ready-made presets (e.g., Artist/[Year] Album/01 - Track.flac)
  • Or use the custom builder wizard to configure every detail
  • Preview example output before saving
  • Export directly into Picard — no scripting knowledge needed
# Install and run
git clone https://github.com/WB2024/WBs-Picard-Filenaming-Script-Generator.git
cd WBs-Picard-Filenaming-Script-Generator
python3 picard_script_generator.py

💡 For Japanese/Korean music: MusicBrainz has strong coverage of J-Pop, K-Pop, anime OSTs, and more. Picard will pull the correct metadata including original-language titles when available.


🎸 Step 3: Fix Genre Tags

Picard is great for most metadata, but its genre tags are often generic or inconsistent (e.g., tagging everything as "Rock" or "Pop"). There are two approaches to fix this:

Option A: AI-Powered Genre Tagging with Essentia (Automatic)

📦 Essentia Music Tagger

This tool analyzes the actual audio waveform using machine learning to predict accurate genres and moods. No internet required after setup — everything runs locally.

What it does:

  • Classifies across 400 genre categories (Discogs taxonomy)
  • Detects moods (energetic, dark, happy, aggressive, etc.)
  • Writes GENRE and MOOD tags directly to your files
  • Supports FLAC & MP3

Quick start:

# Clone and set up
git clone https://github.com/WB2024/Essentia-to-Metadata.git
cd Essentia-to-Metadata

# Create virtual environment
python3 -m venv venv
source venv/bin/activate

# Install dependencies
pip install essentia-tensorflow mutagen numpy

# Download ML models (~87MB)
bash download_models.sh

# Run (always do a dry run first!)
python tag_music.py

Or via Docker:

# CPU mode
docker compose build essentia-tagger
MUSIC_DIR=/path/to/music docker compose run --rm essentia-tagger

# Dry run first!
MUSIC_DIR=/path/to/music docker compose run --rm essentia-tagger /music --auto --dry-run

Example output:

Input:  2Pac - Temptations.flac
Output: GENRE = Hip-Hop - Gangsta; Hip-Hop - East Coast Hip Hop
        MOOD  = Energetic; Dark

🧪 Always run in dry-run mode first to preview what changes will be made!


Option B: Manual Genre Enforcement (Your Rules)

📦 Artist Genre Metadata Enforcer

If you prefer your own genre definitions rather than what an algorithm or database decides, this tool lets you define a genre once per artist and apply it to their entire discography.

Why use this?

  • You decide that all 2Pac is Hip-Hop, period
  • No more "Hip Hop" vs "Hip-Hop" vs "Rap" inconsistencies
  • Define once, enforce everywhere — even across thousands of tracks

Quick start:

# Install dependency
sudo apt install python3-mutagen   # Debian/Ubuntu
# or: pip install mutagen

# Download and install
sudo curl -o /usr/local/bin/music-genre-enforcer \
  https://raw.githubusercontent.com/WB2024/Artist-Genre-Metadata-Enforcer/main/music-genre-enforcer.py
sudo chmod +x /usr/local/bin/music-genre-enforcer

# Run
music-genre-enforcer

Interactive workflow:

Genre for [Aphex Twin] (or l/p/?/s): p
Existing genres:
  [1] Electronic - Ambient
  [2] Hip-Hop
  [3] Post-Punk
  [4] Rock - Art
Pick number (blank cancels): 1
  -> Set [Aphex Twin] = Electronic - Ambient

Expected folder structure:

/your/music/library/
├── A/
│   ├── Aphex Twin/
│   │   ├── [1992] Selected Ambient Works 85-92/
│   │   │   ├── 01 - Xtal.flac
├── B/
│   ├── Bowie, David/
├── #/
│   └── 2Pac/
└── Various Artists/
Feature Essentia (Option A) Genre Enforcer (Option B)
Automation Fully automatic (AI) Semi-automatic (you define, it applies)
Accuracy Based on audio analysis Based on your personal preference
Best for Large libraries, discovery Curated libraries, consistency
Multi-genre Yes (configurable) Single genre per artist

💡 Pro tip: You can use both — run Essentia first for a baseline, then use the Genre Enforcer to override specific artists with your preferred labels.


🎧 Step 4: Set Up Playback Apps

Desktop: Feishin

📦 Feishin — A modern, Spotify-like desktop music player.

Why Feishin?

  • Beautiful UI that looks and feels like Spotify
  • Connects directly to Navidrome (and Jellyfin)
  • Dual playback engines: MPV (high-quality native) or Web player
  • Smart playlists, lyrics, scrobbling, themes
  • Available on Windows, macOS, and Linux

Download: github.com/jeffvli/feishin/releases

Setup:

  1. Download and install Feishin for your OS
  2. Open Feishin → Add Server → Enter your Navidrome URL and credentials
  3. Start browsing and playing!

🔊 Optimal Audio Setup (Advanced)

For the best audio quality on desktop:

  1. Use MPV as the playback engine in Feishin's settings
  2. Connect a USB DAC (Digital-to-Analog Converter) to your computer
  3. Set audio output to WASAPI (Windows) in Feishin/MPV settings
  4. Enable audio-exclusive mode — this prevents Windows from resampling your audio

This bypasses the Windows audio mixer entirely, sending bit-perfect audio to your DAC.


Mobile: Symfonium

📦 Symfonium — The best Android music player for self-hosted servers.

Why Symfonium?

  • Connects to Navidrome (plus Plex, Jellyfin, Emby, cloud storage, and more)
  • Offline caching — download music for when you're without internet
  • Gapless playback, replay gain, and high-res audio support
  • Cast to Chromecast, DLNA, Sonos, and more
  • Android Auto & Wear OS support
  • One-time purchase, no subscriptions, no ads

Setup:

  1. Install from Google Play Store
  2. Add your Navidrome server (URL + credentials)
  3. Enjoy your music on the go!

🌐 Step 5: Remote Access with Tailscale

Want to listen to your music when you're away from home? Don't expose your server to the internet with port forwarding — use Tailscale instead.

📦 Tailscale — Creates a secure, private network (VPN) between your devices with zero configuration.

How It Works

  1. Install Tailscale on your server (where Navidrome runs)
  2. Install Tailscale on your phone/laptop (where you listen)
  3. Both devices get a private Tailscale IP address
  4. Access Navidrome using the Tailscale IP — encrypted, secure, no port forwarding

Setup

# On your server (Debian/Ubuntu)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

# Note the Tailscale IP it gives you (e.g., 100.x.y.z)

Install the Tailscale app on your phone/laptop from tailscale.com/download.

Then in Feishin or Symfonium, set your server URL to:

http://100.x.y.z:4533

🔒 Why Tailscale? No ports to open, no dynamic DNS to configure, encrypted WireGuard tunnel, and a generous free tier for personal use.


📻 Step 6: Add Radio Stations

📦 Navidrome Radio Station Manager

A CLI tool to search, browse, and add internet radio stations to your Navidrome server from the Radio-Browser community database.

Install

# Install dependency
pip3 install requests

# Download and install
curl -o /usr/local/bin/navidrome-radio \
  https://raw.githubusercontent.com/WB2024/Add-Navidrome-Radios/main/navidrome-radio.py
sudo chmod +x /usr/local/bin/navidrome-radio

# Run
navidrome-radio

Usage

On first run, enter your Navidrome database path (e.g., /path/to/navidrome/data/navidrome.db).

Then search and add stations:

MAIN MENU
1. Search and add radio stations
2. View existing stations in database
3. Inspect database (debug)
4. Change database path
5. Exit

Search by name, genre, country, or browse top-voted stations.
Select stations → type "add" → they appear in Navidrome immediately!

💡 Docker users: Your database path is on the host, not inside the container. Check your docker-compose.yml volumes to find it.


🎼 Step 7: Create Smart Playlists

📦 Navidrome Smart Playlist Creator

Navidrome supports Smart Playlists — dynamic playlists defined as rules stored in .nsp files that automatically populate based on criteria you define (e.g., "all songs I've loved from the 80s" or "high-quality tracks I haven't played recently"). This fully guided CLI tool builds those rule files through numbered menus — no JSON editing, no memorising field names or operator syntax.

Features

  • 30+ ready-made presets — deploy instant playlists covering essentials, discovery, moods, decades, quality, and complex nested logic
  • One-click deploy all — save every preset at once with a single menu choice
  • 100+ fields — every field Navidrome supports, from core metadata to MusicBrainz IDs and ReplayGain values
  • Nested rule groups — create sub-groups with their own AND/OR logic (e.g. "loved OR highly rated" inside an AND query)
  • Multi-field sorting — sort by multiple fields with individual ascending/descending direction
  • Fully guided numbered menus — no typing field names, operators, or syntax
  • Beautiful UI — enhanced display via rich (optional, degrades gracefully)

Install & Run

git clone https://github.com/WB2024/Navidrome-SmartPlaylist-Generator-nsp.git
cd Navidrome-SmartPlaylist-Generator-nsp
pip install rich       # Optional — recommended for best UI
python navidrome_smart_playlist_creator.py

On first run, set your playlist directory — the folder where Navidrome scans for .nsp files. The path is saved and remembered for future sessions.

How It Works

The wizard guides you through five steps to build a playlist:

  1. Rule logic — ALL must match (AND) or ANY can match (OR)
  2. Rules — pick a field → operator → value. Supports nested rule groups for complex AND/OR logic to any depth, with a live summary panel showing your rules as you build
  3. Sort order — one or multiple sort fields, each with ascending/descending direction
  4. Limit — optionally cap the number of tracks
  5. Details — name and optional description

After completing the wizard, the generated JSON is previewed and you confirm before saving.

Deploy Preset Playlists

Choose Deploy preset playlists from the main menu to instantly save 30+ ready-made .nsp files:

Category Examples
Essentials Recently Played, Recently Added, Most Played, Never Played, Loved Tracks, Top Rated
Discovery Fresh Blood, Vinyl Roulette, One-Hit Wonders, Album Openers
Rediscovery Forgotten Gems, Comebacks, Buried Treasure
Moods & Vibes Long Drives, Short & Sweet, Slow Burners, Bangers Only
Quality & Format FLAC Attack, Hi-Res Audio, Lossy Leftovers
Decades 60s–2010s Classics (one preset per decade)
Complex / Nested 80s Gold, The Collector, Guilty Pleasures, The Graveyard

How Navidrome Imports Playlists

Place .nsp files anywhere inside your music library folder — Navidrome finds them automatically on the next library scan. Smart Playlists refresh automatically when accessed.

💡 Recommended: Create a SmartPlaylists/ subfolder inside your music library root and save all .nsp files there to keep them organised.

⚠️ Docker users: If you use a separate PlaylistsPath volume, place .nsp files inside your music library folder instead — that's the most reliable approach across all Navidrome versions.


📊 Step 8: View Your Listening Stats (Navidrome Wrapped)

📦 Navidrome Wrapped

Navidrome Wrapped is a beautiful, Spotify Wrapped–inspired client-side web app that generates comprehensive all-time listening statistics from your Navidrome server. See your top artists, albums, songs, genre and decade breakdowns, diversity scoring, rating analysis, audio quality insights, and shareable summary cards — all in a stunning interactive slideshow.

Key Features

  • Pure client-side — no backend server needed; runs entirely in your browser
  • Privacy-first — your credentials are never stored or sent anywhere except directly to your Navidrome instance; all processing is local
  • Interactive slideshow with 8 sections: Welcome, Listening Time, Top Artists, Top Albums, Top Songs, Diversity, Ratings, and Summary
  • Interactive charts for genre and decade distribution
  • Shareable cards — generates 9:16 share images of your stats
  • Demo mode — try it with sample data before connecting your server
  • Caches results in localStorage for 90 days so repeat visits are instant
  • Live hosted version available at mdeik.github.io/Navidrome-Wrapped

How to Use

Option A: Use the Hosted Version (Easiest)

Just visit mdeik.github.io/Navidrome-Wrapped and enter:

  • Your Navidrome server URL (e.g., http://your-server-ip:4533 or https://your-domain.com)
  • Your username and password
  • Click "Generate All-Time Wrapped"

Option B: Self-Host It

It's just static files — no build step needed:

git clone https://github.com/mdeik/Navidrome-Wrapped.git
cd Navidrome-Wrapped
# Open index.html in your browser, or serve it:
python3 -m http.server 8080
# Then visit http://localhost:8080

💡 Tailscale users: If accessing your Navidrome remotely, use your Tailscale IP as the server URL (e.g., http://100.x.y.z:4533).

🎮 Try demo mode first — Navidrome Wrapped includes a demo mode with sample data so you can explore the interface before connecting your own server.


🎶 Audio Quality Tips

These tips will help you get the best listening experience:

Building a Clean Library

Recommendation Details
Audio format FLAC (lossless) is ideal. Aim for 16-bit / 44.1kHz minimum
Single format Keep everything in one format for consistency (e.g., all FLAC)
Storage If storage is limited and quality isn't a priority, MP3 is fine
Organization Use Picard to rename/organize files into a consistent folder structure

Hardware Recommendations

Component Recommendation
DAC Get a dedicated USB DAC instead of using your motherboard's audio
Speakers/Headphones Invest in quality — this is where you'll hear the biggest difference
Amplifier Match your amp to your speakers/headphones

Software Audio Chain (Desktop)

Feishin → MPV Engine → WASAPI (Exclusive) → USB DAC → Amp → Speakers

This chain ensures:

  • ✅ Bit-perfect audio output
  • ✅ No Windows audio mixer resampling
  • ✅ Direct hardware access
  • ✅ Maximum quality from your files

🔄 Alternatives Considered

These alternatives are worth knowing about:

Tool Type Verdict
Lidarr Automated music library manager (like Sonarr/Radarr) Divisive — great for other *arr apps, but can be frustrating for music. Not recommended for beginners
beets CLI music tagger & library manager Excellent and powerful, but CLI-only. If you're comfortable with terminals, it's a great choice. GUIs exist but aren't very stable
MusicBrainz Picard GUI music tagger Recommended — user-friendly GUI, great database coverage, works well for all languages including Japanese & Korean

🔗 Quick Reference Links

Core Infrastructure

Tool Link
Navidrome navidrome.org
MusicBrainz Picard picard.musicbrainz.org
Feishin (Desktop Player) github.com/jeffvli/feishin
Symfonium (Mobile Player) symfonium.app
Tailscale (Remote Access) tailscale.com

Enhancement Tools

Tool Link
Picard Filenaming Script Generator github.com/WB2024/WBs-Picard-Filenaming-Script-Generator
Essentia Music Tagger (AI Genres) github.com/WB2024/Essentia-to-Metadata
Artist Genre Metadata Enforcer github.com/WB2024/Artist-Genre-Metadata-Enforcer
Navidrome Radio Station Manager github.com/WB2024/Add-Navidrome-Radios
Navidrome Smart Playlist Creator github.com/WB2024/Navidrome-SmartPlaylist-Generator-nsp
Navidrome Wrapped (Listening Stats) github.com/mdeik/Navidrome-Wrapped

✅ Suggested Order of Operations

Here's the recommended sequence for setting everything up from scratch:

1. 🐳  Deploy Navidrome via Docker
2. 🏷️  Tag your music with Picard (get metadata right first)
3. 📁  Generate a filenaming script to organize your library
4. 🎸  Fix genres with Essentia and/or Genre Enforcer
5. 🎧  Install Feishin (desktop) and/or Symfonium (mobile)
6. 🌐  Set up Tailscale for remote access
7. 📻  Add radio stations
8. 🎼  Create smart playlists
9. 📊  View your listening stats with Navidrome Wrapped
10. 🔊  Optimize your audio hardware chain
11. 🎶  Enjoy your music!

Happy listening! 🎶


☕ Support

If you found this guide helpful, consider buying me a coffee!

About

No description, website, or topics provided.

Resources

Readme

Uh oh!

There was an error while loading. Please reload this page.

Activity

Stars

59 stars

Watchers

1 watching

Forks

1 fork
Report repository

Releases

No releases published

Packages 0

 
 
 

Uh oh!

There was an error while loading. Please reload this page.

Contributors 3

  • @WB2024 WB2024 Will Bates
  • @Copilot Copilot
  • @t0msh t0msh
Résumé
Contribute to WB2024/WBs-Guide-to-Navidrome development by creating an account on GitHub.
Image

Tags

  • selfhosting

Mots clés

activitypubAndroidAnniversaireAppauvergnebaladebatchcachecaddyCICultureDaronnadeddevdebiandockerdroneDrupalfedorafirefoxgitgithubgitlabgitlab-cigooglehome-assistanthomeserverjardinagejellyfinkoboLecturelinuxmigrate APIOrchestrationoutilphpphpunitplexrandonnéeselfhostingsportSpotifysymfonysécuritéTestsvinwallpaper
Propulsé par Drupal