Hey guys, I've been cooking 2.0 during my absence and I think you are going to like it.
This version introduces major architectural changes including the implementation of Watchlist and History features, and a migration of frontend code to TypeScript (fucking finally).
New Features
- Watchlist:
- Monitor Spotify Playlists and Artists for new releases/tracks.
- Automatically queue downloads for new content based on configuration.
- New UI page (
/watchlist
) to view and manage watched items. - API endpoints (
/api/playlist/watch
,/api/artist/watch
) to add, remove, list, and trigger checks for watched items. - Configurable watch settings (enable/disable, poll interval, artist album groups).
- Download History:
- Persistent storage of completed, errored, and cancelled downloads.
- New UI page (
/history
) to view past download activity. - API endpoint (
/api/history
) with pagination, sorting, and filtering.
- Duplicate Download Prevention:
- New tasks for items already in progress or in the queue are now detected.
- For manual requests, this creates an error task indicating the duplicate.
- For watchlist tasks, duplicate active downloads are automatically skipped.
- Credential Validation:
- Credential data (Spotify credentials.json / Deezer arl) is now validated when added or edited, including basic connection retry logic.
Improvements & Changes
- API Endpoint Structure: Download endpoints now use item IDs in the URL path (e.g.,
/api/album/<album_id>
) instead of relying solely on a?url=
query parameter. Metadata is fetched internally after receiving the ID. - Configuration Management:
- Configuration files and credentials are now stored under a new
./data
directory (e.g.,./data/config
,./data/creds
). - New config options added for Watchlist.
- Configuration files and credentials are now stored under a new
- Frontend Technology Stack:
- I knew it had to happen someday, so what better time than now? Ported the frontend to Typescript.
- Introduction of new UI pages for Watchlist and History.
- Backend Rework:
- Refactored download functions (
routes.utils.album.py
, etc.) to work with the new task management system. - Celery worker logging is now captured and directed to the main application logs.
- Added periodic cleanup task to manage Redis data size.
- Refactored download functions (
- Logging:
- Application logging setup improved to prevent duplicate handlers.
- Task-specific log files are now generated under
./logs/tasks/
.
Installation & Deployment Notes
- New Directories: You must create the following directories before launching the containers:
data/creds
,data/config
,data/watch
,data/history
,downloads
,logs/tasks
,.cache
. - Volume Mapping: Update your
docker-compose.yml
volumes to reflect the new directory structure, particularly mapping./data
to/app/data
. - Dockerfile: The Docker build process now requires
nodejs
andnpm
to compile TypeScript. These are automatically installed by the updated Dockerfile. - Configuration File Location: Your
main.json
configuration file should now be located at./data/config/main.json
.
Here, get some screenshots my friend: