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>`
|
fully populated — order is not enablement — and the populated `<MetadataFetchers>`
|
||||||
built next to it makes the library look healthy.
|
built next to it makes the library look healthy.
|
||||||
|
|
||||||
**Live posture, measured 2026-11-02** from `GET /Library/VirtualFolders`. The DTO is
|
**Live posture, measured 2026-11-02** from `GET /Library/VirtualFolders`, cross-checked
|
||||||
PascalCase — `Name`, `CollectionType`, `Locations`, `ItemId`, `RefreshStatus` — and a
|
against each library's `config/root/default/<Library>/options.xml`. The per-library switches
|
||||||
census written against the 10.x camelCase keys reads `None` for everything, which
|
are NOT top-level DTO keys: the folder carries `Name`, `CollectionType`, `Locations`,
|
||||||
looks exactly like an unconfigured library.
|
`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` |
|
| Library | `CollectionType` | `EnableInternetProviders` | `EnableRealtimeMonitor` |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| `Movies` | movies | true (fixed 2026-11-02) | **false** |
|
| `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 |
|
| `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
|
`Music` is still a silent file index in the sense above: a refresh answers `204`, stores
|
||||||
`204`, stores nothing, logs nothing. Any metadata or artwork work on either one
|
nothing, logs nothing, and any metadata or artwork work on it starts by flipping the switch,
|
||||||
starts by flipping the switch, never by firing a scan.
|
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`**
|
**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
|
— `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
|
the items a campaign returns nothing for are the unidentified ones, and no image
|
||||||
retry will change that.
|
retry will change that.
|
||||||
|
|
||||||
**API shape on 12.x:** `/Items` and `/Items/{id}` need `UserId` when
|
**Never pin `Providers=` on a TV art loop.** The pinned form reports `none` for exactly the
|
||||||
authenticated by API key — without it the answer is `400 Error processing
|
items the unpinned `RemoteImages` query answers for: the TVShows arm's 16 fillable seasons
|
||||||
request`, which reads exactly like an authentication failure. `MetadataRefreshMode`
|
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
|
accepts `Default` (and `Realtime`) only; `Full` and `ValidationFailure` are
|
||||||
rejected outright, and what forces the providers to re-run is
|
rejected outright, and what forces the providers to re-run is
|
||||||
`ReplaceAllMetadata=true`.
|
`ReplaceAllMetadata=true`.
|
||||||
|
|||||||
Reference in new issue
Block a user