Merge pull request 'docs(jellyfin): the switches live under LibraryOptions; a pinned art pass is not a provider census' (#124) from feat/jellyfin-provider-keys into main
This commit was merged in pull request #124.
This commit is contained in:
commit
aea24353ad
1 file changed
+23
-15
@@ -81,10 +81,13 @@ 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 switches are NOT
|
||||||
census written against the 10.x camelCase keys reads `None` for everything, which
|
top-level DTO keys: the folder carries `Name`, `CollectionType`, `Locations`, `ItemId`,
|
||||||
looks exactly like an unconfigured library.
|
`PrimaryImageItemId`, `RefreshStatus` and `LibraryOptions`, and every per-library option
|
||||||
|
sits inside `LibraryOptions`. Reading `EnableInternetProviders` off the folder itself
|
||||||
|
answers `None` for all four — the camelCase trap one level deeper, and it looks exactly
|
||||||
|
like an unconfigured library.
|
||||||
|
|
||||||
| Library | `CollectionType` | `EnableInternetProviders` | `EnableRealtimeMonitor` |
|
| Library | `CollectionType` | `EnableInternetProviders` | `EnableRealtimeMonitor` |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
@@ -133,14 +136,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.
|
||||||
|
|
||||||
**A `Download` campaign over a library that is already dressed does nothing in
|
**A `Download` pass reports zero only when it is pinned to one provider.** A TMDb-pinned
|
||||||
seconds, and that is the measurement proving identification is the only lever
|
campaign over `Shows` classified every item in 20 s, downloaded nothing, and concluded that
|
||||||
left.** Run over all 753 series and 2,805 seasons of `Shows` on 2026-11-02 it
|
identification was the only lever left. The same door queried with no `Providers=` filter
|
||||||
classified 3,558 items in 20 s: 2,908 already carried a primary, 624 have no
|
answered for 16 seasons that same day — every offer from `TheTVDB`, which the pinned form
|
||||||
provider id at all, 26 have an id and no poster in TMDb — zero downloads. The
|
never asks — and all 16 are dressed now. A pinned answer proves one provider is empty; the
|
||||||
artless remainder is not an image-door problem: it is the unnamed long tail (clip
|
unpinned answer is the provider census, and a TV art loop that pins is simply the wrong tool.
|
||||||
collections, `(Warhammer TV)`-shaped directories), and the lever is folder names
|
Post-fill the artless remainder measures 86 items (80 seasons, 6 series): 61 carry no provider
|
||||||
or an identify pass, never another retry loop.
|
id at all — the unnamed long tail (`3a BBW - Series (2010-11)`, `History Of Africa With Zeinab
|
||||||
|
Badawi`, `(Warhammer TV)`-shaped directories), where the lever is folder names or an identify
|
||||||
|
pass — and 25 hold an id and draw no offer from any provider. No image retry moves either
|
||||||
|
group, which is the half of the old conclusion that survives.
|
||||||
|
|
||||||
**Series and season art is fetched; episode stills are not, deliberately.** Every
|
**Series and season art is fetched; episode stills are not, deliberately.** Every
|
||||||
episode query is a fresh provider round-trip — nothing caches per episode — measured
|
episode query is a fresh provider round-trip — nothing caches per episode — measured
|
||||||
@@ -149,9 +155,11 @@ sample. Across 42k episodes that is days of provider traffic to dress a fifth of
|
|||||||
and clients display the series and season art anyway. If episode stills are ever
|
and clients display the series and season art anyway. If episode stills are ever
|
||||||
ordered, the loop is the same door and its log makes the pass resumable.
|
ordered, the loop is the same door and its log makes the pass resumable.
|
||||||
|
|
||||||
**API shape on 12.x:** `/Items` and `/Items/{id}` need `UserId` when
|
**API shape on 12.x:** `/Items/{id}` needs `UserId` when authenticated by API key — without
|
||||||
authenticated by API key — without it the answer is `400 Error processing
|
it the answer is `400 Error processing request`, which reads exactly like an authentication
|
||||||
request`, which reads exactly like an authentication failure. `MetadataRefreshMode`
|
failure, and it bites hardest as a *verification* read directly after a write that succeeded.
|
||||||
|
The `/Items` list route, `?Ids=<id>` included, needs no `UserId`, so verify writes there.
|
||||||
|
`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