Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/NuvioMedia/NuvioTV/llms.txt

Use this file to discover all available pages before exploring further.

NuvioTV ships with two distinct experience modes that control which settings, customization surfaces, and integrations are visible in the app. The mode you choose does not restrict what the app can do — it only changes how much of the configuration surface is presented. You can switch modes at any time without losing any data.

The Two Modes

The active mode is stored as an ExperienceMode enum defined in com.nuvio.tv.domain.model:
enum class ExperienceMode {
    ESSENTIAL,
    ADVANCED
}
Essential mode is designed for users who want a streamlined path from install to playback. It answers one question: I just want NuvioTV to work with the least setup possible.Essential keeps:
  • Home, Search, Library, Add-ons, and Settings (simplified).
  • Add-on installation via URL and the phone QR manager.
  • Basic playback controls: stream selection (Manual or Auto), auto-play next episode, P2P toggle.
  • Subtitle and audio basics: preferred subtitle language, forced subtitles, preferred audio language, and decoder priority.
  • Appearance basics: theme and app language.
  • Account sign-in and profile management (primary profile only).
  • About screen.
Essential hides:
  • Layout customization, catalog ordering, and collection editor.
  • Plug-in repository management.
  • Advanced playback tuning, decoder settings, and frame-rate matching.
  • TMDB, MDBList, Anime-Skip, and advanced Trakt configuration.
  • P2P stats overlay, debug tools, and diagnostics.

First-Run Flow

How the mode is determined on first launch depends on whether a prior layout preference exists.
On a fresh install, NuvioTV shows a mode selection screen before the existing layout selection step.
Account sign-in → Mode selection → [Essential: skip layout] or [Advanced: LayoutSelectionScreen] → Main shell
If the user chooses Essential:
  1. ExperienceMode.ESSENTIAL is stored.
  2. The home layout is set to Modern.
  3. Layout selection is marked as completed (hasChosenLayout = true).
  4. If no add-ons are installed, the app surfaces an add-on setup prompt on Home and Search.
If the user chooses Advanced:
  1. ExperienceMode.ADVANCED is stored.
  2. The existing LayoutSelectionScreen is shown.
  3. The full app shell loads after layout selection.
Switching between Essential and Advanced mode does not delete or reset any user data. Add-ons, plug-in repositories, library items, watch progress, theme, layout, playback, subtitle, account settings, and Trakt/account sync state are all preserved. Mode switching only changes which settings are visible.

Feature Visibility Matrix

The table below captures what is shown or hidden in each mode. This is the canonical reference for which controls appear in the UI.
Feature AreaEssentialAdvancedNotes
Home routeShowShowEssential uses Modern layout; hides layout customization controls
Search routeShowShowCore content discovery
DiscoverShowShowEssential hides the toggle that disables Discover
Library routeShowShowFilters and sorting are shown in both modes
Add-ons routeShow (simplified)Show (full)Essential keeps install, QR, installed list, and remove
Add-on reorderHideShowAdvanced organization feature
Catalog OrderHideShowAdvanced home tuning
CollectionsHide by defaultShowEssential may show existing collections; hides the editor
Plug-insHideShow (full flavor only)Gated by AppFeaturePolicy.pluginsEnabled
Account QR sign-inShowShowOptional sync and profiles
Profile managementLimited (primary only)Full
Appearance: themeShowShow
Appearance: languageShowShow
Appearance: fontOptionalShow
AMOLED optionsHideShow
Layout settingsHideShowEssential sets Modern at first run
Player preferenceHideShowDefaults remain active in Essential
Internal engine (ExoPlayer/MPV)HideShow
Auto-switch engine on errorHideShow
Loading and pause overlaysHideShowDefaults remain active
OSD clockHideShow
Skip intro settingHideShowEnabled by default
Frame-rate and resolution matchingHideShow
Stream auto-play modeShow (Manual/Auto only)Show (full, including Regex)
Source scope, add-on/plug-in allowlists, regexHideShow
Next episode auto-playShowShow
Reuse last link cacheHideShow
Preferred audio languageShowShow
Secondary audio languageHideShow
Decoder priorityShowShowShown in Essential subtitles and audio group
Skip silenceHideShow
TunnelingHideShow
Dolby Vision profile fallbackHideShow
MPV hardware decode modeHideShow
Preferred subtitle languageShowShow
Secondary subtitle languageHideShow
Subtitle startup modeHideShow
Subtitle sizeHideShowDefaults remain active in Essential
Subtitle vertical offsetHideShow
Subtitle colors, outline, boldHideShow
libass and render typeHideShow
P2P enable/consentShow when neededShowConsent dialog always appears before first torrent stream
P2P stats overlayHideShow
TMDB settingsHideShowDefaults remain active in Essential
MDBList settingsHideShow
Anime-Skip settingsHideShow
Trakt connectionLimited (see below)Show (full)
Trakt library/progress/comment settingsHideShow
Advanced performance settingsHideShow
Network speed testHideShow
Clear Continue Watching cacheHideShow
Debug settingsHideShow (debug builds only)
Player play/pause/seekShowShowCore playback
Player audio/subtitle/source selectorsShowShowCore playback recovery
Player episode panelShowShow
Player speed/aspect/stream infoHide or behind MoreShow
Player engine switchHideShow

Switching Modes

Both modes expose an Experience section at the top of the settings rail. From there you can switch modes at any time. Settings → Experience → Switch to Advanced (or vice versa)
  • Switching from Essential to Advanced immediately reveals the full settings rail.
  • Switching from Advanced to Essential hides advanced controls but does not reset any values.
  • If active advanced features are enabled (e.g., plug-in scrapers), a note is shown: “Some advanced settings are still active.”

Build Flavor Notes

AppFeaturePolicy gates certain features at build time regardless of experience mode. The full flavor policy is:
Policy FlagValue
pluginsEnabledtrue
inAppUpdatesEnabledtrue
inAppTrailerPlaybackEnabledtrue
externalTrailerPlaybackEnabledtrue
trailerPlaybackModeIN_APP
imdbRatingLogoEnabledtrue
The Play Store flavor defines its own AppFeaturePolicy object with pluginsEnabled = false, inAppUpdatesEnabled = false, and inAppTrailerPlaybackEnabled = false. Even in Advanced mode, plug-ins and in-app updates are not shown in the Play Store flavor because AppFeaturePolicy.pluginsEnabled is false. Experience mode visibility checks are always combined with build policy checks. When a user selects Essential during first run, the following defaults are applied:
SettingValue
Experience modeESSENTIAL
Home layoutModern
Layout chosentrue (skips layout selection)
Search Discovertrue
Player preferenceInternal
Internal engineExoPlayer
Stream auto-play modeManual
Auto-play next episodeOff (visible as a toggle)
Preferred audio languageDevice
Preferred subtitle languageEnglish
Add-on subtitle startup modeAll subtitles
Skip introEnabled
P2PDisabled until explicit consent

Build docs developers (and LLMs) love