diff --git a/README.md b/README.md index ff7c363..8396c10 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,53 @@ -# Distributed Stremio Media Cluster +# Vonas Media Cluster (VMC) -Privé gedistribueerd mediaplatform voor **Stremio**: één Master, onbeperkt Media Nodes, video rechtstreeks van node naar player. +Private media software for **your own** movies and TV shows — comparable to Emby or Plex. -## Architectuur +You host the library on your NAS, home server, or VPS. Native apps (Android TV, Android, iOS, and more) connect to **your** instance. You keep the files; VMC provides the catalog, accounts, and playback. + +> This repository is the self-host / server stack and related client apps. Store apps are meant to connect to a server you control (or one provided for your household). + +## What it is + +- **Master** — API, admin console, viewer accounts, library metadata, playback sessions +- **Media nodes** — scan local storage and serve video directly to clients (no VPN/SMB between sites required) +- **Apps** — lean clients for TV and mobile that talk to your Master URL + +Typical use: family or personal library you already own, organized once, watched on the couch or on the go. + +## Architecture (high level) ``` -Stremio ──HTTPS──► Master (catalog / meta / stream) - ▲ - │ WSS control - Media Nodes - │ -Stremio ◄──HTTPS video──┘ (via Nginx Proxy Manager) +VMC apps ──HTTPS──► Master (catalog, accounts, play sessions) + ▲ + │ control channel + Media nodes + │ +VMC apps ◄──HTTPS video───┘ (via your reverse proxy / HTTPS) ``` -Harde eisen: +Design goals: -- geen VPN / WireGuard / SMB / NFS tussen locaties -- geen Docker op nodes -- geen transcoding in V1 -- geen raw filesystem paths publiek -- server-side playback sessions (geen simpele 1-uur signed URLs) +- Direct play from the node that holds the file +- No public raw filesystem paths +- Server-side playback sessions +- Optional TMDB metadata for posters and details -## Stack - -| Component | Techniek | -|-----------|----------| -| Master API | TypeScript, Fastify, Prisma, PostgreSQL, Redis | -| Admin UI | Next.js | -| Media Node | Go binary + SQLite + systemd | -| Proxy | Nginx Proxy Manager (GUI only) | - -## Repository +## Repository layout ``` -apps/master-api/ Master + Stremio addon -apps/admin-ui/ Admin dashboard +apps/master-api/ Master API +apps/admin-ui/ Admin console +apps/android-tv/ Android TV + Android phone apps +apps/ios/ iOS app +apps/tizen-tv/ Samsung Tizen client node/media-node/ Go media node -packages/ Gedeelde types + protocol -deploy/docker/ Docker Compose Master -deploy/node/ Installer + systemd -docs/ Deployment + NPM setup +packages/ Shared types / protocol +deploy/docker/ Docker Compose for Master +deploy/node/ Node installer + systemd +docs/ Deployment guides ``` -## Snel starten (dev) +## Quick start (development) ```bash npx pnpm install @@ -54,7 +59,6 @@ docker compose up -d postgres redis # Master cd ../../apps/master-api cp .env.example .env -# DATABASE_URL=postgresql://media:media_secret@localhost:5432/media_cluster npx prisma migrate deploy npx pnpm db:seed npx pnpm dev @@ -65,12 +69,31 @@ npx pnpm dev ``` - API: http://localhost:3000 -- UI: http://localhost:3001 -- Login: `admin@localhost` / `changeme123` +- Admin: http://localhost:3001 +- Default seed login: see `.env` / seed output (`ADMIN_EMAIL` / `ADMIN_PASSWORD`) -## Media Node +## Production -Op Linux (productie): +See: + +- [docs/deployment.md](docs/deployment.md) +- [docs/dokploy.md](docs/dokploy.md) — Master on Dokploy (recommended) +- [docs/npm-setup.md](docs/npm-setup.md) + +```bash +cd deploy/docker +cp ../master/.env.example ../master/.env +# Set SESSION_SECRET, ADMIN_*, PUBLIC_URL, database passwords +docker compose up -d --build +``` + +Or in Dokploy: Compose app with `deploy/docker/docker-compose.dokploy.yml`. + +Public self-host overview (when enabled on your Master): `/install` on the admin/site host. + +## Media node + +On Linux: ```bash cd node/media-node @@ -78,47 +101,27 @@ GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o media-node ./cmd/media-node sudo ./media-node install ``` -CLI: +CLI: `install | register | run | scan | diagnostics | config | start | stop | restart | status | version` -``` -media-node install|register|run|scan|diagnostics|config|start|stop|restart|status|version -``` +## Apps -## Productie +Point each app at your Master base URL (for example `https://media.example.com`), sign in with a viewer account, and pick a profile. -Zie: +| Client | Location | +|--------|----------| +| Android TV | `apps/android-tv` (TV module) | +| Android phone | `apps/android-tv` (mobile module) | +| iOS | `apps/ios` | +| Tizen | `apps/tizen-tv` | -- [docs/deployment.md](docs/deployment.md) -- [docs/dokploy.md](docs/dokploy.md) — **Master op Dokploy (aanbevolen)** -- [docs/npm-setup.md](docs/npm-setup.md) +## Features (overview) -```bash -cd deploy/docker -cp ../master/.env.example ../master/.env -docker compose up -d --build -``` - -Of in Dokploy: Compose-app met pad `deploy/docker/docker-compose.dokploy.yml`. - -## Stremio installeren - -1. Admin UI → **Instellingen** → addon token -2. URL in Stremio: - `https://master.example.com/stremio//manifest.json` - -## V1 features - -- Node enrollment + unieke credentials -- WebSocket control channel + heartbeat + reconnect -- Movies/Series scanner + library sync -- Filename parsing + TMDB matching (optioneel) -- Stremio catalogs / meta / streams -- Playback sessions met idle + absolute expiry -- HTTP Range streaming (direct play) -- Offline node detectie + duplicate media -- Admin: dashboard, nodes, library, streams, matching ignore/refresh -- Rate limits, security headers, redacted token logs -- Backup script + release build script +- Multi-node library scan and sync +- Movies / series matching and admin tools +- Viewer accounts, profiles, device linking +- Direct play with HTTP Range +- Optional live TV (IPTV) when configured for a viewer +- Admin: nodes, library, users, settings ## Tests @@ -126,3 +129,7 @@ Of in Dokploy: Compose-app met pad `deploy/docker/docker-compose.dokploy.yml`. cd apps/master-api && npx pnpm test cd node/media-node && go test ./... ``` + +## Privacy & intent + +VMC is built for **personal / household libraries** under your control. Operators are responsible for using only content they are entitled to store and stream. See the in-app / site privacy policy where published.