A movie poster guessing game inspired by Hitster. Players guess movies from posters with titles automatically removed using AI text detection and inpainting.
- Automated pipeline: scrape → download → process → sample → ready to play!
- CRAFT text detection detects titles and inpainting to remove titles
- Samples 100 movies from each IMDB list given for balance
Create and activate virtual environment:
python -m venv .venv
.\.venv\Scripts\Activate.ps1pip install -r requirements.txtRequired packages:
requests- API calls and web scrapingbeautifulsoup4- HTML parsing for IMDB scrapingpython-dotenv- Environment variable managementopencv-python- Image processingeasyocr- CRAFT text detectiontorchandtorchvision- EasyOCR backendPillow- Image handlingqrcode- Creates QR codes
- Create a free account at The Movie Database (TMDb)
- Go to API settings
- Request an API key
- Copy your API key
- Make repository public
- Deploy pages from main branch
Copy the example environment file:
Copy-Item .env.example .envEdit .env and add your TMDb API key and Github username:
TMDB_API_KEY=your_actual_api_key_here
GITHUB_USERNAME=your_actual_github_username
.\src\poster_preparation\run_full_pipeline.ps1.\src\card_generation\generate_cards.pyFilmster/
├── .env # TMDb and Github API env (create from .env.example)
├── .env.example # Template for environment variables
├── requirements.txt # Python dependencies
├── .gitignore #
├── README.md # This file
│
├── src/
│ └── poster_preparation/ # Poster preparation pipeline
│ ├── run_full_pipeline.ps1 # Main automation script
│ ├── prepare_posters.py # Main pipeline orchestrator
│ ├── scrape_movie_names.py # IMDB scraping module
│ ├── get_movie_poster.py # TMDb poster fetching
│ ├── detect_title.py # CRAFT text detection
│ ├── remove_title.py # Inpainting title removal
│ └── README.MD # Explains the poster preparation
│ └── card_generation/
│ ├── generate_cards.py # Creates card
│ ├── template.pdf # Template for the cards
│ └── README.MD # Explains the card generation
│
├── list/ # Holds the lists for the movies
│
├── output/
│ ├── posters/ # Original downloaded posters
│ └── blurred_posters/ # Processed (title removed)
│
└── game/
└── posters/ # Posters ready for the game
Add specific posters to your game using the add_posters.txt file.
Edit list/add_posters.txt and add the movies you want:
Avatar (2009)
Grease (1978)
Notting Hill (1999)
- Empty lines and lines starting with
#are ignored - Movie name should match IMDB title as closely as possible
Run the prepare_posters.py script with the --add-posters flag:
python src/poster_preparation/prepare_posters.py --add-postersThis will download all posters in the list, blur it and save it in output/posters/, output/blurred_posters/ and game/posters/
Generate printable cards only for the hand-picked movies:
python src/card_generation/generate_cards.py --add-postersThis will fill in the template PDF for only those posters
Make sure .env file exists and contains:
TMDB_API_KEY=your_actual_api_key_here
- Verify TMDb API key is correct
- Some movies may not have posters on TMDb
CRAFT detector has limitations with:
- Heavily stylized/artistic titles (e.g., "300")
- Graphic design titles (logos vs. text)
- Very small or very large text
Solution: The pipeline automatically replaces failed posters with alternatives from the same list.
Make sure .env file contains:
GITHUB_USERNAME=your_github_username
If you see "Could not load Eras fonts", the script will use Helvetica as fallback. To use Eras fonts:
- Install Eras Medium ITC and Eras Bold ITC on Windows
- Verify font files exist:
C:\Windows\Fonts\ERASMD.TTFandC:\Windows\Fonts\ERASBD.TTF
- Check GitHub Pages is enabled: https://github.com/YOUR_USERNAME/Filmster/settings/pages
- Verify posters are committed:
git statusshould show clean - Test URL in browser:
https://YOUR_USERNAME.github.io/Filmster/game/posters/ - Try specific poster:
https://YOUR_USERNAME.github.io/Filmster/game/posters/The_Matrix_1999.jpg
Make sure posters exist in game/posters/ directory.
Use --test-positioning flag with 4 test posters to verify positioning matches template boxes.
The script automatically reduces font size (12pt → 7pt) if text is too long. If still cut off:
- Movie names wrap at 28 characters per line
- Maximum 4 lines supported
- Extremely long titles may need manual shortening
This project is for educational and personal use. Movie data and posters are property of their respective owners (IMDB/TMDb).
- TMDb API for movie metadata and poster images
- IMDB for movie lists
- EasyOCR for CRAFT text detection
- OpenCV for image processing