Releases: ideaalab/gui-recorder
Release list
v0.8.35
Brand asset fix
The integration's brand/ PNGs (icon, logo, @2x variants) were RGBA on disk but every pixel was fully opaque — the background rendered as white on HA / HACS cards instead of blending in like other integrations' icons.
Flood-filled the white background from the image borders (interior white of the config-panel graphic is intact), so the icons now composite correctly on any card color and theme.
No code changes. Version bump so HACS surfaces this as an update.
v0.8.34
Hotfix
If your legacy recorder config had entity_globs patterns starting with * (e.g. *_rx_*, *battery*), restarting Home Assistant after completing migration could fail with:
while scanning an alias, expected alphabetic or numeric character, but found '*'
The migration's auto-transfer in v0.8.32 correctly stored those globs (using yaml.safe_dump with proper quoting), but the writer that produces gui_recorder.yaml was emitting list items unquoted, so the leading * was getting parsed by YAML as an alias reference (*_rx_) and Home Assistant rejected the file.
Fix: the exclude:/include: blocks are now written via yaml.safe_dump, which quotes values with YAML-significant characters automatically.
If you were stuck on the migration restart, update to v0.8.34 and try again — no need to redo Step 1.
v0.8.33
What's fixed
The panel was re-rendering on every Home Assistant entity state change — dozens of times per second on active setups. This destroyed focus and selection on any input, making the new Manual exclusions (advanced) textarea practically unusable (reported in #5 after v0.8.32: focus disappeared in under a second, Ctrl+V did nothing).
set hass(hass) no longer triggers a re-render. The render is a pure function of our own state (data from WS, filter text, migration state) and never reads from hass.states, so those rebuilds were wasted work. Render is now triggered only by our own state mutations: after data loads, after user actions, after viewport changes.
This is also the underlying fix for the typing/expanding lag on large installs (#1) — the 250ms filter debounce shipped in v0.8.29 was a patch on a symptom; this addresses the root cause. The debounce stays as defense in depth.
v0.8.32
What's new
New Manual exclusions (advanced) field for the recorder filters that GUI Recorder doesn't manage per-entity, addressing #5.
Migration card
- Step 1 (import) now auto-transfers unsupported legacy filters (
exclude.domains,exclude.entity_globs,exclude.event_types,include.domains,include.entity_globs) directly into the new Manual exclusions field — they were previously just counted and warned about, now they're carried over. - The only filter type still lost on migration is
include.entities(allow-list mode), which GUI Recorder can't represent. The UI calls this out explicitly.
Manual exclusions card
- Raw YAML textarea, merged into the generated
gui_recorder.yamlalongside the per-entity exclusions. - Allowlist: only
exclude.{domains,entity_globs,event_types}andinclude.{domains,entity_globs}. Individual entities (entities:lists) are rejected — those stay exclusively managed by the device/entity toggles so the two systems never fight over the same list. - Validated server-side: invalid YAML or unsupported keys never get persisted, you get an inline error instead.
Bug fix
- Migration card:
hasUnsupportedwas not countingexclude.event_types, so the warning banner could be hidden when only event_types filters existed. Fixed.
v0.8.31
Bug fixes
-
Live entities mislabeled as Obsolete/Unlinked (#4): entities without a
unique_id— common on legacy YAML platforms likesnmp,template, orcommand_line— never get an entry in Home Assistant's entity registry, even though they're live and actively recording. GUI Recorder's obsolete-detection only checked the entity registry, so these entities were incorrectly bucketed as obsolete.They're now cross-checked against live entity states. An entity with a live state but no registry entry is listed under Entities without a device instead, using its current friendly name when available. This also corrects the "Current records" / "Obsolete records" counts in the Database statistics card, which were previously counting these entities on the wrong side.
v0.8.30
New feature
- Select all / Deselect all (#2): new buttons above the Devices and Entities without a device cards let you enable or disable recording for many entities at once, instead of toggling them one by one. This makes an "allowlist" workflow practical — disable everything, then re-enable just the handful of entities you actually want recorded.
- The buttons act on the entities currently visible after the search filter, not the entire database — type a filter first to scope the bulk action, or clear it to affect everything.
v0.8.29
Performance
- Debounced the entity/device filter input (#1): typing in the filter box triggered a full panel re-render on every keystroke. On installs with thousands of recorded entities this froze the UI while typing. The re-render now waits 250ms after the last keystroke instead of firing on every character.
This addresses the typing-lag part of #1. The panel still does a full re-render on every other interaction (toggling, expanding a device, etc.), which is the deeper architectural issue on very large installs — tracked separately.
v0.8.28
Bug fixes
TypeError: 'NoneType' object can't be awaitedon every setup/restart (#3):frontend.async_register_built_in_panelis a synchronous@callbackfunction in Home Assistant core, not a coroutine, despite theasync_prefix in its name. The integration was incorrectlyawait-ing it, which raised this error on every setup. It was silently caught by error handling, so the panel still worked, but the error was logged on every single restart and the internalpanel_registeredflag never got set, causing the same failed registration attempt (and log entry) every time. Fixed by removing the erroneousawait.
v0.8.27
Bug fixes
- Blocking I/O warning on every panel load (#3):
panel.pywas readinggui-recorder-panel.jsfrom disk synchronously inside an async HTTP handler, blocking Home Assistant's event loop on every panel load. The file is now read once via an executor job when the panel is registered and served from memory afterward.
v0.8.26
UX improvements
- Migration-gated panels: while an active legacy recorder configuration is detected and GUI Recorder is not yet the active recorder source, the Maintenance actions, Filter, Devices, Entities without device, Unmatched exclusions, and Obsolete records cards are replaced with a single warning telling the user to complete migration first. This prevents toggling entities or running purges against a config that isn't actually controlling the recorder yet.
- Fresh installs (no legacy recorder config detected) and instances that have already completed migration are unaffected — all cards work exactly as before.
Documentation
- README now includes real panel screenshots (overview, devices, exclusions/obsolete).
- GUI Recorder is now part of the HACS default catalog — installation no longer requires adding a custom repository. The README and badge have been updated accordingly.