Bad Copy
Real-time drawing game where players race to replicate an image and receive AI similarity scores.
Metrics / Signals
Problem
What this project solves
Drawing games are fun, but judging similarity fairly is hard when players are competing on quick sketches.
Architecture
How it is put together
Bad Copy uses a Vite/React frontend with a virtual whiteboard and timed game flow, plus a Python/Flask backend that compares sketches against reference images using a pre-trained TensorFlow ImageNet model and image-processing filters.
Game
Gameplay Loop
Bad Copy is a two-player drawing game inspired by online Pictionary-style play. Players create or join rooms, receive a reference image, and race to replicate it on a virtual whiteboard before time runs out.
- Two players compete head-to-head in a timed sketching round.
- After both drawings are submitted, the backend compares each sketch to the reference image.
- The higher similarity score wins, and both players can agree to immediately play again.
AI backend
Scoring System
The backend uses Python, Flask, TensorFlow, Pillow, SciPy, and a pre-trained ImageNet model to calculate similarity between each user sketch and the target image. The team added noise filtering because textured images introduced too much visual noise for clean comparisons.
Hackathon result
What We Shipped
- React/Vite frontend with game start, drawing canvas, timer, result, and replay states.
- Flask backend for image comparison and scoring.
- A full-stack game loop built under short hackathon time constraints.
Roadmap
Next Steps
- Improve similarity calculation and reference image handling.
- Support more than two players.
- Add global leaderboards and customization for timers or reference styles.
Decisions
Technical choices
- Constrained rounds to 30 seconds to keep the game fast and repeatable.
- Used an AI-backed similarity pipeline rather than manual judging.
- Added replay support so two players can quickly keep playing after a result.
Tradeoffs
Constraints and next choices
- Image similarity models are sensitive to texture noise, so filtering was needed to make sketch comparisons more stable.
- The hackathon build prioritized a working two-player loop before larger features like leaderboards and customization.
- A simple game premise helped keep onboarding immediate while the backend handled the harder scoring work.