CineGenome

AI Film Recommendation Platform

LIVENext.jsClaude AIPineconeMySQLFastAPIVector Search
CineGenome interface showing a film's cinematic DNA breakdown across visual, narrative, audio and emotional dimensions

Outcome metrics

3,477
Films decomposed into cinematic DNA profiles
4
Independent dimensions per film: visual, narrative, audio, emotional
1 pass
Enrichment cost model — analysis cached, never recomputed per query

The problem

Collaborative filtering recommends what people like you also watched. It cannot explain why, it collapses on films with thin viewing histories, and it has nothing useful to say when your request is 'something that feels like this one, but not the same story'. Taste in film is multi-dimensional — you can love a film's cinematography and be indifferent to its plot — and a single similarity score flattens all of that into one number.

The approach

Decomposing films into cinematic DNA

Rather than one embedding per film, we used Claude to analyse each title along four independent axes and emit a structured profile per axis. Separating the dimensions is what makes the system explainable: a recommendation can point at which axis drove the match.

  • Visual: cinematography, palette, composition, pacing of the cut
  • Narrative: structure, theme, character architecture
  • Audio: score, sound design, use of silence
  • Emotional: tonal arc and the register the film leaves you in

Vector retrieval across 3,477 titles

Each dimension is embedded and indexed separately in Pinecone, so a query can weight axes independently. Relational metadata — cast, year, runtime, provenance of the analysis — stays in MySQL, joined back after retrieval.

  • Per-dimension vector namespaces rather than one blended embedding
  • Weighted multi-vector query so users can ask for visual similarity but narrative contrast
  • MySQL as the source of truth for catalogue metadata
  • FastAPI service mediating retrieval, weighting and re-ranking

Making enrichment affordable

Analysing 3,477 films with a frontier model is only viable if you do it once. Enrichment runs as an idempotent batch job with results persisted; the query path touches vectors and the database, never the model. This is the difference between a demo and something you can leave running.

  • Idempotent, resumable batch enrichment with per-film checkpointing
  • Analysis persisted and versioned, so a prompt change is a re-run decision rather than a per-query cost
  • Query path serves from Pinecone and MySQL only

The outcome

CineGenome holds structured cinematic DNA profiles for 3,477 films across four independent dimensions, and answers similarity queries from cached vectors rather than live model calls — so recommendations are explainable by axis and cost nothing per query beyond retrieval.

  • 3,477 films fully enriched across four independent analysis dimensions
  • Recommendations attributable to a specific axis rather than an opaque score
  • Zero model inference on the query path — enrichment cost paid once, offline
  • Cold-start handled by content analysis rather than viewing history

A public URL for this product is not currently published. The figures above come from HEILC's own build and evaluation records for the project.

Bring us the next one

If your problem looks like any of these — a model that needs to be trusted, a corpus that needs to be searchable, a deadline that is not moving — we should talk.