Skip to content

Instantly share code, notes, and snippets.

@guuilp
Created July 22, 2026 00:16
Show Gist options
  • Select an option

  • Save guuilp/fa8c2976c6807bc739ec291db2612930 to your computer and use it in GitHub Desktop.

Select an option

Save guuilp/fa8c2976c6807bc739ec291db2612930 to your computer and use it in GitHub Desktop.
NuvioTV Simkl Integration — Product Requirements Document

NuvioTV Simkl Integration — Product Requirements Document (PRD)

Status: Draft for maintainer review
Date: 2026-07-17
Author: Community contributor


1. Executive Summary

This document proposes adding Simkl as a first-class tracking and sync provider in NuvioTV, modeled after the existing deep Trakt integration. Simkl is the fastest-growing Trakt alternative, with dedicated anime support, a modern API, and strong community demand — currently the most requested feature on the NuvioTV repository.

Metric Value
GitHub issue reactions 25 total (16 👍, 5 ❤️, 2 🚀)
Related open issues #803, #1723, #500
Reddit threads (last 6 months) 8+ threads requesting Simkl
NuvioSync already supports Simkl import (web tool)
TV Time shutdown (July 2026) Mass migration to both Trakt and Simkl

Why Now?

  1. TV Time shutdown (July 15, 2026) — massive migration to Simkl, the #2 destination after Trakt.
  2. Trakt limits free accounts to 1 app connection — users are being logged out of NuvioTV because Trakt now limits free accounts to a single connected app. This is actively breaking the Trakt integration for the majority of users who also connect other apps.
  3. NuvioSync already has Simkl import — the server-side bridge exists. Only the TV client integration is missing.
  4. Trakt reliability issues — persistent bugs with continue watching and watchlist/library sync (Reddit reports, issues #2491, #2298, #598).
  5. Simkl's anime support fills a gap — Trakt has weak anime metadata.
  6. Differentiation: NuvioTV would be one of the first Android TV apps with native Simkl scrobbling.

2. Community Demand

GitHub Issues

Issue Title Status Reactions Comments
#777 Simkl full integration Open (enhancement) 25 total 12
#803 add simkl Open (enhancement) 7 total 1
#1723 Sync service (Simkl, AniList, MAL) Open (enhancement) 0 0
#500 Enhancement simkl Closed (not_planned) 0 1

Reddit Threads

Current Workarounds (all suboptimal)

  • AIOMetadata addon — can scrobble but can't end scrobble (no stop event)
  • Syncribullet addon — inconsistent, described as "hit or miss"
  • Third-party browser extensions — no TV integration

"I added SIMKL to my Windows fork. I think Trakt competition is extremely important to at least have them hesitate on bending us over any further." — community member


3. Trakt vs Simkl: Feature Comparison

Feature Trakt Simkl
Auth for TV Device PIN flow PIN flow (same pattern)
Scrobble start / stop (no pause) start / pause / stop / checkin
Auto-watch threshold 80% 80%
Watch history sync ✅ Full ✅ Two-phase incremental
Continue Watching ✅ (with explicit pause endpoint)
Ratings 1-10 scale 1-10 scale
Custom lists ✅ Full CRUD ✅ Full CRUD
Anime tracking ❌ Weak (TMDB-backed) Dedicated (AniDB-mapped)
External IDs IMDb, TMDB, TVDB IMDb, TMDB, TVDB, MAL, AniDB, AniList, Kitsu
Trakt ID reuse N/A ✅ Accepts traktslug directly
Token lifetime 3 months (with refresh) 5 years (no refresh needed)
API rate limit 1,000/5min (apps) 10 GET/s, 1 POST/s

What Makes Simkl Different

  1. Anime support: AniDB-mapped seasons, MAL/AniList/Kitsu IDs. This is a major gap in Trakt.
  2. Explicit pause endpoint: Trakt has no pause — it reuses stop for both pause and completion.
  3. 5-year tokens: No refresh-token complexity. Token only expires if user revokes.
  4. Inline ID resolution: Scrobble and sync endpoints accept IDs directly — no search round-trip needed. NuvioTV's existing contentId (IMDB/TMDB) maps directly.
  5. Accepts traktslug: Existing Trakt-sourced IDs can be reused.

4. Proposed User Experience

4.1 Settings — Integrations

Simkl fits naturally into a consolidated Integrations section (following #2015 — "Move Trakt into Integrations"):

Settings → Integrations
├── Trakt          ● Connected as @username
│                     [Disconnect] [Settings ▸]
│
├── Simkl          ○ Not connected
│                     [Connect to Simkl]
│
└── Watch Progress Source
    ○ Nuvio Sync    ● Trakt
    ○ Simkl         ○ Trakt + Simkl ⏳

4.2 Connecting Simkl (PIN Flow)

Same UX as connecting Trakt today:

  1. User taps "Connect to Simkl" in Settings
  2. TV shows a 5-character code: "Go to simkl.com/pin and enter ABCDE"
  3. User enters code on their phone/computer
  4. TV detects approval and shows "Connected as @username"

4.3 Simkl Settings (When Connected)

┌─────────────────────────────────┐
│ Back                    Simkl   │
├─────────────────────────────────┤
│ Status: ● Connected             │
│ User: @username                 │
│ [Disconnect]                    │
│                                 │
│ ☑ Scrobble playback             │
│ ☑ Sync watch history            │
│ ☑ Sync continue watching        │
│                                 │
│ Continue Watching Window:       │
│ [90 days        ▾]             │
│                                 │
│ [Sync Now]       Last sync: now │
└─────────────────────────────────┘

4.4 Coexistence with Trakt

Simkl and Trakt are mutually exclusive — the user picks one as their single tracking provider. This avoids merge conflicts, dual-write complexity, and confusing UX.

Available modes:

Mode Scrobble Target History Source Continue Watching
Trakt Trakt Trakt Trakt
Simkl Simkl Simkl Simkl
Nuvio Sync Local Nuvio Sync Nuvio Sync

4.5 Migration Path

Migrating from Trakt to Simkl is a one-time external step:

  1. User goes to simkl.com/apps/import/trakt — Simkl's native Trakt importer
  2. User authorizes both Trakt and Simkl; the import transfers watch history, ratings, and watchlists
  3. Back in NuvioTV Settings, user switches Watch Progress Source from Trakt to Simkl
  4. NuvioTV imports the Simkl library, Continue Watching populates, done

No data is lost — Trakt data remains on Trakt. The user can switch back any time, but note the important caveat below.

⚠️ Migration is one-way. Simkl does not offer a native export back to Trakt. If you migrate to Simkl and later want to return to Trakt, your watch history accumulated on Simkl would not automatically transfer back. Only migrate when you're confident in the switch. Your old Trakt history remains untouched on your Trakt account — it just won't include anything you watched after switching.

4.6 Switching Sources

When the user switches their Watch Progress Source:

  • Clean transition: progress and watched items from the old source are preserved in local cache
  • New source populates Continue Watching and library indicators
  • Non-Trakt IDs (kitsu:, mal: from anime addons) are always preserved

5. Phased Rollout

Phase Feature What the User Gets
P1 Auth + Scrobbling + Library Sync Connect Simkl account; playback auto-tracks to Simkl
P2 Sync + Continue Watching Watched history syncs; cross-device resume works
P3 Custom Lists Simkl lists appear in library
P4 Settings polish Full settings page, source switching

P1 — Auth + Scrobbling + Library Sync (MVP)

The user connects their Simkl account in Settings via PIN code (same UX as Trakt). From that moment, every movie and episode they watch is automatically tracked — playback start, pauses, and completion are reported to Simkl. Items finished (≥80%) appear as watched on Simkl. The full watch history is pulled from Simkl on first connect, so library watched indicators reflect the user's Simkl history immediately.

What changes for the user:

  • New "Connect to Simkl" option in Settings
  • Simkl appears as a Watch Progress Source option
  • Library watched indicators sync with Simkl on connect
  • Playback progress scrobbles to Simkl in real time

P2 — Sync + Continue Watching

The user's full watch history is imported from Simkl — watched indicators in the library now reflect what's on Simkl. Continue Watching pulls from Simkl's cross-device paused sessions, so starting a show on another app and resuming on NuvioTV works seamlessly.

What changes for the user:

  • Library watched indicators sync with Simkl

  • Continue Watching works from any device that scrobbles to Simkl*

  • "Sync Now" button in Settings for manual refresh

    * Paused playback sessions expire server-side after 7 days on the Free plan (30d Pro, 90d VIP). The local cache preserves titles in Continue Watching beyond expiry, so the typical daily user won't notice. Cross-device resume may not work for sessions older than the retention window.

P3 — Custom Lists

Simkl custom lists (Watching, Plan to Watch, Completed, etc.) appear in the NuvioTV library. Users can add/remove items from lists directly in the app.

What changes for the user:

  • Simkl lists appear as rows/sections in the library
  • Manage lists (create, rename, add/remove items) from the app

P4 — Settings Polish & Source Switching

Full Simkl settings page with all toggles (scrobble, sync, CW window). Clean source switching between Simkl, Trakt, and Nuvio Sync.

What changes for the user:

  • Full settings page with individual feature toggles
  • "Continue Watching Window" configuration (14–365 days)
  • Seamless switching between progress sources without data loss

6. Open Questions for Maintainers

  1. API key registration: Who registers the Simkl client ID? Needs a SIMKL_CLIENT_ID in BuildConfig.
  2. NuvioSync bridge: NuvioSync already imports from Simkl. Should it sync bidirectionally, or keep Simkl as a client-only integration?
  3. Simkl as Library source: Trakt can be used as a catalog provider. Should Simkl also provide catalogs, or only sync?
  4. Anime support: Should the integration expose anime-specific catalog endpoints, or only track anime watch history?
  5. isTraktCompatibleId() generalization: Currently, non-Trakt IDs (kitsu:, mal:, anilist:) are quarantined locally. When Simkl is active, these should flow through the remote source instead.
  6. Trakt-only features: Comments and "More Like This" remain Trakt-only. Should the UI clarify this?

7. Success Criteria

  • User can connect Simkl account via PIN flow in Settings
  • Playback scrobbles to Simkl in real time (start → pause/resume → stop)
  • Items auto-mark watched at 80% completion
  • Watched history syncs from Simkl into NuvioTV
  • Continue Watching works from Simkl paused playback sessions
  • Ratings submit to Simkl (1-10 scale)
  • Custom lists sync (read + write)
  • User can select Simkl as watch progress source
  • Source switching preserves watched history from the previous source
  • Non-Trakt IDs (kitsu:, mal:, anilist:) are preserved when switching sources

8. Related Issues

Issue Relevance
#777 Feature request for full Simkl integration (25 reactions)
#803 Simkl request (7 👍)
#1723 Multi-service sync request
#500 Simkl enhancement (closed not_planned)
#2298 Trakt sync reliability — Simkl addresses this
#2015 Move Trakt into "Integrations" — aligns with Simkl
#1189 Trakt rating prompt PR — pattern for Simkl
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment