Lineup List

Lineup List site
github

Background

For every festival I go to, I like to create my own playlist of the artists that will be there and whittle it down to the artists that I want to see. This helps me find new musicians that I like without having to keep listening to those I know I don’t want to see. It’s kind of a pain to have to search every artist on the lineup and then manually add a few of their top songs to a playlist though. For 3-day festivals with a ton of performers, this was taking me close to an hour, so I figured there had to be a better way to go about doing it.

There are a couple of tools that bill themselves as a “festival playlist builder” that I found from a quick search, but they seemed to be more focused on creating fake festival lineups based on your listening habits. None seemed to tie together the customization that I wanted of a real lineup with a Spotify playlist. So I built it.

I finished the first iteration of this project in January 2020, 2 months before COVID completely shut down the world. It sat on the back burner for the last year, but in the last few months, I’ve polished it, improved it, and released it to a small section of the public. Within the first week of making it available to several smaller subreddits, the site was visited over 500 times with almost 200 unique playlists generated and zero reported failures and downtime.

Functionality

Lineup List is intentionally a pretty barebones site. The first step is to choose a festival, then choose a year from the dynamically updated list of supported years for that festival. This triggers a lookup of the artists that will be performing at the festival in the Redis cache. For any not found, Lineup List retrieves their info from the Spotify API and caches it for next time. The user is then presented with a list of every artist, along with several filtering and customization options.

Playlist customization

There is a set of playlist options that allow the user to choose how many tracks are added to the playlist per artist, and also how those tracks are chosen. There are three track types: top, recent setlists, and newest. Top tracks takes the songs straight from Spotify’s most popular list of tracks for that specific artist. Recent setlists uses setlist.fm to gather the songs the artist most recently performed, then retrieves those songs from Spotify. Finally, newest tracks populates the playlist with tracks released most recently by the artist.

Filtering

Users can adjust what artists end up added to their playlist by checking or unchecking specific artists shown in the overall lineup list. To narrow down which artists they might enjoy, the full list of genres represented by the artists is parsed and displayed in a second column. By unchecking certain genres, the opacity of each artist in the list changes depending on how many of its genres are still selected.

The customization page for a specific festival showing track number & type, day, genres, and artists

The customization page for a specific festival showing track number & type, day, genres, and artists

This was an annoyingly difficult feature to get working well - the Spotify API returns anywhere from one to ~10 genres per artist, and some of them are crazy obscure (‘vapor twitch’ anyone?). I had to bucket each artist by the single “main” genre they fall into by searching through their individual genres to match them to a main one, and then weight that genre higher in terms of opacity change. When I was first listing all genres received, it was longer than the artist list itself!

A second supported filter is the festival day. If a festival has released daily lineups (rather than the blanket, full artist list initial lineup) users can check or uncheck specific days to only include artists on that day. This is a nice feature for those only attending a single day of a multi-day festival.

Once they choose the generate the lineup, the user sees a list of tracks grouped by each artist they chose plus a link to each artist’s Spotify page. These tracks are fetched and similarly cached from the Spotify API as the artists.

The last step is to click the button the generate a playlist. This takes the user through the 3-legged OAuth flow on Spotify’s domain to allow Lineup List to create a playlist in their account. They have the opportunity to open the playlist in the Spotify web player straight from the page, return to the customization page to change options, or start over for a new festival. Each successive regeneration of a specific festival lineup and year will overwrite the existing playlist in the user’s library so they don’t end up with multiple duplicates. They can also generate lineups for an unlimited amount of festivals.

Next steps

Overall, this project has worked well and received a large amount of positive feedback from the community. There are some improvements and additional functionality that could be added though.

The largest difficulty is translating the artist names from a lineup to their actual artist object and ID within the Spotify API using their search endpoint. Right now, I’m simply taking the first artist in the list returned from searching the artist name, and 95% of the time that works just fine. There is some logic on Spotify’s end that weights artist popularity into the order of artists returned, however, instead of just going off of text-matching for the artist name. This means that searching Spotify’s API for artists with a name like Claud will return an artist list where the first element is Claude Debussy. Even though it would be crazy cool for him to make an appearance, I doubt a late 19th-century composer will be showing up at festivals anytime soon. There needs to be more logic in the Lineup List code to accurately parse results from the API instead of just taking the first result.

Several other improvements of other features are: