An open API service indexing awesome lists of open source software.

https://github.com/arediss/oscarr

A modern, self-hosted media request & management platform. Radarr & Sonarr are the source of truth. Oscarr is the interface.
https://github.com/arediss/oscarr

arr plex plex-media-server radarr sonarr typescript

Last synced: about 1 month ago
JSON representation

A modern, self-hosted media request & management platform. Radarr & Sonarr are the source of truth. Oscarr is the interface.

Awesome Lists containing this project

README

          


Oscarr

Oscarr


A modern, self-hosted media request & management platform.


Radarr & Sonarr are the source of truth. Oscarr is the interface.


Version
License
PRs Welcome
Discord


Quality Gate
Security Rating
Reliability Rating
Maintainability Rating


Oscarr Preview


The idea ·
Core capabilities ·
Seerr API ·
Installation ·
Plugins ·
Contributing

---

**Oscarr** is a lightweight, plugin-first media request interface for **Radarr** and **Sonarr**.

It 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.

If 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.

---

## The idea

Oscarr sits on top of your existing media stack.

- Your users get a simple request interface.
- Your Radarr/Sonarr instances stay central to the request, download, and import workflow.
- Your setup grows through plugins instead of stuffing every feature into the core.

The philosophy:

- keep the core lean;
- avoid the "all-in-one" trap;
- let plugins handle specific integrations and custom workflows;
- make the app easy to self-host, customise, and extend.

---

## Core capabilities

What ships in the core, no plugin needed:

- **Multi-instance Radarr & 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.
- **Quality selection for users** — SD / HD / 4K / 4K HDR mapped to specific *arr profiles per service, with role-based gating.
- **Multi-provider auth** — Email + password, Plex OAuth, Jellyfin, Emby, Discord. Each provider toggleable independently.
- **AES-256-GCM encryption at rest** for stored service credentials. Master key derived from the `OSCARR_SECRET_KEY` env var via HKDF-SHA256.
- **Per-app API keys** with revocation (Admin → Access → API Keys) so each external integration gets its own scoped credential.
- **Seerr-compatible API** at `/api/v1/*` so existing Seerr-aware tools can talk to Oscarr without a custom integration. See below.
- **Customisable admin dashboard** with drag-and-drop widgets and multi-tab layout.
- **Notification matrix** (Discord, Telegram, Email) per event type, plus VAPID web push.
- **Backups** with HMAC-signed archives and a re-auth gate before restore.
- **i18n** — EN + FR shipped, more locales contribution-friendly.
- **PWA** — installable, offline-tolerant.

---

## Seerr-compatible API

Oscarr 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.

Tested clients:

- **Homarr** (dashboard widget integration)
- **Doplarr** (Discord request bot)

Each 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.

> 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.

---

## Installation

### Quick Start with Docker

Generate a secret key (32-byte hex) — keep it safe, lose it = stored credentials unrecoverable:

```bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
```

```yaml
services:
oscarr:
image: ghcr.io/arediss/oscarr:latest
container_name: oscarr
restart: unless-stopped
network_mode: host
volumes:
- oscarr-data:/data
environment:
- JWT_SECRET=your_random_jwt_secret
- OSCARR_SECRET_KEY=your_64_hex_chars_key

volumes:
oscarr-data:
```

```bash
docker compose up -d
```

Open `http://localhost:3456` and follow the setup wizard.

> `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.
>
> **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.

### Manual / development install

See [`docs/installation.md`](docs/installation.md) for bare-metal, dev mode, full env-var reference, and the project structure walkthrough.

---

## Plugins

Plugins are optional. The base app works out of the box: connect Radarr/Sonarr, configure your users, request media.

Plugins exist so Oscarr can grow around your own setup — think browser extensions: install what you need, ignore the rest.

### Featured plugins

| Plugin | What it does |
|---|---|
| **Leonarr** | Discord bridge: link accounts, search TMDB, submit requests with slash commands, DMs when media is ready. |
| **Subscription** | Per-user subscription tiers with automatic role changes and expiration notifications. |
| **Communication** | Broadcast markdown announcements with scheduled publishing, role targeting, severity levels. |
| **qBittorrent Manager** | View qBittorrent queue and transfer stats inside Oscarr. |
| **Radarr Manager** | Library browser, quality monitoring, releases, analytics, file management. |
| **Sonarr Manager** | Series browser, season/episode drill-down, releases, analytics, file management. |
| **Support** | Ticket system extracted from the core in 0.8.0 — users open tickets, admins reply. |

Discover 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.

Building a plugin? See [`docs/plugins.md`](docs/plugins.md).

---

## Verifying image provenance

Published `ghcr.io/arediss/oscarr` images are keyless-signed by the GitHub Actions release workflow (Sigstore / cosign). Each signed manifest also carries an SPDX SBOM.

```bash
cosign verify ghcr.io/arediss/oscarr:latest \
--certificate-identity-regexp 'https://github.com/arediss/Oscarr/.github/workflows/release.yml@.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
```

Any image without a valid signature from this workflow is not an official Oscarr release.

---

## Contributing

Contributions welcome — bug reports, features, plugins, real-stack testing.

Before opening a large PR, please open an issue first so we can discuss the direction.

- [`CONTRIBUTING.md`](CONTRIBUTING.md) — dev setup, conventions, PR expectations
- [`CONTRIBUTORS.md`](CONTRIBUTORS.md) — everyone who's shipped code to Oscarr

> **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.

---

## License

MIT