/Explo

Spotify's "Discover Weekly" for self-hosted music systems

Primary LanguageGoMIT LicenseMIT

Explo - Discover Weekly for Self-Hosted Music Systems

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:

  1. Playlist Discovery (default): Retrieves songs from a ListenBrainz-generated playlist.
  2. API Discovery: Uses the ListenBrainz API for recommendations (Note: API recommendations don't update often).

Features

  • 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.

Getting Started

Prerequisites

  • A self-hosted music system like Jellyfin, MPD, or any Subsonic-API compatible system (e.g., Navidrome, Airsonic).
  • ffmpeg installed on server
  • A YouTube Data API key.
  • ListenBrainz scrobbling set up

Installation

Docker

  1. Download docker-compose.yaml file to your system and configure volume mappings
  2. Make a local.env file in the directory defined in docker-compose and configure it (refer to sample.env for options)
  3. Launch the container with docker compose up -d

Binary

  1. Download the latest release and ensure it's executable
  2. Make a local.env file in the same directory and configure it (refer to sample.env for options)
  3. 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

Contributing

Contributions are always welcome! If you have any suggestions, bug reports, or feature requests, please open an issue or submit a pull request.