Repository navigation
Releases: LedFx/LedFx
Releases · LedFx/LedFx
Release list
LedFx 2.2.1
2.2.1 (2026-10-04)
Bug Fixes
- Sendspin: restore compatibility with the aiosendspin 9.1.1 client API and enable unpaired access before connecting to Music Assistant (#1970, #2063). Retain a stable identity, clean up playback buffers, and fix signed 24-bit PCM decoding.
- Windows installer: close running LedFx processes before upgrading or uninstalling, replace old bundled dependencies safely, preserve startup settings, and correct shortcuts and uninstall registration (#2020).
- Devices: keep output working after config and pixel-count changes; fix WLED sender changes, serial connection state, Hue handshakes, Launchpad handling, and socket cleanup (#1971, #1972, #1973, #2017).
- E1.31: avoid source-port collisions between senders and correct universe-boundary calculations (#2015, #2017).
- Effects: prevent render-thread failures from freezing output, correct config coercion and transitions, discard stale registry entries safely, and reset GIF frames when rebuilding (#1972, #1973, #2018).
- Web Audio: accept the frontend's sample lists and validate malformed input; reject unsupported raw virtual-update subscriptions (#1971, #2012, #2014).
- Integrations and discovery: close QLC websocket sessions, reconnect reliably, publish the color of the effect that triggered a Home Assistant event, and close zeroconf resources on repeated WLED scans (#2010, #2013, #2016).
This maintenance release preserves the 2.2.0 configuration format and v1 API. The configuration migration, API v2, and v1 route removals on main are excluded.
What's Changed
- fix: backport 2.2.1 maintenance fixes by @shauneccles in #2067
- chore(release/2.2): release 2.2.1 by @ledfx-automation[bot] in #2068
Full Changelog: v2.2.0...v2.2.1
LedFx 2.2.0
2.2.0 (2026-10-01)
Features
- Add filtered boolean to equalizer2d effect (#1836) (71bd8e8)
- Add linux now-playing support (#1835) (566de0f)
- Add melbank flag (#1851) (83d7c99)
- now_playing (#1805) (c063949)
- support Python 3.11–3.14 (drop 3.10, switch to pyfastnoiselite-ledfx) (#1916) (ebf36fb)
Bug Fixes
- audio: preserve audio selection and reconnect Sendspin after Music Assistant restarts (#1833) (284ec23)
- audio: preserve selected device on partial config updates (#1831) (375209d)
- Clean up Sendspin eager start and handle pause (#1837) (091b723)
- default gradient to off in now playing service config (#1832) (1f7ed3a)
- deps: keep cryptography 48 on Intel macOS (#1920) (b18344f)
- deps: update dependency aiosendspin to v9 (#1913) (5bd35d7)
- deps: update dependency mss to ~=10.2.0 (#1899) (0ef565a)
- deps: update dependency pybase64 to ~=1.5.0 (#1900) (f8a9108)
- gap- device trap corner cases (#1822) (e92bbac)
- MacOS tray icon thread requirements (#1860) (4c3858d)
- melt_and_sparkle suddenly changing. (#1847) (d2d3c57)
- moved launchpad pro mk3 before pad pro #1824 (#1829) (cb9fc7c)
- nanoleaf: support Nanoleaf Essentials devices that report a length instead of a panel layout (#1853) (a7e44a5)
- query the autofix workflow by filename, not name (#1959) (7b5ea30)
- security: cap the frame count and total pixels of animated images so oversized GIFs cannot exhaust memory and CPU (GHSA-cjr3-wgv6-rq28) (a7e44a5)
- security: check the request Origin and Host and build CORS headers from one policy; clients that reach LedFx by a non-local DNS name need it in allowed_hosts (GHSA-q86q-8gw9-jjgq) (a7e44a5)
- security: close SSRF guard bypasses via IPv6 transition addresses, redirects and DNS rebinding (GHSA-pc6c-8c73-p6p2) (a7e44a5)
- security: validate the Nanoleaf pairing address so requests cannot target arbitrary hosts and paths (GHSA-cc93-3vjc-976h) (a7e44a5)
Documentation
- explicitly define supported Python range (3.10–3.13) across install/build guides (#1827) (6ceecbb)
- MusicBrainz Album Art and general dev notes shuffle (#1818) (eecc25e)
- prek commands that work on a fresh checkout; defer the blame entry (53998aa)
- sendspin: document which Sendspin and Music Assistant versions work together (#1848) (a7e44a5)
What's Changed
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1811
- dev: trim copilot-instructions.md to reduce token count by @bigredfrog in #1816
- Feat: now_playing by @bigredfrog in #1805
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1817
- Docs: MusicBrainz Album Art and general dev notes shuffle by @bigredfrog in #1818
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1821
- Fix: gap- device trap corner cases by @bigredfrog in #1822
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1823
- Docs: explicitly define supported Python range (3.10–3.13) across install/build guides by @bigredfrog with @Copilot in #1827
- doc: loopback on raspberry by @Polarfuchs in #1830
- Fix: moved launchpad pro mk3 before pad pro #1824 by @PastaLaPate in #1829
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1828
- fix(audio): preserve selected device on partial config updates by @adamoberley in #1831
- Fix: default gradient to off in now playing service config by @bigredfrog in #1832
- fix(audio): preserve audio selection and reconnect Sendspin after Music Assistant restarts by @bigredfrog in #1833
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1834
- Feat: Add filtered boolean to equalizer2d effect by @bigredfrog in #1836
- Feat: Add linux now-playing support by @bigredfrog in #1835
- Fix: Clean up Sendspin eager start and handle pause by @bigredfrog in #1837
- chore: bump frontend submodule to 2.1.6-b41 by @YeonV in #1846
- Fix: Bump aoisendspin and add warnings by @bigredfrog in #1848
- Fix issue with melt_and_sparkle suddenly changing. by @ywwg in #1847
- chore: bump lifx-async and lifx-emulator-core by @Djelibeybi in #1849
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1841
- Feat: Add melbank flag by @bigredfrog in #1851
- Fix: Support Nanoleaf devices that return length, not layout by @JeroenvanA in #1853
- Configure Renovate from the LedFx preset, require CI before merge; drop Dependabot version updates by @shauneccles in #1863
- chore(deps): update dependency pytest to v9.0.3 [security] by @renovate[bot] in #1864
- chore(deps): update dependency aiohttp to v3.14.3 [security] by @renovate[bot] in #1865
- chore(deps): update dependency zeroconf to v0.149.16 [security] by @renovate[bot] in #1867
- chore(deps): update dependency black to v26 [security] by @renovate[bot] in #1868
- chore(deps): update dependency pillow to v12.3.0 [security] by @renovate[bot] in #1866
- chore(deps): update dependency black to >=26.5.1,<26.6.0 by @renovate[bot] in #1890
- chore(deps): update dependency ruff to >=0.16.7,<0.17.0 by @renovate[bot] in #1895
- chore(deps): update dependency pre-commit to >=4.6.2,<4.7.0 by @renovate[bot] in #1891
- chore(deps): update dependency pytest-asyncio to >=1.4.0,<1.5.0 by @renovate[bot] in #1892
- chore(deps): update actions/setup-python action to v7 by @renovate[bot] in #1902
- chore(renovate): don't pin the docker-compose example by @shauneccl...
LedFx 2.1.9
What's Changed
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1791
- Fix: allow hue coexistance, test on groups by @bigredfrog in #1800
- Add Random Spotlight effect by @henrydatei in #1789
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1802
- fix: sendspin pyFlac lifecycle hardening by @bigredfrog in #1801
- Dev: Add Sendspin info for ledfx by @bigredfrog in #1804
- Fix: Sendspin always on, force default for melbanks by @bigredfrog in #1808
- Fix: Scan Effect apply color intensity with full grad option by @bigredfrog in #1809
- Frontend 2.1.9 by @YeonV in #1810
- bump 2.1.9 by @bigredfrog in #1812
New Contributors
- @henrydatei made their first contribution in #1789
Full Changelog: v2.1.8...v2.1.9
LedFx 2.1.8
What's Changed
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1764
- Feat: add startup playlist by @bigredfrog in #1771
- updates: prepare 2.1.7 by @YeonV in #1772
- Fix: bad doc reference by @bigredfrog in #1773
- Feat: Audio device persist by name by @bigredfrog in #1770
- Docs: Linux fix dependancy installs by @bigredfrog in #1774
- Fix: Reject matching IP with no coexistance rule by @bigredfrog in #1775
- Fix: BladePowerPlus collapses its HSV gradient. by @bigredfrog in #1777
- Dev: move to pyFlac by @bigredfrog in #1778
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1781
- Fix: Normalise lifx RGB to 0-1 by @bigredfrog in #1784
- Fix: Lifx ceiling refresh state before power by @Djelibeybi in #1786
- Feat: Equalizer 2d new gradient options by @bigredfrog in #1787
- Fix: lazy bokeh import by @bigredfrog in #1788
- Feat: Sendspin always on option by @bigredfrog in #1780
- Frontend 2.1.8 by @YeonV in #1792
- Bump version to 2.1.8 by @Copilot in #1794
- another try for 2.1.8 by @YeonV in #1797
Full Changelog: v2.1.7...v2.1.8
LedFx 2.1.7
What's Changed
- Bump 2.1.7 by @YeonV in #1765
- Fix: audio fallback hardening by @bigredfrog in #1761
- bump to 2.1.7 by @bigredfrog in #1766
Full Changelog: v2.1.6...v2.1.7
LedFx 2.1.6
What's Changed
- Feat: remove calibration animation for complex_segments by @bigredfrog in #1698
- Feat: Optimized virtuals with simple segment calibration animation by @bigredfrog in #1699
- Fix: configuring.md location and tweak docs by @bigredfrog in #1703
- dev: move fallback tests to separate file by @bigredfrog in #1704
- Dev: Add an auto test script for fallbacks by @bigredfrog in #1706
- Docs: Contributing guidelines by @bigredfrog in #1708
- Fix: Prevent mutable default argument bug in EventListener by @bigredfrog in #1709
- Port CC-Feature: Song Detector by @YeonV in #1707
- Feat: image gradient metadata by default by @bigredfrog in #1710
- Dev: Optimize bands matrix effect x40 by @bigredfrog in #1715
- Dev: Optimise hsv and water effect by @bigredfrog in #1717
- Feat: Client Interface Mk 2 by @bigredfrog in #1714
- Clients & Visualisers | Frontend 2.1.6 draft-1 by @YeonV in #1718
- Feat: Add fonts route and handler for CSS in HttpServer by @YeonV in #1720
- Feat: switch to fastnoiselite by @bigredfrog in #1721
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1719
- Feat: Smoke Effect by @bigredfrog in #1722
- Feat: skip gap- dummy devices by @bigredfrog in #1723
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1726
- Feat: audio-hotplug support by @bigredfrog in #1729
- Fix: Audio device recovery after OS device list changes by @bigredfrog in #1733
- Feat: add RGBW for RPI_WS281X by @dcoredump in #1735
- Dev: Replace f-string logging with %-style formatting for deferred evaluation by @shauneccles in #1737
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1736
- Fix: handle narrow frequency ranges in virtuals by @bigredfrog in #1740
- Dev: Melbank docs by @bigredfrog in #1741
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1742
- Visception by @bigredfrog in #1734
- Linkfix in README.rst by @ulflulfl in #1744
- Replace VisDeduplicateQ with conflated single-slot mailbox for WebSocket visualiser events by @bigredfrog in #1745
- Docs: Frontend Docs and tweaks by @bigredfrog in #1746
- Feat: add black solid preset by @bigredfrog in #1748
- Fix: Handle delete of last virtual segment correctly by @bigredfrog in #1750
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1749
- Feat: SendSpin support by @bigredfrog in #1751
- Feat: add feature flag stansa to api/info for sendspin by @bigredfrog in #1752
- update: sendspin + visualizer2backend by @YeonV in #1753
- Fix: BG Viz Frontend Effect, don't filter on viz_id by @bigredfrog in #1755
- Feat: loadspin Flac codec and mono for BW by @bigredfrog in #1756
- Docs: sendspin user guide by @bigredfrog in #1757
- Dev: bump to 2.1.6 by @bigredfrog in #1758
New Contributors
- @dcoredump made their first contribution in #1735
- @ulflulfl made their first contribution in #1744
Full Changelog: v2.1.5...v2.1.6
LedFx 2.1.5
What's Changed
- Feat: allow image URLs with no extensions to be validated by @Copilot in #1693
- Update submodules to latest origin/main by @YeonV in #1694
- Feat: complex segment handling by @bigredfrog in #1677
- Update frontend build by @YeonV in #1696
- dev: bump to 2.1.5 by @bigredfrog in #1697
Full Changelog: v2.1.4...v2.1.5
LedFx 2.1.4
What's Changed
- feat: add route for serving frontend modules by @YeonV in #1689
- fix: include lifx-async in PyInstaller binary builds by @Djelibeybi in #1690
- bump 2.1.4 by @bigredfrog in #1692
Full Changelog: v2.1.3...v2.1.4
LedFx 2.1.3
What's Changed
- Fix: div zero protection in waterfull2d with 1d Strip and fade non zero by @bigredfrog in #1583
- Feat: add DELETE api/playlists/{id} by @bigredfrog in #1584
- Feat: add preset active flag to virtual presets api by @bigredfrog in #1587
- Dev: add twinkly appeal to docs by @bigredfrog in #1588
- Feat: enhance TypeScript interfaces for Scene and Preset with active state and update API response types by @YeonV in #1589
- Feat: Ignore advanced and diag keys on virtual presets active comparison by @bigredfrog in #1590
- Feat: add GET /api/scenes/{id} by @bigredfrog in #1591
- Update samplerate dependency to samplerate-ledfx version 0.2.3 by @shauneccles in #1594
- Feat: add image cache and security by @bigredfrog in #1598
- Feat: scenes api update docs and implementation by @bigredfrog in #1596
- Build(deps): Bump actions/checkout from 5 to 6 in the github-actions group by @dependabot[bot] in #1599
- Build(deps): Bump the minor-and-patch group across 1 directory with 5 updates by @dependabot[bot] in #1597
- Dev: clean up example config by @bigredfrog in #1600
- Build(deps): Bump the minor-and-patch group with 3 updates by @dependabot[bot] in #1602
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1603
- Add EffectUpdatedEvent and update other events to include relevent state by @mill1000 in #1507
- Feat: Add front end logging API by @bigredfrog in #1604
- Docs: Clean up for aubio-ledfx by @bigredfrog in #1608
- Build(deps): Bump the minor-and-patch group across 1 directory with 6 updates by @dependabot[bot] in #1607
- Feat: Asset manager and api by @bigredfrog in #1611
- Dev: update ts_generator by @bigredfrog in #1612
- Dev: update sample config by @bigredfrog in #1613
- Build(deps): Bump pytest from 8.4.2 to 9.0.1 in the major group by @dependabot[bot] in #1624
- Build(deps): Bump the minor-and-patch group across 1 directory with 4 updates by @dependabot[bot] in #1625
- Feat: Number based diag effect by @bigredfrog in #1622
- Feat: Digital rain performance and segments setting by @bigredfrog in #1628
- Build(deps): Bump the minor-and-patch group with 2 updates by @dependabot[bot] in #1627
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1630
- Build(deps): Bump the minor-and-patch group with 3 updates by @dependabot[bot] in #1629
- Feat: fixed assets support by @bigredfrog in #1631
- Feat: add cache for thumbnail by @bigredfrog in #1632
- Dev: Improve cache handling for asset thumbnails by @bigredfrog in #1633
- Dev: Clean up asset path handling in presets and utils by @bigredfrog in #1634
- Dev: Fix missing config_dir pass for get_gif_frames by @bigredfrog in #1636
- Fix: open_image to use config dir by @bigredfrog in #1637
- Fix: improve cache meta data by @bigredfrog in #1638
- Fix: Flush thumbnail on asset update by @bigredfrog in #1642
- Fix: Improve cache refresh logic by @bigredfrog in #1643
- Dev: harden asset cache tests with mocking by @bigredfrog in #1644
- Build(deps): Bump the github-actions group with 2 updates by @dependabot[bot] in #1641
- Build(deps): Bump the minor-and-patch group across 1 directory with 3 updates by @dependabot[bot] in #1640
- Dev: Browser friendly GET thumbnails by @bigredfrog in #1646
- Build(deps): Bump the minor-and-patch group with 2 updates by @dependabot[bot] in #1645
- Build(deps): Bump the minor-and-patch group with 2 updates by @dependabot[bot] in #1647
- Feat: Add API endpoint to delete presets by @bigredfrog in #1650
- Feat: Security docs by @bigredfrog in #1648
- Build(deps): Bump winloop from 0.4.0 to 0.4.1 in the minor-and-patch group by @dependabot[bot] in #1651
- Docs: Update asset workflow with latest frontend by @bigredfrog in #1652
- Docs: Playlist Docs by @bigredfrog in #1656
- new frontend by @YeonV in #1654
- Fix: Preset and Scene matching for number effect by @bigredfrog in #1659
- Docs: Add Scenes Doc by @bigredfrog in #1660
- Feat: better effect changed event by @bigredfrog in #1661
- Fix: Websocket Error handling by @bigredfrog in #1662
- Docs: add README tweaks about web interface access by @bigredfrog in #1663
- Fix: Memory leaks exposed by playlists by @bigredfrog in #1664
- Dev: Protect Game of life for memory leaks by @bigredfrog in #1666
- Dev: hammer_test config by @bigredfrog in #1667
- Fix and Doc: Add Nanoleaf doc, default to UDP by @bigredfrog in #1674
- Docs: Update on dev docs by @bigredfrog in #1675
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1678
- Add audio analysis (pitch/onset method) options to configuration guide by @bailus in #1679
- Feat: add colors_updated event by @bigredfrog in #1683
- Fix: Long standing color api respoonse issues by @bigredfrog in #1684
- Feat: support more LIFX devices via lifx-async by @Djelibeybi in #1671
- docs: switch dev docs to yarn for front end by @bigredfrog in #1685
- new frontend by @YeonV in #1686
- bump to 2.1.3 by @bigredfrog in #1687
New Contributors
- @mill1000 made their first contribution in #1507
- @bailus made their first contribution in #1679
- @Djelibeybi made their first contribution in #1671
Full Changelog: v2.1.2...v2.1.3
What's Changed
- Fix: div zero protection in waterfull2d with 1d Strip and fade non zero by @bigredfrog in #1583
- Feat: add DELETE api/playlists/{id} by @bigredfrog in #1584
- Feat: add preset active flag to virtual presets api by @bigredfrog in #1587
- Dev: add twinkly appeal to docs by @bigredfrog in #1588
- Feat: enhance TypeScript interfaces for Scene and Preset with active state and update API response types by @YeonV in #1589
- Feat: Ignore advanced and diag keys on virtual presets active comparison by @bigredfrog in #1590
- Feat: add GET /api/scenes/{id} by @bigredfrog in #1591
- Update samplerate dependency to samplerate-ledfx version 0.2.3 by @shauneccles in #1594
- Feat: add image cache and security by @bigredfrog in #1598
- Feat: scenes api update docs and implementation by @bigredfrog in #1596
- Build(deps): Bump actions/checkout from 5 to 6 in the github-actions group by @dependabot[bot] in #1599
- Build(deps): Bump the minor-and-patch group across 1 directory with 5 updates by @dependabot[bot] in #1597
- Dev: clean up example config by @bigredfrog in #1600
- Build(deps): Bump the minor-and-patch group with 3 updates by @dependabot[bot] in #1602
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #1603
- Add EffectUpdatedEvent and update other events to include relevent state by @mill1000 in #1507
- Feat: Add front end logging API by @bigredfrog in #1604
- Docs: Clean up for aubio-ledfx by @bigredfrog in #1608
- Build(deps): Bump the minor-and-patch group across 1 directory with 6 updates by @dependabot[bot] in #1607
- Feat: Asset manager and api by @bigredfrog in #1611
- Dev: update ...
LedFx 2.1.2
What's Changed
- dev: add hiddens by @bigredfrog in #1578
- Dev: Move to aubio 0.4.11 by @bigredfrog in #1580
- Dev: Bump version to 2.1.2 by @bigredfrog in #1581
Full Changelog: v2.1.1...v2.1.2