Installing TvT with Docker

The Docker version of TvT is the same application as the Windows and Linux installs, packaged to run anywhere Docker runs: a Windows or Mac desktop, a Linux box, a NAS, or an unraid server. It comes to you as a single file from your downloads page, thisvideothing-1.0.0.tar.gz, and you load it into Docker yourself. No Docker Hub account is involved.

This guide covers loading the image, the run command on each platform, the first run, reaching TvT from the other devices in your home, hardware encoding, and updating. Pick your platform in the middle; the beginning and the end apply to all of them.

Before you start

  • Docker. On Windows and macOS that is Docker Desktop, from docker.com. On Linux it is Docker Engine from your distribution or from Docker's own repository. unraid and Synology have Docker built in.
  • The image file, thisvideothing-1.0.0.tar.gz, downloaded from your downloads page onto the machine that will run TvT.
  • Two decisions, made once: where TvT keeps its own data, and which folders hold your videos. Both are explained in step 2.

1. Load the image

Open a terminal on the machine (PowerShell on Windows, Terminal on a Mac, a shell on Linux) in the folder holding the file, and load it:

docker load -i thisvideothing-1.0.0.tar.gz

Docker prints the tags it loaded. You can check any time with:

docker images thisvideothing

Two tags appear, 1.0.0 and latest, pointing at the same image. The commands below use the version tag so that an update is a deliberate step.

2. The two mounts

A container only sees what you mount into it, so every run command carries two mounts.

  • /config is TvT's own data: the library database, thumbnails, backups, the speech and OCR models, and the default folder for transcoded streams. Give it a Docker volume named tvt-config. Docker creates it on the first run and keeps it across updates.
  • Your videos are a folder on the machine, mounted into the container. On macOS, Linux, unraid and Synology, mount it at the same path it has on the host: /Users/you/Movies as /Users/you/Movies, /mnt/user as /mnt/user. The folder browser inside TvT then shows your real paths. On Windows the path inside the container has to be a Linux path, so you choose a name, and /videos is a good one.

TvT reads your videos where they are; nothing is copied into the container. Transcoded streams go into /config by default, and a transcode destination inside your video folder can be added later on the Video Locations page if you prefer them beside the originals.

3. Windows, with Docker Desktop

From PowerShell:

docker run -d --name thisvideothing -p 5000:5000 -v tvt-config:/config -v C:\Users\you\Videos:/videos --restart unless-stopped thisvideothing:1.0.0

Replace C:\Users\you\Videos with your own folder. Then open http://localhost:5000 in a browser.

If you use Git Bash instead of PowerShell, it removes the backslashes from an unquoted Windows path and Docker answers "The system cannot find the file specified". Write the path with forward slashes, in quotes, and tell Git Bash to leave the container paths alone:

MSYS_NO_PATHCONV=1 docker run -d --name thisvideothing -p 5000:5000 -v tvt-config:/config -v "C:/Users/you/Videos:/videos" --restart unless-stopped thisvideothing:1.0.0

Docker Desktop is a desktop application, so TvT runs while Docker Desktop is running. In its settings, turn on Start Docker Desktop when you sign in so it comes back after a restart.

4. macOS, with Docker Desktop

From Terminal, with your videos folder mounted at its own path:

docker run -d --name thisvideothing -p 5000:5000 -v tvt-config:/config -v /Users/you/Movies:/Users/you/Movies --restart unless-stopped thisvideothing:1.0.0

Docker Desktop shares your home folder with containers by default; a folder elsewhere on the Mac may need adding under Settings, Resources, File sharing. Open http://localhost:5000.

Apple silicon. The image is built for Intel and AMD processors (amd64). Docker Desktop on an M-series Mac runs it through emulation. Add --platform linux/amd64 before the image name so Docker does not warn about the mismatch, and turn on Use Rosetta for x86_64/amd64 emulation in Docker Desktop's settings, which is much faster than the default emulator. Playing videos is fine this way; transcoding is slower than on an Intel machine and runs on the processor. A native Apple silicon image is not available yet.

docker run -d --name thisvideothing --platform linux/amd64 -p 5000:5000 -v tvt-config:/config -v /Users/you/Movies:/Users/you/Movies --restart unless-stopped thisvideothing:1.0.0

5. Linux

