hearth.

A HOME FOR YOUR COLLECTION

All your stories.
One familiar place.

A personal media server for the movies and series you love. It plays your own files and finds what you ask for, all in a single container on your own machine.

LET’S MAKE IT YOURS

Install in one line

Run this on the machine that will host Hearth. It asks three questions, writes a plain Docker Compose setup and starts your server.

$ curl -fsSL hearth-7hb.pages.dev/install.sh | sh

Version 0.1.0 · Docker on Linux or macOS · Intel and ARMRead the script firstImage on Docker Hub

WHAT YOU GET

Made for a good movie night.

Everything a home server needs, without a tangle of separate apps.

Plays the file you have

Original file first, then a lossless repackage of the video. It only re-encodes when you allow it.

Ask, and it arrives

Request a film or a series in 720p, 1080p or 4K. Hearth picks a release, downloads it and files it.

Skip intro, recap and credits

Detected per episode, with a marker editor for when you know better.

Subtitles that just work

SRT, ASS and embedded text, plus Blu-ray image subtitles read as text.

Picks that know your taste

Recommendations for every person on your server. Bring your watch history from Jellyfin or Plex.

One container, one database

Built-in backups and optional GPU encoding. Nothing else to run alongside it.

SETUP

From one command to your first film.

No accounts with us and nothing phoning home. Hearth lives entirely on your machine.

What the installer does

  1. Checks DockerDocker with Compose is all it needs. If Docker needs root on your server, run the command with | sudo sh.
  2. Asks three questionsWhere your media is, whether Hearth may save downloads there, and which port to use. It also offers your GPU when it finds one.
  3. Writes plain Compose filesInto ~/hearth, or /opt/hearth as root. Nothing else on your system changes.
  4. Starts Hearth and checks itIt waits until the server is healthy and confirms Hearth can read your media.

Then, in your browser

  1. Open http://your-server:3000The installer prints the exact address.
  2. Create your administratorFinish this on your home network before you open Hearth to the internet.
  3. Add /media and scan itUnder Server → Storage. That is your media folder as Hearth sees it.
  4. Settle inAdd an account for everyone at home. Each person keeps their own watch history and picks.

NAS AND WINDOWS

Already have a NAS?

The same image runs in your NAS's own container app. Pick yours, paste one file, and change the media folder to yours. To add more folders or your own web address later, see media folders and web address.

Synology · Container Manager
  1. Download synology.yaml.
  2. In Container Manager, open Project → Create. Name it hearth, choose a folder such as /docker/hearth, and paste the file as the docker-compose.yml.
  3. Replace /volume1/video with your media folder, then build the project.
  4. In Control Panel → Shared Folder, give the users group read access to that folder. Give it read/write if Hearth should save downloads there.

Then open http://your-nas:3000.

QNAP · Container Station
  1. Download qnap.yaml.
  2. In Container Station, open Applications → Create, name it hearth and paste the file.
  3. Replace /share/Multimedia with your media folder, then create the application.

Then open http://your-nas:3000. You need an Intel, AMD or 64-bit ARM model; older 32-bit ARM models can't run Hearth.

Unraid

Open the terminal (the >_ icon) and run:

mkdir -p /mnt/user/appdata/hearth && chown 1000:1000 /mnt/user/appdata/hearth && wget -qO /boot/config/plugins/dockerMan/templates-user/my-Hearth.xml https://hearth-7hb.pages.dev/nas/unraid.xml

Then go to Docker → Add Container, choose Hearth as the template, set Media to your share and apply. Set Media to read/write if Hearth should save downloads there.

TrueNAS SCALE
  1. Download truenas.yaml.
  2. In Apps → Discover Apps, open the menu ⋮ and choose Install via YAML. You need TrueNAS SCALE 24.10 or newer.
  3. Name it hearth, paste the file, replace /mnt/tank/media with your dataset and save.
  4. In Datasets → Edit permissions, give the apps group read access to that dataset.
Windows

Install Docker Desktop, which runs Hearth's Linux image through WSL. Then open your WSL terminal (Ubuntu) and run the install command at the top of this page. Your Windows drives appear there under /mnt; a folder like D:\Movies becomes /mnt/d/Movies.

Portainer, CasaOS and other Docker tools

Use compose.yaml with the environment variables HEARTH_VERSION=0.1.0 and MEDIA_DIR set to your media folder. Or take one of the NAS files above and change its media path.

DAY TO DAY

Easy to keep.

Update

Run the install command again. It finds your installation, moves it to the new version and keeps your settings, .env and compose.override.yaml.

Change or add media folders

Installed with the command: to switch folders, change MEDIA_DIR in .env in your install folder. To add a second folder, create compose.override.yaml next to it:

services:
  hearth:
    volumes:
      - /mnt/tv:/tv:ro

Then run docker compose up -d in the install folder.

Synology, QNAP, TrueNAS: edit the project's YAML. Change the source: path, or copy the six lines that start at - type: bind and give the copy its own source and a target such as /tv. Unraid: edit the container and use Add another Path, with a container path such as /tv.

Finally, add the new path (/tv) in Hearth under Server → Storage. Hearth only sees container paths like /media and /tv, never your NAS paths.

Use your own web address

On your home network, you don't need to set anything: open http://your-server:3000. To reach Hearth from outside, put it behind a reverse proxy with HTTPS, such as Caddy, Nginx Proxy Manager, Traefik or Cloudflare Tunnel, and tell Hearth its address:

  • Installed with the command: set PUBLIC_BASE_URL='https://media.example.com' in .env, then run docker compose up -d.
  • Synology, QNAP, TrueNAS: fill in PUBLIC_BASE_URL: "https://media.example.com" in the YAML and rebuild.
  • Unraid: fill in Public address when you edit the container.

Use only the address itself: https://, the hostname and no path. From then on, Hearth accepts sign-ins only at that address, including from home. Create your administrator first, then set the address. Turn off gzip compression in your proxy for Hearth, because Hearth compresses its own responses and video needs its exact bytes.

Where your settings live, and backups

Accounts, settings, watch history and the catalog live in Hearth's data, apart from your media. With the command or a NAS YAML, that is a Docker volume called hearth-data, prefixed with the install folder or project name. On Unraid, it is /mnt/user/appdata/hearth. It survives updates and restarts.

Server → Backups makes an online snapshot you can download. For a full copy of a command-line install, stop Hearth, archive the volume, then start it again:

cd ~/hearth
docker compose stop
docker run --rm -v hearth_hearth-data:/data -v "$PWD":/backup alpine tar czf /backup/hearth-data.tgz -C /data .
docker compose start
Permissions

Hearth runs as user and group 1000, never as root. It needs to read your media folder, and to write to it if you let it save downloads there. When the folder belongs to another group, the installer adds that group for you. Otherwise grant access on the host. Never use chmod 777.

sudo chown -R 1000:1000 /path/to/a/new/hearth-folder

Use this only on a folder that belongs to Hearth alone, never on a shared library.

GPU encoding

Hearth plays most files without converting them, so no GPU is needed. For conversions on an Intel or AMD GPU (VA-API), the installer offers the GPU when it finds one. To add it by hand, put this in compose.override.yaml or your NAS YAML, using your device's group number from stat -c %g /dev/dri/renderD128:

services:
  hearth:
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    group_add:
      - "105"

Hearth tests the GPU at startup and shows the result under Server settings → Hardware acceleration. If the test fails, it keeps converting on the CPU.

Install by hand

Download compose.yaml into a new folder, add a .env next to it, and start Hearth:

# .env
HEARTH_VERSION=0.1.0
MEDIA_DIR=/mnt/media
HEARTH_PORT=3000
PUBLIC_BASE_URL=
docker compose up -d
Uninstall

docker compose down in the install folder stops Hearth and keeps its data. Adding -v also deletes the data volume, with your accounts, settings and watch history. Your media folders are never touched.