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.
Original file first, then a lossless repackage of the video. It only re-encodes when you allow it.
Request a film or a series in 720p, 1080p or 4K. Hearth picks a release, downloads it and files it.
Detected per episode, with a marker editor for when you know better.
SRT, ASS and embedded text, plus Blu-ray image subtitles read as text.
Recommendations for every person on your server. Bring your watch history from Jellyfin or Plex.
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
- Checks DockerDocker with Compose is all it needs. If Docker needs root on your server, run the command with
| sudo sh. - 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.
- Writes plain Compose filesInto
~/hearth, or/opt/hearthas root. Nothing else on your system changes. - Starts Hearth and checks itIt waits until the server is healthy and confirms Hearth can read your media.
Then, in your browser
- Open
http://your-server:3000The installer prints the exact address. - Create your administratorFinish this on your home network before you open Hearth to the internet.
- Add
/mediaand scan itUnder Server → Storage. That is your media folder as Hearth sees it. - 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
- Download synology.yaml.
- 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. - Replace
/volume1/videowith your media folder, then build the project. - In Control Panel → Shared Folder, give the
usersgroup read access to that folder. Give it read/write if Hearth should save downloads there.
Then open http://your-nas:3000.
QNAP · Container Station
- Download qnap.yaml.
- In Container Station, open Applications → Create, name it
hearthand paste the file. - Replace
/share/Multimediawith 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
- Download truenas.yaml.
- In Apps → Discover Apps, open the menu ⋮ and choose Install via YAML. You need TrueNAS SCALE 24.10 or newer.
- Name it
hearth, paste the file, replace/mnt/tank/mediawith your dataset and save. - In Datasets → Edit permissions, give the
appsgroup 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 rundocker 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.