Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crate-digger 🎧

Anti-echo-chamber music discovery, independent of any streaming service's recommender.

Streaming recommenders optimise for one thing: that you keep listening. So they converge on your comfort zone — more of the same. crate-digger does the opposite. It's not a trained model; it's three simple ideas:

  1. A rotating exploration axis. Each weekday pushes the search in a deliberately different direction, so it can never collapse into a single lane:

    Day Axis
    Mon An under-the-radar artist a couple of hops from your taste
    Tue A genre/tag you probably don't listen to
    Wed A different country / scene (rotate the world)
    Thu A different era / decade
    Fri An independent or recent release (indie labels, Bandcamp)
    Sat A deep cut from an artist you already like
    Sun Wildcard: a pick from a respected human curator
  2. Human curation, not engagement algorithms. It leans on editorial sources (Bandcamp Daily, KEXP, NPR Music, Gilles Peterson…) and open data (MusicBrainz, ListenBrainz) — never a platform's recommender.

  3. Memory. It logs everything it has suggested (history.tsv) so it never repeats and keeps exploring further out.

The result: one song of the day, with why it was picked and YouTube/Bandcamp links (no Spotify dependency). Perfect for a morning briefing, a cron job, or a Telegram nudge.

Honest framing: this is a prompt + rotation + memory pattern, not a novel ML algorithm. That's the point — it's transparent, provider-agnostic, and yours to tweak.

Install

Zero third-party dependencies — just Python 3.9+ (3.11+ to use a TOML config).

git clone https://github.com/YOURNAME/crate-digger && cd crate-digger
cp config.example.toml config.toml   # edit it

Use

# Pick today's track
CRATEDIG_API_KEY=sk-... python3 cratedig.py --config config.toml

# See exactly what it would send the LLM (no API call, no key needed)
python3 cratedig.py --dry-run

# Preview any weekday's axis (0=Mon .. 6=Sun)
python3 cratedig.py --dry-run --day 2

# Deliver to Telegram too
TELEGRAM_BOT_TOKEN=... TELEGRAM_CHAT_ID=... python3 cratedig.py --telegram

Any LLM

Two backends cover almost everything (set in config or env):

  • provider = "anthropic" — Claude.
  • provider = "openai" — OpenAI and any OpenAI-compatible endpoint: just point base_url at DeepSeek, OpenRouter, Groq, or a local Ollama (http://localhost:11434/v1).

Config

Environment variables (or a TOML file, see config.example.toml):

Var Meaning
CRATEDIG_PROVIDER openai (default) or anthropic
CRATEDIG_MODEL model id
CRATEDIG_BASE_URL for openai-compatible endpoints
CRATEDIG_API_KEY LLM key
CRATEDIG_TASTE your taste seed (the starting point, not the destination)
CRATEDIG_LANG output language (default es)
CRATEDIG_HISTORY path to the dedup log

Roadmap

  • Optional web-search grounding (DuckDuckGo, no key) for fresher editorial picks.
  • ListenBrainz/Last.fm integration: seed from your real listening history and a similar-artist graph — still no Spotify.

License

MIT — built by @r3tr0eth.

About

Anti-echo-chamber music discovery, independent of any streaming recommender — rotating exploration axes + human curation + memory. Zero-dep, any LLM.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages