Jellyfin AI Recommendations in 2026: Privacy-First Discovery Without the Cloud
Plex has Discover. Netflix has its algorithm. Jellyfin has... nothing built-in. And that is intentional - Jellyfin does not phone home, does not track you, and does not sell your viewing habits.
But "no tracking" does not have to mean "no recommendations." In 2026, the community has built tools that deliver personalized suggestions entirely on your server - no external API calls, no cloud dependency, no data leaving your network.
This guide covers every method available.
The Recommendation Stack
| Tool | Method | Privacy | Setup |
|---|---|---|---|
| LocalRecs | ML embeddings (TF-IDF) | 100% local | Plugin install |
| jellynext | Trakt lists per user | Trakt account needed | Plugin + Trakt |
| Smart Collections | Rule-based dynamic lists | 100% local | Plugin install |
| Kometa | External list sync | TMDB/Trakt API calls | Docker container |
Method 1: LocalRecs - Machine Learning, 100% Local
LocalRecs is the most exciting Jellyfin plugin of 2026. It generates personalized movie and TV recommendations using machine learning - entirely on your server, with zero external API calls.
How it works
- LocalRecs scans your library metadata (genres, actors, directors, tags, decades, ratings)
- It builds TF-IDF embeddings (~1200-dimension vectors) for each item
- It creates a taste profile from each user's watch history
- It ranks unwatched items by cosine similarity to the user's taste
- Results appear as a "Recommended For You" section
This is the same mathematical approach used by Spotify's Discover Weekly - but running locally on your hardware.
Installation
- Dashboard → Plugins → Repositories → Add:
https://raw.githubusercontent.com/rdpharr/jellyfin-plugin-localrecs/main/manifest.json - Dashboard → Plugins → Catalog → LocalRecs → Install
- Restart Jellyfin
Configuration
Dashboard → Plugins → LocalRecs:
| Setting | Recommended | Why |
|---|---|---|
| Minimum watch history | 10 items | Need enough data for meaningful recommendations |
| Include genres weight | 0.4 | Genres are the strongest signal |
| Include actors weight | 0.2 | Actors indicate taste |
| Include directors weight | 0.2 | Directors indicate style preference |
| Include tags weight | 0.1 | Tags add nuance |
| Include decade weight | 0.1 | Era preference matters |
| Refresh interval | Daily (3 AM) | Recalculate after new watches |
What users see
After configuration, each user gets a personalized "Suggested For You" row on their home screen. The recommendations improve as they watch more content.
Performance impact
- Initial embedding calculation: 2-5 minutes for 1000 movies
- Daily refresh: under 1 minute
- RAM usage: ~50-100 MB for the model
- CPU: negligible after initial build
Limitations
- Needs at least 10 watched items per user for meaningful results
- Works best with well-tagged libraries (use TMDB metadata)
- Does not consider ratings (only watched/unwatched)
- Movie-focused - TV show support is basic
Method 2: jellynext - Trakt-Powered Per-User Recommendations
jellynext creates virtual libraries for each user containing personalized Trakt recommendations and upcoming new seasons.
How it works
- Each user links their Trakt account
- jellynext fetches Trakt's personalized recommendations for that user
- It creates a virtual "Recommended" library visible only to that user
- It also shows upcoming new seasons for shows the user watches
Installation
Repository: https://raw.githubusercontent.com/luall0/jellynext/main/manifest.json
Install from catalog → Restart → Configure Trakt API credentials.
Trade-off: Privacy
Unlike LocalRecs, jellynext requires a Trakt account and makes API calls to Trakt servers. Your watch history is shared with Trakt. For users who already use Trakt for scrobbling, this is not a new concern. For privacy purists, use LocalRecs instead.
Best for
- Users who already scrobble to Trakt
- Discovering content NOT in your library (Trakt recommends from its full database)
- Tracking upcoming seasons
Method 3: Smart Collections with jellyfin-smartlists-plugin
Dynamic collections that auto-update based on rules - a simpler but effective recommendation system.
Example smart lists that feel like recommendations
| Collection name | Rule | Effect |
|---|---|---|
| "Because You Watched Sci-Fi" | Genre = Sci-Fi AND unwatched AND rating > 7 | Shows high-rated unwatched sci-fi |
| "Hidden Gems" | Rating > 7.5 AND plays = 0 (across all users) | Nobody has watched these yet |
| "New This Month" | Added in last 30 days | Fresh content discovery |
| "Short Films for Tonight" | Runtime < 100 min AND unwatched | Quick watch suggestions |
| "Critically Acclaimed" | Rating > 8.0 AND unwatched | Top-rated unwatched content |
Installation
Repository: https://raw.githubusercontent.com/jyourstone/jellyfin-smartlists-plugin/main/manifest.json
Configuration example
After install, create lists in Dashboard → Plugins → Smart Lists:
Name: Hidden Gems
Type: Movie
Filters:
- Community Rating >= 7.5
- Play Count = 0
- Year >= 2020
Sort: Rating descending
Limit: 50
Auto-refresh: Daily
Method 4: Kometa for Curated Discovery
Kometa (formerly Plex Meta Manager) can sync external recommendation lists into Jellyfin collections:
- IMDb Top 250 - auto-updated collection
- Trakt Trending - what's popular right now
- Trakt Anticipated - upcoming releases people are excited about
- Letterboxd Top Films - curated by the film community
- MDBList custom lists - community-curated themed lists
# kometa config.yml
libraries:
Movies:
metadata_path:
- pmm: imdb # IMDb Top 250, Popular
- pmm: trakt # Trending, Anticipated
- pmm: basic # Decades, Genres
This is not personalized per-user, but it surfaces content your users might not find on their own.
Combining Methods: The Ultimate Discovery Stack
For the best experience, layer multiple approaches:
- LocalRecs - personalized per-user ML recommendations (home screen row)
- Smart Lists - rule-based collections visible to everyone
- Kometa - curated external lists (IMDb Top 250, Trending)
- Editors Choice plugin - manually featured content on the home page hero banner
This gives you:
- Personal recommendations (LocalRecs)
- Dynamic discovery (Smart Lists)
- Cultural relevance (Kometa/Trakt)
- Admin curation (Editors Choice)
FAQ
Does LocalRecs send my data anywhere? No. All computation happens locally on your server. Zero network calls.
How is this different from Jellyfin's built-in "Suggestions"? Jellyfin's built-in suggestions are basic (recently added, continue watching). LocalRecs uses actual ML embeddings to find content similar to your taste profile.
Can I use LocalRecs and jellynext together? Yes. They create separate recommendation sources that complement each other.
Does this work for TV shows? LocalRecs is primarily movie-focused. For TV, jellynext (via Trakt) and Smart Lists work better.
How much watch history is needed? LocalRecs needs ~10 watched items minimum. Quality improves significantly after 30+ items.
Will this slow down my server? No. The initial model build takes 2-5 minutes. After that, daily refreshes take under a minute. RAM usage is ~50-100 MB.
Recommendations running? Monitor who is discovering new content. Download JellyWatch on Google Play - viewing statistics, watch history, and server health for Jellyfin.
On Emby? Download EmbyWatch on Google Play




Comments 2
LocalRecs is genuinely impressive for a Jellyfin plugin. After 50 watched movies, the recommendations are surprisingly accurate. It correctly identified my preference for slow-burn thrillers over action movies.
The fact that this runs 100% locally with zero API calls is exactly what the Jellyfin community needed. No Trakt account required, no data leaving my network. This is how recommendations should work.
Leave a comment