Our work
Festival Scope
BotiqueAI
Festival ScopeLLM · EmbeddingsFilm · Music · Recommendation
Case Study

Music2Watch

From a song to 3 films to watch, with their streaming availability.

Festival Scope is an online platform where audiences watch festival films and organisers build online festivals or virtual cinemas. We built Music2Watch: an engine that analyses the lyrics of a Spotify track, finds the films that echo it, checks where to watch them and ranks them by relevance.

3
films per trackSelection ranked by relevance
6
data sourcesSpotify, Genius, ReccoBeats, TheAudioDB/MusicBrainz, TMDB, JustWatch
LLM
lyrics analysisThemes, plots and “vibe”
2
reranking modesEmbeddings or LLM, configurable
Client
Festival Scope
Festival film platform
Industry
Film & Culture
Streaming, online festivals
Input
A Spotify track
Search by title or ID
Output
3 films
With streaming availability
Stack
FastAPI · OpenAI
Next.js · Streamlit
Quality
Test set
Songs → expected films
The Challenge

Connecting two worlds:
music and film.

A song and a film can relate in two ways: literally (the track is on the soundtrack) or through theme and mood (same story, same feeling). A good recommendation has to cover both.

And a recommendation is only valuable if the viewer can actually watch the film.

Understanding the song
Spotify does not provide lyrics: they must be retrieved (Genius search then page extraction with Firecrawl) and completed with audio features and artist metadata.
Finding reliable films
An LLM alone can invent links. Suggestions are therefore cross-checked against web search, each film getting a confidence score and an explanation.
Ranking and making it watchable
Candidates are filtered by availability (JustWatch) then ranked by closeness to the lyrics.
The Solution

A 4-step pipeline,
exposed through an API.

Each request chains song understanding, film discovery, availability checking and ranking. Everything is traced with Langfuse to monitor quality and cost.

①
Song understanding

Spotify search (title or ID), lyrics found via the Genius API (search) then extracted with Firecrawl, audio features via ReccoBeats (valence, energy…) and consolidated metadata from TheAudioDB and MusicBrainz.

Spotify APIGeniusFirecrawlReccoBeatsMusicBrainz
②
Film discovery

An LLM analyses the lyrics and produces thematic queries (plot and “vibe”). Films come directly from the LLM and from a web search (Google or DuckDuckGo) filtered by the LLM, with a confidence score. Details are enriched through TMDB.

GPT-4o-miniWeb searchTMDBPrompt engineering
③
Availability and ranking

Films are looked up on JustWatch to check availability. Final ranking uses cosine similarity between lyrics and synopsis embeddings (text-embedding-3-small), or an LLM reranker depending on configuration. The top 3 are returned.

JustWatchEmbeddingsCosine similarityLLM reranker
④
Product and operations

FastAPI API (song search, recommendations, availability, reranking) with rate limiting (10 requests/min, 100/day), Next.js interface and Streamlit demo, Langfuse tracing and a test script running on songs whose films are known.

FastAPINext.jsStreamlitLangfuseRate limiting
Impact

A complete engine,
measurable and traced.

3
films returned
Ranked by similarity to the lyrics
6
sources combined
Music, film and streaming
2
ranking modes
Embeddings or LLM
Langfuse
LLM tracing
Every LLM step observable
Tech Stack

LLM stack
and open data

OpenAI LLMs for analysis and ranking, music and film APIs for the data, and FastAPI to expose it all.

AI
🤖
OpenAI (GPT)
Thematic analysis, web result filtering and reranking
🧭
Embeddings
Lyrics ↔ synopsis similarity (cosine)
Data
🎵
Spotify · Genius · ReccoBeats
Track, lyrics, audio features
🎬
TMDB · JustWatch
Film details and streaming availability
Application
⚡
FastAPI
Recommendation API with rate limiting
🖥️
Next.js · Streamlit
Web interface and interactive demo
Quality
🔭
Langfuse
Tracing of every LLM step
🧪
Test set
Songs with expected films, measuring those found
BotiqueAI
Custom AI for culture and media
← Back to portfolio