Familiar

Host your own music streaming service — for the library you already own. AI listens to every track and builds playlists from your collection, not a streaming catalog.

v0.1.0-alpha2 · 2026-04-17

Your music, your server, your AI. Self-host Familiar on your own hardware and point it at your existing library of MP3s and FLACs. No cloud, no subscription, no data leaving your network.

Describe what you want to hear. Familiar listens to every track and understands how it actually sounds — not just tags or genre. Ask for "something that sounds like rain on a window" and it actually works.

Community-powered analysis. Share anonymized audio fingerprints with other users. New installations benefit instantly from pre-computed analysis, skipping hours of processing.

Who Familiar is for

You own your music. A folder of MP3s and FLACs collected over years — CDs you ripped, albums bought on Bandcamp, live sets, mixtapes, exports from old iPods. Streaming services either won't play your files or quietly replace them with their own catalog versions (sometimes the wrong remaster, sometimes DRM-locked, occasionally just gone).

You want to actually find stuff in it. Semantic search — "something that sounds like rain on a window", "upbeat with synths", "melancholy acoustic" — on the tracks you already own, reachable from your phone on cellular. No re-buying, no re-uploading to a streaming locker, no algorithm steering you back toward a catalog. Point Familiar at your library, wait for analysis to finish, and ask Claude for a playlist.

How Familiar compares

FamiliarJellyfinPlexApple MusicSpotify
Plays your existing MP3 / FLAC filesYesYesYesiCloud Match (replaces files)
AI chat + playlist creationYes
Semantic audio searchYes (CLAP)
Audio feature analysisBPM, key, energy, moodBasicBasicCatalog-onlyCatalog-only
Community analysis cacheYes
Self-hosted / no cloudYesYesPartial
Music video playbackYesYesYesCatalog-only
Smart playlistsRules-basedYesYes
Mobile PWAYesWeb + appsAppsNative appNative app

Features

Discovery & Search

Semantic audio search

Describe the sound: "upbeat with synths", "acoustic and melancholy". Matches on CLAP audio embeddings, not tags.

AI chat assistant

Claude with 27 tools for search, playback, metadata correction, and playlist creation.

Find similar

Click any track to surface sonically similar music from your library via vector similarity.

Mood Grid

2D scatter of your library by energy and valence — happy/sad × calm/energetic.

Music Map

Ego-centric similarity map. Click any artist to re-center the view.

3D Explorer

Navigate a 3D space of artists with hover-to-preview audio.

Audio Analysis

CLAP embeddings

512-dim audio embeddings from LAION's CLAP model. Powers semantic search and similarity.

Musical features

BPM, key, energy, valence, danceability, acousticness, instrumentalness — extracted via librosa.

Community cache

Opt-in sharing of analysis fingerprints. New libraries skip hours of extraction.

Playback & Library

Offline PWA

Web app installs to home screen. IndexedDB track cache for offline listening.

iOS app

Familiar Player on the App Store — native Capacitor wrapper with background audio, lock-screen controls, and CarPlay scaffolding.

Smart playlists

Rules-based auto-updating playlists. Combine tags, features, and listening history.

Music videos

Attach video files to tracks and play them back in the full player.

Sharing

Listening sessions

Stream what you're playing to friends in real time over WebRTC. Open the Radio panel to host, share a code or link — friends join from any browser. Participant list, in-session chat, optional password. Hosting is desktop/web; iOS clients can join.

Ask Familiar…

Real prompts that map to real filters. The AI chat translates phrases like these into audio-feature queries across your library.

"Something chill for late-night coding"

energy < 0.4 · valence 0.3–0.6

"Upbeat and danceable"

energy > 0.6 · valence > 0.6 · danceability > 0.5

"Melancholy acoustic"

valence < 0.3 · acousticness > 0.4

"Dreamy / ambient"

energy < 0.3 · acousticness > 0.4 · dynamic_range_min < 10

"Jazzy with a loose live feel"

swing_min > 0.3 · tempo_character = "breathing"

"Beatmatch-safe house set"

tempo_cv_max = 0.05

"French lyrics only"

lyrics_language = "fr"

"Aggressive and bright"

energy > 0.8 · brightness > 0.6

Install

Requirements. Docker 24+, 2 GB RAM minimum (4 GB recommended), x86_64 or ARM64. Tested on macOS, Linux, OpenMediaVault, and Synology NAS. On 8 GB Macs, set DISABLE_CLAP_EMBEDDINGS=true.

Pull the prebuilt image and start the stack

mkdir familiar && cd familiar
curl -LO https://raw.githubusercontent.com/seethroughlab/familiar/master/docker/docker-compose.prod.yml
curl -LO https://raw.githubusercontent.com/seethroughlab/familiar/master/docker/init-pgvector.sql
MUSIC_LIBRARY_PATH=~/Music docker compose -f docker-compose.prod.yml up -d

