-
LedGrab v0.9.0
StableBuild Release / create-release (push) Successful in 4sBuild Android APK / build-android (push) Failing after 22sBuild Release / build-linux (push) Successful in 2m54sBuild Release / build-windows (push) Successful in 4m50sBuild Release / build-docker (push) Successful in 6m34sBuild Release / publish-release (push) Successful in 4sreleased this
2026-06-23 14:48:51 +03:00 | 0 commits to master since this releasev0.9.0 (2026-06-23)
A large feature release: a full activity/audit log, two roadmap batches of
capture and smart-light improvements, per-pixel control for LIFX/Hue/Nanoleaf,
and new outbound integrations (webhooks + Home Assistant MQTT discovery).Features
Activity Log
- Persistent activity/audit log: storage model with migration, recorder with
actor context and retention, and event instrumentation across four
categories (1ac4a0f, 726f39e, 25c613c) - REST API for list / export / settings / clear (4a09275)
- Activity tab with smart filtering, live updates, and export, plus a
dashboard widget and settings panel (9a0137f, 6e1dd21)
Per-pixel smart lights
- LIFX multizone (SetExtendedColorZones) and Tile per-pixel streaming,
auto-detected on connect with single-colour fallback (39b0554) - Philips Hue gradient-lightstrip mapping: Entertainment v2 frames keyed by
channel id, with ahue_gradient_modetoggle (39b0554) - Nanoleaf extControl v2 per-panel UDP streaming (
per_panelmode) (6745e25)
Capture & effects
- Linear-light blending and spatio-temporal dithering, opt-in per calibration (6745e25)
- Audio-reactive palette modulation across all 12 procedural effects (6745e25)
- Color-harmony gradient generator (complementary / analogous / triadic / …) (6745e25)
Automations & integrations
- Solar sunrise/sunset automation trigger (new
utils/solar.py) (6745e25) - Outbound webhook automation action (Discord / IFTTT / Zapier / Node-RED),
SSRF-gated at save and fire time (39b0554) - Home Assistant MQTT auto-discovery: read-only binary sensors per automation,
availability via birth/will, with cleanup on disable/delete (39b0554) - League of Legends poller wired via a
LoLPollManager+ shared runtime state (6745e25) auth.expose_docsflag (default off) to view/docs,/redoc, and
/openapi.jsonwithout a token; all real endpoints stay protected (126d8f2)
Bug Fixes
- Pre-release review hardening: solar timezone crash, webhook header CRLF,
MQTT topic-prefix injection, thread-safeget_statscopy, MQTT discovery
lock,reactive_modeLiteral, and calibration-modal accessibility (0c096db) - Comprehensive review fixes across security, concurrency, performance,
Android, and UI (17dd2e0) - Activity Log polish: accessible export menu, i18n placeholders, dashboard
section reconciliation, column alignment, ticking time, and no spinner
flash on instant filtering (3dd1ac3, ff1ff06, 77284e8, ae74cca, 077c99c)
Development / Internal
CI/Build
- Best-effort arm64 multi-arch Docker manifest via QEMU +
docker manifest
(amd64 path untouched) (6745e25)
Chores
- Activity Log feature plan/subplan scaffold, post-merge cleanup, and context
graduated into CLAUDE.md (1afe7d6, e584235)
Tests: ~180 new unit tests added across the activity log, roadmap features,
and integrations. Release gate green: ruff + tsc + build clean,
pytest 2739 passed / 2 skipped.
All Commits
Hash Message Author 0c096db fix: address pre-release review findings (2026-06-23) alexei.dolgolyov 39b0554 feat: roadmap round two (2026-06-23) — per-pixel smart-lights + integrations alexei.dolgolyov 6745e25 feat: roadmap batch (2026-06-19) — solar/linear-light/dither/nanoleaf + integrations alexei.dolgolyov 126d8f2 feat(auth): add auth.expose_docs flag to view API docs without a token alexei.dolgolyov e584235 chore(activity-log): post-merge cleanup + graduate context to CLAUDE.md alexei.dolgolyov 077c99c fix(activity-log): no spinner flash on instant filtering alexei.dolgolyov ae74cca fix(activity-log): UI polish - accessible export menu, i18n placeholders, zero-result spinner fix alexei.dolgolyov 77284e8 fix(activity-log): dashboard section reconciliation + activity column alignment alexei.dolgolyov ff1ff06 fix(activity-log): post-test polish - localize descriptions, dashboard widget, ticking time alexei.dolgolyov 3dd1ac3 fix(activity-log): final-review fixes - crosslink keys + sanitize parity alexei.dolgolyov 6e1dd21 feat(activity-log): phase 6 - dashboard widget + settings panel + docs alexei.dolgolyov 9a0137f feat(activity-log): phase 5 - Activity tab (smart filtering, live updates, export) alexei.dolgolyov 4a09275 feat(activity-log): phase 4 - REST API (list/export/settings/clear) alexei.dolgolyov 25c613c feat(activity-log): phase 3 - event instrumentation (4 categories) alexei.dolgolyov 726f39e feat(activity-log): phase 2 - recorder, actor context, retention, lifecycle alexei.dolgolyov 1ac4a0f feat(activity-log): phase 1 - storage model, migration, repository alexei.dolgolyov 1afe7d6 chore(activity-log): scaffold feature plan and phase subplans alexei.dolgolyov 17dd2e0 fix: resolve comprehensive review findings (security, concurrency, perf, Android, UI) alexei.dolgolyov Downloads
Platform File Description Windows (installer) LedGrab-v0.9.0-setup.exeInstall with Start Menu shortcut, optional autostart, uninstaller Windows (portable) LedGrab-v0.9.0-win-x64.zipUnzip anywhere, run LedGrab.bat Linux LedGrab-v0.9.0-linux-x64.tar.gzExtract, run ./run.sh Android LedGrab-v0.9.0-android-release.apkSideload on Android 7.0+ (API 24+) — TV boxes, Fire TV, phones, tablets. arm64-v8a / x86_64 / x86 Docker See below docker pull + docker run After starting, open http://localhost:8080 in your browser.
Docker
docker pull git.dolgolyov-family.by/alexei.dolgolyov/ledgrab:v0.9.0 docker run -d --name ledgrab -p 8080:8080 -v ledgrab-data:/app/data git.dolgolyov-family.by/alexei.dolgolyov/ledgrab:v0.9.0First-time setup
- Change the default API key in .
- Open http://localhost:8080 and add your LED devices.
- See for detailed configuration.
Downloads
- Persistent activity/audit log: storage model with migration, recorder with