NuvioTV maintains a local library of everything you have saved or started watching, and optionally syncs it to the cloud through your Nuvio account. The Library screen also surfaces your debrid provider’s cloud file storage and, when Trakt is connected, your Trakt watch lists.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.
Local Library
Stored on device using DataStore. Records watch progress per movie and per episode, saved items, and watched history. Works fully offline with no account required. Each profile has its own isolated local library.
Cloud Sync
Sign into a Nuvio account (Supabase-backed) to sync watch progress and saved items across all your devices. Cloud sync is additive — local data is never deleted when you sign in.
Watch progress
WatchProgress is the core model for tracking playback state:
WatchProgress.STARTED_THRESHOLD (2%) marks when an item is considered started; WatchProgress.COMPLETED_THRESHOLD (90%) marks it as completed. resolveResumePosition() handles the case where the stored duration differs from the actual stream duration — it falls back to the stored progressPercent fraction when available.
Continue Watching
The Continue Watching row on the Home screen is populated from allWatchProgress records that are in-progress (started but not completed). ContinueWatchingSortMode controls row ordering:
| Mode | Behaviour |
|---|---|
DEFAULT | Sorted by lastWatched timestamp, most recent first |
STREAMING_STYLE | Groups series together, placing the next unwatched episode adjacent to the last-watched episode |
The Continue Watching cache can be cleared from Settings → Advanced → Clear continue watching cache. This removes the local progress records but does not affect cloud-synced history.
Saved items
SavedLibraryItem records a title you have explicitly bookmarked:
LibraryEntry is the unified model used when Trakt list data is merged with local saves. It is a standalone data class (not a subtype of SavedLibraryItem) that carries all the same display fields plus Trakt-specific additions: traktRank: Int?, imdbId: String?, tmdbId: Int?, traktId: Int?, listedAt: Long, and a listKeys: Set<String> that records which library lists the item belongs to.
Watched history
WatchedItem is a lightweight record written when an episode or movie is marked as fully watched:
Cloud sync (Nuvio account)
Signing into a Nuvio account (see Profiles) enables bidirectional sync of watch progress and saved items across all devices signed into the same account. Sync is triggered automatically on app launch and on relevant data changes. TheAuthManager manages the Supabase session; get_sync_owner is a server-side RPC that resolves the effective user ID when a device is linked via a sync code rather than a direct account sign-in.
Trakt integration
When a Trakt account is connected, NuvioTV syncs watch history in both directions:- From Trakt —
WatchProgressrecords are created from Trakt playback history (source = SOURCE_TRAKT_PLAYBACK), Trakt watch history (SOURCE_TRAKT_HISTORY), and Trakt show progress (SOURCE_TRAKT_SHOW_PROGRESS). - To Trakt — local watch events are scrobbled to Trakt.
LibraryListTab entries with type = WATCHLIST or type = PERSONAL. Each tab’s traktListId and slug identify the remote list. Privacy is tracked via TraktListPrivacy (PRIVATE, LINK, FRIENDS, PUBLIC).
Debrid cloud library
Torbox and Premiumize users can browse their debrid cloud storage directly from the Library screen. The integration is built aroundCloudLibraryProviderApi:
TorboxCloudLibraryProviderApiandPremiumizeCloudLibraryProviderApiimplement the provider-specific API calls.CloudLibraryItemrepresents one entry in the cloud (a torrent, usenet download, web download, or file) with fieldsid,name,type(CloudLibraryItemType),status,sizeBytes,progressFraction, and afileslist.CloudLibraryFilerepresents an individual playable file within an item, carrying aplaybackUrlwhen the file is ready to stream.CloudLibraryUiStateaggregates all configured providers into a unifiedproviders: List<CloudLibraryProviderState>for display.
CloudLibraryPlaybackResult.Success with the resolved URL and opens the player directly.
