How titanaprilian/private-movie works
Private Movie is a self-hosted media catalog and streaming platform with web and Android TV clients plus an administrative interface. Viewers browse and search the catalog, open series and episodes, then play a selected source; administrators ingest media, enrich catalog data, and manage storage. The backend exposes the API and coordinates domain services, PostgreSQL, and object storage. The README documents TMDB enrichment and scraping capabilities, but their detailed runtime wiring is not sampled, so those links are shown only where supported.
Main entry points: app.ts HTTP API Server · web/src Web Client · media-service/src Media Service · episodes Episode Ingest API
Components 24
Client Applications
- Web Client
apps/web/src - Android TV
apps/android-tv/app/src/main/java/com/privatemovie/tv - Browse And Watch
apps/web/src/modules/watch - Catalog Admin
apps/web/src/modules/videos - Storage Admin
apps/web/src/modules/storage - TV Navigation
apps/android-tv/app/src/main/java/com/privatemovie/tv/navigation/AppNavigation.kt
Backend API
- HTTP API Server
apps/backend/src/app.ts - Authentication
apps/backend/src/modules/authentication - Catalog API
apps/backend/src/modules/series - Episode Ingest API
apps/backend/src/modules/episodes - Media API
apps/backend/src/modules/media - Storage API
apps/backend/src/modules/storage
Media Services
- Media Service
packages/media-service/src - Media Scraper
packages/media-scraper/src - Ingestion And Enrichment
packages/seed-cli/src - API Contracts
packages/contracts/src
Catalog And Storage
- PostgreSQL Catalog
packages/db/src/schema - S3 Storage Service
packages/media-service/src/internal/s3/s3-storage-service.ts
Other components
- Viewer
- Administrator
- PostgreSQL
- S3-Compatible Storage
- TMDB
- Remote Media Sources
Connections 31
- Viewer → Web Client: uses
- Viewer → Android TV: uses
- Administrator → Web Client: uses
- Web Client → Browse And Watch: offers browsing
- Web Client → Catalog Admin: offers catalog management
- Web Client → Storage Admin: offers storage management
- Android TV → TV Navigation: navigates screens
- Browse And Watch → HTTP API Server: requests catalog and playback
- TV Navigation → HTTP API Server: requests media data
- Catalog Admin → Episode Ingest API: submits ingestion
- Storage Admin → Storage API: manages storage
- HTTP API Server → Authentication: dispatches routes
- HTTP API Server → Catalog API: dispatches routes
- HTTP API Server → Episode Ingest API: dispatches routes
- HTTP API Server → Media API: dispatches routes
- HTTP API Server → Storage API: dispatches routes
- Episode Ingest API → Media Service: ingests media
- Media API → Media Service: resolves playback
- Storage API → Media Service: manages objects
- Episode Ingest API → PostgreSQL Catalog: reads episode records
- Media Service → PostgreSQL Catalog: reads and writes catalog
- PostgreSQL Catalog → PostgreSQL: persists data
- Media Service → S3 Storage Service: uses storage operations
- S3 Storage Service → S3-Compatible Storage: uploads and retrieves objects
- API Contracts → Web Client: defines shared API types
- API Contracts → HTTP API Server: defines shared API types
- Ingestion And Enrichment → TMDB: enriches metadata
- Ingestion And Enrichment → Media Scraper: uses scraping utilities
- Media Scraper → Remote Media Sources: scrapes media sources
- Ingestion And Enrichment → PostgreSQL Catalog: imports catalog data
- Media Service → Remote Media Sources: fetches remote streams