Skip to content

iuliandita/digarr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

846 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Digarr

digarr

CI License: MIT Bun TypeScript Docker Tests Release

*Music discovery for your arr stack. Connect your listening sources, pick an AI provider, and Digarr builds a taste profile, runs a recommendation pipeline, and gives you a queue you can actually review. Approve artists into Lidarr or playlist targets, run mood searches in plain English, launch focused discovery modes, import Spotify Liked Songs to get started faster, schedule recurring discovery, generate playlists, browse by genre, and use the UI and AI-assisted discovery output across 15 shipped languages. It is self-hosted, so the data stays with you.

Warning

Beta software, working toward v1.0. You can use it today, but expect rough edges. Releases can land quickly, sometimes several in a day, so check the releases page and CHANGELOG.md before updating. If you run into something broken, open an issue or send over a feature idea.

Free and open source, forever. No tracking, no telemetry, no data collection. Your music taste stays on your server.

Dashboard

More screenshots

Note

Built with AI. A human sets the roadmap, designs the architecture, and reviews the output; most code and tests are AI-generated.

What Makes Digarr Different

7-Stage AI Pipeline

Digarr takes signals from up to 8 sources, runs them through an AI-assisted pipeline, scores candidates with configurable weights, removes duplicates across batches, and learns from what you approve or reject.

Mood Discovery

Type "something like Boards of Canada but darker" or "upbeat 90s pop for a road trip" and Digarr turns that into a result set. You do not have to translate the idea into filters first.

Discovery Modes

Run focused discovery flows from Discover -> Discovery Modes (/discover/modes) for the currently shipped modes: ListenBrainz (Artist Radio, User Radio, Tag Radio, Similar Users Quick and Deep), Release Radar, and Similar Artist Web. Labels and Artist Relationships stay visible on that page so you can see what is planned, and unavailable cards explain why they are blocked while the server rejects those runs until real implementations ship. Manual runs now preflight invalid Artist Radio seeds before the job is accepted, and each accepted run is recorded in Jobs immediately so fast background failures are visible. Available discovery modes can be saved as subscriptions, and those subscriptions now reuse the same provider/fallback path as the manual run you configured.

Auto-Playlists

Build playlists from approved recommendations and send them to Navidrome, Jellyfin, Emby, Plex, or Spotify, or export them as M3U/XSPF. The built-in playlist types are Weekly Digest, Genre Focus, Mood Mix, and Rediscover.

Your AI, Your Choice

Use Anthropic, OpenAI, Google Gemini, Ollama, or any OpenAI-compatible endpoint. Recommendation cards include a short explanation of why an artist made the cut.

Multilingual UI and AI Output

Digarr now ships localized catalogs for 15 languages, a visible language switcher before and after login, persisted per-user locale preferences, and locale-aware AI reasoning for mood discovery, quick discover, and full scans.

Note

Shipped UI languages: English, Spanish, French, German, Portuguese (Brazil), Italian, Dutch, Romanian, Polish, Turkish, Ukrainian, Russian, Japanese, Korean, and Simplified Chinese.

Translations are reviewed in-repo and checked for missing or untranslated catalog values. If you notice awkward wording or missing context, please open an issue or send a PR with fixes.

Flexible Setup

The setup wizard supports three starting points: Lidarr, Emby, or discovery-only. If you connect Lidarr, approved artists are added with your chosen quality and metadata profiles. If you start with Emby, Digarr saves the server connection for library sync and creates an Emby playlist target during setup. If you skip both, you can still run discovery and add targets later from Settings, including playlist exports. slskd targets are configured later in Settings > Targets and support standalone queueing or linked Lidarr handoff.

slskd Integration

slskd targets support two approval modes:

  • Standalone approval queues the matched release directly in slskd.
  • Combined Lidarr + slskd approval adds the artist to Lidarr first, then queues the selected release in slskd when the target is linked to a Lidarr destination.

In addition to approval-driven queueing, Digarr now runs a background slskd worker for linked Lidarr targets. It polls Lidarr wanted releases, creates deduped slskd jobs per target, advances them through search and transfer states, and only marks Lidarr-backed jobs complete after import verification. Admins can trigger a manual sync and inspect active slskd jobs from the API.

Cross-Platform Search

Search across Spotify, Deezer, MusicBrainz, TIDAL, and Bandcamp in one pass. Digarr merges the results, deduplicates them, and lets you launch Quick Discover from any match.

