Inspiration

Money Heist, Society of the Snow, The Platform: more than a third of what the world watches on Netflix is no longer in English, and most of us watch it with subtitles. Millions of people are learning Spanish to follow these shows without them.

In Morocco, French is the language of school and administration. I learned it at home, in class, and from cartoons like Kaeloo, The Daltons and Konan l'aventurier. I learned English by talking with friends every day, and by switching YouTube from French to English. Both times, what worked was content I already enjoyed, in the language I wanted.

That is the advice every Spanish learner gets: watch shows in Spanish. But nobody tells you which ones you will both enjoy and actually follow. Research on comprehension says you need to know about 95–98% of the words to follow comfortably. Most learners pick something famous, get lost, and stop.

What it does

Comprende recommends Spanish-language films and series that fit your taste and your level, in English, French or Spanish.

Ask it about any show first. "Can you watch it without subtitles?" takes any Spanish title, in Spanish or English, and answers from its real dialogue: at ~3,000 words you'd know 93% of Money Heist; about 1,000 more words and you can drop the subtitles. Move the slider and the answer moves with you.

  1. Tell it what you love, in any domain: a show, an artist, a book, a game. Qloo turns those into taste signals.
  2. Choose which Spanish you want to hear: Spain, Latin America or both. Accents and words differ, and Qloo then looks for titles released there.
  3. Measure your Spanish in 90 seconds, or pick a level. A yes/no word check with made-up words catches guessing. Words that look the same in English or French (cognates) are left out, because you can recognise them without knowing Spanish.
  4. A planning agent works with Qloo. It resolves your favourites, asks Qloo for Spanish-language titles that match your taste, scores the titles whose dialogue we measured, and asks Qloo which favourite drove each match. You watch its steps live.
  5. Every title is checked against the words you know, measured from real subtitles:
    • Watch now: you'd know at least 95% of the words.
    • A good stretch: 90–95% of the words.
    • Held back on purpose: the title you'd love most but can't follow yet.
  6. An explainer agent writes one specific reason per pick in your language. It uses only Qloo's own description of the title (genre, themes, tone) and the favourite Qloo credits. For example, for Sin nombre and a fan of Breaking Bad, Bad Bunny and Zelda: "Rooted in gripping survival and moral conflict, this raw crime adventure shares the intense danger and gritty atmosphere you enjoy."
  7. Each card shows how much dialogue the film has, and where to watch it in your country (TMDB, data by JustWatch).
  8. A taste × comprehension map places every measured title by taste match and words you'd know. Drag the vocabulary slider to see titles open up as you learn.
  9. Listen in Spanish: artists who sing in Spanish, from the same taste.
  10. A reason to come back. You save titles to My list. After a film, "how was it?" moves your level. Next visit, the home page tells you how many titles came within reach. A weekly "film night" can be added to Google Calendar in one click, with your next film and a link back. Everything stays on your device, and the app installs on a phone. Whether learners do come back is not measured yet: our testers used the app once.
  11. It adapts. "Loved it" becomes a new taste signal, "Too hard" lowers your level, "Not for me" is excluded, and the agent re-plans.

How Qloo powers it

  • /search resolves favourites from any domain (films, series, artists, games, books, podcasts) into Qloo entities.
  • /v2/insights with filter.release_country returns Spanish-language films and series for the learner's taste, narrowed to Spain or to Latin America when the learner chooses. With the same favourites, "Spain" gave 11 of 12 picks produced in Spain, and "Latin America" gave 11 of 12 from Mexico or Argentina.
  • /v2/insights with filter.results.entities scores the 1,464 titles we measured against the same taste, in parallel batches.
  • feature.explainability gives "because you like X" for every pick. When Qloo splits the credit evenly, every favourite that counts is named rather than an arbitrary one.
  • Qloo's own descriptions of each title (genre, plot themes, emotional tone, typed tags) are the only facts the explainer agent may use.
  • /entities with external ids maps our catalog to Qloo exactly (1,438 of 1,464 titles).
  • /v2/tags with filter.tags finds Spanish-language music, filtered to genres sung in Spanish.
  • Taste baseline: each title's average affinity over 10 reference tastes, so the ranking uses lift (how much more a title fits you). Raw affinity gave everyone the same popular series. Between close matches, a small nudge favours titles that are well known (Qloo popularity) and recent, so a first list is not full of 1990s rarities: the median first pick moved from 2009 to 2012, and lists stayed personal (61% distinct titles across 20 learners, vs 8% without Qloo).

