Settings
The main configuration surface for the install: appearance, public site URL, storage paths, live DVB/transcode tuning, SMTP, health alerting, AI, billing gateways and third-party integrations. Thirteen tabs (General, Tuners & Sources, Conditional Access, Channels & Ordering, API & Security, Forum Sync, Email, Notifications, Clients, AI Processing, Billing, Telegram Integration, and Branding on white-label licences); every card inside a tab has its own Save button and posts only that card's keys.
On this page
- Set the public website URL
- Set the My Account address for viewer e-mails (2.9.389)
- Set the storage paths (DVR, VOD, timeshift)
- Ask idle viewers "Are you still watching?"
- Set what every BGPVR Player starts with (App defaults, 2.9.379)
- Tune live DVB startup and channel switching
- Set web-player quality and pick the transcoder
- Configure outgoing email (SMTP) and EPG coverage alerts
- Turn on outage / server-health alerting
- Keep heavy AI work off peak hours
- Take subscriber payments
- Take card payments with Stripe (2.9.478)
- Sell extras
- Date of birth and protection of minors (Clients tab)
- The account PIN on MAG boxes and the web player (2.9.430)
- Force a minimum app version (build number)
- Set how long a deleted account is kept
- Connect the License server for the app versions (2.9.388)
- (i) help beside unclear labels (2.9.397)
- Billing & payments (2.9.401)
- Take crypto payments with CoinGate (2.9.407)
- Test accounts for payment methods in test mode (2.9.410)
- Online payments need the My Account address (2.9.410)
- Every Settings card folds (2.9.428)
- BGPVR Player for Linux (2.9.433)
- Faster pages: the browser keeps scripts and styles (2.9.436)
- Subtitle position follows the account (2.9.442)
- Skip intros automatically (App defaults, 2.9.484)
- Choose which e-mails your subscribers get (2.9.505)
- Watch out
Set the public website URL
Settings → General → "Public Website" card → "Public Website URL" (e.g. https://bgpvr.com) → Save. The TV and mobile apps build their Privacy Policy / Terms of Service / Refund Policy links from this base (e.g. {url}/privacy.html). The field's own help text states: leave blank to hide those links; defaults to https://bgpvr.com when unset.
Set the My Account address for viewer e-mails (2.9.389)
Settings → Look & brand → Public website card → "My Account address" (for example https://tv.example.com), then save. Every e-mail to a viewer that links to My Account uses it: remote-help requests and confirmations, offers and account notices. Empty: the Website address above is used; with neither, the e-mail tells the viewer to open My Account, without a link. The remote-help request e-mail never takes the address from the request a browser sent. Only an http(s):// address, without a ? or # part or a user name; a trailing / is dropped. The two remote-help e-mails are now in Bulgarian and English in one message, the viewer's app language first.
Set the storage paths (DVR, VOD, timeshift)
Settings → General. "DVR / Recording Settings" → Recording Storage Path (fallback only — the card says most recordings use the path in DVR Settings → Profiles). "VOD Library Settings" → VOD Library / Upload Path and VOD HLS Transcode Cache Path. "Timeshift Buffer Settings" → Timeshift Storage Path (placeholder /dev/shm/bgpvr_timeshift, RAM disk recommended in the help text), Buffer Window (minutes, 10–1440) and Max Concurrent Buffers (1–64). Each card Saves separately. The backend validates only these four path keys: they must be non-empty and absolute, and it runs makedirs — a relative or empty path is rejected with an error toast.
Ask idle viewers "Are you still watching?"
Settings → App defaults → Sleep and recordings → "“Are you still watching?” after" → "Save all changes" (since 2.9.379; the "Viewer inactivity" card in Playback only points there now). Off, or 1 to 24 hours; the default is 4. Off here turns the prompt off for everyone and hides the viewers' own choice. When live TV, radio or a public stream has played that long with no remote, keyboard, mouse or touch input, the web player (/tv), MAG boxes and the BGPVR Player app (1.7.6 and later) show a 60-second card. With no answer the stream stops and its tuner and connection slot are freed; one OK press starts the same channel again. Only live TV, radio and public streams are watched: films, series, catch-up and recordings never get the prompt, and server recordings and timers are not affected. Players read the value when they start and again every 6 hours.
Set what every BGPVR Player starts with (App defaults, 2.9.379)
Settings → App defaults. One row per setting, in the app's three groups: Playback (Sound language, Show subtitles automatically, Subtitle language, Second language, Subtitles for apps before 1.9.5, Play the next episode by itself), Look (Opening screen, App language, Theme, Subtitle size, Loading animation) and Sleep and recordings ("Are you still watching?" after, Recordings picture, Recordings start early by, Recordings stop late by). Each row has the default and a "Viewers can change" switch: on, a viewer may change the setting in BGPVR Player or in My Account; off, every account follows your value and the app shows it as set by the provider. "Save all changes" sends only the rows you changed. A changed default reaches every account that never changed that setting; a viewer's own choice stays (switch "Viewers can change" off to make your value count for everyone). Live TV picture is not a row: live channels always play as the channel sends them, on the default stream profile (Profiles); a forced profile for one client stays in the client window. Recordings picture (Full or Light (720p)) is only the app's copy of recordings. Crash reports and personalised promotions are never here: they are each viewer's own consent. The new settings (opening screen, theme, app language, subtitle size, next episode, recording margins) reach BGPVR Player 1.8.8 and later. Since 2.9.421 the Sleep timer default is no longer listed (here, in the client window's App tab and in My Account): the app never read it, and it cannot put the TV itself to sleep. Values already saved stay. Subtitles for everyone (2.9.507): with Show subtitles automatically On and Subtitle language Bulgarian, BGPVR Player 1.9.5 and later turns Bulgarian subtitles on by itself (Second language is the next choice); the old Subtitles row is only for apps before 1.9.5.
Tune live DVB startup and channel switching
Settings → Tuners & Sources. "Live Stream Startup": Service Extractor (leave on "TSDuck zap (Recommended — instant start, smooth)"; "FFmpeg copy (Legacy)" probes first and can freeze HD channels), Initial Burst Size ("Auto" recommended — the help text says it applies to relay/HTTP channels only and DVB ignores it), DVB Subscriber Queue, Service Warm Idle Grace (5–3600 s), Bad Adapter Cooldown (0–3600 s, 0 = disabled). "DVB Channel Switching": "Release idle tuners" checkbox, Mux Keepalive (seconds), Ring Buffer Window (0/4/8/15/30 s, 8 s marked Recommended), Prewarm Channel IDs (tuned 8 s after startup) and Always-On Channel IDs (never detuned; a watchdog restarts them within 60 s). Enter comma-separated channel IDs from the Channels list.
Set web-player quality and pick the transcoder
Settings → Tuners & Sources → "Web Player Quality (Adaptive Bitrate)": tick "Enable adaptive bitrate (recommended)" and edit the "Quality ladder" JSON (default [{"h":1080,"b":6000},{"h":720,"b":3500},{"h":480,"b":1200}]); untick it to reveal "Fixed bitrate (kbps)" + "Resolution" (480p/720p/1080p). This card only affects the browser/web HLS transcode — its own text says it does not affect direct-TS / Stalker / TiviMate playback. Separately, "Hardware Acceleration" → Video Transcoder (Auto-Detect / CPU / NVIDIA NVENC-NVDEC / NVIDIA Jetson SoC V4L2 / Intel Quick Sync / AMD AMF / Generic VAAPI) is the global accelerator the HAL routes ALL FFmpeg transcoding to, not just the web player. In the Web Player Quality card, "Segment storage" chooses where live web segments are kept: "Automatic — RAM, falling back to disk when RAM is full" (default), "Always RAM (/dev/shm)" or "Always disk". Each web viewer needs roughly 40 MB of RAM, so a 512 MB tmpfs holds about a dozen; choose disk if you have more web viewers than that.
Configure outgoing email (SMTP) and EPG coverage alerts
Settings → Email → "Email Delivery": SMTP Host, SMTP Port (help text: 465 = implicit SSL, 587 = STARTTLS), SMTP Username, SMTP Password, From Address, "Use STARTTLS", and "Email brand-new provisioned clients their BGPVR credentials". Below the divider, "EPG Coverage Alerts": the enable checkbox ("Email the EPG coverage report when warning or critical thresholds are reached"), Alert Recipient, Minimum Status (Warning or critical / Critical only), Repeat Interval (1–168 hours), plus read-only Last Alert / Last checked. One Save covers the whole card. The card states SMTP is shared by welcome emails, client password-reset codes and EPG alerts; welcome mail only goes to brand-new clients created via webhook/API provisioning, not manually created ones.
Turn on outage / server-health alerting
Settings → Notifications → "Server Health Alerts": tick "Enable outage & health alerts" (on unless explicitly disabled), choose flags (🔴 Site down / unreachable, 🟠 High I/O pressure, 🟠 High load, 🟠 Disk above N % full — N is 50–99, default 90, 🟢 Recovered notices), choose "Deliver via" (Telegram DM and/or Email), set "Send email for" (🔴 Critical (site down) only, or All alerts), then fill "Telegram chat ID" (DM @bgpvr_bot once and paste the numeric ID) and "Alert email". Telegram always gets every alert; the severity selector only limits email. Email uses the SMTP settings from the Email tab.
Keep heavy AI work off peak hours
Settings → AI Processing → "AI render queue (quiet window)": "Quiet window (start – end)" (default 02:00–06:00), "Time zone" (default Europe/Sofia), Default for "Apply cut" (Apply tonight / Apply now), the busy thresholds (share of the CPUs for the 1-minute load; minutes since a viewer last streamed), "Automatic cuts run in the quiet window" and "Heavy AI jobs wait while the server is busy". Save. The Processing Queue table shows "scheduled …" / "waiting: …" / "deadline …" with Run now / Cancel. Jobs you scheduled report completion as a console toast, and on Telegram when the alert chat ID is set under Notifications.
Take subscriber payments
Settings → Billing (Business licence) → "Payment Gateways". Copy each webhook URL from the table at the top into that provider's dashboard. Fill ePay.bg (MIN + Secret Key), Stripe (Publishable Key, Secret Key, Webhook Signing Secret), NOWPayments (API Key), Revolut Pay (Secret API Key, Public Key, Webhook Signing Secret — and switch "Sandbox Mode" to Production, because it defaults to Sandbox) Rampex (API Key + Webhook Secret) and CoinGate (API token, Test or Live; 2.9.407), then "Save Gateways". A gateway is offered to customers only once its credentials are filled in.
Take card payments with Stripe (2.9.478)
You use your own Stripe account: viewers pay you directly, and BGPVR never takes or holds viewer payments. Settings › Billing & payments › Payment gateways › Stripe, the steps are also under "How to connect Stripe" there. 1. In Stripe open Developers › Webhooks (in the newer dashboard: Workbench › Webhooks) and choose Add destination. 2. Endpoint URL: the address shown in the Stripe box, your public address followed by /api/billing/webhooks/stripe. 3. Select these events: checkout.session.completed, checkout.session.async_payment_succeeded, invoice.payment_succeeded, customer.subscription.deleted, charge.refunded. 4. Create the destination, open it and copy its Signing secret (whsec_…) into "Webhook signing secret". 5. In Developers › API keys copy the Secret key (sk_live_…, or sk_test_… in a sandbox) into "Secret key" and the Publishable key (pk_…) into "Publishable key", then Save. 6. Test first in a Stripe sandbox with test keys and the card 4242 4242 4242 4242 (any future date, any CVC). With a test key only the test accounts you name can pay, free, and public gift payments are refused: that is expected. 7. The Stripe line shows "Ready" only when the secret key and the signing secret are both saved. The other gateways work the same way: each needs its key plus its webhook or IPN secret, and the address shown in its own box goes into that provider's dashboard.
Sell extras
Same tab: "Extra Device Add-on" (Multi-STB licence: monthly price per extra MAG box) and "DVR Recording Add-on" / "Timeshift Add-on" / "Video on Demand Add-on" (Price / month, pro-rated to the subscriber's remaining days; 0 = off). Tick the gateways each one may use under "Allowed Payment Gateways", then Save.
Date of birth and protection of minors (Clients tab)
Settings → Clients has two cards, each with its own Save. "Date of birth" (Off / Optional / Required at sign-up; Optional by default) decides what My Account and self sign-up ask for: Clients → "Record a date of birth" explains each choice, and your privacy policy must mention the year before you ask for it. "Protection of minors" is shown to admins only. It is switched off by default. Switch "PIN-lock porn for under-18 accounts" on only after the review below, and once your privacy policy and terms of service cover it. While it is off, no account is locked and every app and player works as before. The porn keywords and the review list ("Adult content — to review") still decide what counts as adult: the BGPVR Player app (1.8.3 and later) keeps adult channels, films and series off its Home and Search, and a public stream you mark "Porn" is switched off for everyone. "Porn" and "Not porn" settle one item; "Confirm all" marks every listed item as porn.
The account PIN on MAG boxes and the web player (2.9.430)
While protection of minors is on, a locked account (under 18, or locked on request) sees its adult channels, films and series on BGPVR's own MAG portal and in the web player with a lock instead of the picture, as in the BGPVR Player app. Opening one shows a PIN pad. On a MAG box the viewer types the digits with the number keys, or moves with the arrows and presses OK; BACK deletes a digit and closes the pad when it is empty. In the web player the keyboard, a TV remote and the mouse all work. Only the account's parental PIN opens it, never a channel's own lock PIN. A right PIN unlocks that item for "One PIN entry unlocks for (minutes)" (60 by default): on a MAG box for that box, in the web player for that home's internet address. After five wrong PINs in 15 minutes the PIN is locked for 15 minutes; the app, the web player, the MAG portal and My Account count together. An account with no PIN cannot unlock anything: the pad tells the viewer to ask you to set one. The guide of a locked channel stays hidden on the MAG portal. Players that cannot show the pad (other Stalker portals and STB emulators, Xtream players, M3U, Enigma2, Kodi) work as before: locked adult items are left out, and a Stalker client that asks for one anyway gets "Adult content is PIN-locked on this account".
Force a minimum app version (build number)
Settings → Messages → "Versions in announcements" → "Minimum app version (build number)": apps below this build must update before they can be used. BGPVR Player builds that know the field stop below it and lead to the update (Google Play's own in-app update for Google Play installs, the APK for /app and Fire TV installs, a store link elsewhere); builds that do not know it (1.8.5 and earlier) ignore it. 0 = off (the default). The suite sends it as min_version_code in GET /api/app/version next to the published version; set it only to a build every subscriber can actually get, and never above the published app (2.9.339).
Set how long a deleted account is kept
Settings → Clients & privacy, the account deletion card (moved here from the Modules page in 2.9.371, same values). "Account deletion: days kept" (1–365, default 14): how many days an account whose subscriber asked to delete it is kept before it is erased, counted from the end of its paid period, or from the request when nothing is paid (see Clients → "Know what happens after a deletion request"). It must match the period in your Terms & Conditions and privacy policy (BGPVR's own pages say 14 days): change those pages first if you change it. A value outside 1–365 is refused before it is saved. Save with the page's save bar.
Connect the License server for the app versions (2.9.388)
Settings → Messages → "License server (app versions)". The dashboard card "Apps & stores" reads the License server every hour (Read now reads at once); this server no longer reads Google Play itself and keeps no Google Play key. The card shows the version people get in each store: Google Play, Apple App Store, the website download, LG, Samsung, Vidaa. Store lines and alerts are changed on the License server.
(i) help beside unclear labels (2.9.397)
An (i) beside a label opens two sentences on what it means, in the console's language, and "Learn more →" opens this guide at the matching section in a new tab. Click it or press Enter or Space on it; Esc or × closes it (the focus goes back to the (i)). With a mouse it also opens when you rest the pointer on it. You find them on Channels (Quality, Auto-sort, Versions), the Device page, the Speed Editor and the ad editor, and in Settings; since 2.9.399 also on the Dashboard, Clients, Packages, Guide, EPG Manager, Tuners and Nodes.
Billing & payments (2.9.401)
Settings › Billing & payments has a small nav: Payment gateways · Prices & add-ons · Tax information · Revenue. Each gateway is one line (Set up, Missing webhook secret, Being rebuilt, Frozen; and Live, Test mode or Sandbox) that opens to edit its keys. A gateway is offered only when its key AND its webhook secret are saved (NOWPayments: API key + IPN secret). "Subscribers can't buy this" shows on an add-on, the extra device or a plan with a price and no usable gateway ticked. Tax information: country (two letters), tax or VAT number, a short note; shown on Revenue and in the CSV. No tax is calculated.
Take crypto payments with CoinGate (2.9.407)
Settings › Billing & payments › Payment gateways › CoinGate. Mode: Test uses your separate test account at sandbox.coingate.com and its test coins; Live takes real payments. Paste the API token of each mode (in CoinGate: Merchant › API › Apps, create an API app with the callback format JSON) and Save: CoinGate shows Set up once the token of the chosen mode is saved. The suite sends its callback address with each order; if CoinGate asks for one, copy the CoinGate line under Webhook addresses (it must open over https without a redirect). Tick CoinGate on the plans, the extra device and the add-ons that may be paid with it (the add-ons and the extra device start unticked). A payment counts only after the suite has asked CoinGate itself and CoinGate says paid, for the invoice's own amount and currency. Price plans in EUR or GBP. A CoinGate invoice expires after 2 hours (20 minutes once a coin is chosen); the viewer then starts again. Refunds are crypto sends you make in CoinGate: a refund there takes back the add-ons and packs and shows REFUNDED on the payment. While Test is on, only the Test accounts named in Billing & payments see CoinGate and pay with test coins, for free (2.9.410), and Revenue leaves those payments out; switch to Live when you are done.
Test accounts for payment methods in test mode (2.9.410)
Settings › Billing & payments › Payment gateways › Test accounts (client IDs, separated by commas). A payment method in test mode (CoinGate Test, PayPal or Revolut sandbox, Stripe with test keys) takes test money, so a payment through it is free: only these accounts see it and can pay with it. Every other viewer does not see it. Their test payments are left out of Revenue. Switch the method to Live for everyone else.
Online payments need the My Account address (2.9.410)
The payment services send payers back, and send their payment notices, to your suite's own address: the My Account address (Settings › Look & brand), never the address a request claims to come from. Until it is set, online checkouts are refused (viewers see that payments are not available right now) and Billing & payments shows a warning. Set the My Account address first, for example https://tv.example.com/account; the Webhook addresses list shows the address the services are given.
Every Settings card folds (2.9.428)
Every card on every Settings section now folds, the way Integrations & API cards have since 2.9.424. A folded card shows its name, one line about it and, where the page already knows it, a short status such as "Set up", "Not set", "On" or "Off". Click the header, or press Enter or Space on it, to open or close the card; each section with several cards has Expand all / Collapse all at the top. The first time you open a section, its first card is open and the rest are folded (a section with one card shows it open; a card with a warning starts open). Your browser remembers which cards you left open or closed. A search result, a link to a setting, the Billing jump links, a card with unsaved changes and a field that needs checking all open their card, and Collapse all leaves a card with unsaved changes open. Saving does not change: "Save all changes" and Discard at the bottom cover the fields in folded cards too. The Tuner & CAM settings on the Tuners page do not fold.
BGPVR Player for Linux (2.9.433)
Viewers with a 64-bit Linux PC can get BGPVR Player for Linux under My Account › BGPVR App › Get the app, once the Linux files are on your server and the Linux app is switched on (it ships switched off; write to BGPVR support to have it set up). The .deb is for Ubuntu 22.04, Ubuntu 24.04 and newer, Linux Mint 21+ and Pop!_OS 22.04+; the AppImage is for other 64-bit Linux with glibc 2.35 or newer. Viewers on Ubuntu and Linux Mint can also install it from the BGPVR apt repository (apt.bgpvr.com) and get each new version with their system updates; the subscriber help (BGPVR App) has the commands. It is also in the Snap Store (https://snapcraft.io/bgpvr-player, sudo snap install bgpvr-player), and the .deb and AppImage are on GitHub too (github.com/bgpvr/linux). The source of the open-source (LGPL) libraries in the app is listed next to the downloads. For hardware video decoding on Intel graphics the viewer installs intel-media-va-driver. The app signs in with the server, username and password, or with "Sign in with your phone" in TV mode; Esc is Back and F11 is full screen. A Linux PC shows as Linux in Devices. Casting, picture-in-picture, recording to the device and push messages are not in the Linux app; your messages reach it in the app.
Faster pages: the browser keeps scripts and styles (2.9.436)
The console, My Account and the web player open faster after the first visit: the browser (and Cloudflare, when the domain uses it) keeps each script, style and picture until a new release changes it, so a page no longer downloads them again. Pages, account data, streams and downloads are never kept. Nothing to set. Behind your own web server (nginx), do not add a Cache-Control header of your own on top of the suite's: let the suite's answer through.
Subtitle position follows the account (2.9.442)
BGPVR Player 1.9.5.2 lets a viewer move subtitles lower or higher on the screen: Subtitle position: Low / Normal / High. The choice is saved with the account like the other subtitle settings, so every BGPVR Player signed in to the account uses it. An account that never chose one gets Normal. Older apps ignore it.
Skip intros automatically (App defaults, 2.9.484)
App defaults → Playback has "Skip intros by themselves": off by default, so viewers get a Skip intro button instead. Set it on for everyone or lock it like any other app setting; viewers see it in My Account → BGPVR App as "Skip intros automatically". The BGPVR Player app reads it from its next version.
Choose which e-mails your subscribers get (2.9.505)
Settings → E-mails to subscribers. "Your name and contact": Name in e-mails (empty: the sender name of E-mail delivery; with White label the app name of your branding comes first) and Support contact (an e-mail address or an https:// page; empty: the From address, else My Account › Help), both shown in every e-mail. Every e-mail your subscribers get from this server has one layout in your name and goes out in the subscriber's language: their app or My Account language, else your default language; English and Bulgarian together only when it is unknown. Switch each one on or off (all are on by default): Account ready; Code applied, Package changed, Subscription extended, Subscription ends soon (7 days and 1 day before the end), Subscription ended, Account suspended, Account active again; Family member joined, Family sign-in ended. Always sent, shown locked on: Confirm the e-mail address and Set a password (the subscriber needs them to finish signing up; Set a password explains how to choose one in My Account with "Forgot your password?" and a code, never a password), Password changed, E-mail address changed (to the old and the new address) and New sign-in method (they protect the account), Family invitation and Ask to join a family (the invitation itself), Family sign-in paused (it tells the person why their devices were signed out) and Sign-in details (only when you press "Email sign-in details" or "Reset & email a new password" on a client). The Preview card shows any e-mail with sample details in English, Bulgarian or both, exactly as it will look. The name comes from the sender name in E-mail delivery (the From address, for example "Brightline TV <tv@brightline.example>"). With White label the e-mails carry your name, logo and colours and no BGPVR line; without it a small "Powered by BGPVR" line sits at the foot. One Save keeps the switches.
Watch out
- Every card has its OWN Save button and posts only that card's keys — editing three cards and pressing one Save discards the other two.
- The API & Security card and the Forum Sync card both post webhook_enabled: ticking it needs a plan with webhooks (Pro and up), and on Free the save answers 403 "This feature requires a Pro or Enterprise license." With the box unticked both cards save on every plan, and the Email card (SMTP) is not licence-gated.
- The Timeshift Buffer Settings card also posts timeshift_global_enabled (its "On-demand Timeshift for ALL channels (default mode)" checkbox), and timeshift is Pro+ — so a Free-tier operator cannot save that card at all, not even to change the storage path.
- "Enable Webhook Auto-Provisioning" exists on TWO tabs — API & Security ("API & Integrations" card) and Forum Sync — and both cards write the same webhook_enabled key. Saving one card overwrites whatever the other tab's checkbox was showing.
- API keys, the provisioning request, the signed webhook and Forum Sync are described in full in the Integrations & API chapter (linked from the table of contents at the top of this guide).
- Secret fields (TMDB, OMDb, Jellyfin, TVH password, Discourse API key/webhook secret, webhook secret, SMTP password, LLM key, all billing gateway secrets, FCM credentials JSON, Telegram bot token) are returned to the browser as ******** and re-saving is safe (the mask is stripped both client- and server-side), but you cannot read an existing secret back out of the panel. To get a webhook secret you can paste into another system, press Regenerate in API & Security and copy the new value at once (see the Integrations & API chapter).
- Storage paths are CONTAINER paths and the backend creates them with makedirs, so a typo silently "works" until the container is recreated. The DVR and VOD cards both tell you to keep those paths mounted into BGPVR and the bgpvr-ai sidecar.
- Web Player Quality changes apply only to NEW playback sessions — the card says an active viewer must reopen the channel.
- The "Are you still watching?" card's own help text still lists the Android app among the players that ignore the setting. That is out of date: the BGPVR Player app asks too, from 1.7.6. The LG TV package, Kodi and third-party IPTV apps (TiviMate, Smarters, VLC …) do not ask.
- "Always-On Channel IDs" keep their muxes tuned permanently and, per the field help, count against your tuner pool. With "Release idle tuners" also off, tuners stay busy with zero viewers.
- The Branding tab is rendered only when the licence reports white_label (Enterprise) — on other tiers the tab button and its pane do not exist at all. Since 2.9.389 only an admin can save the branding (Settings → Look & brand → White-label branding): staff do not see that card.
- "PayPal is frozen" (Billing → PayPal Configuration) is ticked by default: PayPal is hidden from subscribers everywhere and its checkouts are refused, while your keys, webhook and per-plan choices are kept. Untick it only if you have live PayPal credentials.
- Charge in EUR: Bulgaria is on the euro and dual BGN pricing has ended, so do not enter BGN in any currency field.
- Known billing defects: a paid plan renewal currently rewrites Timeshift/DVR/VOD from the plan, which removes a purchased add-on — re-tick it on the client after a renewal. The add-on price is pro-rated with no ceiling, so an account paid years ahead is quoted a huge price; grant the feature by hand instead.
- Stripe takes a one-off card payment per purchase. Recurring Stripe subscriptions do not extend accounts, so do not offer them.
- The AI quiet window also times scheduled guide refreshes (see EPG Manager). The AI Processing tab appears only with a Business licence or higher; on lower tiers the default 02:00–06:00 window applies and cannot be changed.
- The Settings page is hidden from staff logins. Secret settings reach a staff login masked (********), and only an admin can change the secrets that check incoming requests (webhooks, Discourse, payment callbacks, invite codes), the SMTP server, the trusted proxy list and the server storage paths (timeshift, DVR, VOD, VOD HLS cache, series, backup folder, YouTube cookies file, camd.socket). Give staff logins only to people you trust.
- A staff login can save only the settings on the pages its profile opens: the Signup & Referrals cards (Manage Clients), the public-streams category name on the Streams page (Manage Channels or Manage Relay Streams) and the Jellyfin settings in the Series tab's Jellyfin window (Manage Series). If a save holds any other setting, the whole save is refused with "Permission denied" and nothing is written.
- Loading animation in BGPVR Player 1.8.6 (2.9.358): Settings → Appearance → Loading animation: Automatic, Dish, Scan or Trace. Automatic shows Scan when a viewer changes channel, Dish when a recording, film or catch-up opens, and Trace when playback stops to load; after 10 seconds the app says “Still connecting…” with OK to try again. On a white-label server the animation shows the operator’s logo (Look & brand).
- Account deletion (2.9.371): the days a deleted account is kept moved from the Modules page to Settings → Clients & privacy, with the same values.
- Version fields are automatic (2.9.375): in "Versions in announcements" the Android app version and its build come from the app published at /app.apk, the STB portal version from the MAG portal page and the minimum app version from Google Play. Each field shows "Automatic: …" with its source; a value you type overrides it until you empty the field. An app version above the published app is refused (the apps would ask to update for ever).
- E-mail confirmation lock (2.9.375): with "Ask new people to confirm their email address" on, an account that has not confirmed its address sees only "Confirm your e-mail" in My Account: the address the link went to, "Resend the link" (once a minute), "Change e-mail" (never an address another account has; a trial keeps the one-trial-per-address rule; older links stop working) and Sign out. Every other My Account page and route is refused on the server. The apps, the web TV and TV pairing get the code
email_unconfirmedwith the masked address ("Confirm your e-mail first — we sent a link to p***@gmail.com"); the web TV shows it with a Resend button. A Paid Plan sign-up waiting for its payment is not affected. - Automatic app version on any install (2.9.378): when the server cannot read the app file itself (on a standard install the file at /app.apk is served next to the server, not inside it), the version fields read what the last app publish recorded: version name, build, size and checksum. Until the first publish after 2.9.378 the fields keep their last value.