Skip to content

[BUG] Audiobook rename preview uses unexpected edition year and omits narrator #289

Open

Description

@nik110403

[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.

System Information

  • Chaptarr: 0.9.965.0 (develop), Docker image chaptarr/chaptarr:0.9.965.
  • 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.

Activity

  1. bhoffman20 commented on Oct 4, 2026

    @bhoffman20
    Collaborator

    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:

    1. GET /api/v1/bookfile?bookId=<bookId> for this file: editionId, narrator, durationSeconds, matchProvenance (matchedVia, mode, and the signal lists)
    2. GET /api/v1/edition?bookId=<bookId>: for all 10 editions, id, title, readingFormatId, releaseDate, narrator, durationSeconds, asin/audibleASIN, language
    3. 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.

  2. added
    bugSomething isn't working
    questionFurther information is requested
    on Oct 4, 2026
  3. nik110403 commented on Oct 4, 2026

    @nik110403
    Author

    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:

    {"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 "".

    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?

  4. bhoffman20 commented on Oct 5, 2026

    @bhoffman20
    Collaborator

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wantedExtra attention is neededquestionFurther information is requested

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions