diff --git a/serverAppConfigs-docs/Dankserver/Jellyfin.md b/serverAppConfigs-docs/Dankserver/Jellyfin.md index 2c4298c..202be6f 100644 --- a/serverAppConfigs-docs/Dankserver/Jellyfin.md +++ b/serverAppConfigs-docs/Dankserver/Jellyfin.md @@ -81,21 +81,25 @@ so an empty `` switches art off while `ImageFetcherOrder` stays fully populated — order is not enablement — and the populated `` built next to it makes the library look healthy. -**Live posture, measured 2026-11-02** from `GET /Library/VirtualFolders`. The DTO is -PascalCase — `Name`, `CollectionType`, `Locations`, `ItemId`, `RefreshStatus` — and a -census written against the 10.x camelCase keys reads `None` for everything, which -looks exactly like an unconfigured library. +**Live posture, measured 2026-11-02** from `GET /Library/VirtualFolders`, cross-checked +against each library's `config/root/default//options.xml`. The per-library switches +are NOT top-level DTO keys: the folder carries `Name`, `CollectionType`, `Locations`, +`ItemId`, `PrimaryImageItemId`, `RefreshStatus` and `LibraryOptions`, and the switches live +inside `LibraryOptions`. Reading `EnableInternetProviders` off the folder itself returns +`None` for every library, which looks exactly like an unconfigured library — that is the +10.x camelCase trap one level deeper. | Library | `CollectionType` | `EnableInternetProviders` | `EnableRealtimeMonitor` | |---|---|---|---| | `Movies` | movies | true (fixed 2026-11-02) | **false** | -| `Shows` | tvshows | **false** | true | +| `Shows` | tvshows | true (flipped 2026-11-02, before the TV arm ran) | true | | `Music` | music | **false** | true | -| `Collections` | boxsets | **false** | false | +| `Collections` | boxsets | no element — false by default | false | -`Shows` and `Music` are silent file indexes in the sense above: a refresh answers -`204`, stores nothing, logs nothing. Any metadata or artwork work on either one -starts by flipping the switch, never by firing a scan. +`Music` is still a silent file index in the sense above: a refresh answers `204`, stores +nothing, logs nothing, and any metadata or artwork work on it starts by flipping the switch, +never by firing a scan. `Shows` was flipped on 2026-11-02 and the flip is at rest in the +server's own `options.xml`: scan #7 resolved provider ids for 731 of 733 series. **The per-library option door on 12.x is `POST /Library/VirtualFolders/LibraryOptions`** — `GET` there answers `405`, which is how the route announces itself. The 10.x doors @@ -130,9 +134,17 @@ nothing to look up. Art coverage is capped by identification, not by the image d the items a campaign returns nothing for are the unidentified ones, and no image retry will change that. -**API shape on 12.x:** `/Items` and `/Items/{id}` need `UserId` when -authenticated by API key — without it the answer is `400 Error processing -request`, which reads exactly like an authentication failure. `MetadataRefreshMode` +**Never pin `Providers=` on a TV art loop.** The pinned form reports `none` for exactly the +items the unpinned `RemoteImages` query answers for: the TVShows arm's 16 fillable seasons +all offered `TheTVDB` posters, and a `Providers=TheMovieDb` pass — correct for movies, wrong +here — logged `none` for every one of them and called the gap closed. The unpinned answer is +the provider census; the pinned one only proves one provider is empty. + +**API shape on 12.x:** `/Items/{id}` needs `UserId` when authenticated by API key — without +it the answer is `400 Error processing request`, which reads exactly like an authentication +failure, and it is easy to hit as a *verification* read right after a write that succeeded. +The `/Items` list route, `?Ids=` included, does not need it, so verify a write through +the list route. `MetadataRefreshMode` accepts `Default` (and `Realtime`) only; `Full` and `ValidationFailure` are rejected outright, and what forces the providers to re-run is `ReplaceAllMetadata=true`.