Inspiration
Curate your perfect playlist with ease.
Many of us enjoy listening to music, and often times we will create playlists to fill with our favorite songs. However, after many additions, not every song in a playlist would fit certain moods or themes. For instance, what if we wanted to listen to exciting, upbeat songs for a quick workout session? What about soft, chill songs for a focused study session? Manually selecting tracks from a playlist for these purposes is very time-consuming on the user's part, so we created an application that automates this process.
What it does
Our application takes in a user-created playlist from Spotify and extracts songs that fit the description provided by the user. From there, the user can further customize the newly extracted playlist and save it back to Spotify, where they can stream effortlessly.
How we built it
We used Django, Next.js, and React for the backend-frontend stack. Our project is compartmentalized into /front-end and /backend. /front-end contains the main page that is updated dynamically based on Spotify authentication and user state. /backend contains a standard django package with views being published to urls that are accessed by the front end. /backend also contains /ml, which contains the initialization and view for the ZeroShot Classifier. ZeroShot is a type of classifier that allows a pre trained model to classify text into labels it has never seen before. Our front end queries this ML algorithm with an input playlist and natural language, and the algorithm returns a filtered playlist.
Challenges we ran into
Our three biggest challenges were cleaning the data to be used effectively for our ML, using Spotify Authorization correctly, and correctly integrating the ML into the website.
Cleaning the data required extensive analysis of each category, including calculating metrics about each feature and normalizing the data. Furthermore, in order to avoid redundancy, we needed to delete duplicate rows and concatenate songs with multiple genres together. Finally, we removed unnecessary columns to prepare a clean and concise analysis.
To integrate the model that we tested out originally in a notebook, multiple files were needed. The model had to be initialized correctly, and the call from the front end had to be routed through both the main project urls.py and the api/urls.py. We also had to ensure that the model received the correct input and outputted correctly.
Accomplishments that we're proud of
As a team with relatively little experience participating in hackathons, we are proud of ourselves for being able to dedicate our time and commit to finishing a project. In addition, although our team members are well-experienced in coding, we don't have much experience creating full-stack projects. Overall, we were proud to be able to complete a project with a working front and back end that we were happy with.
What we learned
While many members of our team have had substantial coding experience, each member worked with unfamiliar software and languages and we all walked out of the experience significantly more knowledgeable about the languages and technology we worked with. In addition, we also learned how to work better as a team. At the beginning of the hackathon, we were a little unsure of our part in tackling the challenge of making our idea a reality. However, over the past 36 hours, we gradually found our stride as each of us found our role in creating a functional full-stack playlist sorter.
What's next for Playlist Curator
Going forward, Playlist Curator can be improved by training a better customized natural language processing model for our purposes and optimizing the time needed to extract a playlist. Additionally, more helpful features such as combining multiple playlists and extracting from "liked songs" would greatly enhance the user experience.
Log in or sign up for Devpost to join the conversation.