Releases: dgl1984/optilab
Release list
OptiLab Core v1.2.0
This release adds the first public 64-bit Windows CLAP build, corrects a
user-reported fade at the beginning of playback, and carries OptiLab Core's
three-control workflow into an accessible, resizable native editor. The JSFX,
CLAP, and native Core retain matching processing behavior.
Processing
- Fixed an unintended short fade-in at the beginning of playback. OptiLab Core
now starts at its intended processing state without the previous startup
ramp. - Kept constant reported CLAP latency across modes by padding lower-latency
configurations internally. - Preserved bit-identical rendered output through the CLAP performance and
accessibility work.
New CLAP plug-in
- Added a self-contained 64-bit Windows CLAP plug-in with the stable ID
com.lanesaudio.optilab-coreand LanesAudio branding. - Exposed Mode, Input Drive, and Auto-Adapt through the standard CLAP parameter
extension so hosts, automation, OSARA, and other accessibility tools can use
every parameter without opening the custom editor. - Added a responsive native Windows editor with standard controls, exact dB
text for Input Drive, percentage output for Auto-Adapt, deterministic Tab and
Shift+Tab traversal, and keyboard adjustment. - Added state save/restore, sample-rate-aware fixed latency, offline-render
notification, denormal protection, and visual-meter work that is disabled
from the audio path during offline rendering. - Added version-checked packaging, architecture/export/runtime verification,
and CLAP ABI, processing, state, editor, focus, and MSAA smoke tests.
Accessibility implementation note
CLAP accessibility has two layers and both must remain functional. First, every
user parameter must have a complete standard CLAP parameter implementation with
a meaningful name, range, text conversion, and automation behavior. This is
the host-level path used by OSARA and must not depend on the custom editor.
Second, a custom editor must use controls with native accessibility semantics,
logical focus order, exact unit text, and keyboard operation. A Windows
trackbar reports its normalized percentage, so a non-percentage value such as
Input Drive also needs a focusable native field that exposes the actual dB
value.
REAPER adds a reaperPluginHostWrapProc window around an embedded CLAP editor.
Parenting the accessible controls directly beneath that wrapper can prevent Tab
and mouse hit testing from reaching them. OptiLab detects that REAPER-specific
wrapper, places its WS_EX_CONTROLPARENT editor beside it under the wrapper's
parent, preserves the wrapper bounds, and posts a message after gui.show() to
hide the wrapper before moving focus to the first control. Other hosts retain
normal CLAP parenting.
This approach was informed by James Teh's GPLv2
App2Clap: its
native DS_CONTROL dialog definitions,
REAPER-specific parenting and show handling,
and the original
tabbing and hit-testing fix.
OptiLab's smoke test emulates the REAPER wrapper and fails if the editor is
again placed beneath it, if the wrapper remains over the controls, if initial
focus fails, or if Tab order and accessible dB text regress. Maintainers and
fork authors should read
docs/CLAP_ACCESSIBILITY.md before replacing the
editor or changing its window hierarchy.
OptiLab Core v1.1.2
Winamp DSP accessibility fix and visual meter update.
- Added a Show visual meters checkbox.
- Visual meters are off by default to avoid screen readers announcing changing percentages unless enabled.
- Kept the v1.1.1 Winamp Stream polish default of +1.0 dB.
- JSFX carries the matching 1.1.2 version; processing controls are unchanged.
OptiLab Core v1.1.1
OptiLab Core v1.1.1
This is a small Winamp DSP polish release.
The REAPER JSFX is still the same Core processor. Its displayed version was
updated so the JSFX download and Winamp build stay on the same release number.
Downloads
For REAPER, download:
optilab_core.jsfx
For Winamp-compatible hosts, download:
OptiLab-Core-1.1.1-Winamp-DSP-x86.zip
For developers using the native C++ library, download:
OptiLab-Core-1.1.1-Native-API.md
Winamp DSP changes
Stream polish now starts at +1.0 dB Input drive in the Winamp DSP.
That is gentler than the REAPER JSFX starting point, but it fits Winamp-style
integer PCM hosts better. In early host testing, the old +4.5 dB starting
point could feel pinned or clipped in Winamp and RadioBOSS. Existing saved
per-host settings are still respected.
The settings window now includes simple live meters:
- input peak
- output peak
- recent full-scale sample activity
The meters use standard Windows controls with plain text readouts beside them,
so the visual feedback is there without making the plug-in mouse-only or
screen-reader-hostile.
Build fix
The Windows CI workflow is now pinned to the VS2022 runner image. That fixes the
GitHub Actions failure where windows-latest moved to an image that no longer
provided the Visual Studio 2022 generator expected by the project.
Markdown-only pushes no longer run the native Windows build.
Notes
Auto-Adapt is still best treated as more control and protection, not a loudness
knob. Start with Auto-Adapt at 0 percent, set Input so the processor sounds
active but not strained, then raise Auto-Adapt only if the material needs more
automatic balancing.
OptiLab Core v1.1.0
OptiLab Core v1.1.0
This update does two main things:
- refreshes the REAPER JSFX version of OptiLab Core
- adds the first Winamp-compatible DSP build for Windows
The REAPER plug-in still has the same three controls: Mode, Input, and
Auto-Adapt. No extra setup page or hidden user controls were added.
Downloads
For REAPER, download:
optilab_core.jsfx
For Winamp-compatible hosts, download:
OptiLab-Core-1.1.0-Winamp-DSP-x86.zip
For developers using the native library, download:
OptiLab-Core-1.1.0-Native-API.md
The Winamp ZIP contains the DLL and installation notes.
What changed in the JSFX
Stream polish has been retuned. It should hold together better on mixed music
and broadcast-style material, especially when Auto-Adapt is raised.
The final peak handling was also tightened up. Core still aims for a finished,
loud result when the material supports it, but the internal clipping and final
guard stages are less likely to get rough in the process.
Podcast Leveler and Smooth Limiter keep the same basic behavior, with the final
safety changes shared where they apply.
New Winamp DSP
This release adds dsp_optilab_core.dll, a 32-bit classic Winamp DSP/Effect
plug-in.
It is intended for Winamp and Windows hosts that support classic Winamp DSP
plug-ins. The Winamp build uses the same Core processing idea as the JSFX:
choose a mode, set the input drive, and use Auto-Adapt if you want more
automatic leveling and protection.
The settings window uses standard Windows controls, so it should be usable with
keyboard navigation and screen readers.
Native library notes
The source tree also includes the native C++17 optilab-core static library
used by the Winamp DSP wrapper.
The native API notes cover the call order, parameters, latency reporting, buffer
formats, reset behavior, and real-time threading expectations.
One important distinction: v1.1.0 provides a C++ API, not a stable exported C
ABI. If you need to call Core from C or another language, wrap the C++ class in
your own adapter for now.
Notes
The Winamp plug-in is 32-bit because the classic Winamp DSP interface is 32-bit.
If a host resamples audio after OptiLab Core, that later conversion can create
new peaks above Core's own sample ceiling. For strict delivery checks, measure
the final exported or streamed signal after any resampling.
OptiLab Core v1.0.3
Changelog
OptiLab Core v1.0.3
This is an Auto-Adapt and speech-transition update for OptiLab Core. The plugin keeps the same simple three-control design: Mode, Input, and Auto-Adapt. No new controls were added.
Refined Auto-Adapt behavior
Auto-Adapt has been refined in Podcast Leveler and Stream polish.
In Podcast Leveler, higher Auto-Adapt settings now focus more on controlled leveling and protection rather than simply pushing harder into the processing chain. This reduces the chance of clip-like behavior on difficult speech while still allowing high Auto-Adapt settings to become more active when needed.
In Stream polish, Auto-Adapt now keeps the familiar base sound while becoming smoother and more stable as it is raised. The goal is better consistency for mixed program material without making the mode feel slammed, dull, or over-smoothed.
Better handling of pauses and speech transitions
A few users reported an edge case where spoken-word material with pauses between phrases could trigger a chunky, old-style automatic gain sound. The effect was similar to the level movement you might hear from a basic tape recorder or consumer voice recorder when it turns quieter material up and then grabs the next loud phrase.
Version 1.0.3 refines that behavior so speech transitions feel smoother and less abrupt, especially on uneven voice recordings, breaths, and short pauses between phrases.
Startup transition cleanup
Older startup peak-catch behavior has been retired. This helps Core rely more naturally on its main leveling and final control stages instead of adding an extra startup reaction that could become audible on certain material.
Screen-reader wording improvement
The Stream mode is now written as Stream polish instead of Stream Polish. This avoids a confusing pronunciation issue in some screen readers and text-to-speech voices, where the capitalized word could be read as “Polish” referring to Poland rather than “polish” as in audio polish.
Smooth Limiter unchanged
Smooth Limiter remains essentially unchanged in this update. It already has a focused job, so this release concentrates on Podcast Leveler, Stream polish, and Auto-Adapt behavior.
OptiLab Core v1.0.2
This was a sound and usability update for OptiLab Core. The plugin kept the same simple three-control design: Mode, Input Drive, and Auto-Adapt. No extra controls were added.
More complete output ceiling behavior
Podcast Leveler, Stream Polish, and Smooth Limiter were updated to use the full -0.1 dBFS output target instead of holding Podcast and Stream modes back around the older conservative ceiling range.
This gave Core more room to use its own staging and final processing. In practical terms, Podcast and Stream modes could finish closer to the available digital ceiling when the material and processing called for it.
Same simple control layout
OptiLab Core remained intentionally simple:
- Mode chooses the starting processor behavior.
- Input Drive controls how hard the processor is fed.
- Auto-Adapt adjusts the amount of adaptive tone and energy balancing.
Input Drive persistence fix retained
This release kept the v1.0.1 fix that prevents Input Drive from being reset during playback, render, stop/start, or plugin reinitialization.
Switching modes still loads a sensible starting Input Drive for that mode, but once you adjust Input Drive yourself, Core should not silently overwrite it during normal playback or rendering.
Small CPU hygiene
This version included small internal cleanup work, including cached multiband clip scalar values and removal of unused output-gain work. These changes were intended to keep the processor lean without changing the basic three-control workflow.
Projects using OptiLab Core may render faster, especially if multiple instances are being used.
OptiLab Core v1.0.1
- Fixed Input Drive being reset to the mode default during playback, rendering, stop/start, or plugin reinitialization.
OptiLab Core v1.0.0
- Initial public release.
OptiLab Core v1.0.2
OptiLab Core v1.0.2
This is a sound and usability update for OptiLab Core. The plugin still keeps the same simple three-control design: Mode, Input Drive, and Auto-Adapt. No extra controls were added.
What changed
More complete output ceiling behavior
Podcast Leveler, Stream Polish, and Smooth Limiter now use the full -0.1 dBFS output target instead of holding Podcast and Stream modes back around the older conservative ceiling range.
This gives Core more room to use its own staging and final processing. In practical terms, Podcast and Stream modes can now finish closer to the available digital ceiling when the material and processing call for it.
Same simple control layout
OptiLab Core remains intentionally simple:
- Mode chooses the starting processor behavior.
- Input Drive controls how hard the processor is fed.
- Auto-Adapt adjusts the amount of adaptive tone and energy balancing.
Input Drive persistence fix retained
This release keeps the v1.0.1 fix that prevents Input Drive from being reset during playback, render, stop/start, or plugin reinitialization.
Switching modes still loads a sensible starting Input Drive for that mode, but once you adjust Input Drive yourself, Core should not silently overwrite it during normal playback or rendering.
Small CPU hygiene
This version includes small internal cleanup work, including cached multiband clip scalar values and removal of unused output-gain work. These changes are intended to keep the processor lean without changing the basic three-control workflow.
Projects using OptiLab Core may render faster, especially if multiple instances are being used.
Install
Download optilab_core.jsfx, copy it into REAPER's Effects folder, then restart REAPER or rescan JSFX.
For a portable REAPER install, copy the file into that install's Effects folder.
For a standard Windows REAPER install, the user Effects folder is usually under:
%APPDATA%\REAPER\Effects
Notes
OptiLab Core is the free, simple version of the yet-to-be-released OptiLab Producer. It is designed for practical broadcast-style polish, podcast leveling, streaming, and smooth final limiting without exposing the full Producer control set.
OptiLab Core v1.0.1
Hotfix: Input Drive now stays where the user sets it across stop, play, and render. Mode changes still load each mode's recommended starting input.
OptiLab Core v1.0.0
OptiLab Core v1.0.0
Initial public release of OptiLab Core.
OptiLab Core is a free JSFX audio processor for REAPER with three main controls:
- Mode
- Input
- Auto-Adapt
Included modes:
- Podcast Leveler
- Stream Polish
- Smooth Limiter
Download optilab_core.jsfx, copy it into your REAPER Effects folder, then restart REAPER or rescan JSFX.