Skip to content

Releases: DerKezorm/nexview

v0.14.0

Choose a tag to compare

@DerKezorm DerKezorm released this 21 Aug 17:21

New

  • Discord as a notification channel. A webhook posts straight into one
    channel of your Discord server - no bot, no extra account, just the webhook
    URL from the channel's settings (Edit → Integrations → Webhooks). Messages
    arrive as embeds: the color carries the meaning (orange waiting, green
    available, red rejected), the poster shows as a thumbnail, the title links
    back into Nexview, and the sender wears the Nexview logo as its avatar. The
    URL is the secret here, so it is stored encrypted and only ever shown
    masked. Verification works like every push channel: a four-digit code in
    the test message proves that things really arrive before anything is saved.

  • A universal webhook channel. Nexview sends every notification as a POST
    with a fixed JSON body - event type, urgency, title, text, poster and link -
    to any address you choose, with an optional Authorization header (stored
    encrypted). Built for Home Assistant, n8n, Node-RED and hand-rolled
    scripts: the receiver picks out whatever fields it needs. The confirmation
    code travels in the JSON's title field, readable wherever your requests
    land.

  • Apprise support - a channel Overseerr and Jellyseerr don't have. Point
    Nexview at a self-hosted Apprise API and it forwards every notification to
    the services stored there: Signal, Matrix, SMS gateways and over a hundred
    more. Nexview only knows the server's address and a configuration key; the
    credentials of the target services never leave the Apprise server. Nexview's
    urgencies map onto Apprise's message types, and a mistyped or empty key is
    reported as the error it is - Apprise itself would happily answer "OK" to a
    key that delivers to nobody.

0.13.0 - Watched state for everyone

Choose a tag to compare

@DerKezorm DerKezorm released this 21 Aug 10:19

New

  • "Already watched" now works for everybody, not just the server owner. Until now the eye badge was reliable only for the account whose Plex access is stored in the settings; everybody else was read from the server's playback history, which Plex caps at roughly 500 entries and which never hears about titles ticked off by hand. Every Plex sign-in now stores that person's own access, and the sync reads their complete watched state from the library counters instead. What Plex says counts in both directions — removing a checkmark there removes the eye here, except for titles that have left the library entirely, because deleting a file does not undo having watched it.

    Getting there needed one more thing. Plex keeps two different things that both go by the name "token": the account token from signing in, which plex.tv accepts, and a separate access token per server, which is the only one a server accepts from a shared account. Both are identical for the owner, so nothing ever looked wrong while only the administrator's access was used — and for everybody else this had never worked at all. It was reported as "Plex no longer accepts your token", and signing in again did not help, because a fresh account token is the same wrong kind.

  • A red banner for whoever's Plex access really has expired. It sits under the menu on every page and only the person affected sees it, since nobody else can fix it. Signing in happens right there, code and link included — browsers block the popup often and on a phone almost always. It clears the moment the sync succeeds again, not only after signing in, so a banner never outlives its cause.

  • Nexview can record how much space each person occupies. Off by default and switched on under Settings → Storage quotas, where it is marked "In Dev": this first step only measures and shows, nothing is limited and nothing is deleted. With the switch off, Nexview behaves exactly as before — no tab, no card, no distribution, and nothing measured.

    Sizes come from answers Nexview already asks for, so it costs no extra requests, and shows are counted per season, the finest grain available without one extra request per series. Whatever is already in the library on the first run belongs to the house and counts against nobody, so no account starts in the red. Everybody sees their own figure under Profile → Storage, largest item first; administrators see the split across everyone on the statistics page.

  • A bell notice — and, if you opt in, an e-mail — when Plex stops accepting your stored access. That happens after a password change or a "sign out everywhere", and previously the watchlist and the watched sync just stopped silently.

Fixed

  • A request could become impossible to approve. If the target folder was the approver's to choose, and the operator then switched to a fixed folder while a request was already waiting, the interface stopped offering the choice while the server kept demanding one. Whether a folder is needed now depends solely on whether the request has one — the approver may always choose, whatever the rule says at the time.

  • The ticket and new-account mail switches finally send mail. Both were configurable and neither did anything.

  • The log names people, not placeholders. "Plex no longer accepts the token of user" reads like a template; it now says "user (Dilara)" wherever a display name exists. A rejection from Plex also records the actual HTTP status, so "who are you" can be told apart from "you may not" — that distinction had been thrown away, which is what made this class of problem undiagnosable.

