dank
a7ceda95fd
feat(media): the audiobook relayout, filed by the book Plex matched
...
The audiobook tree is the one library Jellyfin does not read at all and Plex
reads completely: 58,975 chapters matched into Artist/Album/Track, where the
album is the BOOK and the book's single artist row is the NARRATOR. That is the
authority the new planner files by, never the collection folder a pack made.
Audiobooks/<Narrator>/<Book> (<year>)/<the file's own name>
Two laws are the opposite of the music tool's, both forced by the rows: files
are never renumbered (72% of the books carry chapters with no usable index, and
playback order comes from the embedded track tag either way, so an invented
number can only lie), and the shelf is the narrator, not the author (every book
has exactly one artist row; the author survives in 10% of album titles and in no
column Plex stores, so one rule beats a shelf half authors and half narrators).
media-census.py gains the audiobooks export: the chapters Plex matched under a
root, host paths straight through, nothing outside the root and nothing Plex
deleted. 22 tests in tests/media_audiobooks.bats pin the export's join and the
plan's output.
2026-10-31 00:24:45 -07:00
..
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-27 19:36:53 -07:00
2026-10-27 19:36:32 -07:00
2026-10-20 20:41:36 -07:00
2026-10-20 16:55:44 -07:00
2026-10-10 17:03:14 -07:00
2026-10-19 10:18:24 -07:00
2026-10-19 10:56:37 -07:00
2026-10-17 22:18:00 -07:00
2026-08-28 02:20:06 -07:00
2026-09-16 21:43:09 -07:00
2026-09-20 17:51:27 -07:00
2026-10-10 17:03:14 -07:00
2026-09-16 06:59:44 -07:00
2026-10-09 16:47:19 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-09-16 15:38:20 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-09-21 18:56:35 -07:00
2026-09-20 15:25:09 -07:00
2026-10-27 19:40:48 -07:00
2026-10-10 17:03:14 -07:00
2026-10-18 17:18:21 -07:00
2026-10-29 16:17:52 -07:00
2026-10-30 15:13:19 -07:00
2026-10-19 10:17:52 -07:00
2026-10-19 04:54:06 -07:00
2026-10-30 15:02:58 -07:00
2026-10-07 21:31:10 -07:00
2026-09-20 15:25:09 -07:00
2026-10-10 17:03:14 -07:00
2026-10-09 16:47:19 -07:00
2026-08-25 20:13:33 -07:00
2026-08-25 20:13:33 -07:00
2026-10-30 22:47:39 -07:00
2026-10-30 22:47:39 -07:00
2026-08-25 20:13:33 -07:00
2026-10-21 14:59:47 -07:00
2026-10-27 19:36:32 -07:00
2026-10-19 10:56:37 -07:00
2026-10-15 04:10:50 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-30 15:13:42 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-10 17:03:14 -07:00
2026-10-17 21:02:16 -07:00
2026-10-10 17:03:14 -07:00
2026-10-18 17:26:50 -07:00
2026-10-18 13:50:19 -07:00
2026-10-17 19:40:56 -07:00
2026-10-18 13:15:18 -07:00
2026-10-19 14:42:56 -07:00
2026-10-10 17:03:14 -07:00
2026-10-27 19:36:26 -07:00
2026-09-26 19:51:57 -07:00
2026-10-09 16:47:19 -07:00
2026-10-10 17:03:14 -07:00
2026-10-29 15:10:33 -07:00
2026-10-15 04:10:50 -07:00
2026-10-30 15:13:19 -07:00
2026-10-21 01:34:28 -07:00
2026-10-19 14:26:58 -07:00
2026-10-20 18:11:40 -07:00
2026-10-30 15:25:24 -07:00
2026-10-19 14:47:30 -07:00
2026-10-19 10:56:37 -07:00
2026-08-28 02:20:06 -07:00
2026-10-21 00:34:17 -07:00
2026-10-20 23:42:26 -07:00
2026-10-27 19:36:38 -07:00
2026-09-26 15:23:24 -07:00
2026-09-26 22:50:17 -07:00
2026-10-05 23:26:51 -07:00
2026-09-21 13:20:15 -07:00
2026-08-23 12:59:56 -07:00
2026-08-23 12:59:56 -07:00
2026-10-30 22:47:39 -07:00
2026-10-29 16:14:16 -07:00
2026-10-10 17:03:14 -07:00
2026-10-07 02:45:28 -07:00
2026-10-29 15:26:08 -07:00
2026-10-30 21:41:56 -07:00
2026-10-31 00:24:45 -07:00
2026-10-31 00:24:45 -07:00
2026-10-30 23:58:34 -07:00
2026-10-30 20:12:05 -07:00
2026-10-30 23:29:34 -07:00
2026-10-30 23:29:34 -07:00
2026-10-30 20:30:24 -07:00
2026-10-30 22:05:31 -07:00
2026-08-25 15:38:57 -07:00
2026-10-19 16:22:38 -07:00
2026-10-19 10:17:52 -07:00
2026-10-20 23:26:53 -07:00
2026-10-28 15:54:23 -07:00
2026-10-29 15:26:08 -07:00
2026-10-30 16:26:07 -07:00
2026-10-05 23:26:51 -07:00
2026-10-30 16:30:03 -07:00
2026-09-26 19:25:46 -07:00
2026-10-29 15:26:08 -07:00
2026-10-19 10:56:37 -07:00
2026-10-19 10:56:37 -07:00
2026-10-30 15:33:52 -07:00
2026-10-10 17:03:14 -07:00
2026-09-26 23:25:55 -07:00
2026-10-20 23:26:53 -07:00
2026-10-30 15:13:19 -07:00
2026-10-30 15:25:24 -07:00
2026-10-18 01:24:03 -07:00
2026-09-17 18:38:54 -07:00
2026-09-17 13:09:59 -07:00
2026-10-29 15:14:43 -07:00
2026-10-18 01:34:17 -07:00
2026-10-30 21:41:51 -07:00
2026-08-25 17:04:15 -07:00
2026-10-17 22:18:00 -07:00
2026-10-13 19:20:33 -07:00
2026-10-06 20:41:33 -07:00
2026-10-18 17:18:30 -07:00