1.0.0 (2025-12-12)
⚠ BREAKING CHANGES
- persist cast/crew and their artwork to the DB (#1448)
- introduce smart collections (#1436)
- implement local media libraries (#1406)
Features
- media library scanner + full library search (4dd117c)
- add parent directory as tag for other video libraries (7d6890f)
- support negation of IN queries (63f23ac), closes #1514
- add credits API and use it for credit thumbs (758fd64)
- new program page (fde72a4)
- implement emptying trash functionality (#1484) (a6360b0)
- implement missing/trashed items (#1481) (18cdbcb)
- add search server link to status page (9ff38ce)
- allow manually purging dangling documents from search index (2ddf07e)
- search parser overhaul (fa6db00)
- add local media scanner for "other video" library type (#1474) (efff4b8)
- expose max-indexing-threads advanced option for search (0b30a62)
- hookup scanner cancellation and do it in graceful shutdown (de5ca88)
- persist artwork and credits extracted from media source scanning (#1450) (9c82432)
- persist cast/crew and their artwork to the DB (#1448) (b26a0ba)
- add basic fallback metadata extraction for local media (45a9643), closes #1428
- allow scheduling shows that are not part of channel lineup (#1440) (83bf854)
- support smart collection slots in both slot editors (#1442) (2c6ef93)
- add search bar to top bar (#1432) (de41188)
- introduce smart collections (#1436) (5183eae)
- adds new channel options button across pages (#1425) (1c9c99c)
- add ability to randomly sort by whole show (#1415) (3fc743a)
- allow basic configuration of library scan interval (b3af495)
- allow configuring path replacements per-server (#1412) (8a0b8b8)
- implement local media libraries (#1406) (a748408)
- save program media versions to DB (#1379) (b7b9d91)
- support for syncing / scanning Other Video libraries in Plex/Jellyfin (1ea6e8a)
Bug Fixes
- allow parsing virtual show_* fields in search (0dcd7d7)
- allow using non-synced sources in filler / custom-shows (6b27a07)
- another fix for foreign keys migration; defer checking (9d8ff9c)
- backfill program_grouping.media_source_id in fixer (f049a81)
- do not mark missing items in local scanners when using pathFilter (d4ed522)
- fix mediaSourceDB#setMediaSourceUserInfo early exit clause (71ef775)
- fix migration splitting for broken migration (bcd72d7)
- handle different language formats when parsing subtitle filenames (#1507) (b88fb47)
- properly display thumbnails for non-synced sources (d1e66c5)
- ensure search index snapshots are included in backups (af63a41)
- ensure UI cannot unset 12/24 hour clock (49fa52b), closes #1504
- only keep the last 3 DB copy migration backup files (a61de3b)
- properly materialize smart collections with structured filters when scheudling slots (58b71a6)
- simplify database copy migrations (9804863)
- take search index snapshot during backup task (a3e885c)
- fix missing item checking for local scanners (ecfb621)
- standardize on artwork hooks on new program detail pages (2d0c112)
- actually delete smart collections when requested (e285655)
- allow viewing slot schedulers even with missing programming (7993bb5)
- fix horizontal page scroll (#1497) (308bf3d)
- lift 1k document restriction on structured queries (28279e8)
- remove reliance on search index for program materialization (#1494) (c5d2118)
- allow saving "free query" searches as smart collections (d55cdd9)
- do not attempt to parse numbers from nfo files (41f1307)
- fix stream duration calculation in StreamProgramCalculator (526417b)
- run RefreshMediaSourceLibraries at startup; then once an hour afterwards (ba96b3f)
- do not require canonicalId to return API program/grouping (b2ea9f9)
- ensure all fields are properly updated when upserting grouping (b06f8e4)
- fix macos bundle for meilisearch (62025c6)
- ui: fix Force Scan toolip (434fe3b)
- allow dumpless Meilisearch upgrades; bump to 1.27.0 (ab82009)
- improve media source scanning UI state (dc67e9e)
- make audio/subtitle language optional in nfo schemas (18cdbcb)
- make various Plex item index fields optional (c198860)
- return TerminalProgram type from /channels/:id/programs (d5405e0)
- add missing RemoveDanglingProgramsFromSearchTask (96650ee)
- delete items from search index when media source is deleted (de995c7)
- ensure PlexApiClient uses dayjs from server impl (0dc0b60)
- fix JF/Emby stream path building (db5e6bc)
- index additional denormalized details (4ac97a5)
- properly persist media source path replacements on save (2744ad0)
- allow query from top search bar even if not a structured query (04cfe0c)
- implement proper dirty checking in media source other video scanner (4fed159)
- include child relations for program groupings in API (8c4634c)
- pass relevant media source token when loading external images (7b65ff5), closes #1469
- proper implementation of dirty checking during media source scanning (857f656)
- add derivedtypes update - forgot to save this file (2f0c882)
- allow 0 as a track number index (ff17084), closes #1462
- always report input on API schema parse errors (5c20e72)
- catch Jellyfin VideoRangeType parse error and default to Unknown (568594d), closes #1452
- disable dataloader caching (95ff917)
- disable music video libraries in Manage Libraries (4f952b6)
- do not allow changing library enabled state if locked (8d417ba)
- ensure artwork for programs is minted and saved (db5ec6a)
- fix form state when switching between slot duration types (f02fb9b)
- only show supported media library types (b348621)
- populate parent entity when querying getProgramGroupingById (9ea53fb)
- properly index "index" field for seasons/albums/tracks in search (f8f1989)
- properly return index for season/album groupings from API (533971a), closes #1463
- re-implement ChannelProgramGrid on new APIs (#1456) (86c305e)
- remove Plex auto-channel updater (effcb18)
- return all relations for program gropuings in search API (d217d82)
- return full parent/grandparent details from getProgramById API (66c03b2)
- return terminal program genres in /programs/:id endpoint (957f0ce), closes #1461
- revert better-sqlite update (e0f7162)
- allow for space between season / episode numbers (2d4be84)
- fix season/episode regex regressions with fallback regex (0ab464f)
- make actor.role optional when parsing nfo (5633933)
- parse but ignore bin_data streams in with ffprobe (24b7fbb)
- support parsing season/episode numbers in the form 4x03 (84979a6)
- accept both string or number for aspect ratio in NFO files (eba9f89)
- reset local media settings dialog state on close (6c614e8)
- do not require episode nfo files to have the uniqueid field (6342a03)
- make videodetails nfo parsing more persmissive (c611297)
- do not crash if there is no stream-cache to migrate (abb708a)
- make durationinseconds optional; we dont even use this field currently (46ceea1)
- fix jellyfin and emby streaming (5bf3e84)
- more permissive nfo parsing (66369b9)
- remove dependency on sharp until we can figure out x-platform packaging (f4433f6)
- fix binary release and bump node to 22.20.0 (6475f85)
- fix adding music items for non-synced libraries (7a1f6f0)
- fix db associations with scanned audio libraries (ea2edc5)
- properly upsert program grouping external ids (8462143)
- fix meilisearch grabber script to accept x64/x86_64 args for mac download (415121e)
- streaming: convert to proper pixel format before cuda upload + scale (091e7bd)
- streaming: do not apply hwdownload filter in cuda pipeline if not on hardware (5726d6e)
- streaming: do not set sc_threshold to 0 for mpeg2video out (949efda)
- streaming: properly pass disable hw decode/encode/filter to pipeline (70b3757)
- streaming: use bitstream filter in CUDA pipeline to workaround green line (ff61f62), closes #1390
- treat ffprobe format_long_name as optional (c656d24)
- ui: allow viewing stream details of custom / filler programs (af87a17)
- use proper generic other_video scanning type for inject (e44d55d)
- allow querying of other/music video types in UI (dd494fc)
- fix non-synced item enumeration when adding programming (5a8acb7)
- search: make various stream metadata params filterable (f5590f4)
- bundle and start meilisearch properly on macOS (32d2e23)
- do not use github api to pull meilisearch releases (169503c)
- ensure we do not save duplicate libraries by external_id (071be3b)
- extract proper child counts for JF parent items (1261f22)
- meilisearch windows build needs exe extension (13ffcd2)
- ui: allow switching non-synced JF/Emby libraries (0d812ed)
- ui: properly show selection state on imported items (fff1f6c)