Nexview 0.12.0

Choose a tag to compare

@DerKezorm DerKezorm released this 20 Aug 20:57

New

  • Notifications: ntfy, Gotify, Telegram and e-mail as system channels.
    Under Settings → Notifications an administrator points Nexview at the
    services that should hear about what happens – starting with requests
    waiting for approval, on the phone within seconds, poster attached and a
    link straight to the approval list. These are shared inboxes for the whole
    installation, deliberately separate from the personal ways (bell and
    personal e-mail) that everybody configures in their own profile.

    As many targets as you like, on tiles. One tile per inbox, plus a "+"
    tile to add another. Services with two levels get both of them: an ntfy
    server carries any number of topics, a Telegram bot any number of chats –
    the connection is stored once, the inboxes underneath choose their own
    language, urgency and events. Every tile has a power button to take a
    target out of service without deleting it; a disabled instance silences
    its inboxes with it.

    A four-digit code decides whether a push target counts. HTTP 200 from
    a push service only means "accepted", never "arrived" – a wrong topic, an
    app with no subscription, a muted notification are all answered politely,
    and nobody notices until the first real message fails to show up weeks
    later. So the test message carries a code, and only somebody who can type
    it back gets to save; setting up ntfy or Telegram creates instance and
    first inbox in one confirmed step. E-mail targets skip the code on
    purpose: behind a shared mailbox or an automation there may be nobody to
    read one.

    Telegram sets itself up. A built-in step-by-step guide covers the way
    from creating a bot at @Botfather to the first message; the token check
    fills in the bot's username, and "fetch chats from the bot" lists everyone
    who has written to it – no third-party ID bot, nothing to copy by hand.

    Underneath sits an outbox of its own with its own loop. Push notifications
    get the same reliability the e-mails have – three attempts, then the last
    error stays visible on the tile – but on a ten-second beat instead of the
    status poller's two minutes. And one message per event and inbox, not
    per recipient: a request waiting for three administrators appears once,
    not three times.

Fixed

  • A Radarr/Sonarr timeout no longer counts as failure. A timeout means
    the answer went missing, not the request: Sonarr had long created the
    series and started searching while Nexview recorded "failed" and refused a
    new request. Such requests now stay at "approved" and the status poller
    resolves the uncertainty on its own within minutes.
  • Failed, cancelled and deleted titles can be requested again. The
    server accepted a new request all along – the interface just no longer
    offered a button for it, locking a title away forever after one mishap.
  • One failed media-server sync no longer swallows the mails of that
    round.
    The database session was left mid-rollback, so the very next step
    in the same pass – sending mail – died of an error it had nothing to do
    with.

Nexview 0.11.3

Choose a tag to compare

@DerKezorm DerKezorm released this 20 Aug 20:57

Fixed

  • The home page finally asks Plex. Its two suggestion sections
    ("trending" and the curated picks) filtered "already there" using only
    Radarr/Sonarr and your own requests – the media server was never
    consulted. A film whose Radarr entry was removed but which still lives in
    Plex was offered as a suggestion, while search and detail pages correctly
    showed it as in the library. Two pages, two truths – reported for
    "Backrooms".

  • A namesake from the same year no longer inherits the library badge.
    The title fallback of the media-server match treated "same name + same
    year" as "same film" – which made a four-minute short called "Backrooms"
    (2026) appear as in the library next to the real feature film. The fallback
    now only applies to Plex entries that carry no id at all (old agents);
    where the entry knows its TMDB id, a mere name match no longer counts.

  • A wrong secret key no longer fails silently. All stored credentials
    are encrypted with NEXVIEW_SECRET_KEY (or the auto-generated
    data/secret.key). If that key changes – typically because the file was
    not inside the mounted volume when the container was recreated –
    decryption used to quietly return nothing: the Plex connection looked
    "gone", TMDB fell back to demo data, and nothing anywhere said why. There
    is now a plain-words warning in the log and a banner on the services page
    naming the cause and the fix.

  • The library sync log names both numbers. "443 titles" next to 446
    entries in Plex looked like a loss; the log now says how many entries were
    folded because the same film lies in several libraries (1080p and 4K).

  • The mail switch "my request was decided" is hidden for approvers and
    admins
    – whoever may approve never waits for a decision, so the switch
    could never do anything for them.

  • The people page now says "Search for a person" instead of "Search for
    a title".

  • The log now answers the questions debugging kept asking. A startup
    report states where the secret key comes from, whether data/secret.key
    exists, which stored secrets are readable, and the media-server connection
    state. Unreadable secrets are warned about by name, connecting logs each
    milestone and re-reads the saved settings to catch a save that did not
    stick, and disconnecting names who pressed the button.


