diff --git a/serverAppConfigs-docs/Dankserver/Jellyfin.md b/serverAppConfigs-docs/Dankserver/Jellyfin.md index be05ddc..ddeb7e1 100644 --- a/serverAppConfigs-docs/Dankserver/Jellyfin.md +++ b/serverAppConfigs-docs/Dankserver/Jellyfin.md @@ -42,6 +42,15 @@ public vhost `jelly.franksdank.cloud` behind the [[Anubis]] guard chain → Library folders point at `/data` paths; because the mount uses the same absolute path as on the host, library paths survive container recreation. +`Local metadata` — save metadata to media folders — cannot work against a `ro` +mount, and it is enabled: every item update logs +`System.IO.IOException: Read-only file system : '/data/Movies//movie.nfo'`. +The exception lands in the sidecar saver, after the database row is written, so +indexing proceeds anyway — a 2026-10-30 scan dropped stale records and added +episodes while these lines filled the log. Expected noise, not a fault: if it +ever needs silencing, turn the saver off under *Library → Metadata* rather than +making `/data` writable. + ## Ports & access | Port | Proto | Purpose | diff --git a/serverAppConfigs-docs/Dankserver/Media Relayout.md b/serverAppConfigs-docs/Dankserver/Media Relayout.md index 095d3d2..64e824c 100644 --- a/serverAppConfigs-docs/Dankserver/Media Relayout.md +++ b/serverAppConfigs-docs/Dankserver/Media Relayout.md @@ -145,6 +145,14 @@ from the box-set folder. What it refuses it prints and leaves alone: A sidecar that shares an episode's own name (`.srt`, `.nfo`) moves with it. +Below the threshold the mover prints and leaves, so a lone downloaded episode of +a real show stays in the movie library on purpose — six did on 2026-10-30. +Filing one by hand is the same executor on a hand-written plan and the same +journal; the trap is the series year. Read it from the file's own name or the +folder it owns, never from the title whose bonus folder it happens to be parked +in — `The Cleveland Show S03E07` inside `Die Hard (1988)/extras/` is not a 1988 +show. A name whose marker is `Part 2` is a film and stays put. + ## Laws - **A moved file is a 404 in [[Plex]] until its section is rescanned.** The @@ -191,6 +199,12 @@ A sidecar that shares an episode's own name (`.srt`, `.nfo`) moves with it. header — the keys were innocent. Before believing a 401, prove the key against the server's own table: `select count(*) from ApiKeys where AccessToken = ?` on `jellyfin.db` opened `mode=ro&immutable=1`. +- **A scan that must see a new folder has to be recursive.** `POST + /Library/Refresh` is the incremental pass, and inotify does not cross a + rootless podman bind, so folders created on the host stay invisible to it. The + move is `POST /Items/{id}/Refresh?Recursive=true` (204) per library, the id + from `GET /Library/VirtualFolders` — its field is `ItemId`, not `Id` — and + that same record's `RefreshStatus` is the progress read. - **A file whose name carries no words is bonus material, not a folder.** `.Extra 1 ( 1H 27min multisub ).mkv` parses to `1`; a movie folder named `1` is not a movie. It becomes a review line telling a human to name the file.