Inspiration

We were inspired by the recent opening of the Princeton University Art Museum and wanted to facilitate the appreciation of its collections from off-campus via an interactive game where users engage with randomly selected artwork and explore similar pieces.

What it does

How we built it

Our project’s backend, built with Django REST Framework, fetches data from the Princeton Art Museum API, stores artworks and makers in a local database, generates relationship graphs using NetworkX, and runs a weighted Breadth-First Search (BFS) algorithm to compute the shortest connections between artworks. The frontend, developed with React + Vite, uses D3.js and Recharts for dynamic network visualization, providing an interactive interface for selecting start and target artworks and displaying metadata such as artist, culture, year, and medium in cards and modals. The data flow begins with the backend importing and normalizing art objects, constructing connections based on similarity weights, running BFS to determine the shortest path, and sending results to the frontend, which visualizes the connections as an engaging live art network.

Challenges we ran into

Our biggest challenge was ensuring that our algorithm remained efficient when processing a large number of images. With so much data, it was easy for the system’s performance to slow down or “blow up” as the workload increased. We had to carefully optimize the algorithm to handle image-heavy operations smoothly without compromising accuracy or speed. We overcame this challenge by testing different types of connections, such as removing the material connection. We also limited the connections by focusing more on the stronger connections and negated the weaker connections, which made our algorithm run smoother.

Accomplishments that we're proud of

We’re proud of successfully building a fully functional full-stack web application that bridges art and technology by visualizing connections between artworks from the Princeton University Art Museum. Our team implemented an optimized weighted BFS algorithm and interactive graph visualizations that make exploring art both intuitive and engaging. Despite challenges with data volume and system performance, we achieved smooth integration between the Django backend and React frontend, creating an efficient and visually appealing user experience. Most importantly, we’re proud of how we collaborated effectively, learned new technologies, and brought an innovative idea to life within a short timeframe.

What we learned

Through this project, we learned how to balance functionality with performance, especially when dealing with large datasets. We gained a deeper understanding of optimizing algorithms for scalability, integrating frontend and backend systems, and debugging complex interactions between them. This experience also helped us improve our collaboration and version control skills using Git and GitHub.

What's next for Six Degrees

Future improvements include: In the future, we plan to enhance the efficiency of our algorithm further and explore ways to automate image categorization. We also hope to add more interactive features to the user interface and improve data visualization. Expanding the dataset and implementing machine learning models to refine image relationships are potential next steps for making the project more robust and intelligent.

Potential features to develop concern increasing user engagement. A working CAS authentication system can generate user profiles that save histories of games played, and least amount of connections, and keep track of log-in streaks for daily engagement. Perhaps the same sample of objects can also be generated each day for users to compete against each other and a public leaderboard feature could be implemented.

In addition, the ability to choose easy, medium, and hard modes that change the amount of hints you receive, the amount of connections away the target is, and the amount of connections suggested per art object would lead to more user engagement (perhaps develop a similar model to NYT Pips). We could also implement a free-play or arcade mode, where the user can play endless medium mode games.

It would also be informative to have a brief text blurb about the target piece upon victory (reference texts field from objects JSON data).

Built With

Share this project:

Updates