Who this is for
You have a Mac mini, or another Mac, that stays on at home, and you want the household's phones to back up to it. The Mac is the best-supported host. It makes previews of iPhone HEIC photos and uses the Mac's hardware video encoder, which Linux hosts don't do yet.
Apple silicon Macs are the main target. Intel Macs should work too, but they haven't been tested.
What you need
- macOS, with a user account that will run the server. A dedicated account is a good idea.
- Homebrew, then Node.js 26 or newer and ffmpeg.
- The Mac and the phones on the same home network. Ethernet is best for a server.
Prepare the Mac
Filamama runs as a login service (a launchd agent), which only runs while its user is logged in. So the Mac needs to log that user in by itself after a restart, and stay awake.
- Automatic login. System Settings, Users & Groups, "Automatically log in as", choose the account. This option isn't available while FileVault is on. That's a real trade-off: with FileVault on, after a power cut the Mac waits at the login screen and the server stays down until someone logs in.
- Don't sleep. System Settings, Energy: turn on "Prevent automatic sleeping when the display is off", and "Wake for network access".
- Restart after a power cut. In the same pane, turn on "Start up automatically after a power failure" (on newer Macs: "Start up when power is connected").
- A fixed address. Give the Mac a DHCP reservation in your router, so the server's certificate keeps matching its address.
Install the tools
Install Homebrew from brew.sh if you don't have it. Then:
brew install node ffmpeg
node -v # needs v26 or newer
If you'd rather pin Node yourself, nvm works too: nvm install 26.
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, see what the installer would do, without changing anything:
packaging/install.sh --dry-run
The dry run checks Node, ffmpeg and ffprobe and prints every step. Then install:
packaging/install.sh
It builds the server and the web app, writes your settings, installs the login service, starts it, and waits until the server answers on port 5400. Keep the folder where it is: the service runs the server from there.
| Option | What it does |
|---|---|
--data-dir DIR |
Database, backups, the server's key, 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 settings, install no service. |
--dry-run |
Check and print, change nothing. |
Photos on an external drive work too: pass --originals-dir "/Volumes/Photos/Filamama", and make sure the drive is connected at login.
If the macOS firewall is on, macOS may ask whether node may accept incoming connections. Say Allow, or phones and browsers can't reach the server.
Keep it running
The service starts when you log in and restarts the server if it crashes. Logging out stops the server. Locking the screen doesn't.
launchctl print gui/$(id -u)/com.diune.media-server | head -20 # status
launchctl kickstart -k gui/$(id -u)/com.diune.media-server # restart
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 | ~/Library/Application Support/Diune Media Server |
| Photos and videos | <data>/originals, as <person>/<yyyy>/<yyyy-mm>/<name> |
| Log | ~/Library/Logs/Diune Media Server/server.log |
Folder and service names still use Filamama's working name, diune-media-server. They'll change before the first release.
Time Machine can back up all of it. The part you can't get back any other way is <data>/tls/: it's the key paired phones trust.
Update and uninstall
Run the installer again after updating: it keeps your settings, rebuilds and restarts the service. Your library and paired phones are untouched. packaging/uninstall.sh removes the service and keeps every photo and setting.
When Homebrew moves node to a new major version (27, say), run the installer again: the server's database module is built for the Node it was installed with.
When something goes wrong
- Phone can't find it. Same Wi-Fi? Guest networks and client isolation block discovery. Is the Mac awake and logged in? Is
nodeallowed through the firewall? - Certificate warning. Expected on the first visit. It comes back if the Mac's address changes. A fixed address avoids it.
- Down after a power cut. FileVault is probably on, so the Mac waits at the login screen. Log in, or see "Prepare the Mac".