Skip to content

Getting started ​

E-Ink Hub is a single Docker container (Node.js + SQLite) with a web UI. It keeps your photos, renders them for each frame and delivers them on a schedule.

Install with Docker ​

bash
mkdir eink-hub && cd eink-hub
curl -O https://raw.githubusercontent.com/yayitazale/eink-hub/main/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/yayitazale/eink-hub/main/.env.example
# Edit .env: LOCAL_URL is this machine's LAN address, e.g. http://192.168.1.10:8080
docker compose up -d

This pulls ghcr.io/yayitazale/eink-hub:latest, the latest release. Your data (database, originals and render cache) lives in ./data.

Installed from GitLab?

The project moved from GitLab to GitHub after v0.3.4. registry.gitlab.com/yayitazale/eink-hub still gets every release, so nothing breaks, but ghcr.io/yayitazale/eink-hub is the image to use from now on: change image: in your docker-compose.yml and run docker compose pull && docker compose up -d.

The compose file uses Docker's default bridge networking, publishing port 8080. Search the network finds BLOOMIN8 frames by scanning the subnet of your LOCAL_URL, so set it to this machine's LAN address. You can always add a frame by IP too.

Optional: mDNS discovery with host networking

Multicast (mDNS) doesn't cross Docker's bridge. To also discover frames by mDNS, use host networking (Linux hosts only; Docker Desktop on Windows/macOS doesn't support it): in docker-compose.yml uncomment network_mode: host and remove the ports section. The hub then listens directly on the host's port 8080.

Open http://<host>:8080, choose an admin password and you're in.

Install on Unraid ​

On Unraid, install eink-hub from the Apps tab (Community Applications). It also works with Unraid's Tailscale integration. See Unraid.

Add a frame ​

Canvas → Add Canvas offers:

  • Search the network for BLOOMIN8 frames (wake them first by pressing the button on the back).
  • Add manually, choosing the kind of frame:
    • BLOOMIN8: by IP address.
    • SwitchBot: with your SwitchBot token and secret. See SwitchBot.
    • TRMNL: by MAC address. See TRMNL firmware.
    • DIY frame: you get an endpoint and a token for your firmware. See Build your own.
    • Simulated Canvas: a virtual frame inside the hub, for trying things out without hardware.

You also choose how the frame hangs, portrait or landscape (a DIY frame takes it from the width and height you give it). You can change it later in the frame's Settings.

The first time a frame connects it shows a welcome picture with a QR code that opens the hub, laid out for the way the frame hangs. If you change the orientation while the welcome picture is on screen, the hub sends it again the right way round.

Send a photo ​

Upload photos in Library (or connect Immich), open one and press Send. The preview is exactly what the frame will receive. You can let the hub find the subject (smart crop), crop by hand, fit with a border or fit on a blurred background. Tick Show the photo's date to add a small label with the date it was taken in the bottom-left corner, as a schedule can.

If the frame is asleep, the photo is queued and shown the next time it wakes.

Rotate photos automatically ​

Give each frame a collection and a schedule under Schedule. See Collections & schedules.

Update ​

bash
docker compose pull && docker compose up -d

When someone opens it, the hub checks whether there is a newer release (at most every couple of hours, from the list of versions published with these docs; a hub nobody opens never checks). When there is one, the sidebar (on a phone, the top bar and Settings) shows it with links to what's new and to its documentation. The version number at the bottom of the sidebar opens the changelog, next to links to these docs and to the source code. To turn the check off, set UPDATE_CHECK_DISABLED=true in .env.

Image tagWhat it is
:latestThe latest release (recommended)
:vX.Y.ZA specific release, to pin a version