5.2 KiB
5.2 KiB
Subscribarr
Lightweight web UI for Sonarr/Radarr subscriptions with Jellyfin login, calendar, and flexible notifications via Email, ntfy, and Apprise.
Features
- Sign in with Jellyfin (no separate user store)
- Sonarr/Radarr‑style calendar (upcoming episodes/movies)
- Subscribe/unsubscribe from the UI (series & movies)
- Admin overview of all users’ subscriptions with posters
- Per‑user notification channels:
- Email (SMTP)
- ntfy (Bearer token or Basic Auth)
- Apprise (Discord, Gotify, Pushover, Webhooks, and many more)
- Docker‑ready; environment‑driven security (ALLOWED_HOSTS, CSRF, proxy)
Screenshots
Quickstart (Docker Compose)
- Ensure the lockfile matches your Pipfile (e.g., after adding packages):
git clone https://github.com/jschaufuss/subscribarr.git
cd subscribarr
- run the container:
docker compose up -d
- Open the app and complete the first‑run setup (Jellyfin + Arr URLs/keys).
http://127.0.0.1:8081
Important environment variables (examples):
DJANGO_ALLOWED_HOSTS=subscribarr.example.com,localhost,127.0.0.1
DJANGO_CSRF_TRUSTED_ORIGINS=https://subscribarr.example.com,http://subscribarr.example.com
- Reverse proxy/TLS:
USE_X_FORWARDED_HOST=true
DJANGO_SECURE_PROXY_SSL_HEADER=true
DJANGO_CSRF_COOKIE_SECURE=true
DJANGO_SESSION_COOKIE_SECURE=true
Note:
DJANGO_CSRF_TRUSTED_ORIGINS
must include the exact scheme+host (+port if used).
In‑App Configuration
- Settings → Jellyfin: server URL + API key
- Settings →Sonarr/Radarr: base URLs + API keys (with “Test” button)
- Settings →Mail server: SMTP (host/port/TLS/SSL/user/password/from)
- Settings →Notifications:
- ntfy: server URL, default topic, Basic Auth or Bearer token
- Apprise: default URL(s) (one per line)
- Profile (per user):
- Choose channel: Email, ntfy, or Apprise
- ntfy topic (optional, overrides default)
- Apprise URL(s) (optional, appended to defaults)
ntfy Notes
- Server URL: e.g.,
https://ntfy.sh
or your own server - Auth:
- Bearer token (Authorization header)
- Basic Auth (username/password)
- Topic selection:
- Per user in the profile, or a global default topic in Settings
Apprise Notes
Provide one or more destination URLs (one per line), e.g.:
gotify://TOKEN@gotify.example.com/
discord://webhook_id/webhook_token
mailto://user:pass@smtp.example.com
pover://user@token
json://webhook.example.com/path
User URLs are added in addition to global defaults.
Notification Logic
- Series: on the air date, Subscribarr checks Sonarr for the episode and only notifies when episode is downloaded and present.
- Movies: similar via Radarr when movie is downloaded and present.
- Duplicate suppression: entries are recorded in
SentNotification
per user/title/day; if sending fails, no record is stored. - Fallback: if ntfy/Apprise fail, Subscribarr falls back to Email (when configured).
Jobs / Manual Trigger
- Periodic check via management command (e.g., cron):
docker exec -it subscribarr python manage.py check_new_media
Security & Proxy
- Set
DJANGO_ALLOWED_HOSTS
to your hostnames. - Include all used origins in
DJANGO_CSRF_TRUSTED_ORIGINS
(http/https and port where applicable). - Behind a reverse proxy with TLS: enable
USE_X_FORWARDED_HOST
,DJANGO_SECURE_PROXY_SSL_HEADER
, and secure cookie flags.
Tech Stack
- Backend: Django 5 + DRF
- Integrations: Sonarr/Radarr (API v3)
- Auth: Jellyfin
- Notifications: SMTP, ntfy (HTTP), Apprise
- Frontend: Templates + FullCalendar
- DB: SQLite (default)
License
MIT (see LICENSE
).