A local movie library manager that scans a folder for video files, enriches them with TMDB metadata, and displays them in a searchable web UI.
- Scans local folders recursively for video files (MKV, MP4, AVI, etc.)
- Fetches movie metadata and posters from TMDB
- Groups multi-version and multi-disc movies under a single card
- Real-time search by title, year, director, cast, or rating (e.g.
>7) - Click a card to open a modal with backdrop, poster, cast, and file list
- Play button opens the file in your system's default video player
- 3-tier caching: local
.jsonfiles → in-memory → TMDB API
- Python 3.8+
- A free TMDB API key
Install dependencies:
pip install flask requeststkinter is bundled with most Python installations (used for the folder picker dialog).
-
Clone the repo:
git clone https://github.com/vindrosen/MovieIndex.git cd MovieIndex -
Create
API - Key.txtin the project root with the following content:API Key your_tmdb_api_key_here -
Run the app:
python app.py
The browser opens automatically at http://localhost:5000.
- Click Browse to select your movie folder (or type the path directly).
- Click Scan — the app finds all video files ≥ 200 MB and loads their metadata.
- Use the search bar to filter; click a card for details; click Play to watch.
Metadata and posters are cached next to each movie file (.json / .jpg) so subsequent scans are instant.
MovieIndex/
├── app.py # Flask app and REST API
├── scanner.py # Recursive video file scanner and filename parser
├── tmdb.py # TMDB API client
├── templates/
│ └── index.html # Single-page HTML shell
├── static/
│ ├── app.js # Vanilla JS frontend
│ └── style.css # Styles
├── config.json # Last selected folder (auto-generated)
└── cache.json # Persisted TMDB metadata cache (auto-generated)
| File | Purpose |
|---|---|
API - Key.txt |
TMDB API key (not committed) |
config.json |
Last selected folder path |
cache.json |
Persisted metadata cache |
MIT