Skip to content

Install

Whatever you run it on, the server is the same image and the same three mounts: your video library (read-only), a data folder for accounts and watch state, and a scratch folder for live transcodes. Pick your platform; the sections after the platforms cover hardware transcoding, reverse proxies, updates and backups for all of them.

  • Where your videos are. A folder on the same machine, or a share mounted on it. Any layout works as long as the files carry their metadata: .info.json sidecars for creator channels, Kodi/Emby .nfo files for TV series and movies. Mixed folders are fine; you tell MytView which subfolder is which kind of library after the first sign-in.
  • A machine with Docker. Any 64-bit x86 or ARM box: NAS, mini-PC, home server, Raspberry Pi 4 or later. About 300 MB of image, a few hundred MB of RAM at rest.
  • Optional: an Intel iGPU for hardware transcoding. Without one, transcodes use the CPU, and they only happen when a device cannot play a file directly.

The reference install. Every other platform is a wrapper around this file.

docker-compose.yml
services:
mytview:
image: fbartolini/mytview:latest
container_name: mytview
restart: unless-stopped
ports:
- "8700:8700"
environment:
ALLOW_SIGNUP: invite # the first account becomes the owner
ALLOW_INVITES: owner # who may invite others: owner or all
volumes:
- /path/to/your/library:/media:ro # your videos, read-only
- /path/to/mytview/data:/data # accounts, watch state, index: BACK THIS UP
- /path/to/mytview/transcodes:/transcodes # live-transcode scratch and artwork cache
  1. Save the file, replace the three host paths, then run docker compose up -d.
  2. Open http://your-server:8700 and sign up. That first account is the owner.
  3. Continue with Getting started: add your libraries, invite the household, connect the apps.

MytView plays files directly whenever the device can decode them. Only when it cannot does the server transcode, live, into a stream that starts in seconds, at the source resolution. With an Intel iGPU the encode runs on the GPU; otherwise it runs on the CPU, where one or two 1080p streams are fine on a modern NAS processor and the server steps down to 1080p or 720p on its own if the host cannot keep up.

  • Turn it on with TRANSCODE_HWACCEL=1 and pass /dev/dri into the container, as shown per platform above. It falls back to the CPU by itself if the GPU path fails.
  • Check the GPU from the host: docker exec mytview vainfo should list an iHD driver. The image carries its own driver stack, so the host needs only the kernel device.
  • AMD iGPUs work through the same VAAPI path. NVIDIA is not supported.
  • On ARM (Raspberry Pi, ARM NAS) transcoding is CPU-only; direct play is unaffected.

On your LAN nothing needs to be set. If you publish MytView behind Caddy, nginx, Traefik or Cloudflare, add two variables:

Variable Value
ORIGIN Your public URL, for example https://videos.example.com. Leave it out entirely on the LAN; do not set it to an empty value on images older than 0.4.10.
ADDRESS_HEADER x-forwarded-for (Cloudflare: cf-connecting-ip), so login rate limits apply per client rather than to the proxy.

Allow at least 60 seconds of read timeout on /hls/; the first segment of a cold transcode can take a moment. The full set of proxy variables is in Behind a reverse proxy.

Pull the new image and recreate the container: on Unraid, the Docker tab’s update button; on Synology, the project’s Build then Start; on TrueNAS, the app’s update; with compose, docker compose pull && docker compose up -d. Nothing else is needed. The index and your accounts carry over, and the library is never touched.

Only the /data folder. It holds the accounts, sessions, watch progress and the library index. The index rebuilds itself from disk; the rest does not. The transcode folder is disposable, and your library is yours already.