Version 3.0.0
soulsync 3.0.0: dev → main
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, 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
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)