Releases: RFLundgren/navidrome-mood-plugin
Release list
v0.10.1
Full Changelog: v0.10.0...v0.10.1
v0.10.0
What's New
Configurable Boost Weights
Two new settings in the Analyzer Service section let you tune the influence of each scoring layer independently:
- Genre Boost Weight (default 1.0) — scales genre/BPM score corrections. Set to 0.0 to disable, 2.0 to double influence.
- Last.fm Boost Weight (default 1.0) — scales Last.fm crowd-tag score corrections. Set to 0.0 to disable, 2.0 to double influence.
Both default to 1.0 so existing setups are unaffected until you adjust them.
Navidrome 0.62.0
Minimum supported version updated to 0.62.0 (no longer requires the develop branch).
Upgrading
- Replace \mood-playlists.ndp\ in your Navidrome plugins directory with the one attached to this release
- Pull the updated analyzer image: \docker compose pull mood-analyzer && docker compose up -d mood-analyzer\
- The two new weight fields will appear in plugin settings — defaults preserve existing behaviour
Full Changelog: v0.9.0...v0.10.0
v0.9.0 — Last.fm Tag Integration
What's New
Last.fm Tag Integration
- Optional Last.fm API key field in plugin settings (Analyzer Service section)
- Analyzer fetches top 10 crowd-sourced listener tags per track after essentia analysis
- Tag keyword matching applies mood score adjustments (e.g. 'metal' pushes aggressive up / relaxed down; 'chill' / 'acoustic' boost relaxed)
- Each keyword applied at most once; total per-field influence capped at ±0.20
- Gracefully falls back to essentia + genre boosts if Last.fm is unavailable or track not found
- No new dependencies — uses Python stdlib urllib
Force Re-analyze Entire Library
- New toggle in plugin settings to re-analyze every track on the next analysis run
- Bypasses both the queuing skip and executor skip checks
- Disable again after the run completes
How to Update
- Download
mood-playlists.ndpand drop it into your Navidrome plugins folder - Update the analyzer Docker image:
docker compose pull mood-analyzer && docker compose up -d mood-analyzer - Get a free Last.fm API key at https://www.last.fm/api/account/create and add it to plugin settings
Full Changelog: v0.8.6...v0.9.0
v0.8.6
What's new
Genre Exclusions
Per-playlist configurable genre blocklists prevent misclassified tracks from appearing in calm mixes. The essentia models score audio texture, not cultural genre context — a quiet metal track can score high on mood_relaxed. Genre exclusions fix this with hard per-playlist keyword blocklists applied during playlist generation.
Default exclusions:
- Chill: metal, hard rock, punk, hardcore, industrial, grunge, thrash
- Sleep: metal, hard rock, punk, hardcore, industrial, grunge, thrash, dance, techno, trance, house, edm, drum and bass
- Study: metal, punk, hardcore, industrial
- Dining / Background: metal, hard rock, punk, hardcore, industrial
- Road Trip: metal, hardcore, industrial
Each mix has its own config field in the new Genre Exclusions settings group. Leave empty to use defaults; enter a comma-separated list to override.
Genre Migration (one-time)
Existing analyzed tracks may not have genre data stored in the KV store. Enable Run Genre Migration in settings to backfill genre from Navidrome without re-analyzing — processes the full library in batches and chains automatically to completion.
Improved Composite Mood Conditions
All composite playlists (Study, Workout, Sleep, Road Trip, Cooking, Dining, Background) now require a positive attribute in addition to capping negative ones. Previously they only excluded negatives, allowing quiet metal tracks into Sleep/Study/Dining mixes.
Bug fix
Playlists that produce zero qualifying tracks now log a warning instead of silently leaving the old (potentially stale) playlist unchanged.
Full Changelog
v0.8.0...v0.8.6
Full Changelog: v0.8.0...v0.8.6
v0.8.0
v0.7.0
This release introduces native support for ARM64 architectures, allowing the plugin and its analyzer service to run seamlessly on Raspberry Pi 5, 4, and 3.
Key Features & Improvements:
- Official Multi-Arch Docker Image: The analyzer-service image now supports both linux/amd64 and linux/arm64. Raspberry Pi users no longer need to manually troubleshoot library linking errors.
- Native ARM Compilation: Our build pipeline now uses native ARM64 runners. This ensures that the heavy essentia-tensorflow dependencies are compiled correctly for Pi hardware.
- Multi-Stage Build: Refactored the Dockerfile to use a multi-stage approach, resulting in a cleaner and slightly smaller final image for all users.
- Dependency Locking: Fixed compatibility issues between Essentia and TensorFlow on ARM by locking specific stable versions (tensorflow==2.15.1, numpy==1.26.4).
Version Bumps:
- Plugin Version: 0.7.0
- Analyzer Service: 1.2.0
Instructions for Raspberry Pi Users:
You can now use the pre-built image directly from GitHub Packages: docker pull ghcr.io/rflundgren/navidrome-mood-plugin:latest
If you prefer to build locally on your Pi:
- Pull the latest code.
- Run "docker build -t mood-analyzer ." inside the analyzer-service folder.
- The build will automatically detect your architecture and compile the necessary libraries (Note: this process takes 15–20 minutes on a Pi 5)
Documentation:
Added ARM64_BUILD_NOTES.md to the repository, documenting the technical solutions used to overcome the lack of official ARM64 wheels for Essentia on Linux.
Full Changelog: v0.6.0...v0.7.0