How onizuka-sh/streamplex works
StreamPlex is a local-first media library and streaming server, presented through a React interface and optionally wrapped in an Electron desktop runtime. The main workflow is sign-in or first-time setup, discover media, analyze files and enrich metadata, then browse and stream the resulting library. The graph preserves the documented scan, metadata, playback, history, settings, and desktop capabilities. Some controller and frontend wiring is inferred only at the route/API boundary because those source excerpts were not supplied.
Main entry points: app.js Express App · enrich.pipeline.js Metadata Enrichment · scanner.service.js Media Discovery · analyze.pipeline.js File Analysis
Components 26
Desktop Runtime
- Electron Shell
electron/main.js - IPC Bridge
electron/preload.js
User Experience
- React App
frontend/src/App.jsx - API Client
frontend/src/services/api.js - Auth Context
frontend/src/context/AuthContext.jsx - Library Screens
frontend/src/pages/Home.jsx
API and Access
- Express App
backend/src/app.js - Auth Routes
backend/src/routes/auth.routes.js - Scan Routes
backend/src/routes/scan.routes.js - Video Routes
backend/src/routes/video.routes.js - Stream Routes
backend/src/routes/stream.routes.js - History Routes
backend/src/routes/watchHistory.routes.js - Authentication
backend/src/controllers/auth.controller.js - Media Streaming
backend/src/controllers/stream.controller.js
Library Processing
- Media Discovery
backend/src/services/scanner.service.js - File Analysis
backend/src/pipeline/analyze.pipeline.js - Metadata Enrichment
backend/src/pipeline/enrich.pipeline.js - Filename Parser
backend/src/services/filenameParser.service.js - TMDB Metadata
backend/src/services/tmdb.service.js
Persistent State
- Video Records
backend/src/models/video.model.js - Scan Records
backend/src/models/scan.model.js - Genre Records
backend/src/models/genre.model.js - SQLite Database
backend/src/database/db.js
Other components
- Viewer / Admin
- Media Folder
- TMDB Service
Connections 34
- Viewer / Admin → React App: uses
- Electron Shell → IPC Bridge: exposes IPC
- Electron Shell → Express App: starts backend
- Electron Shell → React App: loads desktop UI
- React App → Auth Context: uses auth
- React App → Library Screens: routes to
- Auth Context → API Client: requests auth
- Library Screens → API Client: requests library
- API Client → Express App: sends API requests
- Express App → Auth Routes: mounts routes
- Express App → Scan Routes: mounts routes
- Express App → Video Routes: mounts routes
- Express App → Stream Routes: mounts routes
- Express App → History Routes: mounts routes
- Auth Routes → Authentication: dispatches
- Stream Routes → Media Streaming: dispatches
- Scan Routes → Media Discovery: dispatches scan
- Media Discovery → Media Folder: discovers files
- Media Discovery → Scan Records: updates scan state
- Media Discovery → File Analysis: starts analysis
- File Analysis → Video Records: loads and updates
- File Analysis → Scan Records: increments progress
- File Analysis → Metadata Enrichment: starts enrichment
- Metadata Enrichment → Video Records: loads and updates
- Metadata Enrichment → Filename Parser: parses names
- Metadata Enrichment → TMDB Metadata: fetches metadata
- Metadata Enrichment → Genre Records: syncs genres
- Metadata Enrichment → Scan Records: increments progress
- TMDB Metadata → TMDB Service: looks up metadata
- Media Streaming → Video Records: loads video record
- Media Streaming → Media Folder: streams file bytes
- Video Records → SQLite Database: reads and writes
- Scan Records → SQLite Database: reads and writes
- Genre Records → SQLite Database: reads and writes