Features

  • 8 data sources: ListenBrainz, Last.fm, Spotify (OAuth), Deezer (OAuth), Plex, Jellyfin, Emby, and Discogs
  • Smart scoring: weighted composite scoring across consensus, similarity, genre overlap, AI confidence, feedback learning, and popularity
  • Auto-approve: send high-scoring recommendations to your targets automatically
  • Discovery modes: manual and subscription flows for ListenBrainz (Artist Radio, User Radio, Tag Radio, Similar Users Quick/Deep), Release Radar, and Similar Artist Web, with unavailable planned modes exposed in metadata but blocked from execution until they ship
  • Subscriptions: scheduled discovery from discovery modes, Spotify Liked Songs, playlists and charts, Deezer favorites, followed artists and Flow, Last.fm tags and charts, ListenBrainz feeds, genre searches, and similar-artist seeds
  • Genre deep dive: browse by genre with Recommended, Trending, and Deep Cuts tabs
  • Library sync and reconciliation: background artist and album sync, per-source status, album sync coverage, unreconciled artist and album review, album coverage badges on recommendation cards, and 6 automated health checks with one-click fixes
  • Analytics: approval rates, genre trends, source effectiveness, score distribution, and time-to-act
  • Multilingual UI: 15 shipped locales, saved user language preference, localized auth/setup/high-traffic pages, and locale-aware AI reasoning
  • Top tracks: Deezer 30-second previews on recommendation cards with MusicBrainz fallback
  • Decade filtering: filter recommendations by era, from the 60s through the 20s+
  • Music previews: Spotify embeds, Deezer clips, and YouTube on recommendation cards
  • OIDC/SSO and multi-user: per-user queues, sources, scoring weights, and target configs
  • Swipe-to-approve on mobile, card-stack mode on desktop
  • Webhook notifications: Discord, Slack, ntfy, Gotify, or any HTTP endpoint
  • 15 color themes: editor classics plus streaming-service-inspired *arr themes, in dark and light variants
  • Export: JSON, CSV, M3U, and XSPF
  • Self-hosted: a single container that runs alongside your existing *arr stack

Integrations

Connect external services to unlock discovery feeds, library sync, playlist export, and one-click imports.

Service Discovery Subscriptions Library Sync Playlist Export Import
ListenBrainz Artist Radio, User Radio, Tag Radio, Similar Users (Quick), Similar Users (Deep) Weekly Jams, Fresh Releases, Artist Radio, Tag Radio, Similar Users - - -
Spotify - Liked Songs, Charts, Playlists - Yes Playlist
Deezer - Favorites, Followed, Flow, Playlists - - Favorites, Followed, Playlists
Discogs Collection, Wantlist - - - -
Last.fm - Charts, Tag Radio - - -
Lidarr - - Artists, Albums - -
Plex - - Artists, Albums Yes -
Jellyfin - - Artists, Albums Yes -
Emby - - Artists, Albums Yes -
TheAudioDB - - - - Artist images (primary)
Wikidata - - - - Bio + external links per artist
AI Provider Mood Discover - - - -

Quick Start

mkdir digarr && cd digarr
curl -LO https://raw.githubusercontent.com/iuliandita/digarr/main/deploy/docker/docker-compose.yml
curl -LO https://raw.githubusercontent.com/iuliandita/digarr/main/deploy/docker/.env.example
cp .env.example .env
# Edit .env and set DB_PASS at minimum
docker compose up -d

Open http://localhost:3000 and complete the setup wizard. You can start with Lidarr, Emby, or discovery-only mode. Alternatively, fill in the service env vars in .env and setup completes automatically on first boot. Database migrations run automatically on every startup.

For zero-touch boot, set DIGARR_INITIAL_USERNAME, DIGARR_INITIAL_PASSWORD, AI_PROVIDER, and AI_MODEL. Listening sources stay optional, but connect at least one before running discovery. Lidarr stays optional: omit LIDARR_URL / LIDARR_API_KEY to run in discovery-only mode. Emby can be added during the setup wizard or later in Settings.

For local development, see CONTRIBUTING.md.

How It Works

Digarr runs a 7-stage recommendation pipeline:

  1. Collect: fetches your Lidarr library, or skips it in discovery mode
  2. Analyze: builds a taste profile from all connected sources
  3. Discover: queries Last.fm similar artists, Discogs genres, AI recommendations, and library seeds
  4. Resolve: validates against MusicBrainz, fetches metadata and images, and handles genre-aware disambiguation
  5. Score: applies the weighted scoring formula
  6. Filter: removes library duplicates, rejected artists with cooldowns, and low-score results
  7. Store: saves the batch and its recommendations

You can run the pipeline on a schedule, by hand, through subscriptions for targeted discovery, or from Discover -> Discovery Modes for focused manual runs on /discover/modes.

Requirements

Service Required Purpose
Lidarr Optional Music library management + auto-download
Listening source Optional ListenBrainz, Last.fm, Spotify, Deezer, Plex, Jellyfin, Emby, or Discogs
AI Provider Yes Anthropic, OpenAI, Gemini, Ollama, or any compatible endpoint
PostgreSQL Yes Data storage (included in Docker Compose)

Configuration

Most day-to-day configuration lives in the web UI after initial setup. That includes connections, scoring weights, schedules, preferences, and the saved interface language. If you connect Spotify, Settings > Connections includes a one-click Import Liked Songs action to seed recommendations for a faster first scan. Settings also includes dedicated Job History and System Health tabs for operational visibility, while Library Health now keeps the latest scan snapshot, shows when it last synced, auto-rescans on the configured library-sync interval, and still exposes a manual Sync Now action. Env-var auto-setup needs initial admin credentials plus an AI provider and model. Listening sources, Lidarr, and Emby can be added later in the UI or supplied during setup. slskd targets are added later in Settings > Targets and can be linked to a specific Lidarr target there so a single approval can add the artist to Lidarr first and then queue the matched Soulseek release. See .env.example for local development fallbacks and deploy/docker/.env.example for Compose deployments.

