• v0.8.1 6aeda935f1

    LedGrab v0.8.1
    Build Android APK / build-android (push) Failing after 11s
    Build Release / create-release (push) Successful in 6s
    Build Release / build-docker (push) Successful in 2m57s
    Build Release / build-linux (push) Successful in 1m49s
    Build Release / build-windows (push) Successful in 3m35s
    Build Release / publish-release (push) Successful in 2s
    Stable

    alexei.dolgolyov released this 2026-05-28 23:36:03 +03:00 | 62 commits to master since this release

    v0.8.1 (2026-05-28)

    User-facing changes

    Features

    Multi-broker MQTT devices
    • The device editor now shows an MQTT broker picker for device_type=mqtt (in both the add-device and device-settings modals), wired into load / save / validate / dirty-check / clone. An empty selection means "first available broker"
    • mqtt_source_id is now threaded end-to-end through DeviceCreate / DeviceUpdate / DeviceResponse and the device routes; the referenced broker is validated on create and update (a5effba)
    Schema-driven wiring-graph editor
    • The visual graph editor now renders ports and edges generically from a backend-served schema (GET /api/v1/graph/schema) instead of hard-coding the connectable-field topology in two places — so client and server can no longer drift
    • New GET /api/v1/graph returns the full nodes + edges + validation topology, and GET /api/v1/graph/dependents/{kind}/{id} reports what references an entity (a5effba)
    Aggregated snapshot endpoint
    • New GET /api/v1/snapshot returns all output targets (with processing state + metrics), devices (with brightness), the source / preset / clock lists, and the system block in a single response — collapsing the Home Assistant integration's previous ~2N+M request fan-out into one round trip
    • ?include= fetches only a subset of sections, and an excluded section also skips its server-side work (e.g. cold-cache hardware brightness probes or the blocking NVML performance query) (a5effba)

    Bug Fixes

    • Graceful shutdown no longer hangs: uvicorn's graceful-shutdown wait is now bounded (GRACEFUL_SHUTDOWN_TIMEOUT, shared by the desktop, Android, and demo launchers). A lingering events WebSocket (which the browser auto-reconnects) used to keep connections from draining, so the lifespan shutdown never ran — leaving LED targets lit and blocking process exit. Ctrl+C / OS shutdown with the UI open now reliably stops targets and checkpoints the DB (a5effba)
    • Device update error codes: update_device no longer masks an intentional 4xx (e.g. an unknown mqtt_source_id or failed group validation) as a generic 500 (a5effba)

    Development / Internal

    Backend

    • Wiring-graph schema engine (api/graph_schema.py): a pure, unit-tested module that is the single source of truth for which reference fields connect which entity kinds; builds the topology and performs dependency lookup plus cycle / dangling-reference detection without booting the app or any store. The route layer only gathers serialized entities and delegates (a5effba)
    • Structured access log: a new middleware emits one structured line per request, attributing it to the authenticated token's friendly label (the key name, never the secret) so traffic can be traced to a client (e.g. homeassistant vs android). uvicorn's own access log is disabled to avoid duplicate lines (a5effba)
    • Shared validate_mqtt_source_exists (_mqtt_validation.py) deduplicates the MQTT-source existence check between the device and output-target routes (a5effba)

    Frontend

    • Service-worker refresh for the new bundle (a5effba)

    Tests

    • New suites: graph routes + schema engine, snapshot routes, access-log middleware, mqtt_source_id device regressions, and the bounded-shutdown entrypoint. Full suite: 1614 passing (a5effba)

    All Commits (1)
    Hash Message Author
    a5effba feat: aggregated snapshot + wiring-graph APIs, MQTT device brokers alexei.dolgolyov

    Downloads

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

    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