What's Changed
1.71.0 (2026-06-14)
Features
- channelModule: seed min_duration, max_duration, title_filter_regex, audio_format on new channel insert (565a686)
- channelSettings: reserve 'playlists' as a subfolder name (5adc508)
- config: improve Jellyfin/Emby user picker UI (4e75b50), closes #144
- config: register Jellyfin and Emby connection fields (7ca409d)
- cron: run playlistAutoDownload after channelAutoDownload (0466f02)
- db: add playlist, playlistvideo, playlist_sync_state tables (b8604a5)
- downloadModule: add doPlaylistDownloads entry point (a752a3c)
- downloads: include playlists in channel runs (e39baa0), closes #144
- emby: make public playlists server-global (bd710f2), closes #144
- m3uGenerator: add generatePlaylistM3U with relative paths (97074d4)
- mediaServers: add aggregator index (2b0a47b)
- mediaServers: add baseAdapter interface (17cd0ee)
- mediaServers: add embyAdapter (9818505)
- mediaServers: add jellyfinAdapter (785b2e2)
- mediaServers: add mediaServerSync orchestrator (9f07399)
- mediaServers: add plexAdapter (b5a4d28)
- mediaServers: add serverRegistry (ca1ba9e)
- models: add Playlist Sequelize model (99d058d)
- models: add PlaylistSyncState Sequelize model (98fd51b)
- models: add PlaylistVideo Sequelize model (4c750ed)
- models: register Playlist models and associations (9cc092b)
- playlistModule: add getPlaylistInfo with yt-dlp metadata fetch (d5b4228)
- playlists: add auto-download toggle (331dad5), closes #144
- playlists: add download settings to dialog (d992574), closes #144
- playlists: add help modal to playlists tab (b8ec821), closes #144
- playlists: add per-video download settings (e84e8e5), closes #144
- playlists: download selected playlist videos (f88437c), closes #144
- playlists: newest-first sort + load-more (a37a5b1), closes #144
- playlists: regroup detail header into action groups (29fd4b9), closes #144
- playlists: WIP playlist page, media server settings, and rename ChannelManager -> Subscriptions (ef5eb86)
- plex: add playlist visibility scope control (835df1d), closes #144
- plexAdapter: optional plexPlaylistToken override for playlist scope (bb516d4)
- routes: add /api/mediaservers routes (c8070fb)
- routes: add /api/playlists routes (453b46f)
- routes: add POST /api/playlists/:playlistId/download (ecb2e0d)
- routes: wire playlist + mediaservers routes (7db92f8)
- subscriptions: back button on detail pages (e66c938), closes #144
- subscriptions: context-sensitive add bar (e3ac30f), closes #144
Bug Fixes
- downloadModule: wrap doPlaylistDownloads urls in body shape for doSpecificDownloads (db3982e)
- downloads: aggregate channel+playlist total (3813bf2), closes #144
- downloads: show per-channel quality in dialog (964a8c8), closes #144
- mediaServers: cross-platform basename extraction for Plex-on-Windows (c9fa3a6)
- mediaServers: Emby create uses query params; recover from prior-failure state (ab5c6b5)
- mediaServers: Jellyfin/Emby replace = delete playlist and recreate (bddf01c)
- mediaServers: match item paths by basename, not strict equality (bf1348b)
- mediaServers: resolve Plex URL via plexModule.getBaseUrl (e5ef1b9)
- mediaServers: skip playlist creation when no items resolve yet (350dadd)
- mediaServers: tolerate stale server_playlist_id in replacePlaylistItems (eae455a)
- playlistModule: pass "id" shape to upsertChannel and synthesize channel URL (acbcfdf)
- playlistModule: seed auto-created channels with GLOBAL_DEFAULT_SENTINEL (209ae02)
- allow restoring soft-deleted channels (297ec55), closes #144
- backfill playlist video channels on download (dc86dbe), closes #144
- correct published dates on channel videos (34ee615)
- correct subscription import result counts (19c6f92), closes #144
- default new channels to global subfolder (f9dc4e5), closes #144
- don't mark clean downloads with warnings (86a54db), closes #144
- exclude private videos from playlist sync (b2828f2), closes #144
- re-download handling for missing videos (8397911), closes #144
- route downloads by owning channel (525ade5), closes #144
- send prefixed field keys in media server test (98d4c0e), closes #144
- stop retrying media-server sync when down (2c91fb7), closes #144
- update channels nav dropdown labels (1f59dc1)
- write .ignore marker in playlists folder (9b180f9), closes #144
- playlists: harden media server sync (041008c), closes #144
Documentation
- add reverse proxy websocket troubleshooting (3e9d217)
- document playlist support across user guides (acae0fb), closes #144
- explain where Plex shared playlists appear (73c6cd3), closes #144
- update CHANGELOG for v1.70.0 [skip ci] (f193ffd)
Code Refactoring
- plexAdapter: use "UNCLAIMED_SERVER" sentinel for anonymous mode (e49cb8b)
- break up downloadExecutor doDownload (708bf11), closes #645
- split doDownload into focused modules (af70884), closes #645
Docker Image
docker pull dialmaster/youtarr:v1.71.0Or use latest:
docker pull dialmaster/youtarr:latestFull Changelog
Full Changelog: vv1.70.0...v1.71.0