Install Docker Engine first (on Ubuntu or Debian, sudo apt install docker.io is enough; Docker's own repository has newer releases). Then, with your videos mounted at their own path:

sudo docker run -d --name thisvideothing -p 5000:5000 -v tvt-config:/config -v /srv/media:/srv/media --restart unless-stopped thisvideothing:1.0.0

Open http://localhost:5000 on that machine, or its address from any other one. Docker runs as a system service on Linux, so TvT is up whenever the machine is, without anyone signed in.

Two Linux notes. With an NVIDIA card and the NVIDIA Container Toolkit installed, add --gpus all to the command and TvT encodes with the card (step 11). And files TvT writes into a mounted folder, such as an edited video or a transcode destination you point there, are owned by root; keep transcodes in /config or fix the ownership with chown if that matters to you.

6. unraid

  1. Copy thisvideothing-1.0.0.tar.gz to a share on the array, for example /mnt/user/downloads.
  2. Open the unraid Terminal (the icon at the top right) and load it: docker load -i /mnt/user/downloads/thisvideothing-1.0.0.tar.gz
  3. On the Docker tab, click Add Container. There is no template for TvT yet, so fill the form in: Name thisvideothing, Repository thisvideothing:1.0.0, Network Type bridge.
  4. Add another Path, Port, Variable three times: a Port with container port 5000 and host port 5000; a Path with container path /config and host path /mnt/user/appdata/thisvideothing; a Path with container path /mnt/user and host path /mnt/user, access mode read/write.
  5. Set WebUI to http://[IP]:[PORT:5000] so the icon's WebUI link works, then Apply.

Because the image was loaded rather than pulled, unraid cannot check it for updates; step 12 covers updating by hand. For an NVIDIA card with the Nvidia-Driver plugin installed, add --runtime=nvidia under Extra Parameters and a Variable NVIDIA_VISIBLE_DEVICES set to all.

7. Synology, with Container Manager

  1. Copy thisvideothing-1.0.0.tar.gz to a shared folder on the NAS.
  2. In Container Manager, open Image, click Add, then Add from file, and pick the file. If the compressed file is refused, decompress it first (gunzip) and add the .tar.
  3. Select the image and click Run. Name the container thisvideothing, turn on Enable auto-restart.
  4. Under Port Settings, map local port 5000 to container port 5000. Under Volume Settings, add a volume named tvt-config for /config, and add your video shared folder, for example /volume1/video, mounted at /volume1/video.
  5. Finish, then open http://your-nas:5000.

The same can be done over SSH with the Linux command in step 5, prefixed with sudo.

8. Docker Compose, on any of them

If you keep containers in Compose files, this is the equivalent of the commands above. Save it as compose.yaml and run docker compose up -d in that folder.

services:
  thisvideothing:
    image: thisvideothing:1.0.0
    container_name: thisvideothing
    ports:
      - "5000:5000"
    volumes:
      - tvt-config:/config
      - /mnt/user:/mnt/user
    restart: unless-stopped

volumes:
  tvt-config:

For an NVIDIA card, add this under the service:

deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

9. The first run

The first page is the Who's Watching screen with one administrator profile. Open it, then go to Video Locations from the profile menu in the bottom left corner of the sidebar and add a watch folder. The folder browser shows the container's view of the world, so your videos are at the path you mounted them at: /videos on Windows, or the same path as on the host everywhere else. Choose the folder and the automation switches you want, and TvT imports what it finds.

The rest of the Getting Started guides apply from here exactly as they do to a desktop install.

10. Other computers, phones and TVs in your home

The port is published to the whole machine, so any device on your network reaches TvT at http://the-machine's-address:5000. Find the address with ipconfig on Windows, ifconfig or ip addr on a Mac or Linux, or the unraid and Synology dashboards. A reservation in your router keeps it from changing. The Advanced page in TvT has a card at the top with the address you are using, and on a desktop install the machine's own addresses too, each with a Copy button.

On Windows, the firewall is what usually stands in the way: set the network to Private under Settings, Network and internet, or allow inbound TCP port 5000, and the other devices connect. Keep TvT on your home network rather than forwarding the port from the router.

11. Hardware encoding

TvT checks at startup which video encoders the machine really has and uses the best one, with the processor behind it for anything the card cannot do. In a container that means an NVIDIA card when the container was started with --gpus all (Windows, Linux, unraid, Compose). Without that, and on every Mac and NAS, encoding runs on the processor, which is slower but produces the same result. The Background work panel on the System Activity page shows what was found and lets you turn hardware encoding off.

12. Updating

Download the new file, load it, replace the container, and run the same command with the new tag. The volume is untouched, so the library, thumbnails, models and backups carry over, and TvT updates its own database on the first start.

docker load -i thisvideothing-1.1.0.tar.gz
docker rm -f thisvideothing
docker run -d --name thisvideothing -p 5000:5000 -v tvt-config:/config -v /mnt/user:/mnt/user --restart unless-stopped thisvideothing:1.1.0

On unraid, edit the container and change the Repository to the new tag; in Compose, change the image line and run docker compose up -d again. The old image can be removed afterwards with docker rmi thisvideothing:1.0.0.

Where your data lives

Everything TvT makes is in the tvt-config volume, under /config/ThisVideoThing inside the container. Backups made on the Backup and Restore page are there too, and docker cp thisvideothing:/config/ThisVideoThing/backups . copies them out. On Linux, unraid and Synology a host folder can stand in for the volume, as the unraid steps do; on Windows and macOS keep the volume, since the database does not like living on a shared Windows or Mac folder.

Good to know

  • "The system cannot find the file specified" on Windows means the path did not reach Docker intact. Use PowerShell, or the quoted form for Git Bash in step 3.
  • "port is already allocated" means something else on the machine uses 5000. Publish another one, for example -p 5001:5000, and open that port instead.
  • Your videos are not under /mnt. They are wherever you mounted them; on Windows that is /videos. Look at the root of the folder browser.
  • Logs are one command away: docker logs thisvideothing, or the Logs view of Docker Desktop, unraid or Container Manager. The first lines say which data root and which encoder it is using.
  • A time zone for the log timestamps: add -e TZ=America/New_York, or your own, to the run command.
  • Turning hardware encoding off for a whole install: add -e TVT_HW_ENCODE=off.

Was this article helpful?