Sync
Keep your library, watch progress and settings in sync with one pairing code. Your data is encrypted on your devices. No account needed.
Hosted sync is free for 14 days, then €19 once per household. Or run your own sync server, free.
A pairing code (example)
7Q4MXK2H9CV3ZDTA8N5R
Twenty characters in four groups of five. That is the whole setup.
The pairing code
One code, made on the first device, typed on the others. It is the only secret, and it never leaves your devices.
-
Turn sync on and Lumen makes the code. Enter it on your other devices and they are linked.
-
Typos are forgiven: I and L read as 1, O reads as 0, and the separators do not matter.
-
The code is shown masked, with Show and Copy beside it, and only while sync is on.
-
Turning sync off forgets the code on that device. To link it again, enter the code once more.
What syncs
The four things that make a second device feel like the first one.
-
Library: saved titles, continue watching, watched state.
-
Progress: where you are in every episode and film.
-
Addons: which ones are installed and how they are configured.
-
Player preferences: subtitle languages, audio presets, playback settings.
What stays on the device
The pairing code, the window size and position, the diagnostic log, and anything you downloaded for offline viewing.
What the relay sees
Each device derives its keys from the code and encrypts every row before sending it. The relay stores what it is given and can read none of it.
On your device
- entity
- watch
- key
- tt1254207:1:3
- value
- {"positionSecs":2537,…}
What the relay stores
- space
- 9f3c…7b21
- entity
- x
- row
- c81a…04ef
- payload
- base64 ciphertext
- updated
- 1788462601007
The space id and the row id are derived with keys only your devices hold, so the relay cannot tell which title a row belongs to, or move a row to another slot, or change its date without your devices noticing. It keeps the network address of the connecting device for the length of the request, and nothing else.
The relay we host runs at sync.lumen.movie. Devices use it unless you point them somewhere else.
Choose your sync setup
Use our hosted sync server, or run your own. Both use the same encryption and pairing code.
-
Our relay at sync.lumen.movie: free for 14 days per household, then a Lumen Pass, €19 once for that household.
-
Your own relay: free, forever, no Pass, no limit. The binary is installed beside the app.
-
Identical either way. The encryption, the pairing code and what syncs do not change.
-
If a trial ends, syncing pauses and nothing else does. Local changes are kept and sync once a Pass is active.
Let Lumen take care of the server.
All the convenience of private sync, with no relay to run or maintain. One Pass covers every personal device in your household for €19 once.
Explore Lumen PassRun your own relay
Everything the relay stores is ciphertext, so hosting it yourself changes who keeps the bytes, not who can read them.
-
Run the relay
Lumen installs lumen-relay.exe beside the app, in %LOCALAPPDATA%\Programs\Lumen. Start it on a machine your devices can reach; it listens on port 7345 and keeps its data in lumen-relay.db next to it.
lumen-relay.exe --port 7345 -
Put it behind TLS
Terminate TLS with a reverse proxy. Only two routes exist, so everything else can answer 404. This is the Caddy site block we use:
sync.example.com { encode gzip handle /v1/health { reverse_proxy 127.0.0.1:7345 } handle /v1/sync { reverse_proxy 127.0.0.1:7345 } handle { respond 404 } } -
Point your devices at it
On every device: Settings, Sync across devices, Advanced, Relay address. Enter your relay's https address. A reset puts the built-in relay back.
curl https://sync.example.com/v1/healthThe health route answers ok.
Docker
A prebuilt image is published for Linux, for both amd64 and arm64, so a Raspberry Pi or a NAS runs it as well as a server does. It is one static binary on an empty base image: about 3 MB to download, with no operating system inside it to keep patched.
docker run -d --name lumen-relay -p 7345:7345 \
-v lumen-relay-data:/data \
elduinar/lumen-self-host-relay
The relay speaks plain HTTP, so put it behind the same TLS proxy as above before anything outside your own network can reach it. Its data stays in the lumen-relay-data volume.
Built-in limits
| Request body | 4 MiB |
|---|---|
| Rows per request | 2000 |
| Payload per row | 256 KiB |
| Rows per space | 50 000 |
Updates to rows a space already holds always go through; only new rows count against the per-space cap.