{"id":47684261,"url":"https://github.com/arediss/oscarr","last_synced_at":"2026-05-10T04:42:44.975Z","repository":{"id":346447018,"uuid":"1189650901","full_name":"arediss/Oscarr","owner":"arediss","description":"A modern, self-hosted media request \u0026 management platform. Radarr \u0026 Sonarr are the source of truth. Oscarr is the interface.","archived":false,"fork":false,"pushed_at":"2026-04-23T13:58:35.000Z","size":9064,"stargazers_count":25,"open_issues_count":8,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-23T14:31:19.069Z","etag":null,"topics":["arr","plex","plex-media-server","radarr","sonarr","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arediss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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":"2026-03-23T14:33:15.000Z","updated_at":"2026-04-19T20:15:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/arediss/Oscarr","commit_stats":null,"previous_names":["arediss/oscarr"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/arediss/Oscarr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arediss%2FOscarr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arediss%2FOscarr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arediss%2FOscarr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arediss%2FOscarr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arediss","download_url":"https://codeload.github.com/arediss/Oscarr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arediss%2FOscarr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32274987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"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":["arr","plex","plex-media-server","radarr","sonarr","typescript"],"created_at":"2026-04-02T14:31:22.889Z","updated_at":"2026-05-10T04:42:44.961Z","avatar_url":"https://github.com/arediss.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/logo.png\" width=\"120\" alt=\"Oscarr\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eOscarr\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  A modern, self-hosted media request \u0026amp; management platform.\n  \u003cbr /\u003e\n  Radarr \u0026amp; Sonarr are the source of truth. Oscarr is the interface.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/version-0.8.1-6366f1?style=flat-square\" alt=\"Version\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-green?style=flat-square\" alt=\"License\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat-square\" alt=\"PRs Welcome\" /\u003e\n  \u003ca href=\"https://discord.gg/BKMaWhVCRr\"\u003e\u003cimg src=\"https://img.shields.io/badge/Discord-join-5865F2?style=flat-square\u0026amp;logo=discord\u0026amp;logoColor=white\" alt=\"Discord\" /\u003e\u003c/a\u003e\n  \u003cbr /\u003e\n  \u003ca href=\"https://sonarcloud.io/summary/overall?id=arediss_Oscarr\"\u003e\u003cimg src=\"https://sonarcloud.io/api/project_badges/measure?project=arediss_Oscarr\u0026amp;metric=alert_status\" alt=\"Quality Gate\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://sonarcloud.io/summary/overall?id=arediss_Oscarr\"\u003e\u003cimg src=\"https://sonarcloud.io/api/project_badges/measure?project=arediss_Oscarr\u0026amp;metric=security_rating\" alt=\"Security Rating\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://sonarcloud.io/summary/overall?id=arediss_Oscarr\"\u003e\u003cimg src=\"https://sonarcloud.io/api/project_badges/measure?project=arediss_Oscarr\u0026amp;metric=reliability_rating\" alt=\"Reliability Rating\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://sonarcloud.io/summary/overall?id=arediss_Oscarr\"\u003e\u003cimg src=\"https://sonarcloud.io/api/project_badges/measure?project=arediss_Oscarr\u0026amp;metric=sqale_rating\" alt=\"Maintainability Rating\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/preview.jpg\" alt=\"Oscarr Preview\" width=\"900\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#the-idea\"\u003eThe idea\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#core-capabilities\"\u003eCore capabilities\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#seerr-compatible-api\"\u003eSeerr API\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#plugins\"\u003ePlugins\u003c/a\u003e \u0026middot;\n  \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n**Oscarr** is a lightweight, plugin-first media request interface for **Radarr** and **Sonarr**.\n\nIt gives your users a clean way to request movies and shows without exposing the *arr admin panels. Authentication, routing, quality, notifications, and a polished UI are baked into the core — the rest grows through plugins.\n\nIf Seerr / Overseerr / Jellyseerr already fits your setup, keep using it. Oscarr is for people who want something more modular, hackable, and easier to extend around their own stack.\n\n---\n\n## The idea\n\nOscarr sits on top of your existing media stack.\n\n- Your users get a simple request interface.\n- Your Radarr/Sonarr instances stay central to the request, download, and import workflow.\n- Your setup grows through plugins instead of stuffing every feature into the core.\n\nThe philosophy:\n\n- keep the core lean;\n- avoid the \"all-in-one\" trap;\n- let plugins handle specific integrations and custom workflows;\n- make the app easy to self-host, customise, and extend.\n\n---\n\n## Core capabilities\n\nWhat ships in the core, no plugin needed:\n\n- **Multi-instance Radarr \u0026 Sonarr** with priority-based folder rules (genre, language, country, user, role, keyword tag) so a 4K library, an anime Sonarr and a regional Radarr coexist naturally.\n- **Quality selection for users** — SD / HD / 4K / 4K HDR mapped to specific *arr profiles per service, with role-based gating.\n- **Multi-provider auth** — Email + password, Plex OAuth, Jellyfin, Emby, Discord. Each provider toggleable independently.\n- **AES-256-GCM encryption at rest** for stored service credentials. Master key derived from the `OSCARR_SECRET_KEY` env var via HKDF-SHA256.\n- **Per-app API keys** with revocation (Admin → Access → API Keys) so each external integration gets its own scoped credential.\n- **Seerr-compatible API** at `/api/v1/*` so existing Seerr-aware tools can talk to Oscarr without a custom integration. See below.\n- **Customisable admin dashboard** with drag-and-drop widgets and multi-tab layout.\n- **Notification matrix** (Discord, Telegram, Email) per event type, plus VAPID web push.\n- **Backups** with HMAC-signed archives and a re-auth gate before restore.\n- **i18n** — EN + FR shipped, more locales contribution-friendly.\n- **PWA** — installable, offline-tolerant.\n\n---\n\n## Seerr-compatible API\n\nOscarr exposes an experimental **Seerr-compatible API layer** at `/api/v1/*`, so third-party tools that already speak Overseerr / Jellyseerr / Seerr can point to Oscarr **without** waiting for a native Oscarr integration.\n\nTested clients:\n\n- **Homarr** (dashboard widget integration)\n- **Doplarr** (Discord request bot)\n\nEach external app gets its own revokable API key from *Admin → Access → API Keys*. Endpoints not yet implemented return a clean `501 Not Implemented` so clients degrade gracefully instead of hanging.\n\n\u003e Compatibility is best-effort and limited to the endpoints third-party clients commonly call (status, auth/me, search, request, media, movie/tv, settings, user). Oscarr is **not affiliated** with Overseerr, Jellyseerr or Seerr — this is interoperability, not a clone.\n\n---\n\n## Installation\n\n### Quick Start with Docker\n\nGenerate a secret key (32-byte hex) — keep it safe, lose it = stored credentials unrecoverable:\n\n```bash\nnode -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\"\n```\n\n```yaml\nservices:\n  oscarr:\n    image: ghcr.io/arediss/oscarr:latest\n    container_name: oscarr\n    restart: unless-stopped\n    network_mode: host\n    volumes:\n      - oscarr-data:/data\n    environment:\n      - JWT_SECRET=your_random_jwt_secret\n      - OSCARR_SECRET_KEY=your_64_hex_chars_key\n\nvolumes:\n  oscarr-data:\n```\n\n```bash\ndocker compose up -d\n```\n\nOpen `http://localhost:3456` and follow the setup wizard.\n\n\u003e `network_mode: host` lets Oscarr reach Radarr/Sonarr/Plex on the local network. If `OSCARR_SECRET_KEY` is missing or malformed, the container exits at boot with a friendly message + a freshly-generated key you can copy-paste.\n\u003e\n\u003e **macOS Docker Desktop caveat:** containers can't reach LAN IPs even with `--network host`. Use [Colima](https://github.com/abiosoft/colima) locally, or deploy to a Linux host for end-to-end testing.\n\n### Manual / development install\n\nSee [`docs/installation.md`](docs/installation.md) for bare-metal, dev mode, full env-var reference, and the project structure walkthrough.\n\n---\n\n## Plugins\n\nPlugins are optional. The base app works out of the box: connect Radarr/Sonarr, configure your users, request media.\n\nPlugins exist so Oscarr can grow around your own setup — think browser extensions: install what you need, ignore the rest.\n\n### Featured plugins\n\n| Plugin | What it does |\n|---|---|\n| **Leonarr** | Discord bridge: link accounts, search TMDB, submit requests with slash commands, DMs when media is ready. |\n| **Subscription** | Per-user subscription tiers with automatic role changes and expiration notifications. |\n| **Communication** | Broadcast markdown announcements with scheduled publishing, role targeting, severity levels. |\n| **qBittorrent Manager** | View qBittorrent queue and transfer stats inside Oscarr. |\n| **Radarr Manager** | Library browser, quality monitoring, releases, analytics, file management. |\n| **Sonarr Manager** | Series browser, season/episode drill-down, releases, analytics, file management. |\n| **Support** | Ticket system extracted from the core in 0.8.0 — users open tickets, admins reply. |\n\nDiscover and install from *Admin → Plugins → Discover*. Each install shows the manifest's requested capabilities so you can review what the plugin is allowed to do.\n\nBuilding a plugin? See [`docs/plugins.md`](docs/plugins.md).\n\n---\n\n## Verifying image provenance\n\nPublished `ghcr.io/arediss/oscarr` images are keyless-signed by the GitHub Actions release workflow (Sigstore / cosign). Each signed manifest also carries an SPDX SBOM.\n\n```bash\ncosign verify ghcr.io/arediss/oscarr:latest \\\n  --certificate-identity-regexp 'https://github.com/arediss/Oscarr/.github/workflows/release.yml@.*' \\\n  --certificate-oidc-issuer https://token.actions.githubusercontent.com\n```\n\nAny image without a valid signature from this workflow is not an official Oscarr release.\n\n---\n\n## Contributing\n\nContributions welcome — bug reports, features, plugins, real-stack testing.\n\nBefore opening a large PR, please open an issue first so we can discuss the direction.\n\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) — dev setup, conventions, PR expectations\n- [`CONTRIBUTORS.md`](CONTRIBUTORS.md) — everyone who's shipped code to Oscarr\n\n\u003e **Development workflow** — This project uses [Claude Code](https://claude.com/claude-code) as a dev assistant for code reviews, security audits, brainstorming, documentation, and issue/PR management. All architecture decisions and implementation are made by the maintainers — Claude serves as a quality and productivity tool, much like a linter or a CI pipeline.\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farediss%2Foscarr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farediss%2Foscarr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farediss%2Foscarr/lists"}