Skip to content

ImWeb v0.25.0 — Hands On

Latest

Choose a tag to compare

@Haraldurk Haraldurk released this 17 Sep 00:00
· 38 commits to main since this release

ImWeb v0.25.0 — Hands On

Released 2026-09-16

This release is about the things in your hands. OSC remotes, a Flic button and
any gamepad now bind the way MIDI always has — by touching the control — and
they share the four mapping pages with it. Buttons can drive a value both ways,
sticks can push a value and let go of it, and a remote is told where its
controls are when the page changes. Everything here was tested on a real Flic
and a real Logitech Cordless RumblePad 2, not only in the test suite.

Learn by touching the control

  • OSC Learn — right-click a parameter → OSC Learn, press the button or
    move the fader. Its address binds to that row, so you never type a parameter
    id into a controller app. ImWeb listens for about a second and binds the
    control that moved
    , so a layout streaming an accelerometer cannot steal the
    binding. The badge names the address: OSC:/flic/1.
  • Gamepad Learn — the same for a pad: right-click → Gamepad Learn, then
    press a button or push a stick. The menu's A/B/X/Y names mean nothing on a pad
    printed 1–10; learn asks the pad instead. A stick resting slightly off-centre
    cannot steal the binding.
  • A PAD chip in the status bar lights when the browser can see your pad
    (press a button on it first — browsers hide pads until then) and pulses while
    learn waits.

PAD IN: what is this button called?

Under MIDI In in the I/O panel, PAD IN shows every control you touch by the
name its badge will have once mapped — G:↑, G:LX 0.73, G:RT 0.40 — and what
it already drives on the current page. Map without guessing.

Buttons that go both ways, sticks that stay

  • Latch — tick it in a badge's popover and each press alternates a
    continuous parameter between the row's min and max. A Flic, which sends the
    same message every click, can now drive a value down as well as up. Works the
    same for OSC, MIDI pads, gamepad buttons and keys. Badge: .
  • Relative sticks — a stick springs back to centre, so it could only hold a
    value while you held it. Tick Relative (push, stays) and pushing moves
    the value — faster the further you push — and letting go leaves it there.
    Pushing up raises; Full range (s) sets the speed. Badge: .

Mapping pages for every input

The four pages used to hold MIDI only; on a rig with no MIDI they moved and
changed nothing. Now MIDI, OSC and gamepad bindings all live on pages, and
the settings you give a binding (Latch, Relative, channel) stay with its page.

  • Soft takeover comes along for the controls that have a position — a MIDI
    fader or a stick does not jump its parameter after a page switch. Buttons,
    latched rows, relative sticks and OSC are exempt and act on the first touch.
  • An OSC remote is told where to be. On a page switch each learned control
    is sent its new parameter's position, so a TouchOSC layout repositions itself.
  • The page-step rows are now Prev Page and Next Page — as "Map Page −"
    and "Map Page +" they were cut off to the same "Map Page..." in the panel.

OSC that talks to the right place

  • Feedback — ImWeb reports changes back to your remote, batched, and only to
    what the remote actually talks to: a learned control at its own address. It
    had been documented but never wired; the first version then sent 70–90
    messages a second to a Flic that has nothing to display.
  • /imweb/toggle/<id> flips a toggle on each press (a Flic could turn one on
    and never off), and a momentary button fires a trigger once, not twice.

Fixes

  • A gamepad no longer pins the parameters bound to it — a resting stick held
    its parameter at 0.5 and overwrote every state recall within a frame.
  • Two parameters bound to one gamepad button both respond.
  • The status bar works on a first launch — the OSC chip ignored clicks until
    the startup project had finished loading.
  • A cleared controller stops showing on its row after a state recall; the
    badge used to keep advertising a binding that was gone, which looked exactly
    like dead hardware.
  • Settings made in the badge popover stay on their mapping page instead of
    vanishing on the next page switch.
  • The manual's OSC address was wrong (/param/…); it is /imweb/<paramId>.

Under the hood

"Press acts, release does not" existed five times over and the copies disagreed;
it is now one rule in src/controls/controlInput.js that MIDI, OSC, keyboard and
gamepad all call. Six new audits — audit-control-input, audit-mapping-pages,
audit-gamepad, audit-osc, audit-state-recall-badges and
audit-boot-nonblocking — and the mutation suite catches 155 of 155
deliberate breakages, up from 106.

Full detail in CHANGELOG.md.