"ReaLearn changed my workflow like the MPC did for me 20 years ago … it’s truly amazing"
— Lockheed
"ReaLearn is a solid project, well maintained since 2016 with regular updates via ReaPack, and extensive support."
— ReaLinks.net
"My god, Realearn 2 is awesome and is exactly what I was hoping for for a while."
— Baldwin

ReaLearn 2

Versatile Controller Integration for REAPER

Latest version: 2.16.0

Get Started

Intro

ReaLearn is an instrument plug-in for the Digital Audio Workstation REAPER which works in REAPER only. Its mission is to equip REAPER with the most comprehensive and well thought out MIDI/MCU/OSC learn features that one can imagine, while at the same time providing many related features such as MIDI/OSC feedback (e.g. via LEDs, motorized faders and displays). It’s especially suited for performers who frequently need to map control elements like knobs or buttons to REAPER functions such as track volume, FX parameters or actions. Since version 2 it’s also quite usable as a tool for customizing control surfaces without having to write templates or code.

REAPER itself has a built-in MIDI/OSC learn functionality but it only provides the bare essentials. Many useful MIDI control scenarios are impossible or quite difficult and time-consuming to achieve with REAPER alone, for example if you want to restrict the controlled target value range. You would need to tinker with things like MIDIToReaControlPath and general purpose MIDI plug-ins, which totally takes the drive out of making music. ReaLearn tries to make that much easier and gives you instant access to lots of advanced features on top of that: Controller presets, conditional activation, projection … and much more.

Download

ReaLearn is now part of the Helgobox suite.

Videos

This is the ReaLearn 2 introduction video. Watch 2 minutes of it to get a first impression and stay tuned if you want to see a few things that ReaLearn allows you to do.
This is the official series of tutorial videos. A perpetual work in progress but all the basics are there already. Very much recommended if you prefer a hands-on approach over a technical user guide!

Features

MIDI feedback

to LEDs and motor faders

Look at your controller to see what's going on in your DAW.

Grouping

of mappings

Group mappings either by using the built-in group feature or by instantiating multiple ReaLearn instances.

More convenience

intelligent learn

ReaLearn tries to guess the character of MIDI CCs when learning them (knob/fader, relative type, button, etc.). Also, it allows you to learn from everywhere by offering global REAPER actions.

Controller presets

and virtual controls

Describe your own controller by creating a controller preset or use a factory controller preset if your controller is officially supported. Design your main mappings to be controller-independent.

Projection

know what's mapped

Project a schematic representation of your currently active controller to a mobile device (phone or tablet) in order to see immediately which control element is mapped to which parameter.

FX mappings

switch preset on FX focus

Link custom-built FX presets to FX types to easily control whatever FX is currently focused.

Fine-tuning

of mappings

"Squeeze" the target values into a specific range. React to just a sub range of a control. Let the parameter value rotate. Reverse the direction. Avoid audible parameter jumps. Build previous/next buttons.

Easy reuse

the way you need it

Save a bunch of commonly used mappings and reuse them using the built-in preset facilities, FX presets, FX chains or track templates.

Many sources and targets

control what you like

Use keyboard keys, 14-bit CC and (N)RPN messages as source. Control track volume, track send volume and track pan.

Conditional activation

modifiers, paging

Activate or deactivate mappings by the press of a button or by switching through mapping pages.

Flexible routing

and preprocessing

If you want, you can use REAPER's built-in track MIDI routing to feed ReaLearn with MIDI events. That's useful for filtering out control MIDI messages from the MIDI stream or preprocessing MIDI events before they arrive at ReaLearn.

Per-project mappings

or global ones

Create mappings on a per-project basis. You don't need to pollute your global action mappings just for the needs of one project. Global usage is also possible by using ReaLearn as monitoring FX.

Do you like ReaLearn? Your donation is greatly appreciated. Thank you!

Documentation

Community

Changelog

The following changelog only includes Helgobox changes related to ReaLearn. You can find the complete changelog on the Helgobox page.

2.16.0 (2024-07-07)

  • Added generic main preset for changing FX parameters

  • #870 Added ability to add additional units to one ReaLearn instance (= one ReaLearn instance can now deal with multiple controllers)

  • #901 Added support for compartment presets written in the Luau language (including the ability to require other Luau modules in the same namespace)

  • #908 Added menu option to create a ready-made preset development workspace that can be opened in Visual Studio Code (see workspace README for details)

  • Added possibility to reuse Luau code defined once within a compartment preset across all MIDI script sources used in that compartment (avoids having to duplicate device-specific code in hundreds of mapping, saving memory ... and it just makes sense)

  • #902 Added support for factory presets (they are really built-in, not shipped separately ... presets currently distributed via ReaPack will disappear soon)

  • #903 Added feedback logging to mapping panels (analogously to control logging)

  • #900 Added "Auto units" feature (1. Globally define what controllers you have => 2. Choose which main preset you want to use for which controller => 3. Make one or several ReaLearn instances automatically load/unload those presets whenever the controllers are connected/disconnected ... controller manager is a part of the Helgobox App, which is currently only available to Playtime Early Access testers)

  • #905 Added possibility to add metadata to Luau presets (displayed in the upcoming Helgobox App and used for the new "Auto units" feature as well as automatic creation of known controllers

  • #905 Added auto-magical creation of known MIDI controllers (via MIDI device inquiry, used for the new "Auto units" features)

  • #757 Added possibility to write feedback scripts in the glue section: Now you can build arbitrary feedback messages using Lua code (custom text formatting is just one of the many possibilities).

  • #716 Added experimental Novation SL MkIII Pot Browser Control preset (available here)

  • #716 Added text placeholders "target.available", "global.realearn_time", "target.discrete_value" and "target.discrete_value_count"

  • #743 Added text placeholders "target.fx_parameter.macro.new_section.name" and "target.fx_parameter.macro.section.index" to target "FX parameter: Set value"

  • #743 Added many text placeholders to targets "Pot: Browse presets" and "Pot: Load preset" for obtaining preset metadata such as author and comment

  • Improved virtual control by considering two same-named virtual control elements with different character the same (this change has only been made to named control elements, not to numbered ones!)

  • #923 Improved auto-load by falling back to initially active preset when no FX focused

  • #928 Improved both "After timeout" fire modes by respecting button filter setting (this makes long-press-on-release-off scenarios achievable with just one mapping)

  • Improved Projection feature by building it into the Helgobox App (which is only accessible to early-access Playtime testers at the moment)

  • Improved Midi Fighter Twister controller presets: Now Lua-based, with ReaLearn color support and available in 2 different virtual control schemes (grid and numbered)

  • Improved ReaLearn REAPER actions by showing an error if instance needed to execute the action and improving macOS message panel font size

  • Improved Lua MIDI scripts by allowing them to access the common compartment Lua module even when just calculating the feedback address

  • #904 Improved target menu by distinguishing between different target sections

  • #902 Improved preset sharing by introducing the concept of preset namespaces (each sub folder of the main/controller preset folder is now a namespace, that means it's completely self-contained and can be easily shared, each namespace shows up in a different sub menu when browsing presets)

  • #788 Improved shutdown behavior by switching all device LEDs/screens off and tearing all motor faders down when quitting REAPER

  • #914 Improved input/output pickers by distinguishing between available and not available devices

  • #913 Improved OSC performance by processing more OSC messages per cycle

  • Improved dummy target by making it work just like most other targets (generating pseudo feedback, value changes observable in mapping panel etc.)

  • #916 Improved user interface by adding colors

  • #864 Improved feedback due to conditional activation/deactivation by emitting it in deterministic order (in mapping order)

  • #716 Improved feedback possibilities by processing text feedback expressions and scripts even if target doesn't support normal (numerical) feedback

  • Fixed memorization of last color in color picker

  • #862 Fixed source "MIDI script" feedback address not being respected (important e.g. for switching feedback off correctly)

  • #863 Fixed ambiguous "kind" properties in ReaLearn Script (Lua import/export)

  • #716 Fixed "context.feedback_value.color" not containing nil when no color set in source "MIDI script"

  • #860 Fixed possible freeze when using "Open in text editor on macOS" by completely disabling this function on macOS

  • #857 Fixed possible error when using "Selected" track selector and removing that selected track

  • #867 Fixed possible 'REAPER string should be UTF-8 encoded' error (when using long compartment parameter names in ReaLearn and referring to them elsewhere, e.g. as TCP param)

  • #865 Fixed Lua import of XTouchMackieLCD display source settings

  • #866 Fixed linking from FX to preset when ReaLearn is on monitoring FX chain

  • Fixed 'BorrowMut' error when copy/pasting mapping with target-based activation condition

  • Internal change: Removed undocumented ReaLearn script utility functions

  • Removed CSI MST import

2.15.0 (2023-06-01)

  • Temporarily disabled Linux ARM builds

  • #842 Added Pot Browser (a modern preset browser with support for preset crawling and preview recording, Windows & macOS only for now)

  • #743 Added many new features and improvements to ReaLearn's experimental Pot targets (e.g. support for CLAP/VST3/JS, filter exclusion, skipping of empty filters, factory/user preset filter, product kind filter, favorite filter, support for REAPER's own preset formats ... and much more)

  • #840 Added new option "Consider target invocations" to targets "ReaLearn: Modify mapping" and "Global: Last touched", e.g. in order to make it possible to ignore target invocations that were caused by ReaLearn itself

  • #493 Added possibility to restrict the list of included target types when using target "Global: Last touched"

  • #744 Added new target "ReaLearn: Modify mapping", currently supporting the following modifications: "Learn target", "Set target to last touched", supports picking included target types and modifying mapping of other ReaLearn instance

  • #744 Added possibility to pick target from last-touched ones (one last-touched per type)

  • #811 Added group interaction kind "Inverse target value (off only)"

  • #708 Added basic Behringer x32 instructions to the list of tested controllers

  • #716 Lua MIDI script: Improved error reporting

  • #829 Improved compatibility with older Linux libc/libxdo versions by building release in Ubuntu 20.04 instead of 22.04

  • #840 Improved global target capturing (via ReaLearn REAPER actions) by also adding support for learning transport controls and REAPER action invocations

  • #840 Improved UI-triggered target learning (doesn't pick up target touches anymore that are caused by another ReaLearn instance)

  • #765 Improved transformation editor to apply changes immediately when typing (no need to close window)

  • #744 Improved performance of target "Global: Last touched"

  • #744 Improved target "Global: Last touched" to pick up transport actions and some other actions as well (if included in the list of target types)

  • #810 Fixed disappearing target value sequence values when the target is "FX parameter: Set value" and the FX is a JS FX

  • #716 Lua MIDI script: Fixed "context.feedback_value.color" not containing nil if no color set

  • #856 Fixed usability issue with "FX parameter: Set value" and instance FX "Focused" by making it possible to choose FX parameter although instance FX not focused anymore

  • #847 Fixed full channel and subsequent PoisonError when ReaLearn needs to process many parameter changes at once (e.g. by parameter modulation)

  • #841 Fixed issues with new REAPER v6.78+ dev builds (was totally broken)

  • #835 Fixed glue section user interface inconsistency

  • #838 Fixed possible errors with send targets when removing a hardware output send from a track

  • #743 Removed Pot target's capability to save last selected preset and filters (temporary removal)

