Nuvio
Nuvio synchronization reference.
Synchronize the Nuvio Library, watched history, and resume progress with other supported CrossWatch providers.
Nuvio is a separate CrossWatch sync provider. It is not a traditional media server or tracker. You can select it as either source or target in a pair.
Experimental
The Nuvio sync adapter is experimental. Nuvio API contracts may change and temporarily affect synchronization.
Media-client sync warning: Review Media clients before using a media client as a source or enabling two-way sync.
What Nuvio can synchronize
The Nuvio sync adapter supports:
Watchlist
History
Progress
Ratings and playlists are not supported.
Supported media types
Watchlist
Watchlist synchronization supports movies and shows.
Nuvio does not provide a separate watchlist. CrossWatch uses the Nuvio Library as the Nuvio watchlist.
Adding an item to the CrossWatch watchlist adds it to the Nuvio Library. Removing an item removes it from the Nuvio Library.
Seasons and episodes cannot be added through the Watchlist feature.
History
History synchronization supports movies and episodes.
Shows and seasons cannot be synchronized as watched items. For episodes, CrossWatch uses the show identity, season number, and episode number.
Progress
Progress synchronization supports movies and episodes.
Shows and seasons cannot have their own progress records. Progress requires both a playback position and the item’s full duration.
Before creating a pair
Open Settings → Connections → Clients.
Connect Nuvio.
Approve the temporary Nuvio login code.
Select the Nuvio profile CrossWatch should use.
Save the connection.
Configure TMDb under Settings → Metadata.
TMDb metadata is strongly recommended when Nuvio is a target. It converts IMDb and TVDb identities into Nuvio’s common TMDb identities.
Create a Nuvio pair
Open Settings → Synchronization, then create a new pair. Nuvio can be selected on either side.
Nuvio as source
Use Nuvio as the source when it provides the authoritative state.
Examples:
Nuvio Library to Trakt Watchlist.
Nuvio watched history to Plex.
Nuvio resume progress to Jellyfin.
In a one-way pair, CrossWatch applies Nuvio changes to the target. Target-only changes are not copied back.
Nuvio as target
Use Nuvio as the target when another provider controls the Nuvio state.
Examples:
Trakt Watchlist to the Nuvio Library.
Plex watched history to Nuvio.
Emby resume progress to Nuvio.
When Watchlist Remove is enabled, removing a source item can remove it from the Nuvio Library.
Two-way synchronization
Nuvio supports two-way synchronization. CrossWatch reads both providers and applies its standard merge and conflict rules.
Start with one-way synchronization. Use two-way synchronization only after validating matching and removal behavior.
Recommended first pair
Set Mode to One way.
Enable one feature only.
Enable Add.
Keep Remove disabled.
Enable Dry run.
Run the pair manually.
Review the plan and unresolved items.
Disable Dry run after confirming the result.
Test features in this order:
Watchlist
History
Progress
Watchlist behavior
CrossWatch reads the complete Nuvio Library when building its watchlist snapshot.
When writing changes, CrossWatch preserves existing Library entries and available metadata. It reads the library again afterward and confirms each requested change.
Do not change the Nuvio Library during an active Watchlist run. Library updates replace the complete library and simultaneous changes can conflict.
History behavior
CrossWatch reads watched movie and episode records from the selected Nuvio profile.
Each watched item needs a valid watched timestamp. CrossWatch skips writes when Nuvio already has the same or newer timestamp.
When History Remove is enabled, CrossWatch can remove movie and episode history. This removes the watched state, not the Library title.
Progress behavior
CrossWatch reads Nuvio’s resume position, duration, and last watched timestamp.
A progress write requires:
A supported movie or episode identity.
A valid playback position.
A valid duration.
A valid progress timestamp.
CrossWatch compares source and target timestamps before updating. It can skip writes when the target has the same or newer progress state.
You can also manage these records in Continue Watching. It uses the same Nuvio progress data.
Removal safety
Remove is disabled by default in most CrossWatch configurations.
Removal requires permission from:
The global synchronization settings.
The pair’s feature settings.
The selected synchronization mode.
Start with Add enabled and Remove disabled. Take extra care with Watchlist removals because the CrossWatch Watchlist represents the complete Nuvio Library.
Matching requirements
Nuvio works best with TMDb and IMDb identities. CrossWatch can process TMDb, IMDb, and TVDb IDs.
A direct TMDb identity is preferred. IMDb and TVDb identities may need configured TMDb metadata before CrossWatch can write them to Nuvio.
Items without a usable identity appear as unresolved and are not written.
Troubleshooting
Nuvio is unavailable in the pair selector
Confirm that Nuvio is connected and that you selected a Nuvio profile. Both authentication and profile selection are required.
The pair reports profile_unavailable
The selected Nuvio profile no longer exists or cannot be returned. Open the Nuvio connection and select another profile.
Watchlist items are unresolved
Check for a TMDb, IMDb, or TVDb ID. Configure TMDb metadata when the source provides only IMDb or TVDb.
Episode history is unresolved
Confirm CrossWatch has:
A usable show identity.
A season number.
An episode number.
This adapter does not expose absolute episode or anime episode mappings.
Progress reports duration_missing
The source lacks a usable runtime or duration. CrossWatch cannot calculate or write resume progress without it.
Changes repeat during every run
Confirm that Nuvio returned the written item during verification. Also check for missing IDs, profile changes, API availability issues, or manual changes during synchronization.
Nuvio service unavailable
Retry the run. An experimental adapter may require a newer CrossWatch release after a Nuvio API change.
Module overview
Provider name
NUVIO
Module
providers/sync/_mod_NUVIO.py
Watchlist module
providers/sync/nuvio/_watchlist.py
History module
providers/sync/nuvio/_history.py
Progress module
providers/sync/nuvio/_progress.py
Shared logic
providers/sync/nuvio/_common.py
Provider contract
The Nuvio module implements the standard CrossWatch sync provider interface:
health()build_index(feature)add(feature, items)remove(feature, items)
The module is bidirectional, experimental, read-after-write verified, and able to provide canonical external IDs.
index_semantics is present. Each Nuvio index represents current provider state, not a delta.
Feature manifest
Watchlist
Enabled:
trueTypes: movies and shows.
Unsupported: seasons and episodes.
Operations: read, add, remove, and observed deletes.
History
Enabled:
trueTypes: movies and episodes.
Unsupported: shows and seasons.
Operations: read, add, remove, and observed deletes.
Progress
Enabled:
trueTypes: movies and episodes.
Unsupported: shows and seasons.
Operations: read, add or update, remove, and observed deletes.
Progress writes require duration.
Ratings and playlists
Ratings and playlists are disabled: false.
Nuvio RPC endpoints
The adapter uses authenticated RPC requests.
Profile validation
sync_pull_profiles
Watchlist and Library
sync_pull_library, sync_push_library
History
sync_pull_watched_items, sync_push_watched_items, sync_delete_watched_items
Progress
sync_pull_watch_progress, sync_push_watch_progress, sync_delete_watch_progress
All requests use the selected Nuvio profile ID.
Watchlist implementation
The Watchlist feature operates on the complete Nuvio Library.
Read flow:
Pull Library pages from Nuvio.
Normalize movies and series.
Convert identities into canonical CrossWatch keys.
Build a present-state index.
Write flow:
Pull the current Library.
Resolve requested items.
Merge additions with existing rows.
Preserve available Nuvio metadata.
Remove permitted items.
Push the complete resulting Library.
Pull the Library again.
Verify each requested change.
A lock prevents concurrent Library writes for the same CrossWatch and Nuvio profiles. It cannot prevent external Nuvio changes.
Library metadata
Existing Nuvio Library metadata is preserved where possible. New entries can use configured TMDb metadata.
Supported enrichment includes name, poster, background, description, release information, and genres.
Content identity
Nuvio content IDs currently use formats such as tmdb:550 and tt0137523.
CrossWatch prefers TMDb for writes. For non-episode items, it checks:
Existing Nuvio content identity.
Direct TMDb identity.
Direct IMDb identity.
TMDb metadata resolution from IMDb or TVDb.
Episodes use the show identity, content ID, season number, episode number, and video ID. Without an existing video ID, CrossWatch creates a canonical identifier from the content ID, season, and episode.
History implementation
History uses paginated sync_pull_watched_items calls. The default internal page size is 900. The maximum accepted value is 1000.
Rows are rejected without a supported identity, watched timestamp, or valid episode numbering. For duplicate canonical records, CrossWatch retains the newest watched timestamp.
CrossWatch rebuilds the Nuvio history index after writes to verify them.
Progress implementation
Progress uses sync_pull_watch_progress. Pagination uses last_watched as a cursor.
A valid row requires a content ID, video ID, position, duration, and last watched timestamp. CrossWatch calculates percentage from position and duration.
Before writing, the standard progress policy compares source and target timestamps, positions, and durations. After writing, it confirms the resulting position and timestamp.
Pagination
Library reads use a maximum page size of 500.
History reads use a maximum page size of 1000.
Progress reads use a maximum page size of 1000.
Pagination stops when a page has fewer records than requested. Invalid responses fail the feature read rather than returning a partial snapshot.
Configuration namespace
The default Nuvio connection is stored under nuvio.*.
nuvio.base_url
API base URL. Defaults to https://api.nuvio.tv.
nuvio.access_token
Current access token.
nuvio.refresh_token
Refresh token.
nuvio.expires_at
Access-token expiry timestamp.
nuvio.profile_id
Selected Nuvio profile ID.
nuvio.profile_name
Selected profile display name.
The adapter has no separate feature-tuning keys. Authentication, profile selection, pair settings, and global synchronization controls determine behavior.
Provider profiles
Additional CrossWatch provider profiles can maintain independent Nuvio connections. Each stores separate tokens, profile selection, and connection state.
Pairs select a CrossWatch provider profile through source_instance or target_instance.
Do not confuse the CrossWatch provider profile with the Nuvio viewer profile. The provider profile identifies the complete connection. The Nuvio profile ID identifies the viewer within that account.
Health check
The health check validates:
Authentication exists.
A Nuvio profile is selected.
The selected profile remains available.
Progress, history, and Library data can be queried.
It does not intentionally write provider data.
Possible statuses:
not_configured, ok, token_refresh_failed, auth_failed, profile_unavailable, invalid_response, and service_unavailable.
Verification behavior
The adapter enables read-after-write verification for supported features. An API success response alone is not confirmation.
CrossWatch confirms Library additions and removals, history additions and removals, progress positions and timestamps, and progress removals. Failed verification returns an unresolved or failed operation.
Removal semantics
The module reports observed-delete support for Watchlist, History, and Progress. Actual removal still depends on standard CrossWatch safety controls:
Global remove enablement.
Pair feature removal settings.
One-way removal mode.
Drop guard.
Mass-delete protection.
Observed-delete processing.
The Nuvio module does not bypass orchestrator safety controls.
Current technical limitations
The API integration is experimental.
Ratings and playlists are unavailable.
Watchlist uses and replaces the complete merged Nuvio Library payload.
History and progress do not support standalone shows or seasons.
Progress requires duration.
Anime-specific and absolute episode numbering are unavailable.
Items without a resolvable TMDb or IMDb identity cannot be written.
IMDb and TVDb input may require TMDb metadata resolution.
Nuvio is not a real-time Watcher source or tracker scrobble target.
Last updated
Was this helpful?