Files
tesla-cam-view/README.md
T

4.4 KiB
Raw Blame History

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

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):

    python -m venv venv
    # Windows
    venv\Scripts\activate
    # macOS/Linux
    source venv/bin/activate
    
  2. Install dependencies:

    pip install -r requirements.txt
    
  3. Configure the TeslaCam directory via environment variables. Copy the example file and edit it:

    cp .env.example .env
    
    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

python videoplayer.py

Then open 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:

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.:

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.