Virux-AUv3 Release Notes
Versions 0.1.111 – 0.1.112
v0.1.112 2026-10-12
- Standalone: Virux now runs without a DAW on all three platforms. The macOS installer package installs the standalone Virux.app (with the AUv3 inside) to /Applications alongside the VST3; Windows gets Virux.exe with a Start Menu shortcut, hosting the plugin's own processor in-process and playing the synth's USB audio return through a chosen WASAPI output; Linux gets virux-standalone, the same editor in an X11 window with an ALSA monitor output. Each app is the full editor - device binding, patch sync, Hardware Link - and owns the synth's USB interfaces while it runs, so close any DAW instance of the plugin first (and vice versa).
- Standalone: the on-screen piano keyboard from the macOS app arrives on Windows (View - Piano Keyboard, Ctrl+K) and Linux: a bottom drawer with per-voice channel toggle buttons, an octave slider (C1-C7) and a two-octave keyboard. The channel buttons on every app now track the connected model's part count - a Snow shows channels 1-4 and clamps the selection, everything else shows 1-16 - and the voice selection and octave persist across launches.
- Standalone: OSC remote control is no longer macOS-only. The Windows app gains the same OSC server (File - Settings, Ctrl+comma: enable switch, port field, status dot and activity line; off by default, UDP port 9000 by default, settings persist in %APPDATA%\Virux), and the Linux app takes an --osc flag. All platforms accept the identical message dialect for the 587 parameter addresses, MIDI notes and monitor-output selection. The /audio/reroute and /audio/reboot recovery commands are now paced to one every 30 seconds so a stray or hostile sender on the unauthenticated UDP port cannot loop the synth through reconfigurations.
- Standalone: the new apps no longer depend on a cooperative audio output. On Linux, a disabled (--no-audio), unopenable or mid-stream-failing ALSA device now drops the app to an internal software clock instead of ending the session - MIDI, the piano keyboard, OSC and parameter edits keep working without monitoring. On Windows, the WASAPI stream always opens as 32-bit float at the synth's own 44.1/48 kHz rate and lets Windows' shared audio engine do high-quality rate conversion, so outputs running a 96 or 192 kHz mix format now play instead of failing; the synth is never configured at a rate it cannot stream.
- Studio: a new Studio view opens from the editor's bottom bar, operating on the current edit buffer. History offers grouped undo/redo, up to 32 named checkpoints, parameter comparisons and restoring one parameter, a section or a whole patch. Mutate creates bounded random variations of chosen parameter groups while protecting modes, hardware configuration, routing and locked sections. Morph captures A/B for a slider or A/B/C/D for an XY pad with selectable groups and curves. Eight named Macros - each with up to 16 destinations across parts, two-endpoint ranges and curves - are exposed to host automation and support MIDI Learn. A Modulation inspector searches matrix, LFO, envelope, velocity, key-follow and macro routes by source or destination.
- Studio: patches can be exported and imported as readable .vxp.txt text presets - a versioned UTF-8 format with stable ordering that preserves every payload byte, validated in full before any import changes the patch. Share Preset publishes a captured preset to an unlisted Gist, public Gist or a repository through GitHub CLI's own browser sign-in; Virux never stores the credential in preset files or project state.
- Studio: the new Assistant view connects to Codex or Claude through their locally installed CLIs and sign-ins. Ask about the current patch, or describe a sound and review the proposed parameter changes old-vs-new before applying; a checkpoint is saved first and Apply participates in undo. Proposals are validated (only known sound parameters, in-range integer values; device, session and routing controls are rejected), the CLIs run sandboxed and read-only, and conversations stay in memory only - excluded from preset exports and project state.
- Studio: large edits such as Mutate reach the synth as a paced stream of parameter writes, and closing the editor mid-stream used to drop the unsent remainder. The pending queue is now part of the saved project state (document format v8): the closed-editor worker or a reopened view finishes exactly the writes that were still owed, each coordinate is sent once, and a full project replay consumes the queue without sending anything twice. Restore validates the queue bounds and values and rejects a malformed document whole, with no partial effects.
- Editor: the Classic oscillator page no longer misleads (public issue #9). The spectral-wave selector keeps drawing the selected contour (Sine, Triangle, Wave 3-64, the hardware's own names) even while the Shape knob blends the main preview toward saw and pulse, and the square/triangle buttons beside it are now labeled Sub Osc - they choose the sub-oscillator's waveform, not Shape's destination. Wavetable oscillators gain an honest Position readout (marker plus 'Position N / 127') in place of an invented waveform; drawn previews stay deferred until verified table samples exist.
- Device: fixed a Windows-only failure where Reconnect after Release USB could error and leave the synth released - our own pollers and antimalware scans held handles on the release marker file, blocking its deletion. The marker is now probed without taking a handle and removal retries on a bounded schedule, so Reconnect succeeds even while the file is being scanned.
- Device: returning a Windows machine to the original Access driver is now a real, guarded operation (public issue #9). Restore Original Virus Driver... is renamed Switch to Access driver... in all four languages and stays available even after the Access services are gone. The helper refuses to run until every Virus USB cable is unplugged (and re-checks before each removal), must confirm Virux Patch Sync is stopped and disabled, then removes Virux's WinUSB driver packages and stale WinUSB device entries while leaving Access and in-box class drivers untouched - reporting any cleanup failure instead of claiming success. Success means the WinUSB cleanup finished; install or repair the Access suite and restart Windows before reconnecting.
- Security: audit fixes hardening the Windows installation - the MSI now creates the shared %ProgramData%\Virux directory with a protected ACL, the sync service refuses to start if the path is a junction or symlink, every file read from the shared directory is size-bounded, and the elevated driver installer no longer takes a log path from its command line and stages its payload in a high-integrity, unguessably named directory so a same-user process cannot swap binaries before execution.
- Performance: audit fixes across the stack - audio-thread ring-buffer copies are now one or two contiguous memcpys instead of per-sample loops, the session render path precomputes its routing and interpolation tables once per block, the Windows editor caches DirectWrite text layouts, and the editor renderer and parameter table shed redundant lookups - lowering CPU in both the plugins and the standalones.
- Build: licensed macOS Release builds now link the Apple SDK's system libcurl instead of building their own - curl 8.15 removed the Secure Transport backend, and the old configuration could silently pull host-only Homebrew libraries into one slice of the universal binary. CI now compiles a universal Release VST3 with license enforcement on both architectures to keep that linkage honest.
- Testing: new pinned policy tests for the OSC parser/dispatch, the piano keyboard, standalone settings, audio formats and the standalone 44.1/48 kHz output policy, plus Studio (including the pending-write handoff), OsTIrus protocol, connection and multi-device suites, device-registry fallback tests in C++ and Swift, the ALSA monitor fallback under a fake device, the WinUSB driver-switch flow against faked Windows mutation boundaries, and oscillator-page render checks. Firmware-backed CI boots real TI firmware under DSP Bridge on hosted Windows, Linux and macOS runners and checks discovery, patch load, SysEx readback and audible note-on/note-off on all three audio buses at 44.1 and 48 kHz, alongside the existing physical-synth node. On the release code, 86/86 CTest cases passed on Linux and macOS and 88/88 on Windows, including full runs under the address/undefined-behavior and thread sanitizers, and the macOS plugin smoke and combined hardware checks passed in CI.