Lumen
Sync

One code links your devices.

Your library, progress and settings follow you to every screen. There is no account, and nothing readable leaves your devices: everything is encrypted before it goes.

7Q4MX · K2H9C · V3ZDT · A8N5R

Twenty characters in four groups of five. That is the whole setup.

The pairing code

Made on the first device, typed on the others.

It is the only secret, and it never leaves your devices.

  1. Turn sync on

    Settings → Sync across devices. Lumen makes the code.

  2. Enter it on your other devices

    Typos are forgiven: I and L read as 1, O reads as 0, and the separators do not matter.

  3. That’s it

    The code is shown masked, with Show and Copy beside it, while sync is on. Turning sync off forgets it on that device.

What syncs

  • Library: saved titles, continue watching, watched state
  • Progress in every episode and film
  • Addons, and how they are configured
  • Player preferences: languages, audio presets, playback settings
  • Profiles, each with its own library and progress

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 server sees

We store what we cannot read.

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.

One row of watch progress, 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 and row ids are derived with keys only your devices hold, so the relay cannot tell which title a row belongs to, 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.

Your choice

Our server, or your own.

Both use the same encryption and the same pairing code.

Ours, at sync.lumen.movie

Included in the Lumen Pass, with 14 days to try it. We run the server and its backups.

About the Pass

Your own relay

Free, forever, with no Pass and no limit. The relay is installed beside the app on Windows, and there is a Docker image for everything else.

Run your own

Self-hosting

Run your own relay.

Everything the relay stores is ciphertext, so hosting it yourself changes who keeps the bytes, not who can read them.

  1. Run the relay

    Lumen installs lumen-relay.exe beside the app. It listens on port 7345 and keeps its data in lumen-relay.db next to it.

  2. Put it behind TLS

    Terminate TLS with a reverse proxy. Only two routes exist, so everything else can answer 404.

  3. Point your devices at it

    On every device: Settings → Sync across devices → Advanced → Relay address. A reset puts the built-in relay back.

Built-in limits
Request body4 MiB
Rows per request2,000
Payload per row256 KiB
Rows per household50,000
Windows
lumen-relay.exe --port 7345
Caddy, the 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 }
}
Docker, amd64 and arm64 (about 3 MB)
docker run -d --name lumen-relay -p 7345:7345 \
  -v lumen-relay-data:/data \
  elduinar/lumen-self-host-relay
Check it answers
curl https://sync.example.com/v1/health

Ready when you are.

Free on every device, no account to make, and installed in a minute.