# Whats up in Jellyplist v0.1.9? ## ⚠️ BREAKING CHANGE: docker-compose.yml >[!WARNING] >In this release I´ve done some rework so now the setup is a bit easier, because you don´t have to spin up the -worker -beat container, these are now all in the default container and managed via supervisor. This means you have to update your `docker-compose.yml` when updating! So now your compose file should look more or less like this ```yaml services: redis: image: redis:7-alpine container_name: redis volumes: - redis_data:/data networks: - jellyplist-network postgres: container_name: postgres-jellyplist image: postgres:17.2 environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} PGDATA: /data/postgres volumes: - /jellyplist_pgdata/postgres:/data/postgres networks: - jellyplist-network restart: unless-stopped jellyplist: container_name: jellyplist image: ${IMAGE} depends_on: - postgres - redis ports: - "5055:5055" networks: - jellyplist-network volumes: - /jellyplist/cookies.txt:/jellyplist/cookies.txt - /jellyplist/open.spotify.com_cookies.txt:/jellyplist/spotify-cookie.txt - ${MUSIC_STORAGE_BASE_PATH}:${MUSIC_STORAGE_BASE_PATH} - /my/super/cool/storage/jellyplist/settings.yaml:/jellyplist/settings.yaml env_file: - .env networks: jellyplist-network: driver: bridge volumes: postgres: redis_data: ``` And the `.env` File ```env IMAGE = ghcr.io/kamilkosek/jellyplist:latest POSTGRES_USER = jellyplist POSTGRES_PASSWORD = jellyplist SECRET_KEY = supersecretkey # Secret key for session management JELLYFIN_SERVER_URL = http://:8096 # Default to local Jellyfin server JELLYFIN_ACCESS_TOKEN = JELLYFIN_ADMIN_USER = JELLYFIN_ADMIN_PASSWORD = SPOTIFY_CLIENT_ID = SPOTIFY_CLIENT_SECRET = JELLYPLIST_DB_HOST = postgres-jellyplist JELLYPLIST_DB_USER = jellyplist JELLYPLIST_DB_PASSWORD = jellyplist LOG_LEVEL = INFO LIDARR_API_KEY = LIDARR_URL = http://:8686 LIDARR_MONITOR_ARTISTS = false SPOTIFY_COOKIE_FILE = '/jellyplist/spotify-cookie.txt' MUSIC_STORAGE_BASE_PATH = '/storage/media/music' ``` ### 🆕 Log Viewer Under the `Admin` Page there is now a tab called `Logs` from where you can view the current logs, change the log-level on demand and copy a prepared markdown snippet ready to be pasted into a GitHub issue. ### 🆕 New env var´s, a bit more control over spotDL #### `SPOTDL_PROXY` Set a Proxy for spotDL. See [https://spotdl.readthedocs.io/en/latest/usage/#command-line-options](https://spotdl.readthedocs.io/en/latest/usage/#command-line-options) #### `SPOTDL_OUTPUT_FORMAT` Set the output folder and file name format for downloaded tracks via spotDL. Not all variables, which are supported by spotDL are supported by Jellyplist. - `{title}` - `{artist}` - `{artists}` - `{album}` This way you will have a bit more controler over how the files are stored. The complete output path is joined from `MUSIC_STORAGE_BASE_PATH` and `SPOTDL_OUTPUT_FORMAT` _*Example:*_ `MUSIC_STORAGE_BASE_PATH = /storage/media/music` and `SPOTDL_OUTPUT_FORMAT = /{artist}/{album}/{title}` The Track is _All I Want for Christmas Is You by Mariah Carey_ this will result in the following folder structure: `/storage/media/music/Mariah Carey/Merry Christmas/All I Want for Christmas Is You.mp3` ### 🆕 Admin Users can now add Playlists to multiple Users Sometimes I want to add a playlist to several users at once, because it´s either a _generic_ one or because my wife doesn´t want to bother with the technical stuff 😬 So now, when logged in as an admin user, when adding a playlist you can select users from your Jellyfin server which will also receive it. Under `Admin` you can also select users which will be preselected by default. These will be stored in the file `settings.yaml`. You can or should map this file to a file outside the container, so it will persist accross image updates (see compose sample above) ### 🆕 New `env` var `QUALITY_SCORE_THRESHOLD` Get a better control over the `update_jellyfin_id_for_downloaded_tracks()` behaviour. Until now this tasks performed a __full update__ every 24h: This means, every track from every playlist was searched through the Jellyfin API with the hope of finding the same track but with a better quality. While this is ok and works fine for small libraries, this tasks eats a lot of power on large libraries and also takes time. So there is now the new `env` variable `QUALITY_SCORE_THRESHOLD` (default: `1000.0`). When a track was once found with a quality score above 1000.0, Jellyplist wont try to perform another `quality update` anymore on this track. In order to be able to classify it a little better, here are a few common quality scores: - spotDL downloaded track without yt-music premium: `< 300` - spotDL downloaded track **with** yt-music premium: `< 450` - flac `> 1000` >[!TIP] >Want to know what quality score (and many other details) a track has ? Just double-click the table row in the playlist details view to get all the info´s! ### Other changes, improvements and fixes - Fix for #38 and #22 , where the manual task starting was missing a return value - Fixed an issue where the content-type of a playlist cover image, would cause the Jellyfin API Client to fail. Thanks @artyorsh - Fixed missing lock keys to task manager and task status rendering - Pinned postgres version to 17.2 - Enhanced error logging in tasks - several fixes and improvements for the Jellyfin API Client