v0.11.1

Choose a tag to compare

@DerKezorm DerKezorm released this 20 Aug 12:11

Fixed

  • Times were shown two hours off. The server stores timestamps in UTC but sent them without a timezone marker — and the browser reads such values as local time, so the UTC number appeared on screen unchanged ("last checked 12:01" at 14:01). Server times are now converted to the viewer's local time.
  • "Check now" for the media server library could disguise a failure as success. If reading the Plex library failed — server unreachable from the container, token rejected — the button silently kept showing the old count and timestamp. It now reports the actual error in plain words; the hourly background sync still swallows failures on purpose so one outage cannot stop the rest of the run.

v0.11.0

Choose a tag to compare

@DerKezorm DerKezorm released this 20 Aug 11:36

New

  • Your Plex watchlist, inside Nexview. Under Profile → Manage watchlist → Plex, everything on your Plex watchlist shows up as the same tiles you know from the catalogue — with the same badges (already downloaded, requested, 4K, watched). Clicking one opens the ordinary request dialog, so quota, approval, blocklist and age limit apply as everywhere else. Nothing happens on its own: no background sync, no automatic requesting — every title takes a click. An administrator enables the feature under Settings → Watchlists; it is off by default. Reading a watchlist needs the personal Plex token of its owner, which Nexview now keeps (encrypted) whenever an account links or signs in with Plex — accounts from earlier versions simply sign in once.
  • Long request lists come in pages. My requests and All requests show twenty entries at a time with back/next buttons. Filter counts still cover the whole list, and bulk approval still covers every waiting request, not just the visible page.
  • Watchlist page view toggle. Switch between tiles and a compact list, like on the discover pages.
  • Requests from the watchlist are recognisable. They carry a small "watchlist" badge and have their own filter tab in My requests and All requests.
  • The request button simply says "Request" instead of "Add to Radarr"/"Add to Sonarr".

Fixed

  • A title kept only on the media server could be requested a second time. The pages already showed such titles as "in your library", but the server itself only asked Radarr/Sonarr before accepting a request — a stale browser cache was enough to start a duplicate download. The server now refuses, with the same per-instance logic the pages use: a 4K-only copy does not block requesting the 1080p version, and vice versa.
  • Series without a TMDB id confused the calendar. Sonarr and Radarr report 0 when they do not know a TMDB id — and that zero slipped through as a real id. Affected entries linked to a dead detail page and vanished for age-restricted accounts. A zero now counts as "unknown".

Nexview 0.10.0

Choose a tag to compare

@DerKezorm DerKezorm released this 20 Aug 06:48

New

  • A second Radarr/Sonarr for 4K. Optional: enter a second instance under Settings → Services → Radarr (or Sonarr) and the same title can be requested once in 1080p and once in 4K — two files, two folders, two requests. Each instance keeps its own root folders and quality profiles, and Nexview refuses a profile or folder that does not belong to the chosen instance: the ids of the two instances collide, and Radarr accepts an unknown one without complaint. Per user there are three switches — request 4K movies, request 4K shows, 4K without approval — all off by default, and the blocked-profile list exists per instance. Cards gain a compact "4K" badge next to the usual one, the request dialog a Standard/4K switch. Enter no second address and none of this is visible anywhere.

  • The approver can pick the root folder. A new setting hands the choice of root folder and quality profile to whoever approves a request, instead of the person making it. Meant for libraries split across several folders — sorted by genre, say — where the requester cannot know where a title belongs. Their request then arrives without a folder and always waits for approval, even if they normally have auto-approval; the approver picks both when approving, and a bulk approval asks once per media type. Anyone who may approve still picks when requesting: they would be the one deciding later anyway. Off by default — with it off, nothing about requesting or approving changes.

