Inspiration
I was inspired by the idea of "Can you use ML to classify different anime studios?"
Platforms like Crunchyroll manage thousands of anime titles, along with metadata such as their production studios. Keeping that information organized at scale can be tedious and difficult to automate. I wanted to take that idea and explore whether a model could use anime frames to help classify studios and automate part of that classification process.
What it does
StudioArtNet is a ResNet-50 computer-vision classifier that predicts which of seven animation studios produced a given anime frame.
The seven classes are:
- MAPPA
- Ufotable
- Trigger
- Wit Studio
- Bones
- Madhouse
- Kyoto Animation
The project also includes an interactive web game where users can challenge the model by guessing the studio themselves. Behind the game, StudioArtNet provides confidence-based predictions and Grad-CAM visualizations to investigate what the model is actually focusing on when making its decision.
The broader goal was to explore StudioArtNet as a potential assistive layer for anime metadata workflows, where visual predictions could suggest studio metadata or flag uncertain cases for human review rather than replacing human judgment.
How I built it
StudioArtNet was built as a full-stack web application with a PyTorch machine-learning backend and an interactive frontend.
For the dataset, I scraped anime frames from Fancap archives using four images per episode. I used imagededup with PHash to remove near-duplicate images and balanced the training dataset to 320 images per studio, resulting in 2,240 training images.
Dataset Collection and Cleaning:
- Camoufox + Playwright
- PHash
Machine Learning:
- Pytorch
- ResNet-50
- Two-stage transfer learning
- Grad-CAM
Frontend:
- HTML, CSS, and JavaScript
Backend:
- FastAPI
Challenges I ran into
One of my biggest challenges was dataset collection. At first, I tried to collect the images through simple requests, but Fancaps didn't allow the download to happen. Then I switched to Playwright. It did better than requests, but Cloudflare's bot detection stopped it from downloading the images. Finally, I found Camoufox, which could pass the bot detection and download the data for my dataset.
Another challenge was my initial evaluation misleading me! I discovered that frames from the same anime could appear in both the training and validation sets. This meant the model could potentially recognize show-specific content instead of learning characteristics that generalize across different shows. I rebuilt the evaluation using show-disjoint splits, keeping entire shows completely separate from the training data.
Accomplishments that I'm proud of
I am proud of creating an entire StudioArtNet experience from the ResNet-50 model to the FastAPI backend and interactive web game. I built the project end-to-end rather than just training a model. I also loved working through the site's bot detection problem and collecting the data needed for training.
What I learned
Through StudioArtNet, I found that anime studio visual identity is much more complicated than a single consistent art style. Studios can change their visual characteristics depending on the anime they work on, the production, and the teams or divisions involved. This helps explain why generalizing from known shows to unseen shows was so difficult.
One particularly interesting result was Studio Trigger. Trigger showed a stronger recurring visual signal across unseen shows, particularly in linework, silhouettes, and overall composition. It also achieved the strongest held-out recall at around 68%.
The biggest lesson was that a model can predict without necessarily learning the concept you think it learned. Accuracy alone does not tell the whole story; dataset design, generalization, and interpretability matter just as much.
What's next for StudioArtNet
- Expand the dataset with more studios and shows per studio
- Cleaner workflow for Metadata generation
- Explore whether different models or model architectures can improve classification
Built With
- camoufox-playwright
- fastapi
- html-css-js
- pytorch
Log in or sign up for Devpost to join the conversation.