{"id":48403707,"url":"https://github.com/refringe/huntarr2","last_synced_at":"2026-04-06T02:25:24.802Z","repository":{"id":341921418,"uuid":"1172038060","full_name":"refringe/huntarr2","owner":"refringe","description":"Tell your *arr apps to search for quality upgrades","archived":false,"fork":false,"pushed_at":"2026-03-03T22:30:29.000Z","size":251,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-04T02:08:57.909Z","etag":null,"topics":["arr","huntarr","lidarr","radarr","sonarr","whisparr"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/refringe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/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},"funding":{"github":["refringe"],"ko_fi":"refringe"}},"created_at":"2026-03-03T22:04:47.000Z","updated_at":"2026-03-03T22:30:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/refringe/huntarr2","commit_stats":null,"previous_names":["refringe/huntarr2"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/refringe/huntarr2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/refringe%2Fhuntarr2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/refringe%2Fhuntarr2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/refringe%2Fhuntarr2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/refringe%2Fhuntarr2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/refringe","download_url":"https://codeload.github.com/refringe/huntarr2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/refringe%2Fhuntarr2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31457040,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T21:22:52.476Z","status":"online","status_checked_at":"2026-04-06T02:00:07.287Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["arr","huntarr","lidarr","radarr","sonarr","whisparr"],"created_at":"2026-04-06T02:25:24.114Z","updated_at":"2026-04-06T02:25:24.785Z","avatar_url":"https://github.com/refringe.png","language":"Go","funding_links":["https://github.com/sponsors/refringe","https://ko-fi.com/refringe"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/refringe/huntarr2/main/.github/images/banner.png\" alt=\"Huntarr2\" /\u003e\n\u003c/p\u003e\n\n[![Build](https://github.com/refringe/huntarr2/actions/workflows/tests.yml/badge.svg)](https://github.com/refringe/huntarr2/actions/workflows/tests.yml)\n[![Go](https://img.shields.io/badge/Go-1.26-00ADD8.svg)](https://go.dev/)\n[![Licence](https://img.shields.io/badge/licence-AGPL--3.0-blue.svg)](LICENSE)\n\nHuntarr2 tells your \\*arr apps to search for missing items and quality upgrades so you don't have to do it manually.\n\nIt connects to Sonarr, Radarr, Lidarr, and Whisparr, finds monitored items with no file and items that haven't reached their quality cutoff, then triggers searches for them on a schedule. That's it. There is a web UI for configuration and viewing what it's doing.\n\n## How it works\n\n1. You add your \\*arr instances (URL + API key) through the web UI.\n2. A scheduler runs on a configurable tick interval (default 30 seconds).\n3. Each tick, it checks your \\*arr libraries for monitored items with no file and items below their quality cutoff.\n4. It tells the \\*arr app to search for those items (missing first downloads and quality upgrades).\n5. Per-item cooldowns prevent the same item from being searched repeatedly.\n6. The scheduler adapts its pace to avoid hammering the \\*arr APIs.\n\nHuntarr2 does not download anything itself. It just tells your existing \\*arr apps to look for items you are missing and better versions of what you already have.\n\n*And no, it doesn't leak your API keys. ;)*\n\n## Running it\n\nHuntarr2 is meant to run as a Docker container alongside your \\*arr stack.\n\n```bash\ndocker compose up -d\n```\n\nThe web UI will be at `http://localhost:9706`.\n\nOn first start, an encryption key is generated automatically and saved to `/config/encryption.key` inside the container. This key encrypts your \\*arr API keys in the database. Keep the `/config` volume intact or you will lose access to stored API keys.\n\n### Docker Compose\n\n```yaml\nservices:\n  huntarr2:\n    image: ghcr.io/refringe/huntarr2:latest\n    ports:\n      - '9706:9706'\n    volumes:\n      - huntarr2_config:/config\n    environment:\n      PUID: 1000\n      PGID: 1000\n      TZ: Etc/UTC\n    restart: unless-stopped\n\nvolumes:\n  huntarr2_config:\n```\n\n### Unraid / Portainer / Synology / TrueNAS\n\nSet the environment variables through your platform's UI. The container image has sensible defaults for everything. You just need to map `/config` to persistent storage and expose port `9706`.\n\n## Environment variables\n\n| Variable | Default | What it does |\n|---|---|---|\n| `PORT` | `9706` | HTTP listen port |\n| `LOG_LEVEL` | `info` | `debug`, `info`, `warn`, or `error` |\n| `DATABASE_PATH` | `/config/huntarr2.db` | Path to the SQLite database file |\n| `SCHEDULER_TICK_SECS` | `30` | Seconds between scheduler ticks (minimum 5) |\n| `ENCRYPTION_KEY` | auto-generated | 32-byte key as 64-char hex or base64. Auto-generated and persisted in `/config/encryption.key` if not set. Generate your own with `openssl rand -hex 32` |\n| `AUTH_USERNAME` | *(empty)* | HTTP Basic Auth username. Set both username and password to enable |\n| `AUTH_PASSWORD` | *(empty)* | HTTP Basic Auth password |\n| `PUID` | `1000` | UID to run as inside the container |\n| `PGID` | `1000` | GID to run as inside the container |\n| `TZ` | `UTC` | Container timezone |\n\n## Authentication\n\nOptional. Set both `AUTH_USERNAME` and `AUTH_PASSWORD` to require HTTP Basic Authentication on all routes except the health check (`/api/health`). Leave both empty to run without authentication.\n\nIf you are exposing Huntarr2 to the internet, put it behind a reverse proxy with HTTPS.\n\n### Reverse proxy examples\n\n**nginx:**\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name huntarr.example.com;\n\n    location / {\n        proxy_pass http://127.0.0.1:9706;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n```\n\n**Caddy:**\n\n```\nhuntarr.example.com {\n    reverse_proxy 127.0.0.1:9706\n}\n```\n\n## Building from source\n\nRequires Go 1.26 or later.\n\n```bash\nmake build       # produces bin/huntarr2\nmake test        # runs tests with the race detector\nmake lint        # runs golangci-lint\nmake fmt-check   # checks gofmt formatting\n```\n\nFor local development with Docker:\n\n```bash\ndocker compose down \u0026\u0026 make docker-build \u0026\u0026 make docker-up\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](.github/CONTRIBUTING.md).\n\n## Licence\n\n[AGPL-3.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frefringe%2Fhuntarr2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frefringe%2Fhuntarr2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frefringe%2Fhuntarr2/lists"}