Backup & Restore

Digarr provides application-level backup and restore through the admin UI (Settings > Administration) or API.

Manual backup: POST /api/admin/backup returns a JSON file with all configuration, users, targets, subscriptions, and recommendation history. Add ?includeCaches=true to include artist and genre caches. The file is larger, but restores do not need to fetch that data from MusicBrainz again.

Restore: POST /api/admin/restore accepts a backup JSON file. The restore runs in a single transaction, so failures roll back cleanly. It restores a cleared database using the backup's primary keys plus stable natural keys for cache and lookup tables where IDs are instance-specific. If the encryption key differs from the backup, Digarr lists the affected credential fields so you can re-enter them manually.

Auto-backup before migrations: When Digarr detects pending database migrations on startup, it saves a backup to DIGARR_BACKUP_DIR (default: ./backups/). It keeps the last 5 auto-backups. Disable this with DIGARR_AUTO_BACKUP=false.

Kubernetes / Helm note: Auto-backup needs a writable /app/backups volume. The bundled Helm chart and raw manifests mount one by default; custom deployments should do the same.

Data Hygiene

Admin tools available under Settings > Administration > Data Hygiene:

  • Clear Image Failures: reset failed image cache entries so Digarr can retry them
  • Rebuild Genre Cache: regenerate cached genres from artist tags
  • Re-score Recommendations: recalculate scores with the current weights
  • Dedupe Repair: merge duplicate recommendations
  • AI Reasoning Audit: detect and fix AI hallucinations
  • Purge Sessions: clean out expired login sessions

Deployment

Method Path Notes
Docker Compose deploy/docker/ Recommended. Includes PostgreSQL. Also on Docker Hub.
Helm chart deploy/helm/digarr/ Kubernetes. Bundled PostgreSQL or bring your own.
Raw k8s manifests deploy/k8s/ Reference manifests for advanced setups.
Unraid deploy/unraid/ Community Applications template. Requires external PostgreSQL.
Synology NAS docs/guides/synology.md DSM 7.1+ (Docker/Container Manager). SSH or GUI.
Docker Desktop docs/guides/docker-desktop.md macOS and Windows (WSL 2).

Verifying image signatures

Since v0.27.8, every release image is signed with cosign using GitHub OIDC (no long-lived keys). Signatures are stored alongside the image at both ghcr.io/iuliandita/digarr and docker.io/iuliandita/digarr. The generated SBOM is attached as a signed SPDX attestation bound to the same image digest.

Install cosign and verify a pulled image before running it:

# Replace <TAG> with the version you pulled, e.g. 0.27.8
cosign verify \
  --certificate-identity-regexp '^https://github\.com/iuliandita/digarr/\.github/workflows/release\.yml@refs/tags/v' \
  --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
  ghcr.io/iuliandita/digarr:<TAG>

# Verify the signed SBOM
cosign verify-attestation \
  --type spdxjson \
  --certificate-identity-regexp '^https://github\.com/iuliandita/digarr/\.github/workflows/release\.yml@refs/tags/v' \
  --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
  ghcr.io/iuliandita/digarr:<TAG>

A successful verify proves the image was built by this repo's release.yml workflow on a tagged push. Any tampering or registry compromise after publication would fail verification.

Friends

Other self-hosted music discovery projects:

Project Approach
Lidify The OG. Lidarr library + Last.fm similar artists. Simple, focused.
Aurral Last.fm tag similarity + Weekly Flow playlists via Soulseek/Navidrome.
MixArr 56 subscription types across 12 services. Widest net in the space.
Curatorr Behavior-first. Scores artists on skips/play completion, not tags.
Brainarr Native Lidarr plugin. Privacy-first with local AI.
Sonobarr Last.fm discovery with optional AI assistant. Real-time UI.
Explo Discover Weekly for self-hosted. ListenBrainz recs to your media server.
MusicMoveArr Datasets MB/Spotify/Deezer/Tidal datasets used by Digarr for genre enrichment.

Contributing

See CONTRIBUTING.md.

Commit message format

This repo uses Conventional Commits. The commit-msg hook at .githooks/commit-msg enforces:

type(scope): description

Types: feat, fix, chore, docs, refactor, test, perf, build, ci, revert. Scope is optional.

Activate the hook once per clone:

git config --local core.hooksPath .githooks

License

MIT. See LICENSE.

Star History

Star History Chart

About

AI-powered music discovery for your *arr stack. Analyzes listening history, discovers artists through a 7-stage AI pipeline, scores and ranks them, and learns from your feedback. Supports Lidarr, Spotify, Navidrome, Jellyfin, Plex. Self-hosted, open source.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors