Conversational AI music artist recommendations.
  • Python 58.3%
  • TypeScript 39.2%
  • Dockerfile 1.1%
  • JavaScript 1.1%
  • HTML 0.3%
Find a file
Joshua Renker f5f5363795 Rewrite README for general users
Drop the stale split-pane description and the project-structure section
(CLAUDE.md owns architecture); lead with what using the app is like,
cover Docker setup, the Last.fm key, Plex connection (including the
host-firewall gotcha), and keep a short dev-setup section.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 22:59:28 -04:00
alembic Rewrite Findarr as a conversational AI music discovery app 2026-04-07 23:55:08 -04:00
app Drop non-discriminative genre tags from the collection summary 2026-07-10 22:49:05 -04:00
frontend Enrich library artists with Last.fm community tags and MusicBrainz IDs 2026-07-10 22:36:54 -04:00
nginx Fix Plex settings save in Docker; route artist names through cards 2026-07-09 00:43:08 -04:00
.env.example Rewrite Findarr as a conversational AI music discovery app 2026-04-07 23:55:08 -04:00
.gitignore Add node_modules and frontend/dist to .gitignore 2026-04-07 23:58:04 -04:00
.python-version Initial project scaffold for Findarr 2026-04-05 11:49:24 -04:00
alembic.ini Initial project scaffold for Findarr 2026-04-05 11:49:24 -04:00
CLAUDE.md Add artist library: schema, Plex genre sync, search tool, slim prompts 2026-07-10 10:21:34 -04:00
docker-compose.yml Update docker-compose.yml 2026-07-10 22:53:59 -04:00
Dockerfile Fix Docker build errors 2026-04-05 19:26:00 -04:00
LICENSE Initial project scaffold for Findarr 2026-04-05 11:49:24 -04:00
pyproject.toml Add Plex music library integration 2026-04-09 00:47:01 -04:00
README.md Rewrite README for general users 2026-07-10 22:59:28 -04:00
uv.lock Add Plex music library integration 2026-04-09 00:47:01 -04:00

Findarr

Chat your way to your next favorite band.

Findarr is a self-hosted music discovery app. Instead of scrolling algorithmic playlists, you have a conversation: tell it what you've been listening to, dig into why an artist clicks for you, and get recommendations that actually fit — delivered as cards right in the chat, with listening links so you can check each one out immediately.

What it's like to use

You might start with something like "I've really been digging Moon Duo lately" and end up twenty minutes later with a fresh batch of krautrock-adjacent deep cuts, having figured out along the way that what you actually love is hypnotic repetition with fuzz on top.

  • It learns your taste. As you chat and react, Findarr builds a running analysis of what you like and why — not just a list of bands, but the qualities that connect them. Open the Taste Profile panel any time to see what it thinks of you.
  • Suggestions come as cards. Each one has genre tags, a one-line reason it fits you, and search links for Spotify, YouTube, Last.fm, and Bandcamp.
  • React with one click. Like, Dislike, Meh, Already Have — every reaction sharpens future suggestions. (There's even a button for calling out artists that don't exist. AI, you know.)
  • It knows your collection. Connect your Plex server and Findarr syncs your music library, so it never recommends something you already own — and it can reason about what you have ("what's in my library that sounds like this?").
  • Conversations are saved. Pick up an old thread from the History panel whenever you want.

Setting it up

You'll need Docker with Compose, and an Anthropic API key (the chat runs on Claude — you pay Anthropic directly for usage).

git clone <this repo> && cd findarr
cp .env.example .env
# edit .env: set ANTHROPIC_API_KEY (and LASTFM_API_KEY — see below)
docker compose up -d

Open http://localhost:8088 and say hi.

Grab a free key at last.fm/api/account/create and put it in .env as LASTFM_API_KEY. It gets you two things: artist photos on suggestion cards, and much better genre data for your synced collection (Plex's own genre tags are vague; Last.fm's community tags are what make "what do I own in this genre?" actually work).

Optional: connect Plex

Open Settings (gear icon) in the app, enter your Plex server URL and token, hit Test Connection, then Sync Music Library. The first sync tags your whole collection via Last.fm, so it can take a couple of minutes — after that, syncs only process new artists.

Plex on the same machine, but the connection times out? If Plex runs natively on the Docker host, your firewall may be blocking traffic from Docker's network to it. On ufw: sudo ufw allow 32400/tcp (or scope it to Docker's subnet if you prefer).

Environment variables

Variable Default Description
ANTHROPIC_API_KEY Required. Claude API key
LASTFM_API_KEY Recommended. Artist images + collection genre tags
DATABASE_URL bundled SQLite Only change if you know you want to
SECRET_KEY Random secret (openssl rand -hex 32), reserved for future use
LOG_LEVEL info debug for verbose chat/tool logging

Everything is stored in a single SQLite database under ./data/ — back that up and you've backed up your taste profile, library, and conversations.

Running from source (development)

Requires Python 3.12+ with uv and Node.js 22+.

uv sync
cp .env.example .env        # set ANTHROPIC_API_KEY
uv run uvicorn app.main:app --reload    # backend on :8000

# second terminal:
cd frontend && npm install && npm run dev    # frontend on :5173

Open http://localhost:5173. Architecture notes for contributors live in CLAUDE.md.

License

MIT — see LICENSE.