Rewrite README as Vonas Media Cluster for store-friendly positioning.
Describe a personal/self-hosted library (Emby/Plex-style) instead of the old Stremio-centric framing. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
6ffeb50733
commit
b5fc140e9f
1 changed files with 80 additions and 73 deletions
153
README.md
153
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)
|
VMC apps ──HTTPS──► Master (catalog, accounts, play sessions)
|
||||||
▲
|
▲
|
||||||
│ WSS control
|
│ control channel
|
||||||
Media Nodes
|
Media nodes
|
||||||
│
|
│
|
||||||
Stremio ◄──HTTPS video──┘ (via Nginx Proxy Manager)
|
VMC apps ◄──HTTPS video───┘ (via your reverse proxy / HTTPS)
|
||||||
```
|
```
|
||||||
|
|
||||||
Harde eisen:
|
Design goals:
|
||||||
|
|
||||||
- geen VPN / WireGuard / SMB / NFS tussen locaties
|
- Direct play from the node that holds the file
|
||||||
- geen Docker op nodes
|
- No public raw filesystem paths
|
||||||
- geen transcoding in V1
|
- Server-side playback sessions
|
||||||
- geen raw filesystem paths publiek
|
- Optional TMDB metadata for posters and details
|
||||||
- server-side playback sessions (geen simpele 1-uur signed URLs)
|
|
||||||
|
|
||||||
## Stack
|
## Repository layout
|
||||||
|
|
||||||
| 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
|
|
||||||
|
|
||||||
```
|
```
|
||||||
apps/master-api/ Master + Stremio addon
|
apps/master-api/ Master API
|
||||||
apps/admin-ui/ Admin dashboard
|
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
|
node/media-node/ Go media node
|
||||||
packages/ Gedeelde types + protocol
|
packages/ Shared types / protocol
|
||||||
deploy/docker/ Docker Compose Master
|
deploy/docker/ Docker Compose for Master
|
||||||
deploy/node/ Installer + systemd
|
deploy/node/ Node installer + systemd
|
||||||
docs/ Deployment + NPM setup
|
docs/ Deployment guides
|
||||||
```
|
```
|
||||||
|
|
||||||
## Snel starten (dev)
|
## Quick start (development)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx pnpm install
|
npx pnpm install
|
||||||
|
|
@ -54,7 +59,6 @@ docker compose up -d postgres redis
|
||||||
# Master
|
# Master
|
||||||
cd ../../apps/master-api
|
cd ../../apps/master-api
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
# DATABASE_URL=postgresql://media:media_secret@localhost:5432/media_cluster
|
|
||||||
npx prisma migrate deploy
|
npx prisma migrate deploy
|
||||||
npx pnpm db:seed
|
npx pnpm db:seed
|
||||||
npx pnpm dev
|
npx pnpm dev
|
||||||
|
|
@ -65,12 +69,31 @@ npx pnpm dev
|
||||||
```
|
```
|
||||||
|
|
||||||
- API: http://localhost:3000
|
- API: http://localhost:3000
|
||||||
- UI: http://localhost:3001
|
- Admin: http://localhost:3001
|
||||||
- Login: `admin@localhost` / `changeme123`
|
- 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
|
```bash
|
||||||
cd node/media-node
|
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
|
sudo ./media-node install
|
||||||
```
|
```
|
||||||
|
|
||||||
CLI:
|
CLI: `install | register | run | scan | diagnostics | config | start | stop | restart | status | version`
|
||||||
|
|
||||||
```
|
## Apps
|
||||||
media-node install|register|run|scan|diagnostics|config|start|stop|restart|status|version
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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)
|
## Features (overview)
|
||||||
- [docs/dokploy.md](docs/dokploy.md) — **Master op Dokploy (aanbevolen)**
|
|
||||||
- [docs/npm-setup.md](docs/npm-setup.md)
|
|
||||||
|
|
||||||
```bash
|
- Multi-node library scan and sync
|
||||||
cd deploy/docker
|
- Movies / series matching and admin tools
|
||||||
cp ../master/.env.example ../master/.env
|
- Viewer accounts, profiles, device linking
|
||||||
docker compose up -d --build
|
- Direct play with HTTP Range
|
||||||
```
|
- Optional live TV (IPTV) when configured for a viewer
|
||||||
|
- Admin: nodes, library, users, settings
|
||||||
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/<token>/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
|
|
||||||
|
|
||||||
## Tests
|
## 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 apps/master-api && npx pnpm test
|
||||||
cd node/media-node && go 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.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue