Funkelfetisch/MoonLight: monthly activity digest¶
What landed on Funkelfetisch/projectMM (earlier named Funkelfetisch/MoonLight), month by month. External-context reference, a factual log of a friend repo's activity, not MoonLight's own history or roadmap. Newest month on top. The reusable prompt that generates these lives in index.md.
This is a fork of this project building commercial products on it: HELIO, a physical "infinity sphere" lamp (a warm-white 3000 K RGBW strip inside a clear acrylic shell), and since November 2026 NEBULITE, a line of LED garments (a Croptop and a Jacket on the ESP32-S3, 2021-era ESP32 jackets and bags, and a HELIO necklace) controlled from a phone over BLE, with battery controllers, signed firmware updates over BLE and a migration path from WLED. The firmware carries three product variants (helio1, nebulite-s3, nebulite-esp32), built with one flag that leaves out the modules no product uses, a product dashboard at / beside our generic editor at /modules, and a src/helio/ product directory. The README is unchanged from ours, so this is MoonLight plus a product layer rather than a rebrand.
Branch note: the work is not on the default branch. main tracks our upstream and has not moved since 2026-07-09. Since November 2026 every change lives on one branch, nebulite-helio-7, cut from our main of 2026-10-28; the earlier codex/* branches are deleted from GitHub, their commits archived on a private remote the author names nebulite-firmware. The repository has issues disabled and publishes no releases.
November 2026 (to date)¶
Seventy-one commits on one new branch, nebulite-helio-7, all between 2026-11-03 and 2026-11-09, adding NEBULITE beside HELIO.
- The whole product layer re-based onto our tree as one commit (414 files, about 60,000 added lines, 2026-11-03): BLE control independent of WiFi, a battery service, a BH1750 light sensor, a preset store, a product dashboard, twelve WLED-faithful NEBULITE effects (Blink, Firefly, Flow Stripe, Noisefire, Palette, Plasmoid, Rainbow, Sine, Snowflakes, Solid, Washing, Waterfall),
src/helio/and 41 bench scripts. - BLE control, third protocol revision: an MTU of 517 so a request fits one write, replies as notifications, list operations that stream every page from one request, a timer that retries a reply the stack had no buffers for, and an ambient-light operation for the phone. Each controller advertises its own name; an unnamed garment is
NEBULITE-plus four MAC digits. - Firmware updates over BLE, signed by the publisher: a P-256 key compiled in, claims (target, size, security version, image SHA-256) and a signature checked before the update slot opens, the image streamed on its own characteristic and acknowledged per window; a signing script prints the release manifest the phone app bundles.
- WiFi setup from the phone over BLE, credentials only over an encrypted link, and a handset remote; garments boot with WiFi off.
- A 2025 WLED S3 controller moves to MoonLight without USB: a migration image WLED's own update page accepts saves WLED's networks, takes the signed MoonLight image from the phone in chunks, rewrites the partition table and starts MoonLight, resuming after a cut. A 2021 classic ESP32 image ends on a short packet so the old BLE updater finishes installing it.
- Fixes found on the boards: a failed
new (std::nothrow)aborted the ESP32 instead of returning null, now replaced withmalloc; control descriptors shrink to 40 bytes with flags as bits, about 9 KB back on the classic ESP32; the HTTP listener retries a refused port and follows a port change live; the product dashboard loads three to four times faster. - Product firmware leaves out what no product uses: one build flag drops MoonCloud, Devices, Hue, the SD card, HUB75 and the parallel LED outputs,
helio1from 2.81 MB to 2.63 MB. - The S3 garment's battery controller stays on through an update's restart, a reboot and a crash, its power pins held by the pad hold; each product's boot pins print at boot and are pinned by tests, and an onboard LED shows whether a phone or a network reaches the controller.
- The browser preview as the lights emit it: a frame over a slow BLE link finishes, and each light shows only the channels its outputs carry, so RGB strips show no white.
- Smaller generic touches: brightness shown as a percentage while the value stays 0 to 255, the Network card saying whether the local name answers and why not,
mdnspinned to 1.14, a clean checkout stamping a clean build id, a restart keeping the chosen scene. - A branded NEBULITE dashboard: the app's palette from the first paint, animation cards that play by themselves, Static and Music groups, garment illustrations; the import of historical WLED looks was removed.
- Process: the docs gate taken from 835 errors after the port to 0, eight MIGRATING entries, seven plans under
docs/work/present/. Every commit carries an agent co-author trailer; 20 of the 71 commit messages report a test on hardware. - PR #158 closed: the author closed MoonModules/MoonLight#158, the BLE transport, on 2026-11-04 without merging; the fork's BLE plan records lighting control without mandatory pairing as the product's choice.
- Branches:
nebulite-helio-7is new (2026-11-03, head289d1931on 2026-11-09), based on ourmainat04472e0dwith 71 commits on top and 66 behind. Thecodex/*branches are deleted,mainstays at 2026-07-09 andfeature/gyro_moduleat 2026-06-05.
Checked: after git clone and fetch, commits on origin/main for 2026-11-01..2026-11-09 (0); commits on all 3 remote branches vs MoonModules/MoonLight@main for the same window (71, all fork-authored, all on nebulite-helio-7; 0 fork commits for 2026-10-28..2026-10-31); three-dot diff against our main 486 files, +69,492/-1,032; releases published (none); issues disabled (has_issues: false), so no issue search.
October 2026¶
One fork commit, on a new branch cut from our main late in the month.
- An optional BLE control transport (
codex/moonlight-ble-transport, 2026-10-25, 399 added lines across ten files): an encrypted control channel for a controller outside WiFi range. - The peripheral is a native NimBLE one with GATT attributes for identity, state and commands, and pairing with persistent bonds.
- A bounded 512-byte line reassembler applies backpressure and recovers after rejected input, and the exchange with the scheduler is non-blocking.
- The caller owns startup, identity and request dispatch. Desktop, Teensy and BLE-disabled ESP32 builds share one stub, and shipping firmware defaults are unchanged.
- Provenance: the commit message says the hardware test ran on the HELIO prototype before the transport was extracted, and that Codex wrote the contribution at the author's request.
- Status: offered to this project the same evening as MoonModules/MoonLight#158, open at month end.
- Branches:
codex/moonlight-ble-transportis new (2026-10-25), based on ourmainatabcdaec9with one commit on top. Nothing else moved:codex/helio-private-wipstays at 2026-08-21 andmainat 2026-07-09.
Checked: after git fetch --all --tags, commits on origin/main for 2026-10-01..2026-11-01 (0); commits on all 10 remote branches for the same window (182, all on codex/moonlight-ble-transport: 181 upstream MoonModules/MoonLight carry-forward, 1 fork-authored, f5a244a9); releases published (none); issue search repo:Funkelfetisch/projectMM is:issue created:2026-10-01..2026-10-31 and the same with closed: (0 results each; the repository has issues disabled).
September 2026¶
Dormant month: no commit on any branch.
- Branches: none moved. The most recent activity anywhere is
codex/helio-private-wipon 2026-08-21, andmainlast moved 2026-07-09.
Checked: after git fetch --all --tags, commits on origin/main and on all 9 remote branches for 2026-09-01..2026-10-01 (0); releases published (none); issue search repo:Funkelfetisch/projectMM is:issue created:2026-09-01..2026-09-30 and the same with closed: (0 results each). The repository now answers to Funkelfetisch/projectMM, and Funkelfetisch/MoonLight no longer resolves through the API.
August 2026¶
- HELIO product layer, stabilised. One large commit ("Stabilize HELIO scenes, previews, output, and onboarding", 147 files vs our
main) covering scene playback, the browser preview, LED output and first-run onboarding for the sphere product. - A browser-side optical simulation of the lamp (
helio-preview.js,heliotrace.js, ~2,000 lines) renders internal reflections and an optional wall bounce, so the dashboard preview resembles the physical object rather than a flat grid. - A Pixelblaze pattern interpreter (
PixelblazeCompatEffect.h, ~1,300 lines) runs Pixelblaze-style patterns on the device. - An ambient-light service (BH1750 over I2C) publishes a brightness target that drivers consume, for automatic brightness.
-
A curated WLED preset player keeps source effect IDs, names, speed/intensity values and playlist order as data, rendered through this project's own palette and light-buffer primitives.
-
Branches: only
codex/helio-private-wipmoved (2026-08-20). The other seven have been dormant since July.
Checked: commits on main for 2026-08-01..2026-09-01 (0; main last moved 2026-07-09); commits on all 9 branches for the same window, filtered to fork-authored work (1: a649bd47 on codex/helio-private-wip, 2026-08-20, 139 files; the branch's other August commits are upstream MoonModules/MoonLight carry-forward); no commit on any branch between 2026-08-21 and 2026-09-01; releases published (none); issue search repo:Funkelfetisch/MoonLight is:issue created:2026-08-01..2026-08-31 and the same with closed: (0 results each, the repository has no issue tracker activity).
July 2026¶
Six feature branches opened, none merged to the fork's main, alongside a carry-forward of our own next-iteration. Each is a self-contained proposal against this project rather than product work:
- Automatic firmware updates, the device polls a JSON manifest, checks the advertised version, chip family and flash offset against its own build info, and starts an OTA with SHA-256 and expected-size verification. Manifests over plain HTTP or without a declared size are refused.
- BLE WiFi provisioning, credentials over Bluetooth using Espressif's
wifi_provisioningcomponent, gated to run only while the device is in access-point fallback, in its own firmware variant (it costs roughly 320 KB of flash). - WiFi reconnect handling, a debounce before applying typed credentials, and repeated station retries before falling back to an access point.
- RMT LED output over DMA, enables the DMA backend for WS2812 transmission on chips that have it, with a completion callback instead of a blocking wait, so a delayed interrupt under network load cannot stretch a bit cell into visible flashing.
- RGBW color correction, a wider set of channel-order presets, and an explicit white channel taken from the source when the layer carries one.
-
Frame pacing, a target-frame-rate cap on the scheduler, work-time metrics, and a periodic-tick sweep spread across ticks rather than run in one burst.
-
Branches:
codex/upstream-auto-update-manifest(07-11),codex/upstream-network-sta-reconnect(07-10),codex/upstream-rmt-rgbw-performance(07-10),codex/performance-frame-pacing(07-11),codex/universal-ble-provisioning(07-13),codex/helio-private-wip(07-10, initial WIP),next-iteration(07-10, a carry-forward of our upstream branch).mainlast moved 2026-07-09.
Checked: commits on main for author-date 2026-07-01..2026-08-01 (2, both upstream carry-forward); commits on all branches vs MoonModules/MoonLight@main for the same window (11); releases published (none); issue search repo:Funkelfetisch/MoonLight is:issue created:2026-07-01..2026-07-31 and the same with closed: (0 results each).
June 2026¶
-
Gyro / IMU input, an MPU6050 accelerometer and gyroscope read over I2C, publishing angular rate plus pitch and roll as read-only values, with a desktop simulation so the interface shows live numbers without the hardware attached.
-
Branches:
feature/gyro_module(06-05). No other branch activity.
Checked: commits on all branches vs MoonModules/MoonLight@main for author-date 2026-06-01..2026-07-01 (1); releases published (none); issue search repo:Funkelfetisch/MoonLight is:issue created:2026-06-01..2026-06-30 and the same with closed: (0 results each).