Fixed

  • A show could inherit another show's episodes. Matching against Sonarr fell back to the title alone whenever TMDB had no TVDB id — and a title is not unique. Reported for "Countdown" (1982), which picked up a completely different show of the same name in Sonarr and appeared as already downloaded, green ticks on thirteen episodes included, although the server had never held it. The fallback now also requires the year to match, with one year of tolerance for first-broadcast dates that differ between databases; without a year on either side the match is dropped. A missed title costs a duplicate download, a wrong one removes a title from the catalogue for good and nobody ever learns why.

  • The same film in two Plex libraries broke the whole sync. Splitting 1080p and 4K into separate libraries is a common setup, and Plex gives the same film the same guid in both. The unique key rejected the second row and the import aborted — leaving Nexview with no media-server titles at all and showing a well-stocked library as entirely requestable. Both rows are now merged into one title carrying both resolutions.

  • A file deleted from Radarr stayed "already downloaded" forever. The state of a request outranked the library, so a title removed from Radarr (or from Radarr and the media server) kept its badge and could never be requested again. Requests whose file has vanished now move to a state of their own, "deleted again", and the title becomes requestable. Delete it only from Radarr while keeping it in Plex and the badge stays — because it is still true.

  • A copy in the media server can now be told apart by resolution. Plex reports the resolution of every file it holds; Nexview did not record it and therefore could not tell whether a copy outside Radarr was the 1080p or the 4K version. It is recorded now, which gives the 4K axis the media-server fallback it never had. Where no second instance is configured, any copy still counts — there is only one axis to answer for.

  • A slow Radarr cost every page load fifteen seconds. Nothing was recorded on failure, so each request started the timeout over; with two instances on one machine it added up and looked like "Radarr is not responding" although Radarr was merely busy. A failed instance is now left alone for 30 seconds.

  • Root folder and quality profile now move together. Setting one of them to "the approver decides" always deferred both — a request waits for the approver either way, and they then set both. The other setting was therefore doing nothing at all, silently. Picking "the approver decides" now switches the other one along, with a note saying why, and switching back releases both. The server enforces the same pairing, so the stored configuration can no longer describe a state that does not exist.

  • "Recently downloaded" listed titles that were gone, and the person page answered with an error whenever a 4K instance existed.

0.9.0 - Release calendar

Choose a tag to compare

@DerKezorm DerKezorm released this 19 Aug 15:18

New

  • A release calendar. A new "Calendar" entry shows one calendar week at a time, grouped by day, with a year and week picker to jump anywhere. Each day separates two things: the episodes and movies already on your list, and new releases you do not have yet. Request and favourite straight from the calendar.

  • Episodes that aired but never arrived are flagged. When a monitored episode has come and gone without the file landing, its tile carries a "still missing" marker. Several episodes on the same day collapse into one row — "S03E05–06" instead of two identical tiles.

  • Cinema and digital dates, in your own region. Movie dates switch between cinema and digital & disc, and both are read for the region set in your profile. That distinction matters more than it sounds: a film can open in cinemas in March and land digitally in June, and for a media server only the second date is actionable. TMDB filters on the regional date but reports the worldwide one, so the calendar reads the regional date back out of data Nexview already fetches for every title — at no extra cost.

  • New releases stay readable. By default the calendar limits them to the major studios, switchable to "known titles" or everything. For shows that means the big streaming services, restricted to scripted series, mini-series and documentaries: TMDB files every companion podcast, talk show and game show under the same network, and they made up roughly half the results. Productions from outside a handful of countries are left out as well — the streamers commission worldwide, and a Thai original is noise in a European calendar.

Fixed

  • Watch history is now read per account. Plex only returns the history of the account you ask with, and caps each answer at around 500 entries. A household with one heavy viewer therefore pushed everyone else out of the result entirely. Note that Plex records playback only — a title ticked off by hand leaves no trace there.

Nexview 0.8.0 — In library & already watched

Choose a tag to compare

@DerKezorm DerKezorm released this 19 Aug 12:47

