docs(jellyfin): the switches live under LibraryOptions; a pinned art pass is not a provider census #124
@@ -81,21 +81,25 @@ so an empty `<ImageFetchers />` switches art off while `ImageFetcherOrder` stays
|
||||
fully populated — order is not enablement — and the populated `<MetadataFetchers>`
|
||||
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/<Library>/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=<id>` 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`.
|
||||
|
||||
Reference in new issue
Block a user