• v0.6.0 5ef6ac1317

    LedGrab v0.6.0
    Build Release / create-release (push) Successful in 3s
    Build Android APK / build-android (push) Failing after 3m52s
    Build Release / build-linux (push) Successful in 5m20s
    Build Release / build-docker (push) Successful in 6m20s
    Build Release / build-windows (push) Successful in 7m7s
    Stable

    alexei.dolgolyov released this 2026-05-01 19:11:15 +03:00 | 141 commits to master since this release

    v0.6.0 (2026-05-01)

    This release adds device-event notifications (snack + Web Notifications), a daylight/timezone-aware streaming pipeline with a new camera engine, a redesigned Targets surface built on the dashboard's mod-card system, a tighter LED hot path with allocation-free per-frame work, and a revamped Release Notes overlay with clickable asset downloads. Plus a wide pass of modal, toolbar, and settings polish across the WebUI.

    Features

    • Device event notifications — configurable per-event channel matrix (none / snack / OS / both) for target online/offline, new WLED/serial discovery, and devices going missing. Backed by a long-running mDNS browser + 10 s serial poller, a startup-grace / flap-debounce / bulk-coalesce pipeline, and a new Notifications tab in Settings (en/ru/zh). (8aa3a32)
    • Daylight + timezone streaming — new daylight_settings module and daylight-tz frontend helper expand the daylight stream's behavior; capture path additions land alongside a new camera engine test suite. (fdac26b)
    • Targets cards migrated to the mod-card system — LED targets and HA Light targets now share the dashboard's instrument-readout vocabulary (mod-head / mod-leds / mod-metrics / mod-foot, kebab menu, badges, chips, patch indicator). LED preview, FPS sparkline, and pipeline metrics preserved via an extraHtml escape hatch. (233b463)
    • Target pipeline as a compact strip + chip row — drops the legacy "Pipeline details" collapsible block; an always-visible 4 px segmented timing bar (extract / map / smooth / send for video, read / fft / render / send for audio) sits above an inline chip row showing total ms / frames / keepalives, animating smoothly between samples. (51eebf2)
    • Targets metrics aligned with the dashboard — FPS sparkline now lives inside the FPS cell, Uptime gets a clock icon, Errors gets ok/warning by count, FPS readout adopts the dashboard current/target avg N.N shape, and the grid sizes so values like 1m 43s no longer truncate at typical desktop widths. (9067db2)
    • Release Notes overlay v2 — new masthead with display-font title, tag/published/pre-release chip strip, and close/external actions; markdown body fuzzy-matches <code> filenames to release assets and renders clickable download links with per-asset descriptions (Windows installer/portable/msi, Linux tarball/AppImage/deb/rpm, macOS dmg/pkg, Android apk/aab, iOS ipa). Checksum/signature side-files are hidden. (9d4a534)
    • Tutorials expansion — sub-tab switching, breadcrumb header, and prepare/switchSubTab hooks let tours open/close the dashboard customize panel and resolve targets behind sub-tabs; new steps for integrations, dashboard customize panel (presets / global / sections / perf cells), targets, scenes, and sync-clocks (en/ru/zh). (797b806)
    • Cards / settings / modal / toolbar polish — reworked mod-card colors, sections, channel-stripe styling, hairline borders, and signal-flow animation on running cards; multiselect bulk toolbar gets explicit Select-all / Deselect-all icons with luxury-gradient toolbar styling; Settings tabs are now icon-only (no overflow at any locale); modal exit animation gains symmetric fadeOut + slideDown keyframes with reduced-motion support; locale picker collapses to EN / RU / ZH; snack toast adopts a glass background with per-type accent. (a56569b)
    • Suppress browser auto-open on Windows login — when "Start with Windows" is enabled, the autostart shortcut now passes --autostart so the WebUI tab no longer pops on every login. Manual launches and the installer's "Launch LedGrab" finish-page action are unchanged. (de13f44)
    • Simpler segment payloadsSegmentPayload.start defaults to 0 and length defaults to "the rest of the strip from start". A single segment with only mode + color now fills the entire strip — no more length: 9999 magic value clients had to pass. (1c9acc5)
    • About panel now houses the author + contact details that previously lived in a global app footer, freeing up vertical space across every page (en/ru/zh donation.about_author key added). (816a27d)

    Performance

    • LED hot path is allocation-free per-frame: Adalight gets a dedicated single-worker tx executor, pre-allocated wire buffer, uint8 scratch, and a precomputed header struct; DDP gets a pre-built struct.Struct and memoryview emit path; calibration precomputes Phase 3 skip-LED resampling so per-frame work is now np.take + in-place blend; the WLED target processor gets a matching tightening. (797b806)

    Bug Fixes

    • Audio-source modal preserves device on refresh — refresh button moved into the label row (no more overflow past the Source panel edge); selection is restored by matching on (index, loopback) first with a trimmed-name fallback for OS-side reindexing; the EntitySelect trigger now syncs so the visible label matches the underlying <select> in edit mode. (0980cf4)
    • PWA meta tag — add the standard mobile-web-app-capable tag while keeping the Apple variant for iOS Safari, since Chrome deprecated apple-mobile-web-app-capable. (8e109f3)

    Development / Internal

    CI/Build

    • Add workflow_dispatch and skip lint/test on release commits (release.yml already runs in parallel; manual dispatch covers re-runs on demand). (033c1f6)

    Tests

    • New test_camera_engine suite covers the new capture path. (fdac26b)
    • Adalight + DDP tests cover header format, buffer reuse, non-contiguous input, brightness scaling, RGB/RGBW packets, sequence/PUSH semantics, and multi-packet fragmentation. (797b806)
    • 13 new tests for the device-event notifications backend (full suite still 899 passing). (8aa3a32)
    • conftest pre-creates the test DB so main.py's legacy-data migration no longer shovels the user's production DB into the test temp dir; test_preferences_notifications wipes its own setting at the start of the defaults test (was relying on isolation it never enforced). (9d4a534)

    Tooling

    • .mcp.json checked in with code-review-graph MCP server config so the graph tools are available out of the box. (797b806)

    All Commits
    Hash Message Author
    0980cf4 fix(ui): audio-source modal — preserve device on refresh, relocate refresh action alexei.dolgolyov
    fdac26b feat: daylight tz, camera engine, value stream + modal/UI polish alexei.dolgolyov
    816a27d refactor(ui): drop app footer, move author info to About panel alexei.dolgolyov
    797b806 feat: LED hot-path perf, tutorials expansion, modal markup polish alexei.dolgolyov
    9d4a534 feat(ui): release notes overlay v2 + settings/streams/dashboard polish alexei.dolgolyov
    51eebf2 feat(ui): redesign target pipeline as compact strip + chip row alexei.dolgolyov
    9067db2 feat(ui): align Targets metric cells with dashboard pattern alexei.dolgolyov
    233b463 feat(ui): migrate Targets cards to mod-card system alexei.dolgolyov
    de13f44 feat(autostart): suppress browser auto-open on Windows login alexei.dolgolyov
    1c9acc5 feat(api-input): make SegmentPayload start/length optional alexei.dolgolyov
    a56569b feat(ui): cards redesign + settings, modal, toolbar polish alexei.dolgolyov
    8aa3a32 feat(notifications): device event notifications (snack + Web Notifications) alexei.dolgolyov
    8e109f3 fix(pwa): add mobile-web-app-capable meta tag alexei.dolgolyov
    033c1f6 ci: add workflow_dispatch and skip lint/test on release commits alexei.dolgolyov

    Downloads

    Platform File Description
    Windows (installer) LedGrab-v0.6.0-setup.exe Install with Start Menu shortcut, optional autostart, uninstaller
    Windows (portable) LedGrab-v0.6.0-win-x64.zip Unzip anywhere, run LedGrab.bat
    Linux LedGrab-v0.6.0-linux-x64.tar.gz Extract, run ./run.sh
    Android LedGrab-v0.6.0-android-release.apk Sideload 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.6.0
    docker run -d --name ledgrab -p 8080:8080 -v ledgrab-data:/app/data git.dolgolyov-family.by/alexei.dolgolyov/ledgrab:v0.6.0
    

    First-time setup

    1. Change the default API key in .
    2. Open http://localhost:8080 and add your LED devices.
    3. See for detailed configuration.
    Downloads