You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[BUG] Audiobook rename preview uses unexpected edition year and omits narrator #289
[BUG] Audiobook rename preview uses unexpected edition year and omits narrator
Describe the bug
An existing audiobook of The Sirens of Titan has a rename preview that substitutes a different year and drops the narrator. This appears related to edition selection or edition metadata, but the saved preview alone does not establish the cause.
Observed example
On Chaptarr 0.9.965, the saved 2026-10-04 rename preview shows:
Existing folder:
Kurt Vonnegut/2009 - The Sirens of Titan {Jay Snyder} [B002V8L3P0]
Proposed folder:
Kurt Vonnegut/2014 - Sirens of Titan
A same-day edition survey reports ten editions for this book and monitored edition ID 21082. This report describes the historical preview, not a fresh import reproduction. Existing folder labels express the intended audiobook identity; they are not proof of embedded file tags or of what evidence the import matcher received.
Expected behavior
For an audiobook whose metadata includes the appropriate narrated edition, the preview should use that edition's year and narrator. Could edition selection prefer audiobook-format candidates when the imported file is audio, and avoid selecting an ebook/physical edition when an appropriate audiobook candidate exists? The preferred policy would need to account for incomplete metadata and language preferences.
Observation: saved rename-preview output and edition survey; no rename performed.
Additional context / diagnostics
This is distinct from series-label issue #34 and PR #48. PR #142 addresses language preference in edition selection; #262 concerns matching the book itself. A format preference may be adjacent to those changes, rather than a separate matcher redesign. This report does not request using folder ASINs as matching evidence.
The saved evidence does not include a complete import trace or raw edition-format rows, so it does not prove that the selected edition was an ebook. Please indicate which diagnostic fields would distinguish a selection problem from incomplete edition metadata; a controlled reproduction can then be collected without renaming the existing library.
The rename preview uses whichever edition the file is linked to. It doesn't choose one, so the question is why the file was matched to 21082. Can you post:
GET /api/v1/bookfile?bookId=<bookId> for this file: editionId, narrator, durationSeconds, matchProvenance (matchedVia, mode, and the signal lists)
GET /api/v1/edition?bookId=<bookId>: for all 10 editions, id, title, readingFormatId, releaseDate, narrator, durationSeconds, asin/audibleASIN, language
The file's narrator-related tags and its duration (ffprobe -show_format)
If matchedVia is escape_hatch and 21082 has readingFormatId 1 or 3, the matcher fell back to the ebook/print edition because no audiobook edition was backed by narrator tags or duration. If 21082 has readingFormatId 2, the edition's metadata is incomplete. Workaround for now: manually select the Jay Snyder edition for the file, then preview the rename again.
Thanks. The stored provenance matches the escape-hatch case you described: matchedVia=escape_hatch, with a conflicting reading-format signal identifying the selected catalog edition as ebook.
The file was manually pinned from edition 21082 to 21068. The current database link is therefore 21068. The provenance below still carries the original match timestamp, 2026-10-04T02:46:22Z; it should be read as the recorded import decision, rather than evidence of a fresh match after the pin.
1. Bookfile and provenance
GET /api/v1/bookfile?bookId=13501 returns file ID 30. Its response omits the top-level editionId, narrator and durationSeconds fields, so these values were checked with a read-only query of the corresponding BookFiles row:
These are the current values from GET /api/v1/edition?bookId=13501. A dash in the ASIN columns means the field was absent from the response; empty narrator strings are shown as "".
id
title
readingFormatId
releaseDate
narrator
durationSeconds
asin
audibleASIN
language
21068
The Sirens of Titan
2
2009-08-13T00:00:00Z
Jay Snyder
33600
B002V8L3P0
B002V8L3P0
eng
21069
The Sirens of Titan
2
2015-08-04T00:00:00Z
Jay Snyder
0
—
—
eng
21070
The Sirens of Titan
2
1959-01-01T00:00:00Z
Jay Snyder
0
—
—
eng
21071
The Sirens of Titan
2
2011-01-01T00:00:00Z
Dennis Boutsikaris
0
—
—
eng
21072
The Sirens of Titan
2
2008-01-01T00:00:00Z
""
0
—
—
eng
21073
The Sirens of Titan
2
1978-07-01T00:00:00Z
""
0
—
—
eng
21074
The Sirens of Titan
2
2008-01-02T00:00:00Z
""
0
—
—
eng
21075
The Sirens of Titan
2
1984-06-01T00:00:00Z
""
0
—
—
eng
21076
The Sirens of Titan
3
2007-12-18T00:00:00Z
""
0
B0012RMVCK
B0012RMVCK
eng
21082
Sirens of Titan
3
2014-05-10T00:00:00Z
""
0
—
—
und
3. Audio duration and narrator-related tags
ffprobe of the actual file reports duration 32678.994286 seconds. A probe restricted to artist, album_artist, composer, narrator, performer and title returned artist=Kurt Vonnegut; none of the other requested narrator-related keys were returned. There is no Jay Snyder narrator value in that projection. The provenance separately records the embedded title/album strings shown above.
Edition 21068 has a catalog duration of 33600 seconds, about 921 seconds longer than the file. The provenance only records the comparison against the selected edition's zero duration; it does not show whether 21068 was evaluated. Does this evidence fit the intended Balanced-mode fallback, and would an audiobook-only preference for existing audio files be an appropriate separate option?
Yes, that's the intended fallback. The file has no narrator tag, and its duration is 921s off 21068's, past the 2% tolerance (672s). With no audiobook edition proven, the matcher falls back to an ebook edition with a title match. Pinning 21068 should fix the preview, since narrator, year and title all come from the linked edition. Can you confirm?
Preferring an unproven audiobook edition over an ebook in that fallback seems reasonable, but changing the default is the maintainer's call.
Activity
bhoffman20 commentedon Oct 4, 2026
The rename preview uses whichever edition the file is linked to. It doesn't choose one, so the question is why the file was matched to 21082. Can you post:
GET /api/v1/bookfile?bookId=<bookId>for this file:editionId,narrator,durationSeconds,matchProvenance(matchedVia,mode, and the signal lists)GET /api/v1/edition?bookId=<bookId>: for all 10 editions,id,title,readingFormatId,releaseDate,narrator,durationSeconds,asin/audibleASIN,languageffprobe -show_format)If
matchedViaisescape_hatchand 21082 hasreadingFormatId1 or 3, the matcher fell back to the ebook/print edition because no audiobook edition was backed by narrator tags or duration. If 21082 hasreadingFormatId2, the edition's metadata is incomplete. Workaround for now: manually select the Jay Snyder edition for the file, then preview the rename again.nik110403 commentedon Oct 4, 2026
Thanks. The stored provenance matches the escape-hatch case you described:
matchedVia=escape_hatch, with a conflicting reading-format signal identifying the selected catalog edition as ebook.The file was manually pinned from edition 21082 to 21068. The current database link is therefore 21068. The provenance below still carries the original match timestamp,
2026-10-04T02:46:22Z; it should be read as the recorded import decision, rather than evidence of a fresh match after the pin.1. Bookfile and provenance
GET /api/v1/bookfile?bookId=13501returns file ID 30. Its response omits the top-leveleditionId,narratoranddurationSecondsfields, so these values were checked with a read-only query of the correspondingBookFilesrow:{"id":30,"bookId":13501,"editionId":21068,"narrator":null,"durationSeconds":32679}The following is a projection of the API's
matchProvenance, retaining the decision fields and all four signal lists:{ "schemaVersion": 2, "matcherVersion": "evidence-v2.7-exact-group-spans", "matchedAtUtc": "2026-10-04T02:46:22Z", "matchedVia": "escape_hatch", "mode": "Balanced", "route": "author_scoped/embedded_tags", "summary": "Matched from file tags", "supportingSignals": [ {"type":"title","scope":"edition","source":"embedded_tag","field":"MP4:©nam","observed":"The Sirens of Titan","expected":"Sirens of Titan","detail":"This logical field supplied title containment proof."}, {"type":"title","scope":"edition","source":"embedded_tag","field":"MP4:©alb","observed":"The Sirens of Titan","expected":"Sirens of Titan","detail":"This logical field supplied title containment proof."} ], "conflictingSignals": [ {"type":"reading_format","scope":"edition","source":"catalog","observed":"ebook","expected":"audiobook","detail":"A representative non-native edition was selected because no better native edition was proven."} ], "neutralSignals": [ {"type":"duration","scope":"edition","source":"media_info","observed":"32679 seconds","expected":"0 seconds","detail":"The catalog edition has no usable duration."} ], "excludedSignals": [ {"type":"ignored_tag","scope":"metadata","source":"embedded_tag","field":"COMMENT","detail":"This field was excluded from fuzzy/content matching by the shared tag policy."}, {"type":"ignored_tag","scope":"metadata","source":"embedded_tag","field":"GENRE","detail":"This field was excluded from fuzzy/content matching by the shared tag policy."}, {"type":"ignored_tag","scope":"metadata","source":"embedded_tag","field":"LANGUAGE","detail":"This field was excluded from fuzzy/content matching by the shared tag policy."}, {"type":"ignored_tag","scope":"metadata","source":"embedded_tag","field":"MP4:©too","detail":"This field was excluded from fuzzy/content matching by the shared tag policy."}, {"type":"ignored_tag","scope":"metadata","source":"embedded_tag","field":"SERIES","detail":"This field was excluded from fuzzy/content matching by the shared tag policy."} ] }2. All ten editions
These are the current values from
GET /api/v1/edition?bookId=13501. A dash in the ASIN columns means the field was absent from the response; empty narrator strings are shown as"".3. Audio duration and narrator-related tags
ffprobeof the actual file reports duration 32678.994286 seconds. A probe restricted toartist,album_artist,composer,narrator,performerandtitlereturnedartist=Kurt Vonnegut; none of the other requested narrator-related keys were returned. There is no Jay Snyder narrator value in that projection. The provenance separately records the embedded title/album strings shown above.Edition 21068 has a catalog duration of 33600 seconds, about 921 seconds longer than the file. The provenance only records the comparison against the selected edition's zero duration; it does not show whether 21068 was evaluated. Does this evidence fit the intended Balanced-mode fallback, and would an audiobook-only preference for existing audio files be an appropriate separate option?
bhoffman20 commentedon Oct 5, 2026
Yes, that's the intended fallback. The file has no narrator tag, and its duration is 921s off 21068's, past the 2% tolerance (672s). With no audiobook edition proven, the matcher falls back to an ebook edition with a title match. Pinning 21068 should fix the preview, since narrator, year and title all come from the linked edition. Can you confirm?
Preferring an unproven audiobook edition over an ebook in that fallback seems reasonable, but changing the default is the maintainer's call.