Two files, one compose up. Uses the multi-arch image at ghcr.io/seethroughlab/familiar:latest.

Open the UI

Visit http://localhost:4400. The admin page walks you through API keys (Anthropic for AI chat, optional Last.fm and AcoustID).

Scan your library

Point Familiar at a music folder in Settings → Library Management. It'll scan, fingerprint, and start extracting audio features in the background.

Analysis takes time. Expect roughly 1 second per track on modern hardware. A 20,000-track library is ~6 hours. The community cache short-circuits most of this for music that's already been analyzed elsewhere.
macOS? (journald swap + 8 GB RAM note)

The production compose uses journald logging (Linux-only). On macOS, add the override:

docker compose -f docker-compose.prod.yml -f docker-compose.macos.yml up -d

See the macOS guide for Apple Silicon notes and the ./start.sh helper script.

Build from source
git clone https://github.com/seethroughlab/familiar.git
cd familiar/docker
./start.sh

Builds the image locally with platform detection and a health check. Useful when you're developing against the backend.

Detailed guides

Listen from anywhere

The goal is a private URL you can reach from your phone on cellular — not a public site. Don't port-forward 4400 to the open internet.

Recommended: Tailscale

Install Tailscale on the server and each device you want to listen from, enable HTTPS certificates in the admin console, then run one command on the server:

tailscale serve --bg https / http://localhost:4400

Visit https://<your-server>.<tailnet>.ts.net from any signed-in device — iPhone, laptop, TV. Tailscale provisions a Let's Encrypt cert automatically and renews it for you.

Why HTTPS matters: the iOS/Android PWA install prompt, service-worker caching, and "Add to Home Screen" only work over HTTPS. Plain http://10.0.0.42:4400 does not.

Full walkthrough in CONFIGURATION.md →

Also works with

  • Cloudflare Tunnel — if you want a stable public hostname routed through Cloudflare without opening a port.
  • WireGuard — roll your own VPN; point your phone at the VPN and use the LAN URL.
  • Reverse proxy (nginx, Caddy, Traefik) on a box with a real domain and cert.
  • Any VPN you already run — anything that puts your phone on the same network as the server will do.

FAQ

Why not just use Apple Music or Spotify for this?

Familiar isn't a streaming service — it plays the files you already own. If you've got a folder of MP3s/FLACs going back to 2002, Apple Music either won't accept them or will iCloud-Match them to its own catalog versions (sometimes the wrong remaster, occasionally DRM-locked, occasionally just gone). Spotify only plays its own catalog; its Local Files feature syncs from a desktop to a phone on the same network, not remotely. Neither runs semantic search or AI playlists across your library — only theirs. Familiar runs on your hardware, leaves your files alone, and points its AI at your collection.

Do I need an API key?

Yes for the AI chat — Familiar uses the Anthropic Claude API, and queries typically cost a fraction of a cent. Basic library browsing, playback, search, Mood Grid, Music Map, and 3D Explorer all work without an API key.

What hardware do I need?

See the Requirements callout above. A small NAS works — the author runs a 23k-track library on an OpenMediaVault box. Analysis is the heaviest workload; once a track is analyzed it doesn't need to be re-analyzed.

Does my music or listening data leave my network?

No. The opt-in community cache shares only one-way SHA-256 hashes of audio fingerprints — no track titles, artists, file paths, or listening history. You cannot reconstruct a library from the hashes. AI chat queries go to Anthropic (because that's where Claude runs); your audio files never leave your server.

What happens if Claude is down?

The chat panel is disabled until the API comes back. Everything else — browsing, searching, playback, similarity, smart playlists — is local and keeps working.

How long does analysis take?

Roughly 1 second per track on modern hardware, so a 20,000-track library is around 6 hours. The community cache short-circuits tracks that have been analyzed elsewhere, which can reduce a cold-start scan to minutes for popular music.

Can I use the PWA on cellular / away from home?

Yes — see Listen from anywhere. Tailscale + HTTPS is the easiest path, and it's what unlocks "Add to Home Screen" on iOS and Android.

Is there an iOS app?

Yes — Familiar Player is on the App Store. First launch connects to a public demo backend so you can browse the UI with a small Creative Commons library; to use your own music, point it at your self-hosted Familiar server in Settings → Backend Server (Tailscale HTTPS works great for this).

Screenshots

Library — tracks
Library — tracks
AI chat panel
AI chat panel
Mood grid
Mood grid
Music map
Music map
3D explorer
3D explorer
Discover
Discover
Library — artists
Library — artists
Library — albums
Library — albums
Playlist detail
Playlist detail
Full player
Full player
Settings
Settings
Admin setup
Admin setup

Mobile

Mobile library
Library
Mobile full player
Full player

Beta feedback

Familiar is in active development. Bug reports, feature requests, performance notes, and UI/UX suggestions are all welcome.

Open an issue on GitHub →