Skip to content

Version 3.0.1

Latest

Choose a tag to compare

@Nezreka Nezreka released this 14 Jul 04:04
7cb9189

soulsync 3.0.1: devmain

the big one. soulsync isn't just music anymore. this release adds a whole video side (movies, tv, youtube) plus a tautulli-style live server activity view, with Radarr/Sonarr-parity download matching, on top of the usual pile of fixes. that's the 3.0.


the video side (movies, tv & youtube)

a fully isolated video app: its own database, dashboard, search, calendar, and download pipeline. shares the automation engine but never touches the music side. works with plex and jellyfin.

  • library & scanning: three scan modes (incremental modified-since delta, deep re-read + prune, full reset), movies and tv tracked as independent libraries, plus a smart post-download scan that skips the crawl when it already has the newest grab
  • enrichment: tmdb (movies+shows), tvdb (shows + an episode-metadata fallback), omdb (imdb/rt/metacritic ratings), plus 10 background backfill workers (fanart.tv, opensubtitles, return youtube dislike, sponsorblock, trakt, tvmaze, anilist, wikidata, streaming providers, mediastinger). gap-fill by design so it never clobbers server data, per-field locking, and a rolling re-enrichment automation so ratings, overviews, art and air-dates never go stale
  • detail pages & search: source-agnostic movie/show/person/studio pages, and a progressive netflix-feel search that streams results in per group as they arrive
  • tv calendar: a real week grid with air times, a watchlist vs all-library scope toggle, and wishlist an episode straight from the modal
  • follow, wishlist, download: follow shows, actors/directors, studios (with family presets like disney = pixar + marvel + lucasfilm), youtube channels and playlists. a 1-year look-ahead horizon keeps the wishlist current without flooding it, and a sonarr-style airing job wishlists today's episodes for the shows you follow
  • downloads: soulseek (slskd), prowlarr indexers, youtube (yt-dlp), radarr/sonarr-class quality profiles (ladder, cutoff, upgrade-until-cutoff, reject rules, preferred words), a permanent download history, a recycle bin, and a release blocklist
  • overlay studio (kometa-style): a visual overlay-template editor applied via pillow onto plex/jellyfin posters, per-scope assignments (movie/show/season/episode), logo badges, and a nightly re-apply that skips unchanged items
  • collection manager (kometa-style): build plex collections / jellyfin boxsets from smart filters and ranked lists (imdb, tmdb, trakt, mdblist) in true rank order
  • youtube: follow channels and playlists as shows (yt-dlp, no api key), per-channel keep windows, and true downloaded-state tracking
  • plus library-maintenance repair jobs, bulk metadata edit + per-field lock, re-identify a title, an issues system, and a dedicated video automations page on the shared engine

smarter video downloads (radarr/sonarr-parity matching)

the download search used to accept a release on the YEAR alone, so a search for "paradox (2017)" could grab "the cloverfield paradox (2018)" (title's a substring, year's one off). now it gates on the release TITLE too:

  • a confident title mismatch is rejected, at BOTH the initial auto-pick and every retry (the initial pick had no title check at all before this)
  • it matches TMDB alternate + original-language titles, so a release named by a known aka (or a foreign film under its original title) still gets found. this is where we beat radarr/sonarr on missed grabs, not just wrong ones
  • manual search greys out mismatches with the reason, sonarr-style

faster nightly TV refresh

the airing-schedule refresh only re-pulls the current season now, instead of every season of every still-airing show every night. at hundreds of airing shows that's thousands of api calls a night dropped to a fraction, with no loss (new episodes only ever land in the current season).

server activity (tautulli-style)

a live now-playing view for plex and jellyfin, in an app-wide slide-out drawer:

  • live streams merged across plex + jellyfin, pushed over websocket
  • click a stream to open it inside soulsync (tmdb fallback so anything playing is clickable)
  • a history tab, a stats tab, and terminate-a-stream-with-a-message
  • gated to plex/jellyfin, hidden when the active server can't provide it

music-side fixes & polish

  • mobile docs nav works now: sidebar taps on the help/docs page were dead on phones (a sticky header ate the tap area, and the scroll target was a no-op on the stacked mobile layout). both fixed, in two places
  • the music dashboard header now reads "music dashboard" instead of "system dashboard"

testing & infra

  • new playwright characterization tests for the shell chrome, search, help and artist-detail pages, at desktop + mobile (#1015, #1016, thanks @bluejorts). they lock in real ui contracts, including the #1007 modal-button regression, right ahead of the react migration
  • a github sponsor button (funding.yml)