No description
Find a file
w1n5t0n c3fb63a113 feat(playground): UI primitive library + /dev/primitives showcase
Sixteen primitives at src/primitives/, each with its own .module.css and a
.demo.tsx that wires the primitive to live local state. All primitives
are typed (strict), pointer-event based (touch + mouse), keyboard-accessible
where it makes sense, and free of business logic.

Primitives:
- Slider, SliderBank: value sliders with optional curve mapping;
  collapsible sections.
- VirtualJoystick, XYPad: 2D pointer input, returning [0,1]^2.
- Heatmap: NxN canvas rendering with three color modes
  (luminance/variance/divergence) and a configurable palette.
- OutputDisplay: bar chart of N output values.
- TrainingControls: thumbs-up/down/undo + train/randomise + status.
- Drawer: portal'd slide-in panel from left or right; ESC + scrim close.
- ControlAxis: compound-axis slider (Boldness/Memory/Precision shape)
  with active-preset hint, endpoint labels, double-tap-to-relink.
- ProgressRing: SVG circular progress with optional inline label.
- PillToggle: segmented radio control.
- ParamEditor: min/max/curve/mute/pin/fixedValue editor for a single param.
- JoyMap: zoom minimap with adaptive grid + zoom window, vanishing trail
  with Catmull-Rom spline + tap-to-return, dual concentric noise rings,
  region pin overlays, frozen overlay.
- WeightHealth: 10-bin histogram + dead/saturating/healthy status glow.
- GradientFlow: per-layer bar chart with vanishing/exploding/converged
  color coding.
- LossPlot: log-scale line chart of training loss history.

App.tsx now wires the /dev/primitives route to a lazy-loaded
PrimitivesShowcase that renders all sixteen demos in a responsive grid.
Lazy import keeps the home page bundle ~20 kB while the showcase ships
its own ~42 kB chunk.

Stream 8 of the rewrite (meml-911).
2026-04-29 15:38:55 +03:00
.beads Improve UF2 bootloader detection 2026-04-16 00:52:39 +09:00
.claude/worktrees/agent-ae87fe47/playground/js/shapeseq hello come back to me 2026-03-30 17:05:45 +03:00
.github/workflows feat(playground): add OSC output bridge for external synth control 2026-03-25 11:55:58 +02:00
.vscode memlnautmodes, channelstrip 2025-11-19 15:17:37 +00:00
data view order 2025-11-04 17:35:24 +00:00
modes voicing 2026-04-14 08:20:57 +01:00
nisps-core feat(nisps-core,wasm): add per-sample weights to MLP training 2026-04-02 20:35:24 +01:00
playground feat(playground): UI primitive library + /dev/primitives showcase 2026-04-29 15:38:55 +03:00
scripts Improve UF2 bootloader detection 2026-04-16 00:52:39 +09:00
src Update memllib: fix DISLIKE and DRAG audible feedback 2026-04-17 23:23:47 -07:00
tests/e2e fix(modular): restore matrix in paramMeta; amp floor via positive-only mod_amp 2026-04-11 09:39:58 +02:00
vcv fix(vcv): resolve 6 critical thread safety issues from code review 2026-03-28 02:02:11 +02:00
voicespaces voice spaces 2026-03-29 19:09:10 +01:00
.gitignore feat(playground): add Modular audio mode with shared mod pool 2026-04-11 07:34:41 +02:00
.gitmodules Changed gitmodules to https 2025-04-29 10:21:43 +01:00
AGENTS.md fix(beads): use independent MEMLNaut-NISPS database, separate from shared beads_src 2026-03-04 23:45:35 +00:00
ChannelStripAudioApp.hpp refactor and block select font size option 2026-03-29 16:45:53 +01:00
CLAUDE.md Preserve firmware variant capitalization 2026-04-16 00:46:02 +09:00
IMLInterface.hpp speed optim, no clicking 2025-05-07 23:58:06 +01:00
LICENSE Initial commit 2025-04-10 14:17:18 +01:00
MAP.md Preserve firmware variant capitalization 2026-04-16 00:46:02 +09:00
MEMLNaut-NISPS.ino drum voice 2026-04-13 16:55:39 +01:00
NISPS_CORE_EXTRACTION_PLAN.md fix: audit and fix nisps-core extraction issues 2026-02-08 18:01:48 +01:00
NISPS_CORE_TASKS.md add nisps-core extraction task graph 2026-02-08 17:03:40 +01:00
package-lock.json feat(playground): add Modular audio mode with shared mod pool 2026-04-11 07:34:41 +02:00
package.json feat(tests): add Playwright e2e suite + debug probe for a-immersive 2026-04-03 16:38:04 +01:00
PAFSynthAudioApp.hpp memlnautmodes, channelstrip 2025-11-19 15:17:37 +00:00
playwright.config.js feat(tests): add Playwright e2e suite + debug probe for a-immersive 2026-04-03 16:38:04 +01:00
README.md Preserve firmware variant capitalization 2026-04-16 00:46:02 +09:00
ThruAudioApp.hpp refactoring interface into modes 2025-11-24 11:29:33 +00:00
XiasriAnalysis.cpp xiasri latest, and channel strip changes for 4D input 2025-12-10 16:40:00 +00:00
XiasriAnalysis.hpp refactoring interface into modes 2025-11-24 11:29:33 +00:00
XIASRIAudioApp.hpp xiasri latest, and channel strip changes for 4D input 2025-12-10 16:40:00 +00:00

Neural Interactive Shaping of Parameter Spaces

https://musicallyembodiedml.github.io/memlnaut/approaches/nisps

Firmware

The hardware firmware targets the MEMLNaut RP2350 build and uses repo-local helper scripts for the known-good build configuration:

git submodule update --init --recursive

scripts/build-firmware.sh
scripts/flash-firmware.sh
scripts/build-and-flash-firmware.sh

Notes:

  • The scripts build for rp2040:rp2040:solderparty_rp2350_stamp_xl with Optimize3.
  • The build forces C++20 because the firmware uses std::span and concepts.
  • build-firmware.sh accepts an optional variant name such as MEMLCelium or BreakOr. Matching remains case-insensitive, so memlcelium still works. If you omit it in an interactive shell, the script parses MEMLNaut-NISPS.ino, prompts for a variant, and rewrites the active MEMLNAUT_MODE_TYPE before building.
  • flash-firmware.sh accepts an optional mountpoint argument, or auto-detects common UF2 bootloader mounts such as /run/media/$USER/RP2350 and /run/media/$USER/RPI-RP2.

Web Playground

Try NISPS in your browser — no hardware required:

cd playground
python3 -m http.server
# Open http://localhost:8000

Train a neural network to map joystick positions to generative visuals through interactive machine learning. Two learning modes: direct example mapping and reinforcement learning with thumbs up/down feedback.

The playground UI includes an Expand toggle on the visual surface so you can make the canvas nearly full-screen while compressing parameter/control panels into a minimal strip beneath it.