From bc145995349b4b3d55da786f275f9c33bd63cc08 Mon Sep 17 00:00:00 2001 From: hayupadhyaya <41875548+hayupadhyaya@users.noreply.github.com> Date: Tue, 24 Feb 2026 03:17:11 -0500 Subject: [PATCH] Treat narrators as a distinguishing field to prevent merging different recordings (#3230) fix(audiobooks): treat narrators as a distinguishing field to prevent merging different recordings Audiobooks with the same title and author but different narrators (e.g. the same Harry Potter title read by Stephen Fry and Jim Dale) were being merged into a single library item. This caused: - Only one narrator to be retained in the merged item - Chapter lists from all recordings to be concatenated, producing incorrect (doubled) chapter counts - No way for clients to retrieve per-recording metadata via the API Fix: in compare_audiobook(), add a narrator check before the author comparison. When both items have narrators and no narrators are shared, return False so they are treated as distinct recordings. This change is safe for the single-narrator case: if either item has no narrator metadata, the check is skipped and existing behaviour is unchanged. Co-authored-by: hayupadhyaya --- music_assistant/helpers/compare.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/music_assistant/helpers/compare.py b/music_assistant/helpers/compare.py index c03d0648..a4a51ca0 100644 --- a/music_assistant/helpers/compare.py +++ b/music_assistant/helpers/compare.py @@ -319,6 +319,12 @@ def compare_audiobook( and not compare_strings(base_item.publisher, compare_item.publisher, strict=True) ): return False + # compare narrator(s) — different narrators indicate different recordings and must not be merged + if base_item.narrators and compare_item.narrators: + base_narrators = {create_safe_string(n) for n in base_item.narrators} + compare_narrators = {create_safe_string(n) for n in compare_item.narrators} + if base_narrators.isdisjoint(compare_narrators): + return False # compare author(s) for author in base_item.authors: author_safe = create_safe_string(author) -- 2.34.1