Beta v1.0 A self-hosted media server for movies and TV shows, built with Flask.
- Browse and stream movies and TV shows from your local library
- TMDB integration for automatic metadata
- Upload media directly through the web UI
- Search across your entire media library
- Glassmorphism UI
- Password Sign-In
- Python 3.8+
- Flask
- tmdbv3api
Install dependencies:
pip install flask tmdbv3apiFirefly optionally integrates with The Movie Database (TMDB) to fetch movie metadata.
To enable it, generate an API key from the link above and pass it into the Firefly constructor.
from Firefly.firefly import Firefly ff = Firefly(debug=True, tmdbv3api_key="YOUR_API_KEY", clientPassword="YOUR_PASSWORD") ff.homeFile(filename="index.html", directory="templates") ff.infoPage(filename="info.html", directory="templates") ff.run()By default the server runs at http://127.0.0.1:5000.
├── Firefly/ │ └── firefly.py # Core Firefly class ├── templates/ │ ├── index.html # Home page │ ├── info.html # Movie/show info page │ ├── player.html # Video player │ ├── search.html # Search results │ └── addMedia.html # Upload form ├── static/ │ └── style.css # Glassmorphism styles ├── media/ │ ├── movies/ # Movie files │ └── tv/ # TV show files ├── movies.json # Movie library data ├── tv.json # TV show library data └── test.py # Example usage | Param | Type | Default | Description |
|---|---|---|---|
debug | bool | False | Enables Flask debug mode |
tmdbv3api_key | str | "" | TMDB API key for metadata fetching |
Starts the Flask server.
| Param | Type | Default |
|---|---|---|
host | str | "127.0.0.1" |
port | int | 5000 |
Manually add a movie to the library.
Manually add a TV episode to the library.
| Route | Description |
|---|---|
/ | Home page |
/search?q= | Search results |
/info/<title> | Movie/show detail page |
/player/<title> | Video player |
/addMedia | Upload form |
/upload | Upload handler (POST) |
/media/<filename> | Serves media files |
MIT — see LICENSE