New

  • Titles already on your media server are recognised. Nexview now reads
    what sits in your Plex library and spots what never came through
    Radarr/Sonarr — a file copied by hand, or a collection that predates the
    *arr setup. Those titles show as "In library" and cannot be requested a
    second time. The sync runs hourly in the background; the settings show how
    many titles are indexed, when it last ran, and offer a "Sync now" button.

    Matching goes by TMDB id, then TVDB id, then title — and always checks the
    year as well. That is not caution for its own sake: in a real library of
    3509 films, exactly one carried a wrong TMDB id, pointing at an entirely
    different film. Without the year check, anyone searching for that other film
    would have been told they already own it. A missed title costs a duplicate
    download; a false one takes a title out of the catalogue for good, with no
    visible reason.

  • You can see what you already watched. Titles you have seen on your media
    server carry a small "Watched" marker next to their status. Everyone sees
    only their own — what one person watched is nobody else's business — and the
    marker sits beside the status rather than replacing it, so "already
    downloaded" stays visible.

    Two sources feed it, and both are needed: for the account whose access is
    stored, the counter Plex keeps on each title, which is complete; for
    everyone else the playback history, which Plex only keeps for a while.
    Measured on a real server: the history held 38 films, the counters 354. For
    shows, one watched episode marks the show.

Nexview 0.7.0 — Sign in with Plex

Choose a tag to compare

@DerKezorm DerKezorm released this 19 Aug 10:38

New

  • Sign in with Plex. Connect your Plex server once and your household can
    sign in with their Plex account instead of a Nexview password. Only people
    who actually have access to your library get in — that is checked against
    the server's own identifier, so a stranger's Plex account is turned away
    even though it authenticates fine.

  • Connect by picking your server. Setting it up needs no token hunting:
    the administrator signs in with Plex and chooses a server from a list. His
    own account is linked in the same step — otherwise his first Plex sign-in
    would have created a second, ordinary account whenever his Plex address
    differs from his Nexview one.

  • Link an existing account. Everyone already invited can connect their
    Plex account under Profile → Security, and keeps signing in with a password
    as well. Both ways lead into the same account. Accounts created through Plex
    have no password at first; the profile offers to set one and refuses to
    unlink while that would lock you out.

  • New accounts on your terms. Anyone with library access can get an
    account on first sign-in, with the role, quota and age limit you set in
    advance — or you turn that off and keep invitations mandatory. New accounts
    never get automatic approval, and "administrator" cannot be a default role.
    You are notified in the bell, optionally by mail, whenever an account
    appears.

  • Deleting a user now sticks. Removing someone who signed in through Plex
    blocks that Plex account from creating a new one. Without it, deleting was
    pointless — they would simply sign in again. The block outlives the account
    and can be lifted in the settings.

  • Directing and writing show up in a filmography. A person's page used to
    list only what they acted in, so a director's page showed their cameos
    instead of the films they made. Directing, writing, screenplay and story
    credits now appear alongside the acting roles, labelled as such. One entry
    per title: the work itself wins over a cameo in the same film, and directing
    wins over writing when someone did both.

Changed

  • Settings are sorted by service. "Services" now has a second row of
    buttons — General, TMDB, Radarr, Sonarr, Plex — instead of five blocks you
    had to scroll past. Region, language and demo data live under "General",
    since they belong to no single service.

  • "Users may choose the folder" is now set per service. Movies and shows
    have different folder layouts, so wanting fixed paths for shows no longer
    forces them on movies. The switch sits with Radarr and Sonarr respectively,
    right above the folder it governs. Existing installations keep whatever the
    old shared switch was set to.

Under the hood

  • The media-server connection sits behind one interface with Plex as the first
    adapter, so Jellyfin and Emby can be added later without rework. Nothing
    outside that package knows which provider is in use — the database columns
    and settings are provider-neutral too.
  • Only servers you own are offered when connecting. Ones merely shared with
    you are hidden and counted, because picking one would tie sign-in to the
    wrong circle of people and break watched-state later. The chosen address is
    probed before it is stored; if nothing answers you are told, and sign-in
    still works, because that runs through Plex rather than the server.
  • Prepared but not built: detecting titles added to the server outside
    Radarr/Sonarr, and a per-user "already watched" marker.