Most catalog marketing dies on a search problem: nobody can remember which of millions of recordings fits the brief in front of them. Ask in plain language. Get a ranked shortlist, each pick with a stated reason and a commercial-opportunity score.
How this works, and what I'd fix with a real data pipeline
The architecture argument
Enrichment is static; trends are dynamic. So you enrich once per recording in batch, and query continuously. Re-running inference across the whole catalog every time a trend moves is the expensive, wrong way round. This prototype is the query layer sitting on top of a pre-enriched corpus.
Scoring
Brief fit — the query is normalised, expanded through a synonym layer (sad → melancholy, grieving, wistful), then matched against weighted tag fields. Mood and context and sync-brief carry the most weight; texture, vocal and theme carry less.
Commercial opportunity — deliberately not the same as popularity. It rewards dormancy (streaming rank low relative to the corpus, so there is headroom) and anniversary proximity (a round-numbered year gives press and playlist teams a reason to say yes). The biggest hit is rarely the best pick, because it is already being exploited.
The slider is the actual product decision. A sync supervisor wants fit at ~90. A catalog marketer planning a quarter wants opportunity at ~50.
Data, honestly
Track metadata, artwork, streaming rank, BPM, loudness and ISRC are real, pulled live from the Deezer public API across 71 Warner-family catalog artists.
The mood / context / sync-brief / texture / theme tags are LLM-authored for this sample. At production scale they would come from audio models plus lyric analysis plus an LLM pass, not from hand curation.
Original release years were resolved manually. The raw API returns the release date of whichever reissue is being served, so “Take on Me” comes back as 2007 and “Respect” as 1995. That drift is not a footnote, it is a live catalog problem: it silently breaks anniversary planning and era-based pitching across the whole estate.
229 recordings is a sample, not a catalog. The point is the ranking model and the interaction, both of which are corpus-size independent.
What I'd build next
Evaluation before scale. A few hundred human-labelled briefs with precision@10 measured per query type. Without it this is a demo, not a product.
Trend ingestion so a TikTok sound spike or a sync brief becomes a query automatically, rather than someone typing it.
Rights and territory filters. A perfect match you cannot clear is worse than no match, because it wastes the supervisor's turn.
Feedback loop. Every shortlist a marketer accepts or rejects is training signal. That is the moat, and it only exists if the tool is where the work actually happens.