• v1.3.0 067de506d0

    jkaindl released this 2026-05-25 15:23:50 +00:00 | 351 commits to main since this release

    [1.3.0] — 2026-05-25

    Editor

    • ParamSlider Shift / Alt modifiers + wheel + keyboard. Power-user
      controls land on every slider in the editor:
      • Wheel over the track nudges by step. Shift = ×0.1 fine,
        Alt = ×10 coarse.
      • Arrow keys (and Home / End) operate the slider when the track
        has keyboard focus — same modifier scaling as wheel.
      • Drag with Shift switches to relative-incremental mode at 0.1×
        the normal rate so you can dial in tenths without overshooting;
        drag with Alt runs at 4× the normal rate for sweeping across
        the full range from a small motion. The modifier state is captured
        at pointerdown so releasing the key mid-drag doesn't snap the
        value to the pointer's absolute position.
    • Track is now keyboard-reachable (tabIndex=0, role="slider",
      aria-value*) for screen-reader and keyboard-only navigation.

    Library

    • Reorder custom presets. Each card in "My Presets" now shows up
      and down arrow buttons that move it earlier or later in the library.
      The arrows disable at the list boundaries and operate on the
      unfiltered list (so tag and search filters don't re-target the
      wrong neighbour). Order is persisted to localStorage and survives
      a reload.
    • Re-saving an existing preset preserves its position. Before,
      saveOverwrite filtered the preset out and pushed it back to the
      end of "My Presets" — a small UX papercut on every iteration.

    Performance

    • Desktop tier agent cap raised from 200k → 500k, matching the
      schema and slider caps. The engine was silently clamping past 200k
      before, so values shown in the editor didn't match what the engine
      rendered. On M3 the engine sustains 120 fps (p50 120.5, p95 131.6)
      at 500k on both single-species (aurora-veil) and three-species
      (fireworks) presets. Older M1 / M1 Air variants haven't been
      verified — if framerate drops on a lower-spec Apple-Silicon machine,
      drag the slider back; the FPS readout in the topbar surfaces it.
    • npm run bench:headroom script for reproducible frame-cadence
      measurement. Headed Chromium (same WebGPU-on-headless caveat as
      bake-thumbnails), reads requestAnimationFrame directly so it
      works without enabling the FPS-display toggle. Override the preset
      and agent count via env vars; see scripts/bench-headroom.ts.

    Tests

    • New unit tests for the slider input math (26) and custom-preset
      reorder (7). Total vitest count: 92 → 125, all passing.
    • Fixed a long-silently-broken E2E test that was matching the old
      cinema-mode hint text from before the v1.2 "Esc or click to exit"
      rewording.

    Installing on macOS

    The macOS build is not Apple-notarised (this is a hobby project).
    First launch shows "Apple could not verify this app." Two-minute fix:

    1. Click Done on the warning (NOT "Move to Trash"!).
    2. Apple menu → System SettingsPrivacy & Security.
    3. Scroll to the bottom → Open Anyway next to the Physarum notice
      → confirm with password / Touch ID.
    4. Final dialog: Open Anyway once more.

    The second launch is silent. If the "Open Anyway" button is missing
    (newer macOS versions), in Terminal:

    xattr -dr com.apple.quarantine /Applications/Physarum.app
    

    Background and walkthrough: docs/MACOS-APP.md.

    Downloads