v0.1.1 hardened what was already there. v0.2.0 goes back and finishes something that had been sitting half-built for two releases.
The Home Assistant integration shipped in 0.1.0 as an overlay: link a camera to an entity, drag a badge onto the frame, watch the state change. That part worked. What you could not do was anything else. You could not act on the device, the entity picker only accepted a narrow slice of domains, the labels were inferred and immutable, and almost all of the setup lived on the desktop client. An audit across the backend, the console, and all three client families put it plainly: the plumbing was solid, the authoring layer was thin.
Authoring got a real home
Home Assistant is now its own area in the admin console rather than a scattering of fields inside each camera. There is a single view of every link across every camera, and a link whose entity has disappeared from your instance gets flagged instead of silently going dark.
The entity picker was widened from a short allow-list to every controllable domain plus numeric sensors, so covers, locks, fans, sirens, buttons, scripts, and a temperature reading are all linkable now. Each link carries its own role, device class, and label, which you edit, validated on the server against the entity's real domain so a typo does not become a badge that never updates.
Icons used to drift between clients because each client mapped them on its own. A badge you styled on the desktop could quietly land on your phone as a generic dot. There is now one canonical icon set, enforced server-side and mapped identically on desktop, Android, and iOS, and numeric sensors render their units on both the badge and the detail card.
The badges do something now
A single tap actuates a simple device: a light, a switch. Covers and locks open a card first, on the theory that you should not unlatch a door by brushing the glass. Dimmable lights, covers, and fans get a slider for brightness, position, and speed, which commits once when you let go rather than firing at your instance the whole way across.
Control is off until you allow it. It sits behind its own role capability, which is off by default, and each individual link can require a confirmation tap or expose only the actions you choose. Leave Home Assistant unconfigured and none of this subsystem runs at all.
It works the same on the desktop, Android, macOS, and iOS clients.
Also in this release
Adaptive live-wall quality, on every client. When a wall runs into thermal or decode pressure it steps stream quality down and brings it back up when the pressure clears, so a busy wall degrades gracefully instead of stuttering.
Plate names. Name a plate once and that name follows it everywhere the plate appears: reads, watchlist, detail. The raw plate stays legible underneath, since the name is your label and the read is the evidence.
A scrubbed diagnostics bundle on the server, the counterpart to the desktop diagnostics that landed in 0.1.1. Admin only, and scrubbed before it reaches you.
Digital zoom ceilings went up and got aligned: Android playback to 10x, iOS and desktop to 30x, with trackpad pinch-to-zoom on desktop laptops.
The blank-thumbnail window after a server upgrade is gone. 0.1.1 listed it as a known issue; media tokens minted by an older client are now filled in with default capability claims rather than rejected outright.
Getting it
Back up your database first. This one does add schema changes, and they apply on boot.
docker compose pull && docker compose up -d
The desktop, Android, and macOS builds are attached to the v0.2.0 GitHub release, each with a checksum. The full change list, down to every merged pull request, is in the changelog.