product
How Filmatic actually recommends a film
Builds Filmatic. Has abandoned more streaming sessions than he has finished.
5 min read

“AI-powered” appears on roughly every product page in this category and tells you nothing. So here is the actual mechanism, in enough detail to judge it.
Step one: describe every film as a list of numbers
Each film in the catalogue gets an embedding, a few thousand numbers derived from text about it: synopsis, genre, keywords, the descriptive metadata. The useful property is that films occupying similar conceptual territory end up numerically close together, even when no shared tag says so.
This is why embeddings beat genre filters. Genre says Arrival and Independence Day are both science fiction. An embedding notices that Arrival sits nearer to Story of Your Life-shaped grief, non-linear structure and quiet awe than it does to an alien invasion picture, because the text around it talks about different things.
Worth being clear about what goes where: we embed text about films, not anything about you. The film descriptions go out to an embeddings API. Your swipes never do. We compute your taste vector inside our own database and it never leaves, and the privacy policy says so in language a regulator could hold us to.
Step two: describe your taste in the same space
Your taste is a vector in the same space as the films. It starts at nothing. Every swipe moves it:
- Liked. Pulls toward that film’s position.
- Seen. You have watched it. This tells us about your history, and it stops us suggesting the film again.
- Save. Interested, not tonight. A weaker pull.
- Skip. Pushes away from that region.
The skip is the underrated one. Most systems infer preference from what you watched, which cannot distinguish “loved it” from “finished it” from “it was on”. A deliberate no gives a clean negative signal, and negatives shape a model at least as much as positives do. Twenty skips tell us more than twenty completed films would.
Step three: rank and filter
Recommending is then mostly geometry. Find films near your taste vector, drop the ones you have seen or skipped, and apply the practical filters: does it stream on a service you actually pay for, in your country, and is the runtime plausible for a weeknight.
Then we truncate the list deliberately. Three to five films, not fifty. A long list is a browsing session, and browsing sessions are the thing we are trying to eliminate.
What this approach is bad at
Every recommender has failure modes, and pretending otherwise is how you lose trust the first time one bites.
A cold start is genuinely cold. With no swipes there is no vector, so the first session shows broadly-liked films rather than anything insightful. It takes a few dozen swipes to become useful. That is the honest cost of not tracking you.
It over-weights recent swipes. A run of horror films drags the vector toward horror. That is correct in the short term and wrong if you were just in a mood. Resetting or steadily swiping outward fixes it.
Text describes films imperfectly. An embedding built from a synopsis knows what a film is about and only indirectly how it feels. Tone, pace and craft barely register. A film with a dull synopsis and extraordinary execution is one we will underrate.
It cannot surprise you the way a person can. A friend recommending something wildly outside your pattern does something a similarity model structurally cannot. This is a real limitation, not a temporary one, and it is why Letterboxd’s community lists remain genuinely valuable.
Popular films have better text. People write more about them, so their embeddings are richer. We correct for this, imperfectly, which leaves obscure films harder to place accurately.
Why not just ask a chatbot
A general assistant is decent at “films like Arrival” and poor at knowing you, because each conversation starts fresh. The value of a taste model is not that any single answer is smarter. It is that the model accumulates. The fiftieth swipe makes every future answer better, and a conversation cannot carry that.
What we will not do
No paid placement. No studio, distributor or service can buy a position. There is no slot to sell, which is the only durable guarantee of that.
No engagement optimisation. The objective is that you watch something you are glad you watched, not that you spend longer in the app. Those goals diverge, and every unpleasant recommender on the internet shows you what the divergence looks like when you pick the second one.
No selling taste data. It is the most personal thing here.
That is the whole mechanism. Not magic. A similarity space, an accumulating preference vector, and a deliberate refusal to optimise for anything except whether the evening was any good.
Keep reading

culture
Why Netflix's recommendations feel worse every year
They probably are not worse. They are optimising something that used to overlap with your interests and now overlaps less. Here is the mechanism.

guide
The twenty-minute scroll: what choosing costs you
The average evening loses real time to deciding what to watch. Here is why more options makes it worse, and the small changes that actually shorten it.