Recreates Spotify's retired Daily Drive experience by building a playlist that blends podcast episodes with music on an automatic schedule.
This repo is my personal fork/customization of the original project by Patrick Deglon.
All core project credit goes to:
- Patrick Deglon
- Original project:
patdeg/dailydrive
This fork keeps the same core idea and expands it for my own usage and deployment workflow.
- Authenticates with Spotify using OAuth (
setup.js) - Pulls latest episodes from configured podcasts
- Pulls music from one or more sources:
- top tracks
- source playlists
- genre discovery search
- Mixes podcasts + music using a configurable pattern like
PMMMM - Updates a target Spotify playlist
- Caches run state to avoid unnecessary updates
Compared to the original baseline concept, this version includes practical enhancements for my daily use:
- Added hourly podcast-only refresh mode (
--podcast-only) so short-lived episodes stay fresh without reshuffling music - Added daily + hourly automation scripts in
scripts/for cron-based scheduling - Uses Spotify playlist
/itemsendpoint for playlist reads to avoid the deprecated/tracksbehavior - Added music filtering controls (
exclude_keywords, optional classical filtering) for cleaner mixes - Added state-aware behavior to skip updates when podcast episodes have not changed
- Added AI taste profile helpers:
taste-profile.js(Demeterics)taste-profile-google.js(Gemini)
- Added Docker support (
Dockerfile,docker-compose.yml) for containerized deployment
- Node.js 18+
- Spotify Premium account (required for current Spotify dev restrictions)
- Spotify Developer app credentials
- Install dependencies:
npm install- Create config from template:
cp config.example.yaml config.yaml- Fill in
config.yaml:
spotify.client_idspotify.client_secretspotify.redirect_uri(usehttp://127.0.0.1:8888/callback)playlist_id- podcast show IDs and music preferences
- Run first-time auth:
npm run setup- Dry run:
npm test- Update playlist:
npm startnpm run setup- run OAuth setup and save Spotify tokennpm start- full playlist refreshnpm test- dry run (no playlist write)npm run taste- generate genre suggestions via Demetericsnpm run taste:google- generate genre suggestions via Gemini
For unattended updates, use the scripts in scripts/ with cron:
scripts/daily-refresh.sh- full refresh + housekeepingscripts/hourly-refresh.sh- podcast-only refresh
These are designed for Linux-style deployments (including mini PCs and SBCs).
Main file: config.yaml
podcasts[]supportsepisodesand optionalposition: firstmusic.top_trackscontrols personal favorites sourcemusic.genresenables discovery tracksmusic.playlistsimports tracks from existing playlistsmusic.total_songssets music count targetmix_patterncontrols interleave logic (P=podcast, M=music)
Example pattern:
PMMMM= 1 podcast, then 4 songs, repeat
This repo intentionally keeps secrets out of git. Do not commit:
config.yaml.env.spotify-token.jsonstate.json
MIT (see LICENSE).
If you are here from the original project: thank you again to Patrick for creating and sharing the foundation this fork is built on.