How a Stremio Taste Profile Makes Recommendations Actually Personal
Most "personalized" recommendation rows in streaming apps are not personalized at all. They are popularity charts with your region's name on top. AI Streams does something different: it builds a real taste profile from the titles you actually engage with, and the recommendations move as your taste moves. This post explains exactly what that means, what data it uses, and why a taste profile beats the generic Trending row you have been scrolling past for years.
Stremio is a legal player and library, and AI Streams is a discovery layer that sits next to it. It decides what to watch, never how to stream it.
First, the part most articles skip: privacy
Before any of the clever math, here is what a taste profile is built from and, just as importantly, what it is not.
It learns from a small set of explicit engagement signals:
- Titles you open and watch inside Stremio. When you click into a movie or series detail page through AI Streams, that counts as a signal that you were interested.
- Your Trakt history, if you connect Trakt. This is the single best source, because it is already a clean record of what you have watched across every device and app.
- MDBList lists you choose to pull in, when you use them.
That is the entire input set. There is no pixel tracking, no cross-site fingerprinting, no selling of anything to anyone, and no building of an advertising graph. The profile is derived only from titles you deliberately interacted with on the platform.
Three things make this safe to opt into:
- You can turn it off. A single "disable taste tracking" setting stops all signal collection. Recommendations fall back to non-personalized catalogs, and nothing is recorded.
- Your data is isolated by a hashed key, not your identity. Every record is partitioned by a one-way hash derived from your install, never your name or email. Your watch history and taste profile cannot be read across to another user, and the system never needs to know who you are to work.
- Credentials are never persisted in the open. On the free tier your keys are AES-encrypted into your addon URL and never written to disk.
If trust is the thing standing between you and trying this, that is the right instinct, and the design answer is: minimal signals, hashed isolation, one-switch opt-out.
What a "taste profile" actually is, in plain English
Here is the whole idea without jargon.
Every title in the catalog gets turned into a point in a kind of map. Not a map of geography, but a map of taste. On this map, slow-burn psychological thrillers cluster in one neighborhood, big loud comic-book spectacle sits in another, and dry British panel comedy sits somewhere else entirely. Two titles that feel similar to a human end up close together on the map. Two titles that feel nothing alike end up far apart. That position-on-the-map is called an embedding, and it is just a list of numbers describing where a title lives in taste space.
Your taste profile is a single point on that same map: the average position of everything you have engaged with.
Watch three brooding sci-fi films and your point drifts toward the brooding sci-fi neighborhood. Add a couple of warm feel-good comedies and your point shifts partway between the two, because your real taste is partway between the two. The profile is not a genre label or a checkbox. It is a coordinate that captures the actual blend of what you like.
Recommendations are then the easy part: find the titles nearest to your point that you have not already seen, and surface those. Nearest on the map means closest in taste. That is the engine.
Why it drifts with you instead of freezing
A taste profile would be far less useful if a binge you finished eight months ago counted exactly as much as the show you started last night. People change. The horror phase ends. The documentary kick begins.
So the profile is recency-weighted. Recent signals pull your point harder than old ones, and old signals fade smoothly over time. Concretely, AI Streams uses a 60-day half-life: a title you engaged with two months ago has roughly half the pull of one you engaged with today, a title from four months ago has roughly a quarter, and so on. Nothing gets deleted with a hard cutoff. Old tastes just gently lose their grip while recent ones lead.
The practical effect is that your recommendations follow you. Go through a noir detective spell and the picks lean noir. Drift into nature documentaries and, within a week or two, the picks follow you there without you touching a single setting.
The technical version, briefly
For the curious, here is the precise mechanism, kept short.
- Titles are embedded into vectors and stored in a pgvector index covering roughly 10,000 popular movies and series.
- Your profile is the recency-decayed centroid of your signal vectors: a weighted average where each signal's weight follows a 60-day exponential half-life.
- That centroid is L2-normalized, so only the direction of your taste matters, not how many titles you have logged. A new user with five signals and a veteran with five hundred are compared on equal footing.
- Recommendations are the nearest unseen neighbors to your profile by cosine similarity, optionally re-ranked by the language model for a final polish.
The important consequence: building your profile adds zero extra tracking and zero extra embedding cost. It is recomputed from the title index that already exists, using only the signals you already generated by using the addon normally.
Why this beats "Popular" and one-size genre filters
A generic Trending row answers a question nobody is asking. It tells you what is popular in aggregate, which is precisely the information least likely to surprise you, because you have already seen the popular things or deliberately skipped them. It is the same row for a horror obsessive and a rom-com devotee.
Genre filters are better but blunt. "Sci-Fi" contains both meditative arthouse and explosive blockbusters, and a single filter cannot tell which one is you tonight. Your taste usually lives in the spaces between genres, exactly where a coordinate on the map can point but a category label cannot.
A taste profile sidesteps both problems. It is not popular-in-general, it is close-to-you. It is not one genre, it is your particular blend across all of them. And because it is recency-weighted, it reflects who you are this month, not who you were when you first installed the app.
This is the same engine behind the rest of AI Streams discovery: the same embedding map powers AI Picks and semantic search, so typing "slow-burn sci-fi like Arrival but darker" and getting your personalized picks are two sides of the same coin. For the full tour of every discovery feature, see the pillar discovery guide. And because Trakt history is the richest signal source, connecting Trakt is the fastest way to make your profile sharp from day one.
The honest caveat: cold start
A taste profile cannot read your mind on day one. With zero signals there is no point on the map to recommend from, and with one or two signals the point is noisy and easily skewed by a single outlier watch.
AI Streams handles this gracefully rather than pretending otherwise:
- The personalized profile activates only after you have accumulated at least five signals, so it never makes a confident guess off a single click.
- Until then, you still get great discovery from non-personalized catalogs: mood rows, trending, top-rated, and curated lists. Nothing is broken in the meantime, it is just not yet yours.
- The single fastest fix is to connect Trakt, which imports your existing watch history and can take you from cold to a well-shaped profile immediately.
A profile that admits when it does not have enough data yet is far more trustworthy than one that confidently recommends from a sample size of one.
Setting it up
The whole thing runs on your own keys on the free tier, or on the managed Pro tier at $4 per month.
- Open the configure wizard.
- Add your TMDB key and an AI provider key (Gemini or OpenAI). Each field has a "Get key" helper link if you need one.
- Connect Trakt when prompted. This is optional but strongly recommended, because it seeds your profile from real history and beats the cold-start wait entirely.
- Install the generated addon URL into Stremio.
- Browse normally. After about five engaged titles, your AI Picks row starts reflecting your actual taste, and it keeps adjusting from there.
If you ever want to stop, flip the disable taste tracking setting in the wizard. Collection stops, and recommendations revert to non-personalized catalogs.
That is the entire model: a private, recency-weighted point on a map of taste, rebuilt from titles you chose to engage with, pointing you at the nearest things you have not seen yet. No popularity charts wearing a personalization costume.
Ready to give your recommendations an actual memory? Configure AI Streams.