2.14.3 (2023-01-13)

  • #791 Fixed compatibility with Windows 7/8 (this time really ... well, hopefully, we'll see)

2.14.2 (2023-01-13)

  • Internal change: Improved clip engine

  • Internal change: Updated server libraries

  • Improved server start/stop behavior (allow immediate server stop without restart, don't wait for Playtime App to close its connection)

  • Improved confusing server context menu that was showing server state as enabled even the server failed to start

  • #787 Fixed volume/pan/width control performance issue in latest REAPER versions (by not writing undo point for each little change)

  • #780 Fixed failing ReaLearn upgrade (via ReaPack) while ReaLearn still running

  • #791 Fixed compatibility with Windows 7/8 (hopefully, we'll see)

  • #779 Fixed saving/restoring of controller compartment parameters (was working only for main compartment parameters so far)

  • #797 Fixed Linux installation instructions by adding requirement to install libxdo

2.14.0 (2022-11-24)

  • #763 Added new MIDI source "Specific program change" (which makes it more straightforward to react to specific programs)

  • #529 Added dynamic track expression variables "instance_track_tcp_index" and "instance_track_mcp_index"

  • #747 Added menu and help buttons to the header panel

  • #224 Added previous/next buttons to the mapping panel (for navigating in the list of mappings that's currently visible in the main panel)

  • #685 Added more comfortable editing for OSC feedback arguments and help button

  • #729 Added Lua snippet versioning (from now on, all Lua exports from ReaLearn will contain the ReaLearn version number; used for getting version conflict warnings on import and applying migration logic; in your own Lua code, you should make sure it's set from now on ... removing it will make ReaLearn think that it's an old preset and then it might apply some migration logic that you don't want)

  • #485 Added new takeover mode "Pickup (tolerant)" (prevents jumps but also makes extra sure the target doesn't get stuck, in addition to below mdmayfield improvements)

  • #756 Added new text feedback placeholder "target.width.mcu" to target "Track: Set stereo width" for pretty display of width value

  • #221 Added new experimental "Pot" targets for preset browsing in a large pot of presets (first supported preset database: Komplete NKS, see dedicated REAPER forum thread for details)

  • #713 Added new feedback-only source "Speech" for speaking out numeric or text feedback via Windows/macOS built-in text-to-speech engine (no Linux yet, sorry)

  • #529 Added new track selectors that respect track visibility in TCP or MCP

  • #529 Added new dynamic track variables "selected_track_tcp_index" and "selected_track_mcp_index"

  • #529 Added new options to target "Project: Navigate within tracks" to respect visibility in TCP or MCP

  • #698 Added fancy control transformation editor with visual preview of curve/transition (Windows/macOS only for now)

  • #605 Added control transformation template facility (including some first templates, hard-coded, Windows/macOS only for now)

  • #45 Added option to respect/ignore track grouping to supported track targets

  • #45 Added option to enable/disable selection ganging to supported track targets

  • #691 Added target control information to mapping panel (Very useful to understand what's going on! For real-time-MIDI-controlled mappings, this only works if target control logging is enabled.)

  • #686 Added new target "Global: Mouse" to control the mouse (one use case is to control the FX parameter which is currently under the mouse cursor)

  • #555 Added possibility to save compartment notes (they are also saved with compartment presets)

  • #679 Added multi-line editing and error reporting for EEL transformation formulas

  • #680 Added possibility to force or prevent smooth seek in seek and marker/region targets

  • #670 Added display type "Studiologic SL Keyboard display" for showing arbitrary text on the keyboard (tested with SL88)

  • #660 Added display types "X-Touch Mackie LCD" and "X-Touch Mackie LCD XT" for enabling LCD color support when certain X-Touch devices are in MCU mode

  • #657 Added various options to decide whether to keep ReaLearn active if its project tab is in the background (accessible via right-click menu)

  • #627 Added option to play sound when target has been invoked successfully ("Beep on success" checkbox at the bottom left of the mapping panel, great for trigger-like targets such as saving a snapshot)

  • #648 Added target "Track: Enable/disable parent send" (great for MIDI routing in the context of song switching)

  • #658 Added option to prevent resetting feedback when releasing sources (accessible via right-click menu, good for using REAPER/ReaLearn as a remote control for hardware devices)

  • #635 Added stop function to be used in control transformation formulas to emit a target value and stop the currently running transition at once

  • #677 Added context menu entry "Open preset folder"

  • Added "Retrigger" option to target "FX parameter: Set value" (sets parameter even if it already has desired value)

  • #764 Improved usability by allowing raw MIDI pattern (e.g. sysex) to be edited in separate editor window which also indicates whether the pattern is valid (both in source and target)

  • #485 Improved takeover modes substantially by applying the "mdmayfield improvements": No more backwards jumps! Much less getting-stuck situations! Ability to choose a fixed default for jump max! (Thanks a lot to mdmayfield who made the initial contribution!)

  • #485 Improved usability by removing "Jump min/max" settings and introducing an "Off" mode instead (the value for jump max is now an implementation detail; custom min/max values are still supported but only for old presets to ensure backward compatibility; one can use a value sequence as alternative to jump min)

  • #408 Improved auto-load mode by automagically falling back to memorized mappings when FX loses focus (users will love this because it's much more intuitive than "Make instance superior", which still has its uses though in more complex scenarios where you want multiple instances)

  • #721 Improved wording by consistently using "Browse ..." instead of "Navigate within ..." or "Cycle through ..."

  • #721 Improved wording by using less technical object selector names (e.g. "Particular" instead of "By ID")

  • #664 Improved usability by displaying in status bar if control/feedback globally off (don't show by greying out mapping rows anymore)

  • #700 Improved usability by insisting on keyboard focus, even if 'Send all keyboard focus to plug-in' is disabled

  • #692 Improved target-based conditional activation by listening to target activation/deactivation as well

  • #695 Improved usability by marking targets that support MIDI real-time control (because MIDI real-time control has a few restrictions)

  • #689 Improved source "MIDI script" when used with Lua language by making color information available (allows users to provide support for arbitrary MIDI color LEDs/displays, in addition to the built-in ones)

  • Improved target logging by including target control errors and other information

  • Improved usability by making it possible to copy and paste the activation condition of a mapping

  • #675 Improved preset loading by supporting placing preset files in sub directories (1 level, ATTENTION: The parent directory will become part of the preset ID, so don't move existing presets!)

  • #674 Improved preset loading by supporting symlinked preset files

  • #630 Improved target "ReaLearn: Load mapping snapshot" by respecting the "Reverse" checkbox when loading the default value (great for changing the perspective when it comes to on/off targets)

  • #639 Improved usability of the snapshot targets by displaying the snapshot ID in the row label

  • #666 Improved usability of source "ReaLearn parameter" by displaying the parameter index in the row label

  • #626 Improved usability of source "ReaLearn parameter" by making the parameter learnable

  • #671 Improved usability by making text feedback available with dummy target (great for sending just some constant text or using placeholders that don't need target context)

  • #629 Improved usability by displaying session ID in the status bar (should help detecting duplicate IDs, which can be useful e.g. when using projection)

  • #628 Improved target "ReaLearn: Load mapping snapshot" by enabling feedback (showing if the desired snapshot is currently loaded or not)

  • #644 Improved versatility of target "Project: Invoke REAPER action" by making trigger-like actions controllable by relative endless encoders (via invocation mode "Trigger")

  • #640 Improved target "ReaLearn: Take mapping snapshot" by adding the "Last loaded" selector (great for assigning a particular button to update the currently loaded snapshot)

  • #722 Fixed missing feedback of "FX: Enable/disable" target when Bypass parameter is automated

  • #770 Fixed FX still being considered as focused when focus is changed from the FX window to the main area

  • #760 Fixed track peak target not respecting solo state of other tracks

  • #761 Fixed action target invocation mode 7-bit/14-bit confusion (existing presets will automatically be migrated, so existing behavior will not change)

  • #775 Fixed failed scan on macOS El Capitan (ReaLearn stopped working on it since v2.13, fixed by removing Prometheus metrics support for macOS Intel builds)

  • #529 Fixed unreliable refresh of dynamic track result UI refresh in target section of mapping panel

  • Fixed various mapping panel GUI bugs

  • #727 Fixed missing feedback refresh when dealing with multiple instances (e.g. via "Make instance superior")

  • #730 Fixed missing automatic feedback for target "FX: Set online/offline"

  • #724 Fixed unreliable track visibility change detection

  • #707 Fixed rel_time transformations to respect reverse, target min/max/sequence and rounding (also hide some settings that don't make sense)

  • #706 Fixed OSC compatibility with certain apps such as Syntien (control didn't work when both control and feedback were enabled for the device)

  • Fixed target "Project: Invoke REAPER action" invocation mode "Trigger" (could potentially suffer from not being retriggered in some situations)

  • #696 Fixed bug that caused retriggerable targets to not be retriggered with relative control if they already had the desired value

  • Fixed error when learning/using special keys on macOS (keyboard source)

  • #681 Fixed REAPER track color detection

  • #682 Fixed bug that caused parameters and custom projection data to not be cleared when switching preset to None

  • #667 Fixed fire modes when using rel_time transitions

  • #631 Fixed saving of snapshot IDs in target "ReaLearn: Take mapping snapshot"

  • #663 Fixed feedback of target "Marker/region: Go to" (it was changing even when playback was stopped)

  • #659 Fixed ReaLearn still being active when disabling it via its automatable "Bypass" parameter (as opposed to disabling it via checkbox or ReaScript)

  • #652 Fixed deletion of mapping snapshots when copying and pasting a compartment

  • #673 Fixed "mapping not found" error when removing a mapping while still learning it

  • #678 Fixed infinite error loop and certain "track is not available"-like errors

  • #676 Fixed change detection for FX on the monitoring FX chain (most importantly enable/disable, in general ReaLearn should now work much better when targeting monitoring FX and also work better if it's placed on the monitoring FX chain itself)

2.13.1 (2022-07-10)

  • #624 Fixed Lua import/export by defaulting to This FX again when using FX targets (instead of Focused)

2.13.0 (2022-07-06)

  • Internal change: Migrate to Rust 1.61

  • #392 Added target-based conditional activation

  • #394 Added target "ReaLearn: Take mapping snapshot"

  • #358 Added "Keyboard" source

  • #161 Added new "Instance track" concept, a corresponding track selector <Instance> and a way to set the instance track (this enables many new scenarios such as track pinning)

  • #228 Added new "Instance FX" concept, a corresponding FX selector <Instance> and a way to set the instance FX (this enables many new scenarios such as FX pinning)

  • #468 Added absolute mode "Make relative" for turning absolute fader/knob movements into relative target adjustments

  • #457 Added absolute mode "Performance control" for emulating the behavior of a typical soft synth modulation matrix mapping

  • #518 Added source "Timer" for repeated triggering of arbitrary targets (you can find it in source category "REAPER", can for example be used to repeatedly send a particular OSC message, which is a precondition to support Behringer X32 OSC)

  • #579 Added new source "ReaLearn parameter" in source category "REAPER" (for controlling targets with ReaLearn's automatable parameters itself)

  • #576 Added initial accessibility (Thanks a lot to AZSlow3 for his contribution!)

  • #599 Added possibility to address an FX instance relative to the current ReaLearn instance by using dynamic FX expression variable this_fx_index

  • #612 Added instance_track_index and instance_fx_index variables to dynamic expressions (allows us cycling through tracks/FX while pinning them as instance track/FX)

  • #228 Added "FX" target (analogously to "Track" target, well-suited for text feedback concerning a particular FX)

  • #593 Added possibility to modulate ReaLearn target values and smooth transitions by making the rel_time variable available in control transformation formulas (read more on the issue tracker or in the user guide)

  • #578 Added "ReaLearn: Dummy" target

  • #584 Added support for Mackie Extender (XT) displays

  • #572 Added option to log target control values (available in header panel context menu)

  • #42 Added possibility to target FX parameters shown in track control panel by using the new variables tcp_fx_indexes and tcp_fx_parameter_indexes in dynamic FX and FX parameter expressions

  • #556 Added context menu action "Dry-run Lua script from clipboard"

  • #557 Added support for importing JSON presets via "Import from clipboard"

  • #559 Added possibility to write MIDI scripts in Lua

  • #561 Added possibility to map text feedback to numeric source values (API-only, feedback_value_table)

  • #570 Added new activation condition type "Expression" (which lets one use the same expression language in activation conditions that's also used for dynamic selectors)

  • #209 Added comprehensive support for discrete ReaLearn parameters (now you can use integers instead of only floating pointer numbers between 0.0 and 1.0)

  • #474 Added target "FX parameter: Set automation touch state"

  • #474 Added target "Send: Set automation touch state"

  • #192 Added target "Track: Set monitoring mode"

  • #548 Added support for instance-specific "FX-to-preset links" (making it possible to distinguish between different controllers when using "Auto-load: Depending on focused FX")

  • #403 Added support for OSC value ranges other than 0.0 to 1.0

  • #403 Added support for OSC type tags Int and Long

  • #358 Added new context menu action "Named listed mappings after source"

  • #332 Added limited support for offline rendering (works now with REAPER >= v6.52+dev0323, limited to controlling FX parameters on the same track)

  • #501 Added option in context menu to log not just real but also incoming/outgoing virtual control elements and values (very useful for debugging mappings)

  • #539 Added invocation mode "Absolute (7-bit)" to target "Project: Invoke REAPER action" (for controlling actions that don't correctly interpret 14-bit values, e.g. "SWS/SM: Live Config #1 - Apply config (MIDI/OSC only)")

  • #504 Added plug'n'play for MIDI devices, also on Windows (automatically resends all feedback shortly after MIDI device plugged in without further user interaction)

  • #544 Added John's presets for Behringer MOTÖR and FCB1010

  • #336 Added clip engine to be used by upcoming Playtime 2

  • #526 Improved target "MIDI: Send message" by lifting all previous restrictions when using destination "FX output" (Yes, you can now play your VSTs via OSC!)

  • #540 Improved precision for entering and displaying percentages and dB to 4 fractional digits (e.g. useful for values in value sequences)

  • #530 Improved error reporting by including the name of the channel in case a channel ran full

  • #336 Improved ReaLearn plug-in topology by removing output pins (since ReaLearn doesn't output any audio streams)

  • #358 Improved keyboard source significantly (save/load, more reliable key catching, catching of modifier-only key presses, keystroke normalization for better cross-platform experience, portability warnings)

  • #549 Improved selectors "All by name" and "All selected" by allowing combinatorial explosion (you can now easily target many FX, FX parameters and sends on many tracks with just one target ... powerful, use with caution!)

  • #551 Improved OSC by using one socket for sending and receiving OSC messages (makes "respond to sender" possible, used for example by Behringer XR mixers)

  • #550 Improved user interface on macOS by taking up less vertical screen space (and a tiny bit less horizontal one, too)

  • #550 Improved (or made worse?) user interface for macOS light mode by using an ugly but at least bright scrollbar

  • #209 Improved bank-based conditional activation by making the number of banks configurable (by entering a value count for the corresponding ReaLearn parameter)

  • #209 Improved performance when automating ReaLearn parameters by not processing value updates if value didn't change

  • #403 Improved user interface layout for OSC source and target "OSC: Send message"

  • #457 Improved dropdown menu for choosing an absolute mode by adding "NOT APPLICABLE" if the mode doesn't make sense under the current conditions

  • Temporarily switched of auto-correction of absolute modes to see if users miss it or we can just throw it out

  • #589 Improved usability by reducing height of mapping panel on Windows and macOS (also vastly improved GUI dialog development tooling to gain more flexibility for GUI modifications)

  • #571 Improved wording of log actions and log messages

  • #583 Improved usability by using text field to enter marker/region position

  • #577 Improved accuracy when using relative mode with continuous target by not exceeding target min/max

  • #188 Improved "Auto-load preset" feature to be more generic. It now works on the current instance FX instead of just on the currently focused FX (allows much more flexible auto-loading)

  • #613 Improved usability by making trigger-like targets controllable with encoders (by default, each encoder increment/decrement will trigger the target)

  • Improved virtual source label in mapping row

  • #394 Improved target "ReaLearn: Load mapping snapshot" to be able to load manually taken mapping snapshots and set default values

  • #619 Improved error reporting if session could not be restored (now logs session JSON)

  • #442 Improved usability by making None the default source and dummy target the default target

  • #589 Improved GUI dimensions on Linux, Windows and macOS

  • #501 Improved virtual feedback message logging by logging them even if no match found

  • #209 Improved bank-based conditional activation by showing value labels of discrete parameters as bank names

  • #569 Improved projection by making it possible to use without saving a controller preset (projection widget settings are now saved together with the ReaLearn instance)

  • Improved UI by adding link to list of tested controllers in help menu

  • Improved UI by refreshing input/output dropdowns on MIDI device changes

  • #619 Fixed backward compatibility to some old presets that use JSON null instead of omitting properties

  • #620 Fixed learning/filtering for Arturia encoders in relative mode

  • #621 Fixed accumulated control and possible errors after rendering

  • #614 Fixed cut-off MIDI device names

  • #615 Fixed error 'Only one of step_size_interval and step_factor_interval can be set' on Lua import

  • #607 Fixed "Paste mappings (replace all in group)" for default group

  • #553 Fixed long-standing serious GUI lags when modifying multiple tracks at once

  • #560 Fixed target incorrect track peaks when using "Track: Peak" target with multi-channel tracks (Thanks a lot to AlbertoV5's contribution!)

  • #582 Fixed missing update when changing FX in FX-related targets

  • #588 Fixed missing text feedback updates when using placeholder target.fx.name and target.fx.index

  • #594 Fixed "channel full" messages on high load (e.g. selecting many tracks at once) and improved initial memory consumption

  • #595 Fixed error when using plug-ins with non-UTF8 names

  • #563 Fixed feedback for virtual controller mappings by sending "Off" when not in use

  • #565 Fixed feedback for virtual controller mappings if they are inactive

  • #566 Fixed missing feedback on activation changes when replacing all parameters

  • #537 Fixed bug that caused enabling/disabling ReaLearn to have no effect when on monitoring FX chain

  • #542 Fixed white background color when using dark SWELL settings on Linux (by not enforcing any background color at all)

  • #358 Fixed bug in target "MIDI: Send message" that made repeated sending of the same value have no effect with some configurations

  • #336 Fixed sometimes missing text feedback updates for clip seek target and some other targets

  • #336 Fixed some potential errors when using "Copy as Lua"

  • #527 Fixed bug when combining conditional activation with single press fire mode (modifier firing unexpectedly)

  • #336 Removed most of the support for the experimental legacy clip targets (replaced with the new clip engine, which is not completely compatible with the experimental legacy clip targets)

2.12.0 (2022-03-21)

  • Internal change: Build with Rust 1.59

  • Internal change: Refactored and modernized HTTP server code, prepared addition of gRPC server (for communication with Playtime 2)

  • #509 Added fine-grained OSC feedback argument mapping

  • #509 Added support for sending colors to TouchOSC (in RRGGBB string format)

  • #532 Added more text properties to target "Marker/region: Go to" (e.g. for displaying name of current region on device)

  • #521 Added new target "FX: Set online/offline"

  • #102 Improved ReaLearn development by adding a fancy architecture documentation

  • #543 Improved ReaLearn Script by making more Lua built-in variables/functions available (only safe ones to prevent execution of malicious code)

  • #504 Improved usability by automatically resending all feedback when MIDI device plugged in (probably works on macOS only at the moment)

  • #150 Improved feedback latency of "FX: Navigate within presets" for plug-ins that report parameter changes when changing presets

  • #492 Improved memory footprint a lot (nobody seems to have noticed it but ReaLearn used enormous amounts of memory per mapping before)

  • #505 Fixed borrow error when virtualizing mappings if that fails for some mappings

  • #506 Fixed Lua import of Lua export of mapping with negative step factor

  • #507 Fixed Lua import of FX chain (ReaLearn didn't respect the FX chain property before in many cases)

  • #464 Fixed unnecessary user prompt when changing preset if no mappings and groups present

  • #512 Fixed display issue when using Mackie LCD source in combination with Mountain Utilities BCManager

  • #513 Fixed feedback when writing send volume automation

  • #486 Fixed "Invalid command ID" error if JSON contains invalid command ID but target type is not "Project: Invoke REAPER action"

  • #535 Fixed blacked out GUI on macOS since in REAPER 6.48 - 6.51

  • #545 Fixed rare PoisonError when loading plug-in

  • #536 Fixed text feedback error when trying to format paramter of FX that's offline

  • #517 Fixed missing Lua import of poll_for_feedback property in target FxParameterValue target

  • #516 Fixed error when pressing save button on non-existing preset (grey out button instead)

  • #498 Fixed "FX: Navigate within presets" target getting stuck at "No preset" for VST 3 plug-ins

2.11.1 (2021-12-22)

  • #448 Added support for textual feedback (usable with OSC String sources and MIDI hardware displays: Mackie, SiniCon)

  • #393 Added comprehensive built-in support for import and export of the all-new ReaLearn Script = Build ReaLearn presets/mappings in Lua! (Attention: Small adjustments to the ReaLearn Script API data structure are to be expected during the 2.11 and 2.12 release cycles!)

  • #394 Added completely new possibility to organize mappings - by tagging them (most new ReaLearn targets support tags to flexibly restrict the mapping scope, you can also search for them by prefixing a search term with a hash character #)

  • #449 Added new target "ReaLearn: Enable/disable instances" for flexibly enabling/disabling complete ReaLearn instances during a performance (great for paging)

  • #438 Added target "ReaLearn: Enable/disable mappings" for flexibly enabling/disabling mappings during a performance (can be used as a more straightforward alternative to conditional activation, especially when it comes to bank/zone switching scenarios)

  • #325 Added target "ReaLearn: Navigate within group" for cycling through mappings in a mapping group (for intuitively defining sequences e.g. for implementing pages, zones etc.; support sequences spanning completely different targets!)

  • #376 Added possibility to control using system-exclusive MIDI messages (by using the existing very flexible "Raw MIDI" source, which only worked for feedback direction so far - now supports learning, value extraction using patterns and logging of incoming messages)

  • #448 Added text and background color support for some MIDI controller displays that have color capabilities (at the moment SiniCon E24 and Launchpad Pro)

  • #454 Added support for Raspberry Pi (Linux armv7 and Linux aarch64)

  • #457 Added new variable 'y_last' in EEL control transformation, which can be used to implement a performance control mode typical for a synth modulation matrix (y = y_last + x * (1 - y_last))

  • #470 Added variable 'selected_track_indexes' array variable to dynamic expressions (making it possible to e.g. control 1st selected track with fader one, 2nd selected track with fader two, etc.)

  • #393 Added new "Track" target which is well-suited as neutral target for getting textual feedback for track properties (but will get more interesting functionality at a later stage, see #228)

  • #62 Added JSON schema of the API data structure (in order to potentially support writing ReaLearn presets/mappings in other languages as well, especially typed ones, e.g. TypeScript)

  • #131 Added header panel context menu action 'Make sources of all main mappings virtual'

  • #178 Added optional track dropdown to "Project: Invoke REAPER action" target (The target makes sure that this track is selected before executing the action. This makes it possible to combine ReaLearn's flexible track selection capabilities with the plethora of REAPER actions that work on the currently selected track.)

  • #280 Added target "Send: Automation mode"

  • #280 Added target "Send: Mono/stereo"

  • #280 Added target "Send: Phase invert/normal"

  • #280 Added target "Track: Phase invert/normal"

  • #382 Added target "Project: Any on (solo/mute/...)"

  • #365 Added "exclusive (on only)" options wherever appropriate in order to easily support exclusive toggle buttons (group interaction "inverse target value", track exclusivity, mapping/instance enable/disable exclusivity)

  • #385 Added support for (N)RPN data increment/decrement messages

  • #437 Added source "ReaLearn instance started" in source category REAPER that fires when ReaLearn is started (can be used to execute an action, restore parameter states or whatever on REAPER startup or project load)

  • #448 Added basic support for displaying scrollable text on the Launchpad Pro (also supports text color)

  • #451 Added <New group> option to "Move to group" context menu actions

  • #475 Added place in Git repository for making unofficial 3rd-party presets available (added 2 unofficial controller presets for BCF2000 and Panorama P6)

  • #479 Added header panel context menu action 'Make targets of listed mappings sticky'

  • #393 Improved "DAW control" main preset (added support for timecode display, time mode cycling, track name and pan display, any-solo, track peak meter, many small improvements, easier to maintain because generated from ReaLearn Script)

  • #393 Improved "Mackie Control" and "iCON Platform M+" controller presets (added support for LCD and timecode display, track peak meter and any-solo button, fixed encoder acceleration behavior, many small improvements, easier to maintain because generated from ReaLearn Script)

  • #393 Improved performance, code complexity and serialization independence of preset dirty checking by using a much simpler method than before (before: comparison of JSON; now: setting dirty flag whenever e.g. a mapping changed)

  • #393 Improved virtual control element naming by increasing maximum length from 16 to 32

  • #393 Improved wording by renaming "Tuning" to "Glue"

  • #394 Improved target "ReaLearn: Load mapping snapshot" by allowing to restrict snapshot loading to mappings with certain tags and activity state

  • #432 Improved auto-load preset functionality to work better with shell plug-ins, e.g. Waves (now by default uses plug-in name instead of file name to distinguish between the single plug-in types; in order for this to take effect, you need to remove each problematic link and reestablish it or edit the link and fill out the FX ID name yourself)

  • #435 Improved projection feedback by sending feedback initially, not just on value changes or on manual request via REAPER action

  • #436 Improved target value entry by providing buttons for trigger- or switch-like targets

  • #452 Improved "Toggle buttons" mode to support exclusive toggle button use cases (if target min is equal to target max, it now toggles between that specific value and zero)

  • #477 Improved <Dynamic> track selector by allowing it to address the master track (if the expression returns value -1)

  • #481 Improved dynamic expressions by letting 'track_selected_index' evaluate to the special variable 'none' if no track is selected, allowing users to choose a suitable fallback in that case

  • #481 Improved dynamic expressions by making 'selected_track_index' and 'this_track_index' support master track (value -1)

  • #481 Improved dynamic expressions by making compartment parameters available as array variable 'p' (now you can write p[0] instead of p1])

  • #481 Improved dynamic expressions by making target inactive if the expression fails (e.g. if an undefined variable is used)

  • Improved Raw MIDI source to control and learn incoming short (non-sys-ex) messages as well

  • Improved documentation of what's special about "MIDI: Send message" target and what limitations it has

  • Improved performance of "MIDI: Send message" target when sending to feedback output by avoiding deallocation in audio thread

  • Improved usability by disabling certain UI elements depending on the selected OSC argument type

  • Improved user guide (structure, headings, table of contents, TouchOSC instructions)

  • #407 Fixed bug that caused project to be marked dirty on load already

  • #482 Fixed bug that caused changes to sometimes not be memorized if ReaLearn is on monitoring FX chain

  • #459 Fixed bug that caused automation to shortly jump back when writing automation via fader touch

  • #466 Fixed severe bug that could cause ReaLearn instances to receive MIDI from wrong input device

  • Fixed bug that caused source takeover between ReaLearn instances with different feedback output devices

2.10.4 (2021-11-01)

  • #466 Fixed severe bug that could cause ReaLearn instances to receive MIDI from wrong input device

  • #459 Fixed bug that caused automation to shortly jump back when writing automation via fader touch

2.10.3 (2021-09-19)

  • #450 Fixed bug in 2.10 that made source min/max not work for MIDI sources

2.10.2 (2021-09-16)

  • #447 Fixed bug in 2.10 that made it impossible to target monitoring FX instances

2.10.1 (2021-09-14)

  • #441 Fixed bug in 2.10 that caused disabling and reenabling ReaLearn FX to stop control

2.10.0 (2021-09-06)

  • #350 Added option "Poll for feedback" (enabled by default) to the few targets for which the REAPER API doesn't provide any value change notification or not in all cases (essentially makes automatic feedback work for all targets, also fixes the issue that switching presets from within a FX UI doesn't resend FX parameter feedback)

  • #348 Added header context menu options to log incoming/outgoing MIDI/OSC messages (great for debugging)

  • #363 Added track selector "All by name" which resolves to many tracks instead of only the first one if the name contains wildcards and multiple tracks match

  • Added mapping row context menu option to log debug info for a single mapping

  • #330 Added new tuning setting "Group interaction" for controlling multiple mappings within the same group at once, in multiple interesting ways

  • #330 Added source category "None", to be used with mappings that are not supposed to be controlled directly but just via "Group interaction"

  • #391 Added support for target value sequences (including ranges, customizable step sizes etc., even supports true relative control!)

  • #411 Added target unit button for switching between 1. native target unit and 2. percentages (chosen unit will be used whenever entering/displaying target values or step sizes, saved per mapping)

  • #424 Added visual mapping (source) match indicator, both in mapping row and mapping panel

  • #423 Added "All by name" FX selector (lets you use wildcards now to resolve to multiple FX, quite useful with the "FX: Enable/disable" target for simulating controller pages)

  • #378 Added possibility to use ReaLearn as global MIDI filter (by making "Let through" checkboxes available even when choosing real hardware MIDI input device, needs REAPER >= v6.36!)

  • #401 Added source "MIDI device changes" in new source category "REAPER" (for reacting to MIDI device plug/unplug events)

  • #386 Added variable selected_track_index for use in dynamic track expression

  • #394 Added a very work-in-progress version of the new "ReaLearn: Load mapping snapshot" target (only restores the initial target values of all instance mappings at the moment but will become much more powerful in future)

  • Internal change: Added and changed code for upcoming "Discrete processing" feature (#184)

  • #370 Added mapping option "Show in projection" (enabled by default)

  • #379 Added controller preset and instructions for "Arturia KeyLab MkII" (thanks to dissofiddle)

  • #367 Improved usability by putting "Send feedback after control" and "Prevent echo feedback" into dropdown (because it doesn't make sense to combine them)

  • #410 Improved versatility of "Make absolute" checkbox by also making it available in "Incremental buttons" mode

  • #409 Improved jump settings by displaying and letting one enter step sizes instead of absolute values (makes much more sense)

  • #429 Improved error handling by logging details when not being able to load a preset

  • #428 Improved error handling by displaying instructions on what to do when encountering a preset saved with a newer version

  • #433 Improved error handling by logging only the first warning message in a sequence of equal warning messages

  • Improved UI semantics by renaming target category "REAPER" to "Real"

  • #427 Improved usability by disallowing addressing FX "By ID" if the track is not sticky (that is, not <This> or addressed "By ID") ... allowing was nonsensical and confusing

  • #425 Improved FX parameter "By position" selector so you can enter the position in a text field (parameter dropdown is now available as selector "By ID")

  • #426 Improved consistency of target label in mapping row (e.g. don't show resolved track/FX/parameter name if selector is not "By ID")

  • #421 Improved usability of target dropdowns by making it possible to change the track/FX selectors while keeping entered values (e.g. having the name always prefilled when switching from "By ID" to "By name")

  • #417 Improved user guide (better table of contents, better quick start, migrated to AsciiDoc)

  • #414 Improved projection by sending projection feedback even if feedback disabled for controller mapping

  • #413 Improved fire mode "After timeout" by making it work in combination with "Press only" button filter (you can now press a button and no matter how long you press it, it will fire after the specified timeout)

  • #395 Improved versatility by guaranteeing mappings within one compartment to be processed in the order of definition (exception: ReaLearn parameters)

  • #387 Improved "MIDI/OSC: Send message" targets by making it work with "Toggle buttons" mode and relative encoders

  • #350 Improved performance for targets that poll for feedback (e.g. "Track: Peak") by processing and sending feedback only if value actually changed

  • #362 Improved reliability by migrating to stable Rust (just an internal change)

  • #350 Fixed "nervous motor faders" issue by not sending batch feedback anymore when starting to play or seeking

  • #366 Fixed predefined "MIDI: Send" target patterns (7-bit patterns reported to be 14-bit-capable)

  • #415 Fixed takeover modes misbehavior in presence of restricted source/target value range

  • #396 Fixed bug that let "Send feedback after control" not send feedback after control in some corner cases

  • #416 Fixed "Last touched" target: Make it work correctly if other FX parameter is currently automated (also improves FX parameter learning in presence of parameter automation)

  • #434 Fixed error "REAPER string should be UTF-8 encoded" with certain FX parameter names

  • #390 Fixed bug that caused "The pipe is being closed" error on some systems when choosing "MIDI: Send message" target

  • #406 Fixed non-reliable dynamic selectors for send, FX and FX parameters (was only working reliably for tracks before)

  • #369 Fixed MiniLab mkII controller preset: Projection feedback for pads works now

  • #332 Fixed confusing logic that caused the preset save button to not be greyed out after making mappings project-independent

  • #405 Fixed lag when sending MIDI messages to FX output (both when letting incoming messages through and when sending them via "MIDI: Send message" target)

  • #388 Fixed bug that caused ReaLearn send targets to forget the kind of send

2.9.1 (2021-05-16)

  • #364 Fixed regression that caused real targets in controller mappings to not work anymore

2.9.0 (2021-05-11)

  • #349 Added possibility to seek within currently visible viewport (by not checking any "Use ..." checkbox in the project seek target)

  • #356 Added feedback-only "Track peak" target to turn your controller into a simple VU meter

  • #329 Added macOS aarch64 build (ARM64), also updated WDL and other used libraries

  • #342 Improved reliability by reducing probability of audio dropouts in certain situations (by deferring all deallocations from real-time threads to main thread; allocations were done in main thread before already)

  • #340 Improved usability by sorting compartment presets by name (independent from file name)

  • Improved maintainability by doing an internal target refactoring (shouldn't cause any changes, just for protocol)

  • #352 Fixed some disappeared tuning options for "Note number" source and all press-only button characters

  • Fixed action invocation mode "Absolute" (broken in some cases since 2.8.0 because upgrade to 14-bit resolution went a bit wrong ...)

  • #360 Fixed bug that caused target option "Scroll mixer" to not be restored correctly

  • #361 Fixed bug that caused "Prevent echo feedback" to not work correctly anymore since v2.8.x

2.8.2 (2021-04-29)

  • Changed license from LGPL-3.0 to GPL-3.0

  • #341 Fixed BorrowError when changing preset if control surface configured in preferences

  • Fixed bug that caused some tuning settings to stay hidden when enabling "Make absolute"

2.8.1 (2021-04-27)

  • #219 Added experimental targets "Clip: Invoke transport action", "Clip: Seek" and "Clip: Volume"

  • #212 Added new FX instance selector "Dynamic"

  • #213 Added new FX parameter selectors "Dynamic" and "By name"

  • #214 Added new send/receive/output selectors "Dynamic", "By ID" (source/destination track ID) and "By name"

  • #72 Added option to use track receives (change of perspective) and hardware output sends instead of track sends only

  • #217 Added possibility to use wildcards (* and ?) in all name selectors to match only parts of names

  • #166 Added "Fire after timeout" mode for button presses

  • #32 Added "Fire after timeout, keep firing" mode for button presses (turbo mode!)

  • #223 Added "Seek" target (including feedback on beat changes or in high resolution!)

  • #235 Added support for showing current target values in projection view (= "Projection feedback", needs latest version of the ReaLearn Companion app to work)

  • #12 Added takeover modes "Parallel" and "Catch up" (renamed existing takeover modes to "Pick up" and "Long time no see")

  • #186 Added FX selector <This> for targeting the own ReaLearn instance (good for using conditional activation and <Dynamic> in reusable presets)

  • #121 Added copy/paste of mappings or even just sources/modes/targets (also across compartments and instances)

  • #157 Added copy/paste of the complete filtered mapping list (e.g. to copy/paste whole compartments, groups or search results)

  • #244 Added possibility to use names for virtual control elements instead of numbers

  • #246 Added quick start section at the top of the user guide

  • #236 Added FAQ section to the user guide

  • #231 Added mapping group feature to controller compartment (was previously available in main compartment only)

  • #231 Added conditional activation to controller compartment (was previously available in main compartment only)

  • #231 Added 100 more freely assignable VST parameters to ReaLearn (now we have 200 parameters in total divided into the already existing 100 main compartment parameters and 100 new controller compartment parameters)

  • #209 Added possibility to customize parameter names via header panel context menu

  • #227 Added ability for "Auto-load preset: Depending on focused FX" instances to suspend other instances that share the same device (with this, you can easily let your controller control the currently focused FX but fall back to your usual controls when it's closed)

  • #249 Added ability that multiple instances work hand in hand when it comes to feedback (As long as 2 instances don't actively feedback to more than one control element at once, everything will be fine and should work just as with conditional activation within 1 instance.)

  • #264 Added new targets "FX open" (for opening/closing a specific FX via button) and "FX navigate" (for navigating with prev/next buttons or encoders within FX chain)

  • #261 Added new targets "Track automation mode" and "Automation mode override"

  • #190 Added new target "Track show/hide"

  • #262 Added new transport actions "Pause" and "Stop" to "Transport target" (for more fine-grained feedback)

  • #260 Added checkboxes "Scroll TCP" and "Scroll mixer" to targets "Selected track" and "Track selection"

  • #215 Added checkboxes "Set loop points" and "Set time selection" to target "Go to region"

  • #259 Added "Paste mappings (replace all in group)" to header context menu

  • #226 Added "FX-to-preset links" to header context menu for better management and for making it possible to map multiple plug-ins to the same preset

  • #226 Added possibility to use plug-in file name wildcards (* and ?) when linking an FX to a preset (another way to map multiple plug-ins to the same preset)

  • #269 Added new source character "Toggle button" as a workaround for hardware buttons that can't be configured to act as momentary buttons (should usually be avoided; behavior is that it always sends 1 even when 0 is received)

  • #270 Added new fire modes "Single press" and "Double press" (can now distinguish between single press, double press and long press)

  • #220 Added possibility to use preset name in addition to plug-in name when creating preset links for the "Auto-load preset" feature (allows you to load a different ReaLearn main preset when the preset of the focused FX changes)

  • #109 Added ability to correctly switch feedback when enabling/disabling ReaLearn instances that talk to the same control elements (uses source-takeover mechanism)

  • #278 Added possibility to easily react to button press-down only and ignore button release (without affecting feedback)

  • #129 Added possibility to easily react to encoder increments or decrements only

  • #279 Added possibility to let the target track depend on the current position of this ReaLearn track by making variable this_track_index available in the <Dynamic> track expression

  • #283 Added support for keeping control/feedback working even when switching to other project tab (with exception of automation writing, "Project: Set playrate" target and the smooth region seeking part of "Marker/region: Go to" target)

  • #282 Added possibility to enforce "Rotate" already in a virtual controller mapping

  • #306 Added feedback-only "Script" MIDI source for making LCD support possible (lets you write EEL scripts that encode the target value as raw MIDI message in any imaginable way)

  • #256 Added library of Mackie-inspired virtual control element names and a convenient picker

  • #120 Added capability for automatic naming of mappings based on its target - kicks in when clearing the custom name

  • #120 Added right-click menu action to auto-name listed mappings (clearing all names)

  • #297 Added main preset "DAW Control" to ReaPack repository and documented it in the user guide in the new "Preset" section

  • #297 Added user guide entry for controller "Behringer X-Touch One"

  • Added support for wildcards in search expressions

  • #233 Added context-sensitive help section to mapping panel which explains most of the tuning options (for each kind of source separately)

  • #6 Added target "MIDI: Send message"

  • #323 Added target "OSC: Send message"

  • #4 Added new track selector "All selected" to make track targets (NOT FX and send targets) work on all selected tracks

  • #322 Added right-click menu action "Move listed mappings to group"

  • #231 Improved compartment presets by making them save/restore the customized compartment parameter names as well

  • Improved feedback for controller mappings with virtual targets (enabling it again will restore feedback, that was previously not the case)

  • #267 Improved understandability by renaming "Program" to "Bank" in conditional activation

  • #271 Improved usability by renaming and reordering targets, also introduced additional target hint label

  • #277 Improved "Project: Invoke transport action" target by making "Play/stop" and "Play/pause" retriggerable

  • #296 Improved user interface by displaying helpful text and button if compartment, group or filtered list empty

  • #291 Improved user interface by moving "Reload all" to the header right-click context menu as "Reload all presets from disk"

  • #291 Improved user interface by displaying mapping compartments as radio buttons

  • #290 Improved user interface by hiding "Let through" options when input is not <FX input> (change in behavior: now it will always let through FX input events in that case)

  • #286 Improved user interface by marking "Toggle buttons" mode as invalid for virtual controller mappings

  • #269 Improved versatility by making "Character" dropdown available even for 14-bit sources (both (N)RPN and CC)

  • #256 Improved controller presets "Mackie Control" and "iCON Platform M+" by using virtual control element names of the new "DAW" domain (major version bump, breaking change ... but no worries, your existing projects, FX chains and track templates will not be changed unless you explicitly reload the preset within ReaLearn)

  • #301 Improved usability by displaying mapping group name on right when showing mappings in all groups

  • Improved "Duplicate" by getting rid of the annoying "Copy of ..." prefix

  • #233 Improved usability by hiding mapping tuning options which are not relevant at all in the current context

  • #300 Improved user friendliness by raising step size max to 5% and speed max to 5x (in order to make it more obvious to new users that ReaLearn supports encoder acceleration and velocity-sensitive buttons)

  • #307 Improved usability by removing the UI difference between numbered and named virtual control elements (internally numbers are still treated a bit differently, but on the surface it's the same now)

  • Improved usability by explicitly indicating when target is currently inactive

  • Improved naming by renaming "Rotate" to "Wrap" and "Move instance to upper floor" to "Make instance superior"

  • #154 Improved Midi Fighter Twister user guide entry by explaining how to use encoder acceleration and by linking to ReaLearn-compatible MFT Color Designer web app

  • #248 Improved Midi Fighter Twister controller presets by making it react to encoder acceleration if configured in MF utility (also use named virtual control IDs for side buttons)

  • #326 Improved preset behavior by automatically resetting all compartment parameters to zero when loading a compartment preset

  • #324 Improved global "Find first mapping by source" REAPER action by taking mapping activation status into account

  • #218 Fixed error when controlling "Last touched" target after the last touched target is gone (e.g. after track deleted)

  • #208 Fixed too early rotation when using "Incremental buttons" in combination with "Rotate"

  • #225 Fixed bug in "Go to marger/region" target that caused markers/regions to be triggered even on button release

  • #237 Fixed idle CPU usage when having OSC feedback enabled for at least one OSC device (was quite high)

  • #234 Fixed channel "Full" error when invoking lots of actions in a small amount of time

  • #247 Fixed possible "unwrap" error with certain mapping tuning settings, e.g. jump and step size

  • Fixed possible "borrow" error when using FX parameter target with own ReaLearn instance

  • #263 Fixed feedback issues due to numerical inaccuracies (especially useful for radio-button-like feedback from discrete target values)

  • #265 Fixed "FX chain chunk not found" error when on monitoring FX and "Auto-load preset" on

  • #249 Fixed sometimes missing feedback on target activation changes (e.g. when "Track must be selected" is used)

  • #276 Fixed <Dynamic> expression evaluation by doing rounding (was sometimes leading to unexpected results because decimal digits were just being cut off)

  • #300 Fixed cropped "Min" labels on macOS

  • Fixed little GUI lag when selecting control element index for virtual targets

  • #310 Fixed bug on macOS which caused text fields not to update correctly if still focused

  • #337 Fixed "BorrowMut" error on macOS when doing things while text field still focused

  • #331 Fixed bug that caused "Last touched" target to not respond right after preset/project loading

2.7.1 (2021-03-09)

  • #160 Added new track type "Dynamic" (allows to calculate a track number depending on ReaLearn's internal parameter values)

  • #160 Improved target track picker GUI by making it easier to create ReaLearn presets that are going to be used across different projects (e.g. "By name" now lets you enter a string as one would expect)

  • #160 Improved performance by trying to not send too much unnecessary feedback when mapping or mapping target activation states change

  • #210 Improved handling of REAPER's "Audio device closed" state (in ReaLearn < 2.5.0 being in that state for a long time could have led to slow memory exhaustion, in ReaLearn < 2.7.0 it would eventually lead to an error message "Full" instead - which is already better, and in 2.7.0 it's handled as it probably should)

  • #207 Fixed error message complaining about negative positions when using count-in and sometimes when playing from the very project start (introduced in 2.6.0)

  • Improved usability by not intentionally generating a backtrace when pressing "Log debug info" (that caused confusion)

  • Improved usability by reducing likelihood for audio dropouts by avoiding allocation in real-time thread when using very many mappings (probably premature optimization)

  • Fixed another possible error message when closing a project while ReaLearn is open

2.6.0 (2021-03-07)

  • #5 Added experimental and feedback-enabled (!) "Go to marker/region" target with smooth seek for regions

  • #198 Added very flexible feedback-only "Raw MIDI" source in order to support feedback on controllers whose LEDs etc. can only be controlled via system-exclusive MIDI messages (e.g. Arturia MiniLab mkII)

  • Added user guide entry and controller preset for Arturia MiniLab mkII (pad feedback now works thanks to ReaLearn's new sys-ex support!)

  • Added user guide entry for OSC/PILOT

  • #197 Improved usability of min/max text fields on Windows and macOS by changing the value (and correcting the other value) not before leaving the field instead of immediately (the behavior before that was downright annoying as you can see here)

  • #113 Improved editing of advanced mapping settings by opening a dedicated small edit window with instant error checking (instead of just opening the system text editor, which sometimes doesn't work)

  • #201 Fixed possible "Full" error message when having projects with very many tracks

  • #199 Fixed possible error message with "Master tempo" target when mapping panel open

2.5.0 (2021-03-03)

  • #113 Added foundation for setting advanced aspects of mappings via textual configuration (accessible via new mapping panel button "Advanced settings")

  • #113 Added foundation for using very device-specific features by allowing to send a bunch of raw MIDI data (including SysEx!) on mapping activation/deactivation (see user guide section "Advanced settings" for details)

  • #196 Added option "Can deal with OSC bundles" to OSC device popup menu which can be unticked in order to achieve compatibility with devices not supporting them (e.g. Behringer mixers)

  • Added user guide entries and controller presets for PreSonus FaderPort 8 and FaderPort Classic

  • #182 Improved reliability by avoiding memory exhaustion in the presence of potential programming errors (internally use bounded channels instead of unbounded one)

  • Improved user guide and projection instructions by explaining how to open a context menu

  • #193 Fixed possible folder overflow with the "Exclusive: Within folder" setting introduced in the previous release

  • #185 Fixed non-occurring mapping row target label updates when track list changes

  • #194 Fixed sometimes non-arriving MIDI feedback on project load

2.4.0 (2021-02-26)

  • #156 Added "Exclusive" dropdown to all "track property on/off"-style targets (arm, selection, mute, solo, fx all enable, automation touch state) which even allows "Exclusive within folder" behavior (my personal favorite)

  • #147 Added "Automation touch state" target in order to support "Touch" automation mode for volume, pan and width envelopes (e.g. with touch-sensitive faders or push encoders)

  • #47 Added option "Behavior" for "Track solo" target, start using the routing-friendly "Solo in front" behavior by default

  • #176 Added REAPER action "ReaLearn: Send feedback for all instances" (useful mainly for debugging purposes because ReaLearn usually sends feedback automatically)

  • #162 Improved "Track solo" target by making it work with "Options → Solo in front"

  • #176 Improved usability by clearing feedback (switch off lights or turn down motorized faders) when closing ReaLearn instance or REAPER project

  • #171 Improved "Track mute" target by making it work reliably also on master track and by making feedback from automation work

  • #167 Improved usability by disabling learning of "Track selection" target if REAPER preference "Mouse click on volume/pan faders and track buttons changes track selection" enabled (in order to avoid false positives, preference change respected after REAPER restart)

  • #170 Improved usability by making "Master tempo" target uneligible as "Last touched" target and for learning in general (there were too many false positives and it could get annoying at times, just select the target manually in the dropdown to use it)

  • #165 Improved usability by letting the user confirm before globally removing an OSC device

  • #181 Improved usability by not firing immediately when changing the encoder turning direction while using a negative "Speed" setting (that was annoying and could result in sudden unwanted parameter changes)

  • #177 Improved usability by not annoying user with error messages when controlling just because they use some setting that doesn't make sense (such as controlling relative targets with absolute messages)

  • Improved usability by clearing feedback of the previous source if a mapping source is changed

  • #168 Fixed non-working automation writing for "Track width" target when controlled via relative encoder

  • #172 Fixed often missing initial feedback for virtual controller mappings (LEDs were sometimes not updated before interacting with the project, e.g. by pressing play)

  • #177 Fixed possible "assertion failed: 0.0 <= normalized_value || normalized_value.is_nan()" error with volume targets

  • #179 Fixed recent bug that caused "Track selection" target to be learned with wrong track (the previously selected one instead of the newly selected)

  • #180 Fixed recent bug that caused wrong "Selected track" target feedback

2.3.2 (2021-02-23)

  • Improved usability by vastly increasing OSC feedback performance ... much smoother now (MIDI feedback has been reworked as well and should be more snappy and accurate, too)

2.3.1 (2021-02-22)

  • Fixed non-visible "Link current preset to FX ..." context menu entry

2.3.0 (2021-02-21)

  • #153 Added experimental OSC support (supports control, feedback, learning, virtual controls, presets, basically everything that's possible with MIDI sources, doesn't yet support textual feedback - e.g. control element labels)

2.2.0 (2021-02-16)

  • #147 Added experimental "Load FX snapshot" target

  • #130 Added experimental "Last touched" target

  • #149 Added section about ReaLearn Companion app section to user guide

  • #143 Fixed "Prevent echo feedback" by increasing echo detection threshold duration

  • #146 Fixed "Called Option::unwrap() on a None value`" error (could occur with large track/FX chunks)

2.1.0 (2021-02-13)

  • #142 Added "Track width" target (for stereo pan mode)

  • #141 Added "Track send mute" target (feedback not possible at the moment due to REAPER limitations)

  • #140 Added "X" button next to search field for clearing it

  • #137 Improved user guide by adding "Auto-load preset" tutorial

  • #139 Fixed "Couldn't parse VST tag line" error when using "Auto-load preset" (could happen if you used FX renaming)

  • #136 Fixed colors when using custom Windows theme that has rather dark background color

  • #138 Fixed colors when using macOS dark mode

  • #143 Fixed possible "BorrowError" when saving presets

  • #144 Fixed possible "Project not available" error when closing project while mapping panel still open

2.0.1 (2021-02-10)

  • #29 Added controller mapping feature (possibility to define controller-specific mappings, virtual sources and virtual targets)

  • #29 Added a bunch of controller presets

  • #7 Added possibility to refer to a track via its name or position (as an alternative to the default of using its unique and stable ID) ← That's called track anchors, a powerful addition, if you ask me!

  • #40 Added controller projection feature (by using the new ReaLearn Companion app)

  • Added indication of scroll position and number of mappings

  • #33 Added possibility to let unmatched FX input MIDI events through even when using hardware input (the checkbox isn't greyed out anymore)

  • #74 Added support for main presets (analogously to controller presets)

  • #68 Added batch-learning of multiple mappings (new button "Learn many")

  • #67 Added FX anchors (analogously to track anchors)

  • #66 Added new target FX option "<Focused>" (analogously to track "<Selected>")

  • #77 Added preset auto-loading depending on focused FX (!)

  • #85 Added possibility to assign mappings to different groups and set activation condition and control/feedback enable state for each group

  • #73 Added limited MIDI feedback support for MIDI CC actions (requires REAPER >= 6.20)

  • #79 Added possibility again to enter values > 100x in Speed text field (useful e.g. when using relative encoders with some NI plug-ins that report continuous parameters with step sizes that are very low)

  • #80 Added performance measuring of ReaLearn control surface methods (including exposing metrics in Prometheus format)

  • #104 Added possibility to use preset "Reset to factory default" to clear all settings, groups and mappings (without changing the session ID)

  • #115 Added user guide sections "Tested controllers" and "Tutorials"

  • #123 Added experimental new option 'Make absolute' in order to convert relative to absolute values (lets you use EEL control transformation with encoders)

  • #125 Added powerful REAPER actions for learning and finding mappings without opening ReaLearn

  • #87 Improved source character guessing (yields best results when turning clockwise!)

  • #86 Improved learning of transport buttons (now prefers ReaLearn's built-in transport target over the corresponding REAPER actions)

  • #88 Improved usability by automatically clearing filters and search expression when adding a mapping (to make sure it's shown)

  • #75 Improved preset usability by asking user whether to automatically convert project-anchored targets to project-independent ones

  • #70 Improved usability by scrolling to newly added/duplicated mapping if necessary

  • Improved usability by rethinking the mapping mode concept (The mapping window section is now called "Tuning" instead of "Mode" because a mapping can now cope with both relative and absolute source values, no matter the mode! It just depends on whatever value type the source emits - relative or absolute values. From now on, the "Mode" just describes how to interpret incoming absolute values. This is a "mostly" backward-compatible change since it changes only behavior of mappings that didn't have an effect anyway till now because source value type and mode didn't match.)

  • #38 Improved usability by indicating mappings that are "off" by greying them out

  • #37 Improved resource usage by greatly reducing project file size, undo entry size and preset size

  • Improve error logging (makes it easier to map debug symbols, on Windows at least)

  • #56 Improved usability by making most confirmation and alert dialogs modal with respect to the ReaLearn window itself, not REAPER

  • #64 Improved accessibility by fixing tab order, default buttons and initial focus (affects mapping panel only because REAPER doesn't seem to support tab control in the actual main FX window)

  • #43 Improved consistency by letting program numbers start at 0 (just a visual change)

  • #60 Improved versatility by increasing number of conditional-activation parameters to 100

  • #61 Improved quality assurance by adding a few integration tests (new developer action)

  • #57 Improved usability by making online and offline user guide accessible via context menu (plus some other links)

  • Improved usability by also stopping source filter learning when clearing the source filter

  • #69 Improved usability disabling all control while learning a target (no more undesired target learning by moving an already assigned control, at least within one ReaLearn instance)

  • #99 Improved usability by including source character in mapping row source label (makes it easier to spot character guessing issues)

  • #96 Improved (N)RPN scanning to support popular controllers (such as Behringer BCR2000), prefer value-MSB-first now

  • #101 Improved user interface by making mapping rows less grey and adding some horizontal rules

  • #114 Improved usability by making "Absolute" the default invocation mode for actions, was "Trigger" before (this change could break some action mappings done with previous 1.12.0 prereleases)

  • #106 Improved "Length" sliders to work for "Incremental buttons" mode, too

  • #119 Improved usability by always sorting groups alphabetically

  • #116 Improved usage of ReaLearn as monitoring FX by making parameter feedback and learning work (usually, REAPER extensions don't get notified of anything happening on the monitoring FX chain, but at least for ReaLearn parameter changes I managed to create a workaround ... which is good news especially for global conditional activation use cases)

  • Improved user guide (related to keyboard input, monitoring FX and limitations of monitoring FX)

  • #117 Improved safety by warning whenever loading something made in a newer ReaLearn version than the current one (version number gets part of the preset data, that also paves the way for preset migration)

  • #124 Improved usability by preferring position anchors over ID anchors when learning from a ReaLearn instance that is on the monitoring FX chain

  • #122 Improved wording related to encoders, renamed internal named parameter for setting state to 'set-state'

  • Improved usability by making ID now really the new default FX anchor, not 'ID or position'

  • Improved awareness by changing the prime EEL control transformation example into an actually very useful one: a curve

  • #127 Improved usability by indicating if MIDI input or output device disabled in REAPER preferences

  • #126 Improved behavior by disabling control (not just feedback) for disabled ReaLearn FX instances (before this, it still kept controlling when a device was selected as 'MIDI control input')

  • #134 Improved projection QR code detection rate by greatly simplifying it for now (doesn't carry certificate content anymore, which was only useful when using web-based companion app from mobile device, which is an edge case, especially considering that an iOS app is on the way)

  • #135 Improved usability by automatically switch off source/target filter learning when doing certain UI interactions

  • Fixed nonsense learning of virtual sources in controller mappings compartment (that was really bad for batch learning control elements)

  • Fixed missing mapping lanel UI update when learning other parameter of same FX

  • #132 Fixed 'Solo' target learning (was always resulting in master track)

  • #128 Fixed bug that caused ReaLearn-monitoring-FX controlled targets to become sticky when switching between project tabs (not updating correctly)

  • Fixed error message when pressing space bar in an empty ReaLearn instance

  • #103 Fixed possible "Raw pointer..." error when using track selection targets

  • #105 Fixed possible "couldn't get FX param value..." error when using FX parameter target

  • #110 Fixed action invocation mode "trigger", which sometimes wouldn't fire

  • #111 Fixed misleading labels in mapping panel

  • #111 Fixed feedback when reverse enabled and target range non-symmetric

  • #112 Fixed bug with broken plug-ins that report parameter as discrete but with a nonsensical step size of zero

  • #97 Fixed broken arrow symbols on Windows 7 (display rectangles instead of arrows)

  • #98 Fixed "Couldn't get preset count" error

  • #95 Fixed (N)RPN learning and consumption check

  • #94 Fixed wrong info that feedback not working for (N)RPN (it works!)

  • #93 Fixed "Track send pan" target (was confused with "Track send volume")

  • #71 Fixed bug that caused overscrolling when clicking on "Find in mapping list" button

  • #36 Fixed inconsistent feedback processing order (changes behavior of existing feedback transformation formulas if used in combination with source or target interval restrictions, so they might need some adjustment!)

  • #30 Fixed error when choosing non-MSB controller for 14-bit CC sources (now silently converted to MSB controller)

  • #58 Fixed "Find in mapping list" not switching mapping compartment

  • #39 Fixed bug that caused initial parameter values to be sometimes ignored in conditional activation

  • #50 Fixed scrolling issues when mapping list filtered

  • #46 Fixed error message when trying to pick action

  • #35 Fixed "is not a valid unit value" error (happened when reading volume values above the fader limit set in REAPER preferences)

  • #54 Fixed "negative MIDI frame offset" error (negative offsets are interpreted as zero now)

  • #55 Fixed "Message: assertion failed: Bpm::is_valid(value)" error (could happen when using controllers that send MIDI clock)

  • #53 Fixed "Message: -1 is not a valid value" error (caused by unexpected FX parameter change value)

  • #31 Fixed Windows 7 character issues in dropdown menus

  • #23 Fixed error message if track could not be found

  • #59 Fixed REAPER crash when using automation on ReaLearn conditional-activation parameters

  • #78 Fixed error when encountering MIDI device name with incorrectly encoded special characters

  • #82 Fixed error when encountering invalid MIDI messages (they are now ignored)

  • #84 Fixed bug that caused ReaLearn to stop working when project paused and ReaLearn track not armed

  • #92 Fixed auto correction for "Send feedback only if track armed"

  • #100 Fixed bug that could cause target value to get stuck if step size too small when it could be avoided

  • Fixed "BorrowMut" error and potential race conditions when "Allow live FX multiprocessing" enabled

  • #83 Fixed segmentation fault on Linux when loading ReaLearn after plug-in scan

  • #117 Fixed wrong reverse behavior in 'Normal' mode when target value range is non-symmetric (old presets will keep their wrong behavior in order to not break existing projects)

1.11.0 (2020-09-16)

  • #11 Added feature 'conditional activation' for (de)activating mappings based on parameter values

  • #8 Added transport target with proper feedback (play/pause, play/stop, record, repeat)

  • #20 Added option to send feedback after each control cycle

  • #27 Added possibility to further specify "Out of range" behavior (the new option "Min" is especially useful for mappings where a button sets a target to a specific constant value)

  • #26 Improved installation instructions and added controller tips to the documentation

  • #158 Improved usability by showing hierarchical folder structure in track dropdown

  • #19 Improved usability by asking user for confirmation before removing a mapping

  • #19 Improved usability by simplifying mapping window title

  • #28 Fixed strange and unreliable feedback if target min is equal to target max

  • #24 Fixed bug that caused "FX must have focus" to not work at all with floating windows and work incorrectly when in FX chain

  • Fixed action targets reporting wrong character, leading to wrong auto correction behavior

1.10.0 (2020-08-27)

  • #193 Added Linux support

  • #152 Added target 'Selected track' for navigating within track list

  • #71 Added mapping name search

  • #179 Added support for non-latin characters (in mapping names and when showing track names)

  • #177 Added support for using ReaLearn as monitoring FX

  • #178 Added version and build information to UI

  • Added possibility to quickly check what a certain knob/fader/encoder/switch actually controls, without actually changing target parameters (implemented by simply making source filter run until pressing 'Stop' and by not filtering unknown sources)

  • Added feedback for target 'Track FX preset'

  • Added possibility for relative mode to throttle/slow-down relative increments (the 'step count' sliders are now called 'speed', negative values represent throttling)

  • Added possibility for absolute and toggle modes to distinguish between short/long button presses ('Length' slider allows you to define press durations on millisecond granularity - obviously works with momentary switches only)

  • #13 Added mapping option 'Prevent echo feedback' (good for motorized faders that don't like feedback while being moved)

  • Added target 'Track FX all enable' (without feedback)

  • #1 Added feedback transformation for relative and toggle mode, too (because feedback is always absolute)

  • #3 Added possibility to access current target value in control transformation (initial value of y)

  • Added feedback reset logic when source not in use anymore (e.g. sends 'zero' feedback value if mapping removed)

  • Added developer action for resolving backtraces that just contain addresses (also stripped debug symbols from Linux release artifact)

  • #181 Added option to send MIDI feedback to 'FX output' instead of directly to MIDI hardware device

  • Added button 'Log debug info' for printing some debug information on a terminal (not the REAPER console!)

  • Improved error handling: Some possible smaller errors/misbehaviors where totally ignored in previous versions and therefore might have gone unnoticed. In this version, ReaLearn will print a bug report if it detects such a smaller error, exactly like it already did before with more serious errors. (ReaLearn follows a fail-fast approach in order to detect errors early instead of letting them introduce subtle and hard-to-analyze bugs.)

  • #2 Improved toggle mode by letting Source Min/Max clamp feedback value just like in other modes

  • Improved 'Log debug info' by logging to REAPER console instead of terminal

  • Improved behavior when using 'Learn source filter': Also indicate if a source has been touched that is not used in any mapping (by showing an empty mapping list)

  • #42 Improved UI for action target (now uses REAPER's built-in action picker)

  • #182 Improved duplicate naming ('Copy of ...')

  • #156 Improved UI by immediately reflecting track name changes

  • #146 Improved UI by using actual arrow symbols (macOS and Windows only)

  • Improved UI by having better error window if clipboard import is wrong

  • Improved UI by instantly updating mapping name and all other values changed via text input field while typing

  • Improved feedback by keeping it more in sync with the mapping settings (e.g. also updates while changing target range)

  • Improved relative mode by giving the 'step size' / 'step count' (now 'speed') controls an overhaul

  • Improved usability by not letting target fields forget their values when switching type

  • Included more diagnostic information in error log messages (debug info such as line numbers)

  • Made a complete rewrite in Rust programming language

  • Published as open source (available on GitHub)

  • #8 Fixed logic error after learning target on master track

  • #9 Fixed crashes on logic errors while executing VST plug-in callbacks. Now it just reports an error message instead of aborting REAPER.

  • #208 Fixed non-working 'Track must be selected' target condition

  • Fixed non-moving slider when slider currently focused

  • #206 Fixed some FX parameter target bugs which caused ReaLearn to error on particular values

  • Fixed another possible 'ghost session' bug (ReaLearn sticking around although already unloaded)

  • Fixed non-working FX parameter selection

  • Fixed sometimes not working FX parameter learn

  • Fixed possible missing learn/feedback notification right after startup

  • Fixed possible error message when using -inf dB

  • Fixed bug that caused ReaLearn instance to stay around as a ghost even if already removed. That caused surprising issues e.g. complaints about a target parameter not being found which was not used at all.

  • #205 Fixed continuous MIDI feedback of automated FX parameter values, track send volume and track send pan. Now fires on real value changes only. It’s still possible that ReaLearn sends more feedback than necessary when having automation. This can happen if there are value changes but they are so small that they don’t have any effect on the feedback MIDI value (because MIDI feedback values have a very low resolution).)

  • Fixed some random error messages when using FX parameter target with parameters that report step sizes

  • #189 Fixed crashes when removing plug-ins

  • #197 Fixed bug that caused feedback and learn not working with master track

1.7.1 (2018-08-08)

  • #159 Added possibility to use ReaLearn on master track

  • #160 Improved 'FX must have focus' by sending feedback when FX gets focus

1.7.0 (2018-08-06)

  • #134 Added possibility to select '<Any>' as source note, CC and channel

  • #157 Improved usability by always displaying track/FX/parameter positions and MIDI device IDs in labels and dropdowns

  • #150 Improved usability by ignoring FX reordering and removal whenever '<Selected>' is chosen for track targets. That just makes more sense. So there's not such a tight connection to the FX anymore in this case. It will use whatever FX is at the position and if there is none it won't do anything.

  • #139 Improved usability by automatically scrolling mixer when selecting track via 'Track selection' target

  • #149 Improved usability by also displaying disconnected MIDI devices in REAPER >= 5.94 (if you think there are so many now that it gets confusing, it's time to clean up in REAPER => Preferences => Audio => MIDI Devices by using the 'Forget device' operation ;)

  • #140 Improved processing by completely disabling feedback and control (even if coming from direct hardware device) whenever ReaLearn FX is disabled

  • #143 Improved processing by disabling 'MIDI thru' if MIDI control input comes directly from a hardware device (so ReaLearn will now only forward MIDI messages to its FX output if they come from its FX input)

  • #147 Improved processing by reliably detecting if FX change occurred on input FX chain or normal FX chain for REAPER >= 5.95pre1

  • #148 Improved performance in some cases by using new function in REAPER >= 5.95pre1 to look up the project for a given track

  • #155 Improved performance in some cases by never creating an undo point when arming/disarming ReaLearn track

  • #133 Improved usability by adding a remark to targets 'Track FX enable' and 'Track mute' that they don't provide feedback from automation changes (currently not possible, capability needs to be added on REAPER side)

  • #151 Fixed non-working relative mode for probably most JS FX, also fixed detection of discrete FX parameters

  • #142 Fixed crash when using a fader after having removed a ReaLearn instance with direct hardware device input

  • #144 Fixed OS X crash related to MIDI device API changes in REAPER 5.94 (also fixed in REAPER 5.941)

  • #145 Fixed confusing OS X MIDI device dropdown behavior if device is not known by explicitly displaying a temporary entry '<Unknown>' instead of just displaying the first entry in the dropdown

1.6.1 (2018-07-06)

  • #128 Added possibility to apply a track target to the currently selected track (via new track option '<Selected>'; also renamed '<Current>' to '<This>' to make more clear what is meant)

  • #129 Added possibility to receive MIDI directly from device (via 'MIDI control input' dropdown, good for example if you want to use the track input for something else such as recording audio)

  • #130 Improved mapping window size and layout so that things don't get cut off

  • #131 Improved usability by graying out 'Send feedback only if track armed' if ReaLearn is on input FX chain (because then feedback is always only sent if track armed)

1.6.0 (2018-07-05)

  • #122 Added 'Track FX preset' target for navigating between FX presets (no value feedback because REAPER's API doesn't notify extensions about preset changes)

  • #121 Added 'Track FX enable' target for enabling/disabling track FX

  • #123 Added possibility to change mapping name

  • #124 Added source min/max also to toggle mode (used for feedback only)

  • #125 Improved track arm, mute, select and solo target types by triggering them as soon source value > source min value (doesn't have to be source max value anymore)

  • #126 Improved mode reset and auto-detection for targets with discrete values by choosing sensitive default values for step sizes

  • #127 Fixed rotate option and made it more simple/predictable

1.5.3 (2018-06-26)

  • #119 Added playrate target

  • #120 Fixed track selection for track arm target

  • #118 Fixed non-working ReaLearn on 32-bit REAPER installations

1.5.2 (2018-06-21)

  • #115 Improved control performance (significant improvement, ReaLearn shouldn't cause any crackling anymore when doing fast fader movements)

  • #116 Improved feedback performance

  • #114 Improved performance on load and when reordering FX

1.5.1 (2018-06-15)

  • #109 Fixed showstopper crash related to orphan mappings

  • #108 Fixed potential crash when closing project or exiting REAPER

  • #112 Fixed crash and issues with current track functionality in some situations (e.g. when instantiating track templates containing both ReaLearn and Kontakt in a second project tab)

  • #111 Fixed 'Learn source for last touched target' action so it supports the recent new target types

  • #110 Fixed mute and solo targets so value changes also inform other control surfaces

1.5.0 (2018-06-11)

  • #67 Added possibility to export and import all ReaLearn settings to and from clipboard (e.g. useful for exchanging presets and doing batch modifications of ReaLearn settings via text editor)

  • #16 Added support for transforming incoming (control) and outgoing (feedback) values in absolute mode via mathematical functions (EEL is used, the same language which REAPER uses for JS effects - that let's you do all kind of interesting things, is more usable than putting a JS MIDI effect in front of ReaLearn and it gives you the complete target parameter precision because you deal with 64-bit floating point numbers instead of the usual 7-bit MIDI message precision; x is the incoming control value, y is the target value, both are numbers between 0 and 1; for example a control transformation 'y = 1 - x' creates a reverse effect)

  • #101 Added master tempo target (it was possible before to change REAPER tempo by using an action target but you didn't get feedback and BPM rounding)

  • #73 Added track selection target (you can also select a track exclusively)

  • #54 Added mute and solo track targets

  • #86 Added track send pan target

  • #100 Added 'MIDI clock transport' source (for receiving play/continue/stop messages directly from MIDI hardware inputs; they can be mapped to transport actions in REAPER in order to make REAPER a MIDI clock slave regarding transport control)

  • #100 Added very experimental 'MIDI clock tempo' source (if you map this to the new 'Master tempo' target, you can turn REAPER into a MIDI clock slave regarding project tempo; but don't expect too much, the resulting tempo is currently unstable; IMHO a much better method if you want REAPER tempo to reflect the tempo of e.g. Ableton Live, is to create a ReaLearn mapping with a 'CC value' source and a 'Master tempo' target with target min = 73 bpm and max = 200 bpm and to let Ableton Live send tempo feedback using the same CC and tempo range ... this combined with native REAPER SPP sync and you have instant tempo and song position changes; whereas MIDI clock tempo sync has an inherent delay due to its nature)

  • #77 Added track target option 'Track must be selected'

  • #26 Added absolute mode option 'Slowly approach if jump too big (scale mode)' (of course only has an effect if max jump is small enough)

  • #102 Added absolute mode option 'Min jump' to also let users specify a minimum parameter jump, not only a maximum one

  • #101 Added absolute mode option 'Round target value' for supported targets (currently only 'Master tempo', in order to round to integer BPM values)

  • #92 Added button to send MIDI feedback manually

  • #80 Added zip file downloads to website to be used for portable REAPER installations

  • #91 Added feedback option 'Send only if track armed' (enabled by default for new presets because it makes sense; if ReaLearn is on the input FX chain, feedback is never sent if the track is disarmed)

  • #97 Added source and target filtering to mapping list window in order to let users find existing mappings easier (e.g. to quickly check if a particular mapping is already there)

  • #72 Added buttons for moving mapping up or down

  • #106 Added 'Find in mapping list' button to edit mapping window

  • #107 Added checkboxes for enabling/disabling control/feedback also to edit mapping window

  • #88 Added mapping numbers for being able to better identify mappings (especially after duplicating a mapping)

  • #83 Improved Windows installer by making it more predictable and easier to use (user doesn't have to choose the VST directory anymore, ReaLearn will always be installed into a fixed dedicated VST directory, REAPER VST scanning path will be modified if necessary so the ReaLearn VstPlugins directory is the last one ... last one has highest priority, so old installed versions are just ignored)

  • #61 Improved usability by closing mapping dialog when pressing escape key

  • #84 Improved mapping list window performance if there are many mappings

  • #78 Improved preset reusability by discovering tracks by name if they are not found by their unique GUID (that way one and the same ReaLearn preset can be used in different projects as long as those projects have tracks with the same names)

  • #89 Improved scrolling behavior

  • #105 Improved usability by not closing mapping edit windows when closing ReaLearn mappings window (not needing to leave the mappings window open saves screen space)

  • #90 Improved usability by marking REAPER project as dirty when changing something within ReaLearn

  • #104 Improved usability by making it possible to enter step counts and step sizes of discrete target parameters directly instead of having to enter percentages (also removed the decrease/increase buttons because they are not really useful anymore after this change)

  • #103 Improved usability by making it possible to enter target values directly instead of having to enter percentages (only for supported targets, FX parameters for example don't support this)

  • #96 Improved control behavior by ignoring NOTE OFF messages sent by REAPER when pressing play (those messages make absolute sense for stopping VST instruments from sounding but they accidentally reset target parameters when using ReaLearn)

  • #82 Fixed buggy installer on Mac OS X

  • #81 Fixed problem that caused ReaLearn not to work in 32-bit REAPER installations on Mac OS X

  • #70 Fixed possible crash when learning target

  • #50 Fixed cropped window when using scaling on Windows (e.g. on HiDPI screens)

  • #76 Fixed bug in 'Auto-detect mode' that caused a wrong mode to be restored when loading a project or preset

  • #93 Fixed bug that could cause feedback MIDI messages to pile up while track disarmed or audio device off

  • #94 Fixed potentially incorrect feedback message for first target change after loading ReaLearn

  • #95 Fixed 'FX must have focus' not being respected for feedback

  • #98 Fixed crash after deleting track send used in track send target and opening ReaLearn window again

  • #99 Fixed weird scrollbar on OS X

1.1.0 (2017-12-10)

  • #41 Added experimental support for MIDI feedback (supported sources: CC value, note velocity, pitch wheel, channel after touch, program change, polyphonic after touch ... (N)RPN currently not; supported modes: absolute, toggle; supported targets: all, limited support for actions)

  • #56 Added possibility to enable/disable each mapping (control and feedback can be enabled/disabled separately - this feature makes it possible to correctly handle devices that expect different kinds of MIDI messages for feedback than they send when moving a control)

  • #68 Added possibility to go to target (e.g. scroll to track, open FX, ...) via 'Go there' button in mapping window

  • #53 Added target 'Track arm'

  • #57 Added source 'Polyphonic after touch'

  • #64 Added possibility to learn action target (so you don't have to choose the action in the long dropdown menu; just invoke the action while having 'Learn target' enabled and it will be selected)

  • #65 Added target visualisation for on/off actions

  • #58 Fixed bug that caused control surfaces to not be notified when volume and pan was changed through ReaLearn

  • #62 Fixed REAPER UI lags when using target value visualisation in mapping dialog

  • #63 Fixed serious audio and UI lags when having many targets under load

  • #60 Fixed audio crackling when opening ReaLearn UI

  • #66 Fixed non-working send volume target learning and visualisation

  • #59 Fixed some possible crashes (e.g. when loading ReaLearn in inactive project tab, when deleting tracks used in ReaLearn, when removing FX used in ReaLearn)

1.0.2 (2017-02-05)

  • #51 Fixed incorrectly displayed target track in dialog window (always showed previous track)

1.0.1 (2016-12-24)

  • #49 Fixed critical timing bug that caused MIDI messages to be forwarded (let through) slightly delayed

1.0.0 (2016-12-23)

  • #45 Added option "FX must have focus" to FX parameter target

  • #48 Fixed UI freeze on Windows when using action target by loading the complete set of action names not before clicking action dropdown

  • #43 Fixed superfluous invocation of trigger-style actions when releasing a MIDI switch (note or CC) by making it possible to specify an invocation type and making "Trigger" the default type (because most actions have trigger character)

  • #46 Fixed UI freeze when using (N)RPN source by replacing dropdown with text field

  • #44 Fixed unnecessary reload of action list