Framewrk
Self-hosted · free to use

Your photo frames, filled from your own library.

Framewrk watches PhotoPrism, picks the photos that match your rules, and sends them to your Aura and Nixplay frames at the size and shape each screen wants. It remembers what it has already sent, so nothing goes twice — and it takes photos back off when they stop qualifying.

One container. No config file. Everything is set up in the console.

What it does

Three things, properly.

Sends what fits

A portrait frame gets portrait photos. A 1280px screen gets a 1280px file. You set the rule once per frame, or let the whole house share one.

Never sends twice

Every photo is tracked against the frame it went to, by ID. Rename a frame in the Aura or Nixplay app and Framewrk just adopts the new name.

Takes them back off

Narrow a frame to one album and the rest come down on the next run. The console tells you what will happen before it happens.

The console

Set up in a browser, not a config file.

Framewrk has no configuration file and nothing to set before it starts. Everything — PhotoPrism, your frame accounts, which photos qualify, what each screen gets — is here.

The Wall screen: four photo frames each showing the last photo sent to it, a 30-day activity chart, and library totals.
The wall. Every frame, the photo currently on it, and what has been sent lately.
The Frames screen: Aura and Nixplay frames grouped by service, each showing its image size, shape rule and photo count.
Frames. One card per screen, across both services.
The Source screen: the PhotoPrism address, username and password, a Test connection button, and the rules for which photos qualify.
Source. Where photos come from and which ones qualify.
Get started

Running in about a minute.

There is nothing to configure first — no config file, no environment to set. One container, one folder, then everything else happens in the console.

$ mkdir framewrk && cd framewrk
$ curl -O https://raw.githubusercontent.com/smichalczyk/framewrk/main/compose.yaml
$ docker compose up -d
$ docker compose logs | grep -A2 "Admin password"
  1. Open http://your-host:8770 and sign in with the password from the log. You are asked to choose your own straight away.
  2. Under Source, point it at PhotoPrism and press Test connection. Add your Aura or Nixplay account the same way.
  3. Under Frames, press Add. It lists the frames actually on your account — pick one, set its size and shape.
  4. Press Sync now, or wait for the schedule.
Anywhere Docker runs

Including the NAS it probably belongs on.

Published for amd64 and arm64. Each guide ends with the one thing that actually catches people out on that platform.

One detail worth knowing

Nixplay puts an album in between.

With Aura, a frame is a frame and photos go straight to it. Nixplay does not work that way: you upload into an album, and an album is played by zero or more frames. Most tools hide that and get it wrong. Framewrk shows you frames, and says which album feeds each one.

PhotoPrism album Hallway Frame+ Landing Frame

So you can change where a frame's photos land without re-uploading a thing, see what else a frame is playing, and get told plainly when an album is on no frame at all — because nothing you sync into it will ever reach a screen.