# h-player h-player is a small local web app for browsing a folder-based private video collection. The interface follows Kaizoku's dark purple glass-panel design, including the same card gradients, rounded controls, cover fallback treatment, and accent colors. The app remains a standalone private library browser and does not integrate with Plex, Jellyfin, Kodi, or any external metadata provider. The sidebar holds app navigation, search, and rescanning controls. Movies and series appear in the main collection grid, similar to Jellyfin-style library browsing. Selecting a collection card opens that movie or series folder with its metadata, seasons, episodes, and playable files. ## Folder Layout Place media in this shape: ```text Library/ Movie Or Series/ filename.mp4 Series With Seasons/ Season 01/ episode-01.mp4 ``` Supported extensions: `.mp4`, `.m4v`, `.mkv`, `.webm`, `.mov`, `.avi`. ## Run With Docker ```bash docker compose up --build ``` Open http://localhost:3000. The app binds to `127.0.0.1` by default when run directly. Docker Compose sets `HOST=0.0.0.0` inside the container so Docker's port forward can reach the app, while still publishing the host port only on `127.0.0.1:3000`. Your library is mounted read-only, while metadata and generated thumbnails are saved in `/data` inside the container. The included compose file keeps the existing `/mnt/ssd2/docker_data/h-play` host data path so renaming the app to h-player does not hide metadata from an already-running instance. Move that directory yourself before changing the mount path. To add a browser password prompt, uncomment `AUTH_USERNAME` and `AUTH_PASSWORD` in `docker-compose.yml`. ## Run Without Docker ```bash npm start ``` Optional environment variables: ```bash HOST=127.0.0.1 PORT=3000 LIBRARY_DIR=/path/to/Library DATA_DIR=/path/to/private-library-data AUTH_USERNAME=viewer AUTH_PASSWORD=change-me ``` Set `HOST=0.0.0.0` only when you intentionally want the app reachable from other machines on the network. Use `AUTH_USERNAME` and `AUTH_PASSWORD` before exposing it beyond localhost. Thumbnail generation requires `ffmpeg` on the host. Docker includes it. ## Metadata Storage Metadata is stored in SQLite at: ```text data/library.sqlite ``` If an older `data/metadata.json` file exists, the app imports it into SQLite on startup without deleting the JSON file. ## Metadata Fields Use the app to edit: - display title - short description - thumbnail path or URL The `Thumbnail` button extracts a frame from the first video in a title and stores it under `data/thumbnails`. ## Privacy Notes - No external metadata lookup is performed. - Optional Basic Auth is available through `AUTH_USERNAME` and `AUTH_PASSWORD`. - Do not expose this container directly to the public internet.