{"id":35563972,"url":"https://github.com/aquantumofdonuts/mixarr","last_synced_at":"2026-04-30T14:00:52.312Z","repository":{"id":333458137,"uuid":"1122673222","full_name":"aquantumofdonuts/mixarr","owner":"aquantumofdonuts","description":"Self-hosted music discovery companion for Lidarr. Connect Spotify, TIDAL, Last.fm, Deezer, Plex \u0026 more. Docker-ready.","archived":false,"fork":false,"pushed_at":"2026-04-30T10:53:17.000Z","size":13196,"stargazers_count":107,"open_issues_count":11,"forks_count":3,"subscribers_count":1,"default_branch":"prod","last_synced_at":"2026-04-30T12:18:14.130Z","etag":null,"topics":["arrs","arrstack","deezer","discogs","docker","docker-compose","jellyfin","lastfm","lidarr","listenbrainz","music-automation","music-discovery","musicbrainz","plex","self-hosted","selfhosted","spotify","tidal"],"latest_commit_sha":null,"homepage":"https://aquantumofdonuts.github.io/mixarr/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aquantumofdonuts.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-25T08:56:41.000Z","updated_at":"2026-04-30T10:51:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aquantumofdonuts/mixarr","commit_stats":null,"previous_names":["aquantumofdonuts/mixarr"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/aquantumofdonuts/mixarr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aquantumofdonuts%2Fmixarr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aquantumofdonuts%2Fmixarr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aquantumofdonuts%2Fmixarr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aquantumofdonuts%2Fmixarr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aquantumofdonuts","download_url":"https://codeload.github.com/aquantumofdonuts/mixarr/tar.gz/refs/heads/prod","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aquantumofdonuts%2Fmixarr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32466333,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arrs","arrstack","deezer","discogs","docker","docker-compose","jellyfin","lastfm","lidarr","listenbrainz","music-automation","music-discovery","musicbrainz","plex","self-hosted","selfhosted","spotify","tidal"],"created_at":"2026-01-04T14:14:05.322Z","updated_at":"2026-04-30T14:00:52.269Z","avatar_url":"https://github.com/aquantumofdonuts.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"apps/web/public/icons/icon-512x512.png\" alt=\"Mixarr\" width=\"128\" height=\"128\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eMixarr\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eMusic Discovery \u0026 Management for Lidarr\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://aquantumofdonuts.github.io/mixarr/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Website-mixarr-00d4aa?style=flat-square\" alt=\"Website\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/aquantumofdonuts/mixarr\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/aquantumofdonuts/mixarr?style=flat-square\" alt=\"GitHub\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-GPLv3-blue?style=flat-square\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nMixarr is a self-hosted music discovery companion for Lidarr. It connects to Spotify, TIDAL, Last.fm, Deezer, ListenBrainz, Plex, Jellyfin, Discogs, Bandcamp, and MusicBrainz to automatically discover new artists and add them to your library. 56 subscription types, a review queue, and optional AI recommendations. Deploy with Docker in minutes.\n\n![Mixarr Dashboard](website/img/mixarr-dashboard.png)\n\n## Quick Start\n\n### Docker Compose (Recommended)\n\nCreate a `docker-compose.yml`:\n\n```yaml\nversion: \"3\"\nservices:\n  mixarr:\n    image: ghcr.io/aquantumofdonuts/mixarr:latest\n    container_name: mixarr\n    ports:\n      - \"3443:443\"  # HTTPS Access\n      - \"3010:3010\" # Web UI (HTTP)\n    volumes:\n      - /path/to/data:/data\n    environment:\n      - SESSION_SECRET=replace_with_long_random_string\n      - BASE_URL=https://YOUR_IP:3443\n    restart: unless-stopped\n```\n\nRun it:\n```bash\ndocker compose up -d\n```\n\n### Docker Run\n\n```bash\ndocker run -d \\\n  --name mixarr \\\n  -p 3443:443 \\\n  -p 3010:3010 \\\n  -v ~/mixarr-data:/data \\\n  -e SESSION_SECRET=\"$(openssl rand -hex 32)\" \\\n  -e BASE_URL=\"https://YOUR-IP:3443\" \\\n  ghcr.io/aquantumofdonuts/mixarr:latest\n```\n\n\u003e **Note**: Access the web interface at **`https://YOUR-IP:3443`**.\n\n---\n\n## Deployment Options\n\nMixarr offers two Docker image variants:\n\n| Image | Size | Contents | Best For |\n|-------|------|----------|----------|\n| `mixarr:latest` | Full stack (API, Web, MariaDB, Redis, Caddy) | Docker, single-container setups |\n| `mixarr:slim` | API + Web only | Production, Kubernetes, existing infrastructure |\n\n### Option 1: Unified Image (Default)\n\nEverything in one container - the examples above use this approach.\n\n### Option 2: Slim Image with Compose\n\nSeparate containers for better reliability and scalability:\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/aquantumofdonuts/mixarr/prod/docker-compose.slim.yml -o docker-compose.yml\ndocker compose up -d\n```\n\n### Option 3: Slim Image with Existing Infrastructure\n\nFor users with existing MariaDB/MySQL and Redis:\n\n```bash\ndocker run -d \\\n  --name mixarr \\\n  -p 3000:3000 -p 3005:3005 \\\n  -e DATABASE_URL=mysql://user:pass@your-db:3306/mixarr \\\n  -e REDIS_URL=redis://your-redis:6379 \\\n  -e SESSION_SECRET=your-secret-here \\\n  ghcr.io/aquantumofdonuts/mixarr:slim\n```\n\n\n---\n## Post-Installation Setup\n\n1.  **Create Admin Account**: Follow the prompts on first launch.\n2.  **Global Settings**: Go to **Settings \u003e Global** and ensure `Base URL` is set correctly (e.g., `https://192.168.1.10:3443`). This is critical for OAuth callbacks.\n3.  **Connect Lidarr**: Go to **Settings \u003e Connections** and add your Lidarr URL and API Key.\n4.  **Add Services**: Connect Spotify, Tidal, or Last.fm to start discovering music.\n\n---\n\n## Features\n\n*   **56 Subscription Types** across 12 services — playlists, charts, tags, recommendations, user libraries, followed artists, and more. Set them to run on a schedule and forget about it.\n*   **Review Queue** — discovered artists land in a queue for approval before anything gets added to Lidarr.\n*   **SkyHook Cache Warming** — pre-warms MusicBrainz metadata so Lidarr adds don't fail with 503 errors.\n*   **Multi-Service Support**:\n    *   **Spotify** — playlists, new releases, saved albums/tracks, followed artists, top artists, recommendations, search\n    *   **TIDAL** — playlists, favorites, followed artists, discovery mixes, new arrivals\n    *   **Last.fm** — charts, tags, similar artists, user library, weekly charts, related tags\n    *   **ListenBrainz** — top listens, similar users, recommendations, fresh releases, weekly jams, playlists, radio\n    *   **Deezer** — playlists, charts, editorial picks, user favorites, flow, recommendations\n    *   **Discogs** — collection, wantlist\n    *   **Plex \u0026 Jellyfin** — recommendations based on listening history\n    *   **MusicBrainz** — tag-based discovery\n    *   **Bandcamp** — tag and search discovery\n*   **AI Recommendations** — OpenAI, Anthropic, Google Gemini, or local Ollama. Analyzes your library and suggests what's missing.\n*   **Library Health** — tools to analyze and repair your Lidarr library. Fix missing metadata with one click.\n\n---\n\n## AI Configuration\n\n### Using Ollama or Custom Providers\n\nMixarr supports any OpenAI-compatible API endpoint, plus native Anthropic and Google Gemini:\n\n| Provider | Base URL | Model Example |\n|----------|----------|---------------|\n| OpenAI (default) | _(leave empty)_ | `gpt-4o-mini` |\n| Anthropic | _(leave empty, select Anthropic provider)_ | `claude-sonnet-4-20250514` |\n| Google Gemini | _(leave empty, select Gemini provider)_ | `gemini-2.0-flash` |\n| Ollama | `http://localhost:11434/v1` | `llama3.2` |\n| LiteLLM | `http://localhost:4000/v1` | `gpt-4` |\n| OpenRouter | `https://openrouter.ai/api/v1` | `meta-llama/llama-3-8b` |\n\n**Note**: For local Ollama, no API key is required.\n\nConfigure these in **Settings → AI**.\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `SESSION_SECRET` | **Required.** Random string for session encryption. | - |\n| `BASE_URL` | **Required.** The full URL to access Mixarr. Used for OAuth redirects. | - |\n| `FRONTEND_URL` | Optional. If behind a reverse proxy, set this to the public URL. | - |\n| `TZ` | Timezone for scheduled tasks. | `UTC` |\n\n### Ports\n\n| Port | Protocol | Usage |\n|------|----------|-------|\n| `3443` | HTTPS | **Primary Access**. Secured via internal Caddy. |\n| `3010` | HTTP | Direct Node.js access (useful for reverse proxies like Traefik/Nginx). |\n\n### Volumes\n\n| Path | Description |\n|------|-------------|\n| `/data` | Stores MariaDB database, Redis persistence, Caddy certs, and logs. |\n\n---\n\n## Development\n\nTo build from source:\n\n```bash\ngit clone https://github.com/aquantumofdonuts/mixarr.git\ncd mixarr\ncp .env.example .env\nnpm install\ndocker compose -f docker-compose.dev.yml up -d\nnpm run dev\n```\n\nThe stack includes Next.js (Frontend), Express (API), Redis (Queue), and MySQL (Dev DB).\n\n---\n\n## License\n\nGPLv3. See [LICENSE](LICENSE) for details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faquantumofdonuts%2Fmixarr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faquantumofdonuts%2Fmixarr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faquantumofdonuts%2Fmixarr/lists"}