github chrisbenincasa/tunarr v1.0.0

latest releases: v1.0.3, v1.0.2, v1.0.1...
3 days ago

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)

UI Changes

  • add link to search page from smart collections page (dc3e932)
  • add warning for structured vs free queries (714982f)
  • consistent library page UX and always-visible drawer (2c59729)
  • cleaning up some mobile styling (#1405) (9a79146)

Don't miss a new tunarr release

NewReleases is sending notifications on new releases.