Inspiration:
Filmocracy is born out our own movie night experiences with a large friend group. These late night sessions are supposed to be moments of bonding, but they very quickly turned into something we dreaded. Some nights we kept pushing them back, simply because none of us wanted to spend 45 minutes arguing about what to watch. Every suggestion drew a counterargument, and recommendation apps couldn’t help, since they are built for a single viewer and want dozens of ratings before offering anything. We realized the answer was already in everyone’s pocket. An Instagram Explore feed is a candid, constantly updated portrait of what a person finds compelling. We set out to turn a variety of different tastes into one shared pick, so movie night could go back to being about the people in the room.
What it does
Filmocracy is a group recommendation engine that picks a movie everyone can agree on. The host opens the app on a big screen, and each guest joins by scanning a QR code on their phone. Instead of rating films one by one, guests upload a few Instagram Explore screenshots and choose a mood for the night. A vision model reads those screenshots into a taste profile, which the app uses to rank films for each person and for the group as a whole. Trailers then play on the big screen while every phone votes yes or no in private. Each vote retrains the model in real time, so the recommendations sharpen as the night goes on. When the entire room votes yes, a golden buzzer fires, and the night ends with the group's top three films.
How we built it
The core of Filmocracy is a translation layer between two kinds of taste. Meta Muse Spark reads each tile of an Instagram screenshot and describes it in personality-style tags, so a feed becomes a short, human-readable profile. A frozen text encoder places those tags and our film catalog’s tags in the same space. A compact learned matrix then converts “Instagram taste” into “film taste.” Because the matrix is low-rank, it has only about 6,000 trainable values, which lets it retrain in seconds on an ordinary CPU with no GPU. The model learns while the app is running. Each vote immediately pulls the next picks toward the films a person loved, and every piece of feedback retrains the matrix. A new version only goes live if it performs at least as well on held-out data, so the system can improve without ever getting worse. Starting from a pre-trained seed, accuracy at recall@50 rose from 0.33 to 0.51. The experience itself is a React and TypeScript web app styled as a cinema at night, with GSAP animation saved for the biggest moments. A single FastAPI backend keeps every screen in sync over authenticated WebSockets, so the TV leads and the phones follow. Our catalog covers 5,000 MovieLens films with TMDB posters and YouTube trailers. We also built a solo training page, so anyone can teach the model without a TV or a room.
Challenges we ran into:
We changed course several times in two days. Due to changing requirements of our app, we moved our data from Supabase into a single SQLite database. Furthermore, due to an outage at Railway, we had to switch to a self-hosted solution for model inference. In addition, we had to drop Google sign-in for anonymous guest keys, and switched vision models twice before settling on Muse Spark and reading each tile separately. Many MovieLens trailer links turned out to be dead, so we rebuilt trailer lookup around TMDB and YouTube. Keeping a whole living room in sync was its own puzzle, and we solved it by making the big screen the only thing that advances the night and giving phones a way to catch up after a dropped connection. With no real users yet, we also had to bootstrap the model from synthetic personas.
Accomplishments that we’re proud of
We replaced the usual wall of ratings with a single screenshot, and the recommender gets sharper with every vote instead of staying static. The golden buzzer, the private voting, and the shared big-screen experience make choosing a movie feel like part of the night rather than a chore before it. Everything runs end to end on a live backend, and the design was built for how people actually watch: a large, readable screen across the room and phones used one-handed in the dark.
What we learned:
A small model on top of a strong pre-trained encoder can personalize surprisingly fast. We also learned that designing for a group is a different discipline from designing for an individual, because the product has to make room for disagreement without making anyone feel judged.
What’s next:
We plan to open our training page to real testers, retire the synthetic personas as genuine votes come in, and use each person’s taste and the group’s blend to choose which trailers to play next. We also want to move off a single hosting machine so Filmocracy is ready for any movie night. Built with React, TypeScript, Vite, GSAP, Python, FastAPI, PyTorch, SQLite, sentence-transformers, Meta Muse Spark, MovieLens, TMDB, YouTube, Cloudflare Pages, Cloudflare Tunnel Try it: filmocracy.party · Code: github.com/Str0beLite/Filmocracy
Pitch competition:
Most people, if not everyone, would argue that everyone has at least one person in their lives that know them the best. Whether it be a family, a friend, a dog, a cow there is always someone that knows you maybe even better than yourself. Wrong! Your Instagram FYP shows who you are a
Log in or sign up for Devpost to join the conversation.