104 lines
6.5 KiB
Markdown
104 lines
6.5 KiB
Markdown
|
|
# Playground UI Redesign Explorations
|
|||
|
|
|
|||
|
|
**Date**: 2026-03-21 → 2026-03-22
|
|||
|
|
**Status**: Three designs built and iterated through 4 rounds of feedback. Several refinements still open.
|
|||
|
|
|
|||
|
|
## Context
|
|||
|
|
|
|||
|
|
The existing playground UI (`index.html`) is a single-column mobile-first layout: header, canvas, 20 parameter bars, joystick + controls. It works but has several tensions:
|
|||
|
|
|
|||
|
|
- **Individual param bars dominate the screen** and are only interactive in Examples mode
|
|||
|
|
- **Two orthogonal mode axes** (learning mode: examples/RL, output mode: visual/synth) live in different places with different UI patterns
|
|||
|
|
- The synth side panel feels bolted on
|
|||
|
|
- The "teach then perform" arc isn't surfaced — new users don't know what to do first
|
|||
|
|
- Most importantly: **manually setting sliders contradicts the core thesis** — NISPS exists precisely because you *shouldn't* need to understand individual parameters
|
|||
|
|
|
|||
|
|
With the C15 synth mode now at **126 parameters**, the slider approach is impossible, making the ML mapping the only viable interface.
|
|||
|
|
|
|||
|
|
## Design Thesis
|
|||
|
|
|
|||
|
|
The three designs explore different answers to: **if users shouldn't set params directly, what DO they interact with?**
|
|||
|
|
|
|||
|
|
## Design A: "Immersive"
|
|||
|
|
|
|||
|
|
**File**: `a-immersive.html` | **Philosophy**: The canvas IS the app
|
|||
|
|
|
|||
|
|
The flow field fills the entire viewport. Everything else floats on top as translucent glassmorphism overlays:
|
|||
|
|
|
|||
|
|
- **Floating circular joystick** with integrated training-example minimap (merged into one control)
|
|||
|
|
- **Heatmap strip** at top — horizontal fill bars (like a tiny equalizer) showing output values at a glance. Hidden in synth mode since the full-screen synth visualizer serves this purpose.
|
|||
|
|
- **Bottom sheet** with chevron toggle (collapsed/expanded), mode toggles always visible in a sticky floating bar
|
|||
|
|
- **RL mode is default** — floating thumbs up/down buttons with key hints (1/2) built in
|
|||
|
|
- **Follow mode** for trackpad-friendly exploration without holding the mouse
|
|||
|
|
- **Synth mode**: full-screen parameter landscape (126 vertical bars grouped by synthesis section), interactive/draggable in examples mode, with a quick play button + hover drawer next to the back button
|
|||
|
|
|
|||
|
|
**Strengths**: Feels like an instrument. Canvas gets maximum space. The synth visualizer conveys the full 126-param scale.
|
|||
|
|
**Open issues**: See bd issue for remaining refinements (synth bar layout, slider interactivity, default mode).
|
|||
|
|
|
|||
|
|
## Design B: "Workbench"
|
|||
|
|
|
|||
|
|
**File**: `b-workbench.html` | **Philosophy**: Show the mapping, not the params
|
|||
|
|
|
|||
|
|
A CSS grid dashboard (2-column on desktop, single-column with collapsible sections on mobile):
|
|||
|
|
|
|||
|
|
- **Mapping heatmap** (the key innovation): a 2D canvas sampling a 20×20 grid through the network, showing the learned function as a color field. Training examples are visible dots. Click/drag anywhere to control position — the mapping IS the joystick (merged).
|
|||
|
|
- **Parameter constellation**: dots in a circle, sized by value, with a count label ("20 parameters" / "126 synth parameters")
|
|||
|
|
- **Semantic param groups**: collapsible cards with sparkline headers. 5 groups for visual mode, 17 groups for synth mode (covering all 126 params by synthesis section)
|
|||
|
|
- **Synth mode**: replaces the flow field canvas with a parameter landscape visualization (126 grouped bars)
|
|||
|
|
- **Softened heatmap colors** with grid overlay for readability
|
|||
|
|
|
|||
|
|
**Strengths**: The mapping heatmap makes the learned function tangible. Param groups reduce cognitive load.
|
|||
|
|
**Open issues**: Visual pill toggle reliability, heatmap color tuning.
|
|||
|
|
|
|||
|
|
## Design C: "Journey"
|
|||
|
|
|
|||
|
|
**File**: `c-journey.html` | **Philosophy**: The UI teaches you, then disappears
|
|||
|
|
|
|||
|
|
Three phases that transition based on user actions:
|
|||
|
|
|
|||
|
|
1. **Explore** (start): fullscreen canvas + floating joystick + gentle prompts. Minimal chrome.
|
|||
|
|
2. **Teach** (active training): canvas shrinks to ~40%. Teaching interface with mode tabs (Examples/RL). Preset snapshot grid. Minimap of examples. Collapsible raw sliders.
|
|||
|
|
3. **Perform** (post-training): canvas expands back to fullscreen. Controls fade to near-invisible after 5s inactivity.
|
|||
|
|
|
|||
|
|
- **RL mode is default** teach mode with keyboard shortcuts (1/2) working in all phases
|
|||
|
|
- **Heatmap strip** with horizontal fill bars, scales from 20 to 126 params
|
|||
|
|
- **Synth mode**: parameter landscape visualization replacing the flow field
|
|||
|
|
- **Follow mode** with double-click toggle and pill button
|
|||
|
|
|
|||
|
|
**Strengths**: Maps perfectly to the real user arc. Phase 3 auto-dissolve is genuinely novel.
|
|||
|
|
**Open issues**: RL mode joystick visibility, fine-tune slider style consistency.
|
|||
|
|
|
|||
|
|
## Shared Architecture
|
|||
|
|
|
|||
|
|
All three designs share unchanged modules:
|
|||
|
|
- `js/nisps/` — MLP, IML, Dataset, Layer, Node (the ML engine)
|
|||
|
|
- `js/ui/visualizer.js` — FlowFieldVisualizer (Canvas2D particle system)
|
|||
|
|
- `js/synth/` — C15Bridge (WASM synth), Arpeggiator, param-map (126 params)
|
|||
|
|
|
|||
|
|
Each design has its own HTML + CSS + app.js. The `designs.html` homepage links to all three with live iframe previews.
|
|||
|
|
|
|||
|
|
### Common features across all designs:
|
|||
|
|
- **126-output MLP** with `[32, 48, 64]` hidden layers
|
|||
|
|
- **Visual mode**: first 20 outputs → flow field particle system
|
|||
|
|
- **Synth mode**: all 126 outputs → SynthVisualizer (grouped bar chart) + C15 WASM engine
|
|||
|
|
- **`?tame=0.7`** URL parameter for safe-range constraining of synth params
|
|||
|
|
- **RL as default** learning mode with keyboard shortcuts (1=negative, 2=positive)
|
|||
|
|
- **Follow mode** for trackpad-friendly exploration
|
|||
|
|
- **localStorage persistence** (random on first boot, restores on refresh)
|
|||
|
|
- **Presets** padded from 20 to 126 outputs with 0.5 defaults
|
|||
|
|
|
|||
|
|
## Answered Questions
|
|||
|
|
|
|||
|
|
- **RL mode is now the default** across all designs — it's the purer expression of the NISPS thesis
|
|||
|
|
- **Network architecture scaled** from `[10, 10, 14]` (20 outputs) to `[32, 48, 64]` (126 outputs)
|
|||
|
|
- **Synth mode gets its own visualization** — parameter landscape with 126 grouped bars, not the particle system
|
|||
|
|
- **Snapshot teaching + fine-grained sliders coexist** — presets for quick setup, expandable raw params for power users
|
|||
|
|
|
|||
|
|
## Iteration History
|
|||
|
|
|
|||
|
|
1. **Initial build** (2026-03-21): Three designs from PRD, all functional
|
|||
|
|
2. **Round 1**: Added back buttons, follow mode, merged joystick+minimap (A), merged joystick+mapping (B), fixed RL functions (C)
|
|||
|
|
3. **Round 2**: Restored localStorage, added keyboard hints, fixed slider responsiveness (B), fixed Visual pill toggle (B), horizontal heatmap bars (A)
|
|||
|
|
4. **Round 3**: Upgraded to 126 outputs + `[32, 48, 64]` MLP, added SynthVisualizer to all designs, added randomize buttons, `?tame` URL param, back button SVGs
|
|||
|
|
5. **Round 4**: Homepage with live previews, synth quick-play button (A), interactive synth bars (A), heatmap hidden in synth mode (A), tame param to B+C
|