Who this is for
You have a Linux computer that stays on at home (a small PC, an old laptop, a mini server) and you're comfortable typing commands into a terminal. Debian, Ubuntu and Fedora all work, on Intel/AMD (x86_64) or 64-bit ARM (arm64).
Filamama is one program and one database file. No Docker, no separate database to look after.
What you need
- A Linux machine with systemd.
- Node.js 26 or newer.
- ffmpeg and ffprobe (one package gives you both), git and curl.
- Room for your photos and videos, plus about 20 GB for previews (a cache, adjustable).
- The machine and the phones on the same home network.
Give the machine a fixed address in your router (a DHCP reservation). The server's certificate names its address, so a stable address means fewer browser warnings.
Install the tools
On Debian or Ubuntu:
sudo apt update
sudo apt install -y git curl ffmpeg
On Fedora, the built-in ffmpeg (ffmpeg-free) has no H.264 encoder, which Filamama uses to make playable copies of videos browsers can't play. Use the full build from RPM Fusion:
sudo dnf install -y https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf swap ffmpeg-free ffmpeg --allowerasing
ffmpeg -hide_banner -encoders | grep libx264 # should print a line
Then Node.js 26, with nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.8/install.sh | bash
# open a new terminal, then:
nvm install 26
node -v # v26.something
Get Filamama
Download: coming soon. There is no public release of Filamama yet. When it ships, the download will be right here. The steps below are from the current build and may change a little for the first release.
Install the server
In the Filamama folder:
packaging/install.sh --dry-run # checks everything, changes nothing
packaging/install.sh
This builds the server and the web app, writes your settings, installs a systemd user service and starts it. It tells you when the server is ready on port 5400. Keep the folder: the service runs the server from it.
| Option | What it does |
|---|---|
--data-dir DIR |
Database, backups, the server's key and previews. Absolute path. |
--originals-dir DIR |
Where photos and videos are filed. Default <data-dir>/originals. |
--port N |
HTTPS port, default 5400. |
--no-service |
Build and write the settings, install no service. |
--dry-run |
Check and print, change nothing. |
Keep it running
A systemd user service stops when you log out, unless lingering is on. Turn it on once, and the server starts at boot whether or not anyone is logged in:
sudo loginctl enable-linger $USER
systemctl --user status diune-media-server # is it running?
systemctl --user restart diune-media-server # restart it
journalctl --user -u diune-media-server -f # follow its log
Open the firewall
Filamama needs TCP port 5400 (the web app and backups) and UDP port 5353 (mDNS, how phones find the server).
# Ubuntu, if ufw is on
sudo ufw allow 5400/tcp
sudo ufw allow 5353/udp
# Fedora Server, or a strict firewalld zone
sudo firewall-cmd --permanent --add-port=5400/tcp
sudo firewall-cmd --permanent --add-service=mdns
sudo firewall-cmd --reload
Don't forward port 5400 on your router. Filamama is for your home network only.
First visit
Open https://<the machine's address>:5400 in a browser on your home network. The browser warns about the certificate: the server made it itself, because nothing on a home network can get a public one. Accept it for this address.
The first visit creates the administrator. Add the rest of the household under Accounts; each person gets a temporary password and picks their own on first sign-in.
Pair the first phone
- Install Piktures on the Android phone.
- In the web app, open Settings, Devices, Pair a phone. A QR code appears, good once for ten minutes.
- In Piktures, add your Filamama server as the backup destination and scan the code.
The phone pins the server's key from the QR code, so it talks to this server only. No camera? Type the address and the code, and check that the safety code Piktures shows matches the one in the dialog.
Where your data lives
| What | Where |
|---|---|
| Settings | ~/.config/diune-media-server/env |
| Database, daily backups, key and certificate, previews | ~/.local/share/diune-media-server |
| Photos and videos | <data>/originals, as <person>/<yyyy>/<yyyy-mm>/<name> |
| Log | journalctl --user -u diune-media-server |
Folder and service names still use Filamama's working name, diune-media-server. They'll change before the first release.
The originals are plain files you can read without the server. The database is backed up every day at 03:00, keeping the last five. Back up the originals folder, the data folder, and especially <data>/tls/: without that key, paired phones won't trust a restored server.
Update and uninstall
Run the installer again after updating: it reads your settings, rebuilds and restarts the service. Phones stay paired. packaging/uninstall.sh removes the service and keeps everything else. After a Node major upgrade, run the installer again.
When something goes wrong
- Phone can't find it. Same Wi-Fi? Is UDP 5353 open? mDNS doesn't cross subnets or VLANs; pair by QR code or typed address instead.
- Page won't load from other devices. Check the firewall. If it doesn't load on the machine itself either, read the log.
- Stops at logout. Lingering is off:
sudo loginctl enable-linger $USER. - iPhone photos have no preview. HEIC previews aren't on Linux yet. The photos are backed up and downloadable.