Real-time lyrics are awesome for listening to music. You can finally figure out what the heck they mean by "bathroom on the right," sing along to your favorite songs, or be struck with existential dread after realizing the complex, layered messages behind the songs from your favorite artists.

Unfortunately, real-time lyrics are also incredibly annoying to access. You might be able to install some sort of desktop application if you're able to get one working (we couldn't), or you can have a floating bubble on your phone screen that you constantly have to swipe away (cough Musixmatch cough). Spotify used to have the feature in their app, but they removed it and instead created "Behind the Lyrics," where you get about one-third lyrics and two-thirds trivia on a small fraction of songs.

Somebody needed to fix this, so here we are.

What it does

Lyrical aggregates—and sometimes produces—real-time lyrics from clunky/restrictive systems to create a service that is easy-to-use, accurate, comprehensive, and pretty. Currently, it integrates with Spotify to show a real-time lyrics display by visiting a website and clicking a button: no installations, searches, or signups.

How we built it

We used Python to integrate Amazon Music, Genius, and auto-generated YouTube captions (and also the Bing Video Search API) to create an API for getting timestamped lyrics. The service can also easily be extended to any new methods for getting lyrics without having to change the client application. The front-end website uses the Spotify API to request and sync the lyrics to whatever the user is listening to on Spotify.

Challenges we ran into

Since integrating services like this wasn't necessarily meant to be done, there were plenty of issues with figuring out how to access the information programatically. The YouTube Search API also has strict rate-limiting, so we had to switch to the Bing Video Search API. The fact that YouTube auto-generated captions are pretty bad also meant converting those to something usable was difficult.

Share this project: