Nexview is a self-hosted media discovery dashboard for a household — family, flatmates, a circle of friends. It shows new releases from TMDB, marks what is already in your library, and hands requests to Radarr (movies) and Sonarr (shows). Everyone gets their own account, with roles, approvals and quotas.
It downloads nothing itself and stores no media. It is the front door to a setup you already run — it does not replace any part of it.
Without a TMDB key Nexview starts with sample data, so you can look around before deciding anything.
The home page. What each person marks as a favourite shapes what they get suggested.
Requesting a title, and the same installation seen by a child.
The full tour is on the project site — every area with its own page and more screenshots.
Finding something
- Separate areas for movies and shows, each with its own logic
- Filter by period, language, region, genre, rating and studio; cards or list
- Detail pages with cast photos, directing and writing credits, studios, keywords, similar titles and the trailer in a window
- Ratings from IMDb, Rotten Tomatoes and Metacritic on the title itself
- Where a title is currently streaming in your region, split into subscription, free, rent and buy (data from JustWatch)
- Browse people — actors, directors, writers — and mark them as favourites; your favourites, titles and people alike, shape what gets suggested on your home page
- A release calendar, one week at a time: your own titles kept apart from new releases, with cinema and digital dates read for your region
Requesting
- Pick quality profile and target folder, or let the approver pick them instead
- Request whole shows or single seasons, optionally following future ones
- Optionally a second Radarr and Sonarr instance for 4K: the same title once in 1080p and once in 4K, with separate folders, profiles and per-user permissions
- The state sits on the poster — not requested, requested, searching, already downloaded, in library, blocked — and updates itself as Radarr and Sonarr work
Who may do what
- Three roles: administrator, approver, user. An approver decides on requests without ever getting near your API keys
- Approve automatically or by hand, set separately for movies, shows and 4K
- Quotas per day, week or month — or, instead of counting titles, by disk space in gigabytes, which is the thing that actually runs out
- Child accounts: a parent creates a login for their child, with an age, a set of categories and a language. The child gets a separate, simpler app and does not request but wishes — nothing happens until the parent approves, and the request then runs in the parent's name
- A block list for titles that should stay out: visible, but not requestable
With a media server
Plex is optional. Connect one and four things arrive:
- Sign in with a Plex account, checked against your server — no second password
- Titles already in the library are recognised even if they never came through Radarr or Sonarr, and cannot be requested twice
- Your Plex watchlist appears inside the catalogue, requestable with one click. Nothing happens on its own; every title takes a click
- What each person has already watched carries a marker, and everyone sees only their own
Staying informed
- A bell in the app, and per-event e-mail if you want it
- Seven notification channels for the installation as a whole: ntfy, Gotify, Telegram, Discord, a plain webhook, Apprise and e-mail. Each inbox picks its own events, language and urgency
- A ticket centre where people report problems and get an answer, with state and history
- Statistics and an error log for the administrator
And
- German and English throughout, including titles and descriptions
- A dark interface that works on a phone
- Frontend: React 19, Vite, Tailwind CSS 4
- Backend: Python, FastAPI
- Database: SQLite — accounts, settings and requests only, never media files
- Sessions: JWT, passwords hashed with bcrypt
- Deployment: a single Docker container serving both the API and the interface
Nexview runs as one container: FastAPI serves the API and the built interface together. No extra web server is needed.
The image is on the GitHub Container Registry and is built for Intel/AMD and ARM, so nothing has to be compiled:
docker compose up -dNexview is then reachable at http://<your-server>:5173.
To build from source instead, replace image: ghcr.io/derkezorm/nexview:latest in
docker-compose.yml with build: . and add --build when starting.
Everything that matters lives in the directory mapped to /data:
| File | Contents |
|---|---|
nexview.db |
accounts, requests, feedback, settings |
secret.key |
the key your stored API keys are encrypted with |
avatars/ |
profile pictures |
logs/ |
error log |
secret.key belongs with the database. Without it the stored TMDB, Radarr, Sonarr
and SMTP credentials cannot be decrypted. Back both up together — and never put that
backup in a public repository.
In Container Manager under Project → Create, pick the project folder and use the
docker-compose.yml. Two adjustments are worth making:
ports:
- "5173:8000" # change the left number if 5173 is taken
volumes:
- /volume1/docker/nexview/data:/dataA fixed path instead of ./data makes backing up through Hyper Backup easier.
You do not need to sort out permissions on that folder — the container sets them on
start. If you want the files to belong to a particular user, put their numbers in
PUID/PGID (find them over SSH with id username).
docker compose pull
docker compose up -dThe database is kept. Nexview brings it up to date itself on start: missing tables,
columns and indexes are added. Before anything is changed it writes a copy to
/data/sicherungen/, keeping the five most recent — so if something does go wrong, the
previous state is still there.
Nexview follows the usual MAJOR.MINOR.PATCH numbering:
| Image | Contents |
|---|---|
ghcr.io/derkezorm/nexview:latest |
the latest released version — the recommendation |
ghcr.io/derkezorm/nexview:0.16.1 |
exactly that one version, never changes |
ghcr.io/derkezorm/nexview:main |
the current development state, may be broken |
The running version is in the footer and in detail under About Nexview, which also reports when a newer one exists. For that it asks GitHub at most once a day. The check sends nothing out of Nexview and can be switched off on the same page.
Every setting is optional — Nexview runs without a configuration file. For production,
copy .env.example to .env:
| Variable | Meaning |
|---|---|
NEXVIEW_SECRET_KEY |
Secret for sessions and for encrypting the API keys. Generated automatically and stored in data/secret.key if unset. |
NEXVIEW_DATA_DIR |
Directory for the database and key file (default: ./data) |
NEXVIEW_ACCESS_TOKEN_MINUTES |
How long a sign-in stays valid (default: 30) |
NEXVIEW_REFRESH_TOKEN_DAYS |
How long you stay signed in (default: 30) |
NEXVIEW_CORS_ORIGINS |
Allowed origins in development |
NEXVIEW_STATIC_DIR |
Folder with the built frontend (the container sets this itself) |
NEXVIEW_LOG_LEVEL |
Overrides the log level chosen in the app (quiet, normal, detailed, trace). Emergency exit for when Nexview does not start. |
No TMDB, Radarr or Sonarr keys belong in .env — you enter those in the app.
Requirements: Python 3.12+ and Node.js 20+
cd backend
python -m venv .venv
.venv/Scripts/activate # Linux/macOS: source .venv/bin/activate
pip install -r requirements-dev.txt
python -m uvicorn app.main:app --reload --port 8000The API then runs on http://127.0.0.1:8000, with interactive documentation at
http://127.0.0.1:8000/docs.
In a second terminal:
cd frontend
npm install
npm run devThe interface opens at http://localhost:5173. Requests to /api are forwarded to the
backend automatically.
A one-time wizard appears on first launch:
| Step | Required | For |
|---|---|---|
| Account | yes | administrator with username, e-mail address and password |
| Picture | no | profile picture — without one, Nexview shows initials |
| TMDB | no | titles, posters, descriptions. Without a key you get sample data |
| Radarr | no | movies. Without Radarr, movies cannot be requested |
| Sonarr | no | shows. Without Sonarr, no show requests |
| Address | yes | the address Nexview is reachable at; it goes into every link |
| yes | SMTP server for invitations and password recovery |
The last two cannot be skipped, and Continue only unlocks after a successful connection test. The reason: straight afterwards Nexview sends you a confirmation mail — and without a confirmed address you cannot get back in. A mail server that does not work would leave a fresh installation unusable.
If the confirmation never arrives, the sign-in page helps: with the right password it offers Resend confirmation and Correct address, so a typo is not fatal.
Further accounts come from invitations — or through the media server. The administrator sets only the address and the role; the invitee picks their own username, display name and password through the link in the mail. Nobody else learns that password, not even the administrator.
cd backend
.venv/Scripts/python.exe -m pytestTo discard all accounts and settings, delete the data/ directory. The next start runs
the wizard again.
Metadata comes from TMDB. This project is neither endorsed nor certified by TMDB.
Sign-in, library matching and the watched state run through Plex, when a server is connected. Nexview is neither endorsed by nor affiliated with Plex.
Downloads are handled by Radarr and Sonarr; ratings come from IMDb, Rotten Tomatoes and Metacritic, streaming availability from JustWatch. Notifications can go through ntfy, Gotify, Telegram, Discord, a plain webhook or Apprise.
Seerr, which grew out of Overseerr and Jellyseerr, was the model: the idea of what a request interface for Radarr and Sonarr can look like comes from there, from the second instance for 4K down to matching against the media server. Nexview is an independent implementation and takes no source code from it, but owes it a great deal.
Nexview is under the GNU Affero General Public License, version 3 or later (AGPL-3.0-or-later) — see LICENSE. The source may be used, modified and passed on, commercially too. What the AGPL asks in return: if you change Nexview and let other people use your changed version — including over a network, without handing out any files — you have to make your changed source available to them too. Running Nexview unchanged asks nothing of you. There is no warranty.
Versions up to and including 0.17.0 were released under the MIT licence. That grant is perpetual and is not being withdrawn — anyone who received those versions keeps them under MIT. From 0.18.0 on, the AGPL applies.
The licence covers this project's source. It does not cover:
- Metadata, posters and images from TMDB. Those fall under the TMDB terms of use; running Nexview needs your own API key.
- Plex, Radarr, Sonarr, Docker, Synology, IMDb, Rotten Tomatoes, Metacritic, JustWatch, ntfy, Gotify, Telegram, Discord and Apprise. Trademarks of their respective owners, named here descriptively only.
- The dependencies in
frontend/package.jsonandbackend/requirements.txt, which carry their own licences.