Files
tesla-cam-view/README.md
T

126 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TeslaCam View
A Flask web app for browsing and playing TeslaCam (Tesla Dashcam/Sentry) recordings from a local drive. It scans a TeslaCam folder for video files, categorizes them by camera view, and presents them in a dark, Tesla-styled web interface with synchronized multi-angle playback.
## Features
- **Recursive scan** of the TeslaCam directory tree (`RecentClips`, `SavedClips`, `SentryClips`, etc.) for `.mp4` files matching the TeslaCam naming convention `YYYY-MM-DD_HH-MM-SS-${camera_view}.mp4`.
- **Categorization by camera view** — front, left repeater, right repeater, rear, left pillar, right pillar — with friendly display names.
- **Multi-angle synchronized playback** — clips sharing the same timestamp are grouped so you can switch between camera angles for the same moment.
- **Search & sort** — filter clips by filename, sort oldest-first or A–Z.
- **Safe streaming** — videos are served via Flask with path resolution relative to the configured TeslaCam root.
- **Dark Tesla-themed UI** built with responsive HTML/CSS (no build step).
## Project Structure
```txt
tesla-cam-view-1/
├── videoplayer.py # Flask app: scanning, routing, video streaming
├── requirements.txt # Python dependencies (Flask)
├── templates/
│ ├── index.html # Main page: camera tabs, player, clip list
│ └── camera_view.html # Single-camera view page
└── README.md
```
## Requirements
- Python 3.x
- Flask, python-dotenv, gunicorn (see `requirements.txt`)
## Setup
1. Create and activate a virtual environment (optional but recommended):
```bash
python -m venv venv
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
```
2. Install dependencies:
```bash
pip install -r requirements.txt
```
3. Configure the TeslaCam directory via environment variables. Copy the example
file and edit it:
```bash
cp .env.example .env
```
```ini
TESLACAM_DIRECTORY=/mnt/TeslaCam
FLASK_RUN_HOST=0.0.0.0
FLASK_RUN_PORT=5000
FLASK_DEBUG=0
```
`TESLACAM_DIRECTORY` should point to the root folder containing your
`RecentClips`, `SavedClips`, and `SentryClips` subfolders. Variables set in
the real environment take precedence over `.env`.
## Usage
### Local development server
```bash
python videoplayer.py
```
Then open [http://localhost:5000](http://localhost:5000) in your browser.
### Production (WSGI server on Linux)
For production, run the app behind a WSGI server such as **gunicorn**. The
`app` object in `videoplayer.py` is the WSGI entry point:
```bash
gunicorn -w 4 -b 0.0.0.0:5000 'videoplayer:app'
```
`TESLACAM_DIRECTORY` is read from the environment (or `.env`), so make sure it
is set for the gunicorn process, e.g.:
```bash
export TESLACAM_DIRECTORY=/mnt/TeslaCam
gunicorn -w 4 -b 0.0.0.0:5000 'videoplayer:app'
```
For a systemd service or other process manager, set the variable in the unit
file / environment rather than relying on `.env`.
- The **main page** lists all clips grouped by camera view with a player and searchable clip list.
- Click a clip to play it; use the camera switch buttons to jump between angles for the same timestamp.
- The `/camera/<view>` route shows all clips for a single camera.
## Routes
| Route | Description |
| ------------------------ | ---------------------------------------------------- |
| `/` | Main page with all videos categorized by camera view |
| `/camera/<camera_view>` | All videos for a single camera view |
| `/video/<path:filepath>` | Streams a video file from the TeslaCam directory |
## Camera Views
| Key | Display Name |
| ---------------- | -------------- |
| `front` | Front |
| `left_repeater` | Left Repeater |
| `right_repeater` | Right Repeater |
| `rear` | Rear |
| `left_pillar` | Left Pillar |
| `right_pillar` | Right Pillar |
## Notes
- Debug mode is off by default (`FLASK_DEBUG=0`) and is only used by the local
dev server. It has no effect when running under a WSGI server like gunicorn.
- The TeslaCam directory must be accessible from the machine running the app (e.g., a mounted USB drive or network share).
- Filename parsing assumes the standard TeslaCam naming format; files not matching the regex are ignored.