Vellum/internal
mithral 7ed74825e7 Fix three regressions the video-kind split introduced
All three were found by running the thing rather than reading it, and the
first one is serious.

1. probeable() compared the LIBRARY kind against a hardcoded list. Splitting
   video into movies/tv/adult/hentai left every new kind out of that list, so
   a movies or tv library was never probed and stored no codec facts at all.
   With no facts, resolve cannot tell an unplayable file from a playable one:
   an HEVC file reported "playable via html5" for a browser that cannot decode
   HEVC, and transcoding would never have triggered for anything.

   It now tests the kind the rows carry, through library.ItemKindFor, so every
   video library is probed exactly as the original video kind was and a future
   video kind cannot repeat this.

2. jellyfin CollectionType() had no case for the new kinds, so a Jellyfin
   client saw movies, tv, adult and hentai libraries with no collection type.

3. kindNoun() fell through to its default for the new kinds, which reads "tv"
   in a sentence rather than "shows".

Also hardened the empty-kind fallback in upsertItem to resolve through
ItemKindFor, so it cannot store a library's own name where 'video' belongs.

Verified end-to-end: codec facts are recorded again (v=h264 and v=hevc), an
h264 file resolves to engine html5, and the HEVC file resolves to engine
transcode. That last line is the whole feature working: scan records the
facts, resolve sees the browser cannot decode it, and the server offers to
re-encode it instead of saying the file is unplayable.
2026-10-12 12:10:01 -04:00
..
apitoken Waves 9-10: Jellyfin and Subsonic clients can browse and play 2026-10-11 15:05:43 -04:00
arch Detect transcode hardware, and prove it can actually encode 2026-10-12 11:49:05 -04:00
auth Rate limit every surface that checks a password 2026-10-12 00:57:56 -04:00
catalog Expose the television tree: catalog reads, API routes, Jellyfin shapes 2026-10-12 01:41:05 -04:00
cli Documentation, and make a fresh clone actually work 2026-10-12 00:18:11 -04:00
core Add a ThePornDB provider for the adult kind 2026-10-12 11:30:58 -04:00
discovery Advertise Vellum over mDNS so clients find it without a typed URL 2026-10-12 01:04:33 -04:00
engine Offer transcoding as a resolve engine, as the last resort 2026-10-12 12:03:41 -04:00
home Fix three regressions the video-kind split introduced 2026-10-12 12:10:01 -04:00
httpapi Documentation, and make a fresh clone actually work 2026-10-12 00:18:11 -04:00
httpx Phase 1: accounts, sessions, per-library grants 2026-10-09 16:31:24 -04:00
jellyfin Fix three regressions the video-kind split introduced 2026-10-12 12:10:01 -04:00
jobs Wave 1: survive a real library 2026-10-11 13:10:34 -04:00
library Separate video libraries by kind: movies, TV, adult, hentai 2026-10-12 11:20:51 -04:00
media Serve transcoded streams over HLS 2026-10-12 12:00:20 -04:00
metadata Separate video libraries by kind: movies, TV, adult, hentai 2026-10-12 11:20:51 -04:00
modules Phase 1: one item-access seam, and architecture rules that fail the build 2026-10-11 15:47:18 -04:00
natsort Phase 6a: directory grouping, audiobooks and music playback 2026-10-09 21:20:47 -04:00
playback Offer transcoding as a resolve engine, as the last resort 2026-10-12 12:03:41 -04:00
probe Waves 4-6: audio depth, ffprobe facts, and direct-play video 2026-10-11 14:14:32 -04:00
progress Wave 1: survive a real library 2026-10-11 13:10:34 -04:00
providers Add a ThePornDB provider for the adult kind 2026-10-12 11:30:58 -04:00
scanner Fix three regressions the video-kind split introduced 2026-10-12 12:10:01 -04:00
search Wave 3: search depth, transfer size, and the Home screen's tests 2026-10-11 13:46:18 -04:00
stream Discover and serve subtitle tracks 2026-10-12 11:42:51 -04:00
subsonic Rate limit every surface that checks a password 2026-10-12 00:57:56 -04:00
transcode Add the transcode session manager 2026-10-12 11:54:20 -04:00