Skip to content

Releases: MoonModules/projectMM

v2.0.0

24 Jun 13:58

Choose a tag to compare

projectMM v2.0.0

A landmark release — the largest since 1.0 — 77 commits across 8 PRs. Highlights: audio-reactive lighting, multi-protocol network I/O (ArtNet / E1.31 / DDP), a new ESP32-P4 firmware variant, runtime Ethernet configuration, LAN device discovery, a standardised LED-driver layer, browser-over-serial provisioning, and a ground-up rework of the 3D preview.

If you like projectMM, give it a ⭐️, fork it, or open an issue or pull request. It helps the project grow, improve, and get noticed.

🔬 How it's built

Features like the audio pipeline and the LED drivers are built under projectMM's Industry standards, our own code principle: spec the behaviour from primary sources (the ESP32 and sensor datasheets, the WS2812 timing spec, reference DSP standards), reach for the textbook algorithm and the textbook name (a DC-blocker high-pass, a Hann window, RMS, the WS2812 encoder), pin it with unit + scenario tests first, then write every line fresh against our own architecture. Each module credits its prior art by name. The result is independent by construction — a clean, recognisable implementation you can read, trust, and build on.

✨ Highlights

Audio-reactive lighting (new)

  • AudioModule — an I2S microphone peripheral: live RMS level + a 16-band FFT spectrum (Hann window, DC-blocker, configurable sample rate / gain / noise floor). Boards with a built-in mic come pre-configured; on any board you add it from the UI.
  • New AudioSpectrum and AudioVolume effects driven by it; WiFi modem power-save disabled so audio + radio coexist cleanly.

Multi-protocol network I/O (new)

  • NetworkSendDriver streams frames out over ArtNet, E1.31/sACN, and DDP; NetworkReceiveEffect receives them (auto-detects the protocol per port). Per-sink light_count slicing lets one device drive part of a rig over LEDs and the rest over the network. Resolume-style discovery included.

New platform — ESP32-P4

  • esp32p4-eth firmware variant (Waveshare P4-NANO, Ethernet): builds, publishes to the web installer + releases, runs the full pipeline.
  • New Parlio 8-lane LED driver for the P4; per-board Ethernet pin config.

LED drivers — standardised, per chip

  • A shared driver scaffold with RMT (classic/S3), Parlio (P4), and LCD_CAM 8-lane (S3) WS2812 backends, plus a parallel multi-lane path; a dedicated Pin control type for GPIO settings, and a hardware loopback self-test.

Preview, reworked

  • The 3D preview streams full-resolution frames to the browser without stalling the LED render tick — a resumable, chunked WebSocket send drained off the hot path, with drop-new backpressure.
  • Graceful degradation on a slow link: sheds frame rate first, then resolution (closed-form spatial downsample with a memory-derived point cap). A 128² grid previews smoothly on classic ESP32, S3, and P4.
  • Responsive UI: docked split-pane preview / floating draggable picture-in-picture; the layout draws the instant its coordinate table arrives.

More effects, modifiers & layouts

  • Effects: Rings, Ripples (MoonLight sine-wave water surface), DistortionWaves, Sine, alongside the existing Noise / Plasma / Fire / Metaballs / GlowParticles / LavaLamp / Lines / Spiral / GameOfLife / Rainbow / Checkerboard.
  • Modifiers: RandomMap, Rotate (plus the existing Mirror / Multiply), with a dynamic-modifier hook; WheelLayout joins Grid.

Networking & provisioning

  • Device discovery — DevicesModule finds other projectMM (and generic) devices on the LAN via mDNS browse + an HTTP subnet sweep, with provenance, age-out, and a persisted list.
  • Runtime Ethernet PHY config — RMII (internal EMAC) and W5500 (SPI) pin/PHY settings are live controls with per-board defaults; W5500 reconfigures with no reboot.
  • Improv = REST over serial — the web installer pushes device-model config to a freshly-flashed board over USB (mixed-content-proof), running the same apply-core the HTTP API uses.

Identity & installer

  • deviceName is one network identity (mDNS / SoftAP / DHCP hostname); BoardModule folded into SystemModule; boarddeviceModel.
  • Picture-based device picker; capability chips (active / supported / planned); auto-detect device IP from serial; board-details popup.

Docs & tooling

  • Two-chapter Getting started guide (install + a UI tour for new users).
  • preview_health.py — a browser-faithful preview-stream health probe, on MoonDeck's Live tab.

🛠 Fixes

  • mDNS browse crash on UI refresh (async-handle race → synchronous, throttled browse).
  • Audio level read-out reading 0 between beats (now the per-second RMS peak).
  • Windows release build (colons in plan filenames); CI double-run.

📦 Install

Flash from your browser — pick your board, flash the matching firmware, hand over WiFi via Improv: https://moonmodules.org/projectMM/install/. Step-by-step in the Getting started guide.

Supported targets this release: ESP32 (classic / Olimex), ESP32-S3, ESP32-P4 (new), plus macOS arm64 / Windows x64 desktop.

latest

24 Jun 13:56

Choose a tag to compare

latest Pre-release
Pre-release
Version 2.0.0; archive v2.0.0 release notes

Bumps the version to 2.0.0 for the landmark release — audio-reactive lighting, multi-protocol network I/O (ArtNet/E1.31/DDP), ESP32-P4, a standardised LED-driver layer, and the 3D-preview rework — and archives the release notes alongside v1.0.0's.

