Sign inSign up

fbartolini/mytview

By fbartolini

โ€ขUpdated 4 days ago

Image
0

940

fbartolini/mytview repository overview

โ MytView

A clean, fast, read-only viewer for a self-hosted video library โ€” video files plus their metadata sidecars (.info.json, or Kodi/Emby .nfo for TV series and movies) โ€” with multi-user accounts, per-user watch state, owner-controlled per-channel privacy, server-to-server federation, and two-way Plex watch-state sync. Run the server on your own hardware (NAS, home server, mini-PC) and watch in any browser, or with the native iPhone / iPad / Apple TV, Google TV, and Samsung (Tizen) apps.

  • ๐Ÿ”’ Private by design โ€” no cloud, no analytics, no ads. Your videos stream straight from your server to your device.
  • ๐Ÿ“š Read-only โ€” your library is mounted :ro; MytView never writes to, moves, or deletes your files.
  • ๐Ÿ‘ฅ Multi-user โ€” each person gets their own sign-in and watch state. Change your password any time; the owner can reset a forgotten one, and deactivate or remove accounts.
  • ๐Ÿ”ฆ Per-channel privacy โ€” the owner marks channels public or private and shares private ones with specific people, from a simple visibility page.
  • ๐Ÿ“บ Channels, series, and movies โ€” creator channels, TV shows with season/episode ordering, and a movie poster wall โ€” all configured in the UI.
  • ๐ŸŽž๏ธ Direct-play first, live HLS fallback โ€” plays the original file whenever the device can; anything else is live-transcoded into a stream that starts in seconds (VAAPI hardware encode when available). Nothing pre-converted, nothing stored.
  • ๐ŸŒ Federation โ€” peer with any number of other MytView households, each with its own shares; their catalogs merge into your libraries while video streams directly between servers.
  • ๐Ÿ”„ Plex sync โ€” two-way watched-state + resume sync with a Plex server on the same library, per user.

Website: https://mytview.comโ  ยท Privacy: https://mytview.com/privacy/โ 


โ Quick start

# docker-compose.yml
services:
  mytview:
    image: fbartolini/mytview:latest
    container_name: mytview
    restart: unless-stopped
    ports:
      - "8700:8700"
    environment:
      ALLOW_SIGNUP: invite            # first account becomes the owner
      # ORIGIN: https://mytview.example.com   # only behind a reverse proxy / TLS
    volumes:
      - /path/to/your/library:/media:ro   # your video library โ€” READ-ONLY
      - mytview-data:/data                # accounts + watch state + index (keep this)
      # - /path/to/transcodes:/transcodes # optional: device-compatible copies
volumes:
  mytview-data:
docker compose up -d

Then open http://your-host:8700โ , and sign up โ€” the first account bootstraps the owner. After that, signup requires a single-use invite (from /invite) unless ALLOW_SIGNUP=all.


โ Configuration

โ Volumes
Container pathPurposeNotes
/mediaYour video libraryMount read-only (:ro). MytView never modifies it.
/dataAccounts, sessions, watch state + the search indexDurable โ€” back this up. The index rebuilds from disk; your users/progress do not.
/transcodesOutput for opt-in device-compatible copiesOptional. Its own writable dir, never inside your library. GC'd on scan.
โ Environment
VariableDefaultPurpose
ALLOW_SIGNUPinviteinvite (first account = owner, then invite-only), all (open signup), or off.
ALLOW_INVITESownerWho may create invite links: owner (only the owner) or all (any user).
ORIGINโ€”Your external URL โ€” set only when behind a reverse proxy / TLS.
TRANSCODE_HWACCEL01 enables Intel VAAPI HW transcoding (needs /dev/dri passthrough; amd64). Falls back to CPU.
TRANSCODE_ALL01 pre-bakes device-compatible copies in the background; unset = on-demand only.

Baked into the image (override only if you must): PORT=8700, HOST=0.0.0.0, MEDIA_ROOT=/media, DB_PATH=/data/index.db, TRANSCODE_DIR=/transcodes.

โ Optional: hardware transcoding (amd64 + Intel iGPU)
    environment:
      TRANSCODE_HWACCEL: "1"
    devices:
      - /dev/dri:/dev/dri

Transcoding is off by default and opt-in. On arm64 (and without a GPU) it uses the CPU (libx264) path. Check the container's VA stack with docker exec mytview vainfo.


โ Accounts & privacy (all in the web UI)

  • Change your password from the avatar menu โ†’ Account (every user).
  • No email is stored. If someone forgets their password, the owner generates a single-use reset link on Users (owner-only) and sends it to them; they set their own password. The owner can also deactivate or delete accounts. If the owner is locked out, reset from a shell: docker compose exec mytview node scripts/set-password.mjs <username>.
  • Channel visibility (owner-only): mark channels public/private and share private ones with specific users โ€” a per-user ร— per-channel grid with bulk "all / none" controls. Each Library (/admin/libraries) sets whether its newly-found channels/shows default to public or private.

โ Tags & architectures

  • latest, 0.3.0
  • Multi-arch manifest: linux/amd64 and linux/arm64.

โ First run

The first visit hits /login โ†’ Sign up to create the owner account. Point the mobile / TV apps at your server's address and sign in with the same account. Re-index the library any time from the UI (or POST /api/scan); the owner can force a full re-parse from the menu.

Tag summary

Content type

Image

Digest

sha256:d6dc17f10โ€ฆ

Size

264.1 MB

Last updated

4 days ago

docker pull fbartolini/mytview