Library: Series Pro
Needs a Pro licence or higher.
The TV-show side of the on-demand catalogue: a series → seasons → episodes hierarchy whose episodes point at files on disk or remote URLs. Metadata comes from TMDB (or Jellyfin); episode files are attached one-by-one or in bulk by the Auto-Match scanner.
On this page
- Import a show with full metadata
- Create a show TMDB does not have
- Attach files to episodes in bulk
- Attach or clear a single episode's file
- Import from an existing Jellyfin library
- Set the category a show is filed under
- The apps follow each account's series categories (2.9.414)
- MAG boxes follow the series categories (2.9.415)
- Deleting, refreshing and previewing series (2.9.416)
- Categories on the Series tab (2.9.418)
- Saving an episode keeps its file (2.9.425)
- Jellyfin key stays on the server (2.9.426)
- Series from a media server (2.9.427)
- The series window: view and edit in one place (2.9.468)
- Skip intro and Next episode (2.9.484)
- Watch out
Import a show with full metadata
"Add Series" → type the show name under "Search TMDB for a TV show" → Search → on a result click "Import", or "+ Specials" to include season 0. TMDB is fetched one season at a time, so a long-running show takes several seconds (the dialog says so). The console always sends category "TV" for this path. Episodes are created as placeholders with no file until you map one.
Create a show TMDB does not have
"Add Series" → expand "Or create an empty series manually" → name + category (defaults to Uncategorized) → "Create empty series". Then attach files as below; the season row is created automatically when an episode is added.
Attach files to episodes in bulk
More → "Auto-Match" scans /data/dvr and /data/vod (max 5000 files) plus completed DVR recordings with EIT data, parses show/season/episode, and groups the results. Per group choose: map to the existing series it found, import via one of the offered TMDB matches, or "Create empty series … without TMDB"; untick individual files inside the group if a guess is wrong. Then press "Import N confirmed groups". Each candidate carries the signal it came from — EIT beats DVR-filename beats filename beats folder, and the strongest signal wins when a file is seen twice.
Attach or clear a single episode's file
Open the series (click its card) → Episodes → pick the season on the left → click the episode. Its panel opens beside the list (a full sheet on a phone) with File on the server (the full path, e.g. /data/tvshows/…), Media-server link (plex:…, jellyfin:… or an http(s) address) and Format, shown as detected (Change sets it by hand). Found files lists the unmapped files the Auto-match scan finds for this episode; Use this file fills the path. Save, or Save and next to go on to the next episode: the window stays open and the list stays where it was. Unmap file (in the panel or the ⋯ menu of the row) asks first, then clears the mapping and keeps the episode; the file on the server is not touched.
Import from an existing Jellyfin library
With the Media server import module off: More → "Jellyfin" → the modal lists shows from the configured server. If it fails, click "Jellyfin Settings" to fill "Server URL" + "API Key" inline, press "Test" (shows "Connection OK" / "Connection failed"), then "Save & Load" — no need to leave the page. Per show choose "Import via TMDB" (only enabled when Jellyfin reports a TMDB id) or "Native (no TMDB)". Native imports land in category "TV" by default.
Set the category a show is filed under
Open the series → the small dropdown at the top of the detail panel is populated from the VOD categories; picking one saves immediately ("Series updated"). "Refresh from TMDB" on the same panel re-imports the season/episode list and is only shown for series that have a tmdb_id; existing file mappings are preserved by matching on episode tmdb_id.
The apps follow each account's series categories (2.9.414)
The Android/Xtream apps now follow each account's Series categories as set in the console: an account whose own list, package or a lower tier has series categories ticked sees only those series in BGPVR Player and other Xtream apps (lists, details and episode playback), as MAG boxes already did. An account with no series categories anywhere keeps the series its film categories gave it before, so nobody sees more than before. A pack's series categories count only when the account's package has series categories too. A private series category still shows only where it is given.
MAG boxes follow the series categories (2.9.415)
MAG boxes now list series by the same rule as BGPVR Player and the other Xtream apps (each account's Series categories, else its film categories), so a box no longer lists a series that then refuses to play. "Refresh from TMDB" keeps the series' category, so a private series stays private. Episodes of a switched-off series no longer play anywhere. In the console, only the admin and staff with film or series rights play titles past the viewers' category rules; any other staff sign-in plays like a viewer.
Deleting, refreshing and previewing series (2.9.416)
Deleting a series or a season now removes its seasons and episodes too, and the links recordings, timers and auto-record rules had to them; the files on disk stay and can be matched again. "Refresh from TMDB" now updates the seasons and episodes in place: each episode keeps its place, its file and where viewers stopped; new episodes are added, and only episodes with no file that TMDB no longer lists are removed. In the apps and on MAG boxes, an episode with no file to play and a season with none are left out until a file is added. A switched-off series stays hidden and refused for viewers, but the admin and staff with the Series right can still play its episodes from the console to check them first. Playing from the console needs the matching right: Films for a film, Series for an episode (the admin has both). Leftovers of series deleted before this version are cleaned up once when the server starts.
Categories on the Series tab (2.9.418)
Library → Series → More → Categories opens the same window as on Movies. Renaming a category renames it on its series too. A category name typed on series with no category behind it (for example TV from an import) is listed as Not a category with Make it a category, so it can be renamed, merged or made private like any other.
Saving an episode keeps its file (2.9.425)
The episode window (Library → Series → the series → the pencil on an episode) now shows the episode's current file path, stream URL and container, and Save changes only what you changed. Saving without touching them, for example after using the Subtitles box, no longer clears the file. To take a file off an episode use Unmap file; to point it at another file, replace the path or the URL. The film window keeps its source the same way when the stream URL or the length is left empty. In 2.9.423 and 2.9.424 a Save in the episode window could clear the episode's file; the one episode this happened to on pvr.bgpvr.com was put back.
Jellyfin key stays on the server (2.9.426)
Jellyfin episodes now play through the server: the apps, MAG boxes, Xtream players and the web player get the suite's own HLS stream, never an address on your Jellyfin server, so they also play outside your network and the Jellyfin API key never reaches a device. Posters and episode pictures from Jellyfin are fetched by the server and served from its picture cache. The key is no longer stored with any series or episode: series imported before 2.9.426 are converted once when the server starts, with nothing to import again. Test refuses a Jellyfin address on 127.0.0.1 or localhost (type the server's LAN address instead, for example http://192.168.1.20:8096), link-local and reserved addresses, and a public address over plain http (use https). Before 2.9.426 the key was sent to the devices: after the upgrade, make a new API key in Jellyfin (Dashboard → API Keys), paste it here and delete the old one.
Series from a media server (2.9.427)
Library → Series → Import media opens the same window as for films, with the server's series libraries: a Plex source or a Jellyfin source. A series with a TMDB id comes in with TMDB's seasons and episodes, and the server's files are put on them; otherwise the server's own seasons and episodes are used. The server's subtitle files come in with the episodes. Re-sync adds new episodes and follows replaced files; an episode removed from the server stops playing and stays in the list for you to check, nothing is deleted. With the Media server import module on, Import media is the only button and it does what the Jellyfin button did; with the module off the Jellyfin button stays, for series only. Plex is a trademark of Plex, Inc.; BGPVR is not affiliated with or endorsed by Plex.
The series window: view and edit in one place (2.9.468)
Click a series card. One window opens with three tabs. Overview: seasons, episodes, rating, who sees it and the files bar (with a file / file missing / no file) with Next to fix. Episodes: the seasons on the left, each with its number of episodes, a small file bar and the exact numbers ("10 · 1 missing", "8 · 2 no file"), a dot when files are missing; on a phone they are a row of chips. Above the list: the season in one line and Next to fix (the first episode whose file is missing, else the first with no file); All / Missing / No file filter it. Each episode says what it plays from, as the server sees it: File on the server, Recording, Plex, Jellyfin, Stream link, File missing (something is mapped but it does not play: the file was deleted, or the media server is off), No file or Not aired yet. The ⋯ menu of a row: Play, Edit file and subtitles, Attach / Replace file, Unmap file, Delete episode; the season's ⋯: Delete season. The episode panel has Previous / Next and Save and next, and its subtitles: each with its delay and a Shown switch, saved with the same Save; Delete asks in the row; Find and Upload are under Add subtitles. Edit: title, first aired, network, status, rating, genres, description, poster and backdrop addresses, the category and its packages (the Import picker: a package change applies to the whole category), the TMDB match (Re-match shows the results with their posters; Use this asks first, then fetches that entry's episodes; your file links stay) and Refresh from TMDB. Every question asks in the page, and closing with unsaved changes asks first. Later updates add reading the tracks inside a file, a server folder browser, actions on many episodes at once, age rating, poster upload and re-matching one episode.
Skip intro and Next episode (2.9.484)
Where an episode's intro and credits are comes from your media server when you import or re-sync it: Plex markers (Plex finds intros and credits itself when its intro / credits detection is on) or Jellyfin media segments (Jellyfin 10.10 or later with a segments plugin such as Intro Skipper). In the series window each episode shows its source on its second line ("Plex markers · intro 1:01–1:35", "Set by hand", "No intro found"). Open an episode: "Intro and credits" has the intro's start and end and the credits' start in seconds (− / + move 1 s), a strip of the opening minutes and "Play from the intro" / "Play the intro's end" to check them. Saving makes the source "Set by hand": later syncs never overwrite it until "Back to the found times", which asks the media server again. Edit → "Show Skip intro and Next episode for this series" switches it off for one series (saved at once). The web player and, from its next version, the BGPVR Player app show Skip intro during the intro and the Next episode card when the credits start; with no credits time the card comes in the last 60 s, as before. Nothing is sent to any outside service.
Watch out
- Console-created series never get a category_id — the category dropdown, the TMDB importer and the Jellyfin importer all write only the category NAME. Both XC (/player_api) and Stalker filter series on category_id, so on an install that uses per-client or per-package category grants these shows are invisible to every restricted subscriber no matter what the name says. Only DVR-promoted series get a real category_id. Verify with a restricted test account before assuming a show is published.
- Series access has its OWN grant tables, and the two client APIs disagree about which one to read. The console shows a separate "Series Categories" list (Clients → Entitlements, Packages), stored in series_category_access / package_series_category_access, and Stalker/MAG honours it. But the Xtream path (TiviMate, Smarters, the BGPVR app) filters series with the VOD grants instead. Changing only "Series Categories" will not change what an Xtream client sees.
- Nothing in this view deletes media. Deleting an episode, a season or a whole series removes catalogue rows only — every confirm dialog says so explicitly ("Files on disk are not removed").
- Deleting a series clears the back-links on DVR *timers* (series_episode_id, series_target_id) and sets their postprocess_to_series to 0, so those recordings become promotable again. From 2.9.416 it also clears dvr_autorec.series_target_id, so an auto-record rule pointed at the deleted series simply stops filing into it.
- Auto-Match's scan roots are hard-coded to /data/dvr and /data/vod. It ignores the dvr_recording_path / vod_storage_path settings and it never looks inside an external Media Folder registered under VOD — if you moved either root, or your episodes live on a NAS mount, Auto-Match finds nothing and you must map files manually.
- Auto-Match's TMDB suggestions are name-similarity guesses. Check the selected radio button per group before importing — the wrong pick writes the wrong season/episode titles across every file in that group.
- Series is Pro and up. On Free, creating, importing and Auto-Match apply are refused with a licence error; browsing existing rows still works. "File into a Series" in the DVR is gated the same way.
- Jellyfin import needs the rights confirmation (2.9.494): the Series page's Jellyfin import asks for the same tick as Import media (Settings → Integrations & API → Media server import → Your rights to these titles), also with the Media server import module off. An episode whose stream link is a YouTube link needs the admin's YouTube confirmation, like a film.