Docs / CI:
- library.json: version 1.0.0 → 2.0.0 (build_info.h regenerates from it at build time). A milestone version marking the scope of the largest release since 1.0; the changes are additive and backward-compatible (config migration + legacy-firmware-key OTA mapping carry v1.0.0 devices forward), so the major bump signals the milestone rather than a break.
- docs/history/release-notes-v2.0.0.md: the GitHub-release body, archived next to release-notes-v1.0.0.md — leads with a how-it's-built note (the Industry standards, our own code principle: spec from primary sources, textbook algorithm + name, tests first, written fresh) and a star/fork/contribute call-to-action.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

projectMM v1.0.0

09 Jun 09:56

Choose a tag to compare

projectMM v1.0.0

The first stable release. Drive large LED installations and DMX lighting from a single source tree — ESP32 for deployment, desktop for development and as a high-speed network node — controlled live from a browser with a 3D preview.

Web UI

What you get

  • Plug in, open a browser, see lights. A live 3D preview of every effect, modifier, and layout, controllable from the same tab. Adding a new module needs zero UI code — the interface renders any module from its declared controls.
  • Pluggable pipeline. LayoutsLayers (effects + modifiers) → Drivers. Build it visually, configure it live, and it persists across reboots.
  • Native 3D from the start. 2D and 1D are just the cases where one or two dimensions are size 1 — effects don't pick a mode. See architecture § 3D from the start.
  • DMX and addressable LEDs in one setup. RGB strips, RGBW pixels, multi-channel par lights, moving heads — all through the same pipeline.
  • One source tree, many targets. The same code builds for ESP32, desktop (macOS / Windows / Linux), Teensy, and Raspberry Pi — see building.md.

Effects

14 effects, each rendered live in the 3D preview. A few in motion:

Noise Plasma Fire
Noise Plasma Fire
Ripples Lava Lamp Glow Particles
Ripples Lava Lamp Glow Particles

Full set: Lines, Rainbow, Noise, Plasma, PlasmaPalette, Metaballs, Fire, Particles, GlowParticles, Checkerboard, Spiral, Ripples, LavaLamp, Game of Life. Each has a spec page.

Also in this release

  • 2 modifiersMultiply (per-axis tile + mirror — the kaleidoscope) and Checkerboard (a mask).
  • 2 layoutsGrid and Sphere; driversArtNet output and the built-in 3D preview.
  • Robust by design — the device tolerates any UI/API sequence (add, delete, replace, reconfigure in any order) without crashing; guarded by an extensive test + scenario suite (architecture § Robustness).
  • Memory-adaptive — runs from a 16×16 panel to 128×128 (16,384 lights), degrading gracefully on memory-constrained boards rather than failing (architecture § Memory strategy).

Under the hood

What makes projectMM different: 16,384 LEDs on a classic ESP32 (not just the S3), pure ESP-IDF v6.x with no Arduino, no third-party libraries (own colour math, HTTP/WebSocket server, control storage), and one module model — every effect, modifier, layout, and driver is a MoonModule, which is why the UI renders any of them with zero per-module code. Full rationale in the README § Under the hood.

Two things worth calling out for this first release:

  • Two test layers — fast unit tests per module plus scenario tests driving the full pipeline (layout → effect → modifier → driver) against per-board performance contracts, both on every commit. testing.md.
  • Built entirely by agents — every line of code, the installer, MoonDeck, all docs, the tests, and the screenshots/GIFs were authored by AI agents; the product owner authored the process (CLAUDE.md), architecture, and module specs, reviewed everything, tested on hardware, and controlled every commit and release.

Faster, friendlier flashing

The web installer flashes from the browser in seconds (down from minutes): it picks your board, flashes the matching firmware, remembers your choices between sessions, and hands WiFi credentials to the device over USB via Improv — no serial monitor, no recompile.

Downloads

ESP32 — flash from your browser. Open the web installer in Chrome or Edge; it walks you through board, firmware, flashing, and WiFi setup. Four firmware variants:

  • esp32-eth-wifi — ESP32 classic, Ethernet + WiFi (recommended for ArtNet).
  • esp32-eth — ESP32 classic, Ethernet only.
  • esp32 — ESP32 classic, WiFi only.
  • esp32s3-n16r8 — ESP32-S3 (16 MB flash, 8 MB PSRAM), WiFi.

Web installer

Desktop:

  • macOS arm64projectMM-macos-arm64-v1.0.0.tar.gz. Unsigned, so Gatekeeper prompts on first run (right-click → Open).
  • Windows x64projectMM-windows-x64-v1.0.0.zip. Unsigned, so SmartScreen may warn (More info → Run anyway).

Run it, open http://localhost:8080/. Teensy, Raspberry Pi, and Linux build from source — see building.md.

Building from source

Develop and build with MoonDeck, the browser dev console (uv run scripts/moondeck.py):

MoonDeck

Performance

End-to-end through a full render pipeline (effect → modifier → ArtNet) on real hardware — Ethernet ESP32 boards reach ~1,600 FPS at 16×16 and ~10 FPS at 128×128 (16,384 lights), bound by the ArtNet transport at large grids. Full per-board numbers in the README; the why (WiFi vs Ethernet physics, build-variant deltas) in performance.md.

Known limitations

Tracked in docs/backlog/backlog.md. Notably: ArtNet send is synchronous (caps FPS at large grids; async is PSRAM-only, post-1.0); a single modifier applies per layer (chaining is post-1.0); desktop release binaries are macOS + Windows only (Linux/Teensy/RPi build from source); binaries are unsigned.

Built on

Years of LED/light system development — WLED, WLED-MoonModules, StarLight, MoonLight. Their proven patterns are distilled in docs/history/. Community: Discord.

Get involved

If you like projectMM, give it a ⭐️, fork it, or open an issue or pull request. It helps the project grow, improve, and get noticed.