How recommendations work
Every score you see is produced by one of three methods, applied in order. The app always uses the most personalised signal it can, and falls back only when there isn't enough data.
Scoring tiers
Collaborative filtering
most personalisedFinds users across the database whose ratings overlap with yours, measures how similar your tastes are (cosine similarity on a sparse ratings matrix), then computes a weighted average of what those users rated — giving more weight to people whose overall taste aligns more closely with yours. The result is a predicted star rating on the same 0–5 scale as Letterboxd.
Requires at least 20 rated films per person and meaningful overlap with other users' histories. When those conditions aren't met, the app moves to tier 2.
Affinity + semantic score
personalisedTwo signals blended together:
-
Affinity scoring — four signals combined into one compatibility score:
- Genre (30%) — your average rating per TMDB genre
- Keyword (45%) — your average rating per thematic keyword ("anti-war", "heist", "moral ambiguity") — weighted higher because keywords are more specific than genres
- Director (15%) — your average rating across a director's films
- Cast (10%) — your average rating across films sharing top cast members; directors carry 2× the weight of cast within this signal
All four signals use temporal decay — ratings from 18 months ago carry half the weight of a rating from today, so the scores reflect your current taste rather than a flat average of your entire history.
- Semantic embedding similarity — when enabled, each film's plot is embedded as a vector using an AI language model. Your taste vector is the temporally-weighted average of embeddings of films you've rated above your personal mean. Candidate films are ranked by cosine similarity to that vector. Finds throughlines that genre labels miss entirely.
When both are available: final = 0.45 × affinity + 0.55 × semantic.
When only affinity is available, it's used alone.
Only needs your own history — no other users required. Enable semantic matching on the Setup page.
TMDB quality signal
least personalisedWhen neither collaborative filtering nor affinity scoring can produce a result (e.g. the film has no genre data, or the user's history is brand new), the app falls back to TMDB's average audience rating. This is shown as TMDB: X.X rather than Match to be transparent that it's not personalised.
Group scoring
When multiple profiles are active, each candidate film is scored independently for each person, then the scores are averaged across the group. Films that both people received a score for are ranked first — meaning a film that works well for everyone surfaces above one that only one person would clearly enjoy. Within that, higher average scores win.
Films watched by anyone in the group (rated or unrated) are always excluded, so you'll never see something either of you has already seen.
Where candidates come from
The recommendation pool is built from two sources:
- Your imported history — every film in your Letterboxd export that the app could match to a TMDB record.
- TMDB recommendations — for every film you've rated 3.5 stars or above, the app fetches TMDB's "similar films" list (3 pages, ~60 candidates per seed). These expand the pool beyond what you've already encountered on Letterboxd.
The pool is refreshed automatically every 6 hours via each profile's public Letterboxd RSS feed, picking up new diary entries without any manual action.
Vetoes
Hovering over any recommended film reveals a ✕ button. Clicking it vetoes that film — it will never appear in recommendations again, regardless of how highly it scores. Vetoes apply to the whole group. You have a 6-second window to undo a veto immediately after clicking.
Your taste profile (live from your history)
These are the genre affinities the app is currently using for compatibility scoring — your average Letterboxd rating per genre, across all your rated films.
Christian
Genres
Themes & keywords
Brighter = higher average rating for films with this theme
Andrea
Genres
Themes & keywords
Brighter = higher average rating for films with this theme