Without Qloo there is no taste: the map's horizontal axis, every "because you like…", every reason, and the jump from a game or an artist to a Spanish film all come from Qloo. We measured it on 20 learners. With the same subtitle data but popularity instead of Qloo, they got almost the same lists (8.0% distinct titles, overlap 0.66). With Qloo, 61.0% distinct, overlap 0.04.

How we built it

  • Comprehension data (offline):
    • We listed 15,987 Spanish-original films and series from Wikidata.
    • We checked each title's original language against its English Wikipedia infobox, which dropped 52 titles in English or other languages. Spanish Wikipedia gave the correct title casing.
    • We fetched one Spanish subtitle file per title from the open OPUS OpenSubtitles corpus by HTTP byte range. The archive is 18 GB; we read only what we needed.
    • spaCy lemmatised the dialogue, and a dictionary step repaired verbs with attached pronouns (déjalo to dejar).
    • Words were ranked by how many titles use them. For each of 1,464 titles we stored the share of words known at every vocabulary size, plus dialogue density (words per minute of running time) where the running time is reliable.
  • Two agents, numbers never from a model:
    • The planner (Gemini, with tool calling) decides the Qloo calls.
    • A deterministic ranker orders the results.
    • The explainer writes the reasons, and its output is checked: right titles, three languages, no numbers.
    • If Gemini is down or out of quota, open models through OpenRouter take over. If no model answers, the same tools run as a fixed plan.
    • Steps stream live to the browser; tool calls run in parallel.
  • Web:
    • Next.js, mobile-first, English, French and Spanish, light and dark.
    • The map recomputes coverage in the browser with the same maths as the Python pipeline, checked on 400 cases in CI.
    • The home-page example replays a recorded real run, labelled with its date, so it loads instantly and saves the free model quota; your own search always runs live.

