Magic Frame Magic Frame
v1.5.2 is out · release notes

Turn any display into a family board. picture frame. smart-home hub. status display.

Self-hosted dashboard for kitchen monitors, wall panels and picture frames. Drag-&-drop editor, deep Home Assistant integration, Immich albums as wallpaper. Local, no cloud, no account.

🟢 100% local 🔓 Polyform NC license 🐳 Docker Compose 🏠 Home Assistant + Immich

Drag a widget onto the grid → configure in the inspector → save → live sync to every connected display.

What's inside

One tool, many displays

Magic Frame turns any browser-capable screen — tablets, kitchen monitors, old TVs, even picture frames — into something useful in your home network.

Drag-&-drop editor

Build layouts on a 24-column grid without ever editing YAML or CSS. Resize, snap, save — and your tablets pick up the change instantly. Light or dark per view, or automatic by sun position.

Status cards

A card that shows up while something is actually happening — the car is charging, the printer is printing, the dryer is running. Device image, live values, progress as a bar or a ring. Gone again when it's over.

Deep Home Assistant

Live entity updates, media-player tiles with album-art wallpaper, camera tiles, HA-triggered show/hide, buttons that call services. And HA drives the displays back — one REST call sends every screen to a view.

Live preview

Every widget renders live while you configure it — the real component with real data, not a mock-up. Widgets that only appear on an event fabricate sample content from your own rules, icons and colours.

Picture frame mode

Wallpapers rotate from Immich or a WebDAV folder, LAN-only. Pick several albums and they merge into one shuffled slideshow — the whole library, not a capped sample. One tap toggles HA entities over the photos.

Live sync everywhere

Change a widget on your laptop and every connected display updates in under 100 ms over WebSocket. Multi-view, multi-screen.

Custom widgets

Upload a JS bundle through the UI and it's hot-loaded across every display. No container restart. Community-built modules are indexed in GitHub Discussions — grab one, or share your own.

Self-host ready

Optional Caddy reverse proxy with automatic Let's Encrypt, DDNS updater, 2FA TOTP, brute-force protection. All off by default. Community-maintained Helm chart if you run Kubernetes.

In your setup

Same project, completely different displays

A small framed tablet on the side table or a portrait monitor on the wall — Magic Frame renders the same dashboards, the same Home Assistant entities, the same Immich photos.

Picture frame mode — a small framed tablet on a side table with HA scene buttons and a lavender field wallpaper

Picture frame on a side table

A small tablet in a real photo-frame mount. By default it just rotates wallpapers from your Immich album and shows a tiny clock. Tap the toggle once and HA scene buttons fade in over the photo.

Wall-mounted portrait monitor as a family board with clock, calendar, notifications and weather

Wall monitor as family board

A portrait monitor on the wall — clock, calendar, live HA notifications and a 4-day weather forecast layered over an Immich-fed wallpaper.

Close-up of notification tiles on the wall monitor — Washing machine done, Feed Milou, Dryer done

Notifications, up close

Rule-based notification tiles auto-show when something happens ("Washing machine done", "Feed Milou", "Dryer done") and auto-hide once acknowledged. Wallpaper keeps running underneath.

Inside the app

A control center you actually want to open

Everything's in one self-hosted app — dashboards, integrations, a drag-&-drop editor. No YAML, no CSS file editing.

Magic Frame control-center dashboard with welcome screen, status strip and view thumbnails

Control center

Live system & status strip (HTTPS, DDNS, HA, Todoist, modules, backups, security) and mini-previews of all your views.

Magic Frame views page with three layout thumbnails (Kitchen, Preview, Tablet)

Views & layouts

Each view is its own URL for one display — portrait, landscape, picture-frame mode. Add, duplicate, edit, delete.

Magic Frame layout editor with widget catalog on the left and a 24-column grid on the right

Drag-&-drop editor

24-column grid, widget catalog on the left, inspector on the right. Auto-snapshot before every save, live-sync to every connected display.

Quick start

Two commands, running in 5 minutes

Anywhere Docker runs — Raspberry Pi 4/5, a NAS, an old laptop, a Mac mini, your homelab.

curl -fsSL https://get.docker.com | sh
curl -fsSL https://raw.githubusercontent.com/jeremiaa/magic-frame/main/deploy/install.sh | bash
Then open http://<server-ip>/login → create your first admin → done.
No domain needed
Pure LAN works out of the box.
Setup in the browser
First visit lands you in an admin-creation flow.
Idempotent updates
Re-run the script later, data + secrets stay.

Why I built it

It started with a kitchen monitor.

We have a portrait monitor mounted on the wall in the kitchen as our family board — shopping list, calendar, weather, who needs to feed the cat. I tried DAKboard, MagicMirror², a few HA dashboard hacks, and none of them quite fit.

So I built my own. Magic Frame is a drag-&-drop dashboard that talks deeply to Home Assistant, rotates wallpapers straight from your local Immich, and lets the same tablet be a picture frame and a smart-home dashboard depending on a single tap.

Star it on GitHub.
Run it on your network.

License is Polyform Noncommercial — free for personal, household, club, NGO and school use.