← All updates

Home Assistant entity badges, painted on the live video

Link a camera to your Home Assistant entities and drag their live state onto the video as badges. Self-hosted, REST-polled, configured in the console. State honesty is built in.

BackendDesktop home-assistantoverlayintegrations

Home Assistant is the integration I most wanted, because it's already self-hosted, so it fits Crumb's rule that an optional integration has a self-hosted path and that footage never leaves your control. Crumb talks to your HA over its REST API, reads state, and shows it right next to (and on top of) your cameras. Nothing about your cameras is sent to HA.

Badges on the video

Open a camera's live view in the desktop app, drag a linked entity from the palette onto the frame, and it becomes a badge that shows the entity's current state right where the thing is. Point the front-door sensor badge at the door in frame and it reads "Open" or "Closed" live, on the picture, as the door moves. Pin a motion sensor over the driveway, a light over the porch. Positions are stored as fractions of the video frame, not the pane, so a badge stays on the door as the tile changes shape.

Each badge styles independently: an icon from a curated set, a compact dot or a labelled pill, foreground and background color, size, opacity, an outline so it pops on a busy scene, and pinned captions that show the live state text and/or the last-changed age. The editor supports undo and multi-select align, and it all saves when you hit Done.

State honesty is not optional

This is the rule I wouldn't bend: an unknown, unavailable, or stale entity renders grey and dimmed, never as "closed" or "off." A badge that looked closed on a dead HA connection would be the overlay version of the footage-loss bug, so it's treated the same way. Tap a badge and you get a read-only card with the friendly name, current state, a relative "N ago", the raw entity id, and a stale note when it applies.

One honest limitation

Badge control is not shipped yet. Tapping a badge shows you the entity's state; it does not toggle anything. You can link lights, switches, and scenes and watch them, but Crumb does not call an HA service today, so a light badge is a status light, not a switch. The plumbing (an actuators permission) is reserved for the control phase and isn't wired.

How to set it up

You need a base URL and a long-lived access token, made from a dedicated non-admin HA user (read-only state is all the badges need). Configure it in the console under Detection & clips, the same panel as Frigate. A test button checks reachability before you save. Then, in the camera editor's Home Assistant section, link the camera's sensors and controls. It's off by default, like every integration here.

Transport is REST polling, on purpose: a silently dead WebSocket took about 39 seconds to notice in testing, and a polled GET with a timeout surfaces a dead HA within about a second. Details in the Home Assistant docs.

Don't miss the next one.

Watch the repo on GitHub for releases, or grab the RSS.

Get it on GitHub