Challenges we ran into

  • Wikidata lists Spanish as the only original language of some English films (Extinction, The Nun, White Lines). We now also check the English Wikipedia infobox, which removed 19 titles from our measured catalog.
  • The lemmatiser left verbs with attached pronouns unrepaired, which made the median film look like it needed 4,500 words instead of 3,000. Repairing clitics and inflections fixed it; 28 test cases guard it.
  • Our own title checker made mistakes (it matched Pixar's Coco to a Spanish film called El coco). We fixed it before trusting the baseline numbers, and we do not claim the model invents titles, because our automatic check cannot prove that.
  • Qloo's release-country filter also returned English-language co-productions (Enemy, The Machinist). We check each result's IMDb id against our Spanish-original list.
  • Raw affinity made every list look the same: popular Spanish series scored about 0.85 whether the learner loved Up or The Lord of the Rings. Ranking by lift over 10 reference tastes fixed it; the reference tastes are separate from the evaluation profiles.
  • We tried Qloo's location signal and kept it out. For a learner who wants Spanish from Spain or Latin America, we added signal.location.query (Madrid, Mexico City) to the same calls. Picks became newer, but on our 20 evaluation profiles distinct titles fell from 54% to 14% (Spain) and from 55% to 10% (Latin America): 18 of 20 learners got Las chicas están bien, 20 of 20 got Ema. A city's favourites drowned each learner's own taste, so the variety choice stays a release-country filter, now also checked against where each title was made.
  • Qloo's broad "Latin" tag covers French singers too, so the music lane requires a genre sung in Spanish.
  • The language model was the weak link:
    • At first the agent completed only 1 run in 4. The large model timed out, and Qloo tool time counted against the model's budget.
    • A fast model, a model-only time budget and parallel tool calls brought it to 12 of 12 runs, in 7–13 s.
    • Free quotas led us to add open-model backups and the recorded example.
  • Three people at once broke it: a viability audit before submission ran three searches at the same moment in production, and one learner got an empty page: each search sends about 30 Qloo requests in parallel, and Qloo refused the burst. The server now keeps at most 6 requests in flight and backs off with jitter; five simultaneous searches then finished with no refusal. The same audit found that a Qloo outage showed a generic error; it now says so in seconds and points to what still works.
  • Cognates inflated the word check: English and French speakers recognised inaceptable or fotografía without knowing Spanish. We removed them.

Accomplishments that we're proud of

  • A comprehension measure built from real dialogue for 1,464 titles, validated against published research, with its failures reported.
  • Agents that show judgment on screen: one holds back the title you'd love most until you're ready, and the other explains each pick in your language from Qloo's own descriptions.
  • Every number on screen is traceable to Qloo or to subtitle data.

Evidence

  • The measure matches published research. The median title needs 3,000 lemmas for 95% coverage; Webb & Rodgers (2009) found about 3,000 word families plus proper nouns for English films.
  • A language model alone ignores level. On 20 fixed taste profiles, Gemini without Qloo or subtitles named 85 titles we could measure:
    • 58.8% were followable at the learner's level;
    • 14.1% fell below 90% coverage.
  • Comprende on the same profiles, first five picks: 70.0% followable at the learner's level (Gemini alone: 63.8%), 0.0% far too hard (10.6%), 99.0% verified as originally Spanish (90.0%).
  • Without Qloo (same data, popularity instead of taste): 8.0% distinct titles across the 20 learners, overlap 0.66; with Qloo 61.0% and 0.04.
  • Real people, 15 testers (10 learning Spanish):
    • none needed help to get results;
    • median time to results was 15 s;
    • they would watch 4.2 of the first 5 picks on average (learners 4.4);
    • every tester who answered explained "held back on purpose" correctly in their own words;
    • the one point of confusion, the map, was redesigned.
    • Quote: "u give me the will to rewatch casa del papel and other spanish shows."
  • Blind comparison: 9 testers each gave three favourites of their own and saw two lists of five, Comprende's and Gemini's alone, without knowing which was which. 5 of 9 preferred Comprende's list, and each picked the title they would start from the list they preferred. Those who chose the chatbot mostly went for a very famous series (Élite, Vis a vis) or a title matching a favourite head-on (Narcos → Pablo Escobar, el patrón del mal). Nine is a small sample, and we did not record which titles testers had already seen. A first attempt had shown every tester the same two lists built from placeholder favourites; we discarded it, as well as one later session whose lists had not been made for that tester.

What we learned

  • Taste and level are separate problems: a recommender can be personal and still set a learner up to quit.
  • Measuring our own tools mattered as much as building them. Several first assumptions were wrong until tested: Wikidata languages, the lemmatiser, the title checker, why series are missing.

What's next for Comprende

  • Series: the open subtitle corpus holds almost only films (40 of 1,464 measured titles are series). Next step: a licence with OpenSubtitles or with the streaming platforms, to measure series the same way.
  • More languages: the pipeline is language-independent and the corpus covers French and English, which learners in Morocco and elsewhere need.
  • Measuring progress over weeks, not only comprehension on day one.
  • Partnerships: a "what to watch next, at your level" layer for language apps and streaming platforms.

How to try it

No login.

  1. Open https://comprende.vercel.app. "Try an example" replays a recorded real run in a few seconds.
  2. On the home page, type a Spanish title you know in "Can you watch it without subtitles?" (Money Heist, Roma, The Platform) and move the vocabulary slider.
  3. For your own search, pick favourites, choose "Getting by" for the fastest path, and press the button. A live run takes about 10–20 seconds, and the agent's steps appear as they happen. If the free language-model quota is busy, the same Qloo tools run as a fixed plan and the results are the same kind.
  4. Under the picks, "Your weekly film night" adds a repeating Google Calendar event with your next film.
  5. Switch EN / FR / ES and light / dark from the header.
  6. The methods page (https://comprende.vercel.app/method) shows the evidence.

Built With

Share this project:

Updates

Submission history