Explo is an alternative to Spotify's "Discover Weekly". It automates music discovery by downloading recommended tracks based on your listening history. Using ListenBrainz for recommendations and Youtube for downloading.
Explo offers two discovery modes:
- Playlist Discovery (default): Retrieves songs from a ListenBrainz-generated playlist.
- API Discovery: Uses the ListenBrainz API for recommendations (Note: API recommendations don't update often).
- Supports Jellyfin, MPD and Subsonic-API-based systems.
- Automatically fetches recommendations and downloads the tracks.
- Adds metadata (title, artist, album) to the downloaded files.
- Creates a "Discover Weekly" playlist with the latest songs.
- Keeps past playlists by default for easy access.
- A self-hosted music system like Jellyfin, MPD, or any Subsonic-API compatible system (e.g., Navidrome, Airsonic).
- A YouTube Data API key.
- ListenBrainz scrobbling set up
- Download docker-compose.yaml file to your system and configure volume mappings
- Make a
local.env
file in the directory defined in docker-compose and configure it (refer to sample.env for options) - Launch the container with
docker compose up -d
Make sure ffmpeg and yt-dlp are installed on the system and accessible via $PATH. Alternatively, you can specify their paths in the local.env file.
- Download the latest release and ensure it's executable
- Make a
local.env
file in the same directory as the binary and configure it (refer to sample.env for options) - Add a Cron job to run Explo weekly:
crontab -e
Insert this to the last line to execute Explo every tuesday at 00:15 (ListenBrainz updates its discovery database on Mondays)
15 0 * * 2 cd /path/to/explo && ./explo-linux-amd64
PS! To test if everything is correct change LISTENBRAINZ_DISCOVERY
to test
and run the program manually
Explo uses the following 3rd-party libraries:
-
ffmpeg-go: A Go wrapper for FFmpeg.
-
goutubedl: A Go wrapper for yt-dlp.
-
godotenv: A library for loading configuration from .env files.
Contributions are always welcome! If you have any suggestions, bug reports, or feature requests, please open an issue or submit a pull request.