Skip to content

Releases: RFLundgren/navidrome-mood-plugin

v0.10.1

Choose a tag to compare

@github-actions github-actions released this 29 Jun 22:10

Full Changelog: v0.10.0...v0.10.1

v0.10.0

Choose a tag to compare

@RFLundgren RFLundgren released this 13 Jun 23:21

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

  1. Replace \mood-playlists.ndp\ in your Navidrome plugins directory with the one attached to this release
  2. Pull the updated analyzer image: \docker compose pull mood-analyzer && docker compose up -d mood-analyzer\
  3. 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

Choose a tag to compare

@RFLundgren RFLundgren released this 11 Jun 08:55

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

  1. Download mood-playlists.ndp and drop it into your Navidrome plugins folder
  2. Update the analyzer Docker image: docker compose pull mood-analyzer && docker compose up -d mood-analyzer
  3. 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

Choose a tag to compare

@RFLundgren RFLundgren released this 11 Jun 05:24

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

Choose a tag to compare

@github-actions github-actions released this 02 Jun 22:44

Full Changelog: v0.7.0...v0.8.0

v0.7.0

Choose a tag to compare

@RFLundgren RFLundgren released this 30 May 10:24

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:

  1. Pull the latest code.
  2. Run "docker build -t mood-analyzer ." inside the analyzer-service folder.
  3. 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

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 24 May 12:26

Full Changelog: v0.5.9...v0.6.0

v0.5.9

Choose a tag to compare

@github-actions github-actions released this 22 May 21:21

Full Changelog: v0.5.8...v0.5.9

v0.5.8

Choose a tag to compare

@github-actions github-actions released this 22 May 08:53

Full Changelog: v0.5.7...v0.5.8

v0.5.7

Choose a tag to compare

@github-actions github-actions released this 21 May 23:47

Full Changelog: v0.5.6...v0.5.7