docs(media): fit the audiobook section inside the OKF caps, refresh the index

The linter caps a page at 500 lines and a description at 120 chars: the section
lost four lines of prose (no law went with them) and the description lost its
restatement of the format names. gen-vault-index.py regenerated the locator row.
This commit is contained in:
dank committed 2026-10-31 00:25:58 -07:00
1 parent ceb5617a42
commit 4ae2bde9ab
2 files changed
+13 -17

No files matched your search

@@ -1,7 +1,7 @@
--- ---
type: reference type: reference
title: Media Relayout title: Media Relayout
description: "Census, plan and apply the movie, TV, music and audiobook libraries into their media servers' format: gates, evidence chain, refusals, rollback." description: "Census, plan and apply the movie, TV, music and audiobook libraries: the gates, the refusals, the rollback."
tags: [dankserver, media-server, jellyfin, plex, procedure] tags: [dankserver, media-server, jellyfin, plex, procedure]
timestamp: 2026-10-30T00:00:00Z timestamp: 2026-10-30T00:00:00Z
--- ---
@@ -306,17 +306,14 @@ provider row names, which is a tagging job and not a renaming job.
`/mnt/entropy/Audiobooks` is the one library here that [[Jellyfin]] does not read `/mnt/entropy/Audiobooks` is the one library here that [[Jellyfin]] does not read
at all — its music scanner has no audiobook concept — while [[Plex]] indexes all at all — its music scanner has no audiobook concept — while [[Plex]] indexes all
of it as Artist → Album → Track, where the album is the BOOK, that book's single of it as Artist → Album → Track: the album is the BOOK, that book's single artist
artist is the NARRATOR, and both were matched out of the files' own tags. is the NARRATOR, both matched out of the files' own tags. Today one book is split
`scripts/media-audiobooks.py` re-files the tree so the property both servers' across `… [Part 1]`, `… [Part 2]` folders three or four deep inside a collection
book scanners assume is true — pack, so a scan serves three quarters of a novel; `scripts/media-audiobooks.py`
re-files the tree so the property both servers' book scanners assume is true —
Audiobooks/<Narrator>/<Book> (<year>)/<the file keeps its own name> Audiobooks/<Narrator>/<Book> (<year>)/<the file keeps its own name>
Today it is not: the top level is a mix of author-named shelves and collection
packs, and a pack's book is split across `… [Part 1]`, `… [Part 2]` folders three
or four deep, so a scan shows three quarters of a novel.
```bash ```bash
# 1. The authority: Plex's chapter rows for this root (the DB opens read-only). # 1. The authority: Plex's chapter rows for this root (the DB opens read-only).
python3 scripts/media-census.py audiobooks --root /mnt/entropy/Audiobooks \ python3 scripts/media-census.py audiobooks --root /mnt/entropy/Audiobooks \
@@ -350,14 +347,13 @@ the rows actually hold:
+- **The shelf is the narrator, not the author.** Every book has exactly one artist +- **The shelf is the narrator, not the author.** Every book has exactly one artist
row and it is the narrator; the author survives only inside some album titles row and it is the narrator; the author survives only inside some album titles
(`Kryptos by Graham McNeill`) and in no column Plex stores, so deriving it would (`Kryptos by Graham McNeill`) and in no column Plex stores, so deriving it would
mean parsing titles where a ripper happened to write one and inventing it mean parsing titles where a ripper wrote one and inventing it everywhere else.
everywhere else. One rule that always resolves beats a shelf that is half author The author stays visible in the folder name Plex itself shows.
and half narrator, and the author stays visible in the folder name Plex shows.
What it refuses, same list as the music arm with one addition: a video container, What it refuses, the music arm's list with one addition: a video container, audio
audio no chapter row names, and a loose file in a folder holding two books all no chapter row names, and a loose file in a folder holding two books all park under
park under `_unsorted` with the path they have today — and so does a chapter whose `_unsorted` with the path they have today — and so does a chapter whose row has
row has **no book or no narrator**, because inventing a shelf is filing it wrong. **no book or no narrator**, because inventing a shelf is filing it wrong.
## Laws ## Laws
+1 -1
View File
@@ -52,7 +52,7 @@ is a locator: one row, one clause, no numbers.
| [[Jellyfin]] | Jellyfin on Dankserver: quadlet unit, overlay metadata view, provider keys, ports, access, transcode status. | | [[Jellyfin]] | Jellyfin on Dankserver: quadlet unit, overlay metadata view, provider keys, ports, access, transcode status. |
| [[mariadb]] | The MariaDB backend for RomM: quadlet unit, network alias, env-file secret handling, and the backup path. | | [[mariadb]] | The MariaDB backend for RomM: quadlet unit, network alias, env-file secret handling, and the backup path. |
| [[Media Metadata View]] | The SSD-backed overlay the two media servers read and write: shape, guards, commands, laws, rollback. | | [[Media Metadata View]] | The SSD-backed overlay the two media servers read and write: shape, guards, commands, laws, rollback. |
| [[Media Relayout]] | Census, plan and apply the movie and TV libraries into Jellyfin format: gates, evidence chain, refusals, rollback. | | [[Media Relayout]] | Census, plan and apply the movie, TV, music and audiobook libraries: the gates, the refusals, the rollback. |
| [[Plex]] | Plex Media Server is a **containerized media server on Dankserver**: a podman | | [[Plex]] | Plex Media Server is a **containerized media server on Dankserver**: a podman |
| [[redis]] | The Redis cache and task queue for RomM: quadlet unit, network alias topology, and the backup path. | | [[redis]] | The Redis cache and task queue for RomM: quadlet unit, network alias topology, and the backup path. |
| [[RomM]] | RomM (ROM Manager) is a self-hosted ROM library manager and player. | | [[RomM]] | RomM (ROM Manager) is a self-hosted ROM library manager and player. |