No description
Find a file
monkey-w1n5t0n 9e59eb04ce feat(manifold): MIDI + game controller inputs; widen ML net to N-D
Wire the modular input layer into the Console and reshape the browser
engine so input axes are genuine independent dimensions.

Inputs (manifold/src/inputs/):
- gamepad-source: emit press+release edges with standard-mapping labels
  (enables hold-and-move); single/double-stick already present.
- midi-input-source: single-device selection + batch "MIDI Learn"
  (every CC swept while armed becomes an axis); notes stay discrete.
- input-layer: compose() forwards each axis 1:1 (no mean-blend);
  add onReducedInput so the manifold tracks gamepad/MIDI position.
- types: InputAction.phase, InputMode.

Console (manifold/src/console/):
- ConsoleApp: bind gamepad buttons to verdicts (RB up / LB down /
  X randomise / Y nudge / B undo / A-hold reposition); mirror composed
  position onto the manifold.
- Drawers: rebuilt Inputs drawer (source picker, gamepad legend, MIDI
  device picker + batch-learn flow, learned-control meters).

Engine (nisps/wasm, manifold/src/engine):
- DefaultMLP widened MLP<2,..> -> MLP<32,..> (32 = MAX_AXES); each
  active axis gets a dedicated slot, unused slots held at 0 (inert).
  Rebuilt nisps.wasm (playground + manifold).
- spine/engine-api: setInputs writes the full N-D vector (was dropping
  arr[2+]); primary pair keeps the 2-D pipeline; process() re-ticks the
  whole vector via spine.reprocess().

Tests:
- parity_check/parity_wasm: ParityMLP -> 32 inputs, widen example bufs.
- CMakeLists: build parity binary with -ffp-contract=off so native
  matches FMA-free WASM (training amplified the gap past 1e-5).

Inputs dock is still an exclusive picker; mixing toggles, reshape modal,
and the >2-D slider view (inputs-spec.md) are groundwork-laid but not
yet wired. See docs/redesign/midi-gamepad-inputs-worklog.md.
2026-06-28 21:05:48 +02:00
.claude/worktrees/agent-ae87fe47/playground/js/shapeseq hello come back to me 2026-03-30 17:05:45 +03:00
.github/workflows build(vcv): cross-platform CI + Linux dist + /next/vcv publish flow 2026-06-28 04:49:40 +02:00
.vscode memlnautmodes, channelstrip 2025-11-19 15:17:37 +00:00
assets/media feat(animations+firmware): /next/animations showcase (videos + interactive demos), in-app Help link, Arch firmware build script 2026-06-28 04:42:27 +02:00
codegen feat(midi-devices): canonical external-synth CC templates + dual codegen 2026-06-28 20:03:17 +02:00
data view order 2025-11-04 17:35:24 +00:00
docs feat(manifold): MIDI + game controller inputs; widen ML net to N-D 2026-06-28 21:05:48 +02:00
firmware feat(firmware): ExternalSynthMIDIMode + 6 device variants 2026-06-28 20:13:08 +02:00
manifold feat(manifold): MIDI + game controller inputs; widen ML net to N-D 2026-06-28 21:05:48 +02:00
nisps feat(manifold): MIDI + game controller inputs; widen ML net to N-D 2026-06-28 21:05:48 +02:00
playground feat(manifold): MIDI + game controller inputs; widen ML net to N-D 2026-06-28 21:05:48 +02:00
schemas docs(midi-devices): workshop usage + pipeline README 2026-06-28 20:16:48 +02:00
scripts feat(animations+firmware): /next/animations showcase (videos + interactive demos), in-app Help link, Arch firmware build script 2026-06-28 04:42:27 +02:00
src chore(beads): switch to embedded Dolt mode, ignore runtime files; add specs README; bump memllib 2026-06-14 10:06:47 -10:00
tests feat(manifold): MIDI + game controller inputs; widen ML net to N-D 2026-06-28 21:05:48 +02:00
vcv build(vcv): macOS x64+arm64 cross-build here, resource-bounded (osxcross + system clang) 2026-06-28 06:22:51 +02:00
.envrc chore: add .envrc + playground package-lock 2026-06-28 04:14:30 +02:00
.gitignore feat(playground): add Modular audio mode with shared mod pool 2026-04-11 07:34:41 +02:00
.gitmodules Stream 6: extract firmware glue under firmware/ 2026-04-29 17:05:38 +03:00
AGENTS.md fix(beads): use independent MEMLNaut-NISPS database, separate from shared beads_src 2026-03-04 23:45:35 +00:00
ALIGNMENT.md docs: sync MAP.md (manifold/ + vcv/ sections) and ALIGNMENT.md 2026-06-28 04:14:30 +02:00
CLAUDE.md chore(docs): remove retired bd/beads block from CLAUDE.md — task tracking is ergo now (bd retired 2026-06-15) 2026-06-25 05:04:39 +02:00
LICENSE Initial commit 2025-04-10 14:17:18 +01:00
MAP.md feat(manifold): MIDI + game controller inputs; widen ML net to N-D 2026-06-28 21:05:48 +02: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
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
synth-midi-cc.json feat(midi-devices): canonical external-synth CC templates + dual codegen 2026-06-28 20:03:17 +02: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.