Use your Novation gear with Reason as stand-alone DAW!
The goal of this project is to allow you to use Reason rack devices without having to look at the screen, for a “DAW-less experience”.
ReBridge currently provides drivers (“Remote Codecs”) for the Launch Control XL3 and the Launchpad Pro [MK3].
While the Launchpad codec is still in its early stages of development, the Launch Control codec is already quite useful.
It goes far beyond the capabilities of the Launch Control drivers for other DAWs (Ableton Live etc.) provided by Novation.
- Everything that can be controlled by the LaunchControl is controlled — use Page buttons on your Launch Control to flip through pages for devices that have more parameters than encoders/faders/buttons on the LC
- Encoders, faders and buttons on the Launch Control were carefully mapped to match the layout of the device in the Reason Rack as possible (example Alligator: three rows of filter channels correspond to three rows of encoders)
- Colour coding of encoder and button LEDs were carefully assigned to provide visual cues of parameter groups (example SubTractor: OSC 1 encoders and buttons are red, OSC 2 encoders and buttons are yellow)
- Older devices where the parameters only have numerical values were carefully adjusted to have meaningful values in the Launch Control's display (example SubTractor: Oscillator waveforms are named sawtooth, square, triangle, sine instead of just 1, 2, 3, 4)
- Buttons on the Launch Control have various modes:
— toggle to turn a parameter on or off
- cycle to step through parameter values (e.g. SubTractor oscillator phase mode)
- momentary to activate a parameter as long as you hold the button (e.g. Alligator manual gate triggers)
- Some devices use LEDs on buttons as indicator lights (e.g. Alligator shows currently active trigger pattern)
- For Combinator patches from the Reason Factory Sound Bank and many (albeit not all) Combinator patches from the Reason+ packs, the Launch Control's display shows the actual parameter names instead of just “Control 1” or “Switch 1”
- Press Page button while holding Shift to browse through patches
- Use Track buttons to cycle through Rack devices or tracks
- Use Play and Record buttons to you-guessed-what
- Hold down Shift and twist an encoder, move a fader or push a button to see in the display what it does without actually changing the parameter value
- Faders have “pick up” functionality to avoid value jumps;
^andvsymbols in the display indicate if the position of the fader on the Lauch Control is currently above or below the parameter value in the Reason rack
- Reason Studios SubTractor Analog Synthesizer
- Reason Studios Algoritm FM Synthesizer
- Reason Studios Polytone Dual-Layer Synthesizer
- Synapse Audio The Legend
- Synapse Audio The Legend HZ
- Reason Studios Alligator Filter Gate
- Reason Studios Ripley Space Delay
- Reason Studios Combinator
- Reason Studios Bassline Generator
- Reason Studios PolyStep Sequencer
Installation requires Node.js, at least version 24, to be installed.
Currently, the installer only works on Macs.
The Reason remote files and the Max for Live files will also work on Windows machines, but you'll have to copy them to the appropriate locations yourself.
- Make a copy of
.env.exampleand rename it to.env. - Adjust the paths in your
.envto match those on your machine - Run
yarnto install dependencies (you may need to runcorepack enablefirst if you haven't used Yarn yet) - Run
yarn setupto generate files from the source code and copy them to the target locations of your Reason installation - In Reason, go to “Settings” -> “MIDI”
- Under “Remote keyboards and controllers”, click the button “Add manually”
- Select Vendor “Novation” and model “Launch Control XL3”
- On the dropdown menu “Input (DAW)”, select the MIDI port “LCXL3 DAW Out”
- On the dropdown menu “Output (DAW)”, select the MIDI port “LCXL3 DAW In”
Enjoy your Launch Control!
The project maintainer is in no way associated with Novation nor Reason Studios. Company and product names are trademarks of Novation or Reason Studios.
The project is strictly non-commercial, free to use by anyone without limitations. It comes without any warranty of any kind. The project maintainer cannot be held accountable for any problems with your music production setup that may be caused by this software.
Please remember that the project maintainer is developing this in his free time, for his own personal use. Do not expect him to provide support – although he'll be happy to help if you ask nicely and he can find the time. 😅
No. No it is not. Claude Code was indeed used to write parts of the code. However, the project maintainer is an experienced software developer who uses AI to improve his productivity, while maintaining full control over the software architecture and while understanding exactly what each line of code does.
The codebase is actually based on a remote codec for the Novation SL MkIII keyboard that the project maintainer wrote years before AI-assisted coding was a thing.
The manuals directory contains PDFs of the developer guides from Novation and Reason Studios, along with some example code. You (or your AI tool) can refer to these to learn all about how sending and receiving MIDI commands from the Launch Control XL3 works, and how to process these messages using a Reason Remote codec and mapping file.
Reason remote codecs are Lua scripts.
You need to install Lua to be able to run the tests. It is not required for building and deploying the codec.
Having Lua installed also helps if you are working with an AI tool like Claude Code — Claude can then try out code snippets to make sure the code it is generating actually works. The model “Sonnet 5” is surprisingly good at this, and it is comparatively inexpensive to use.
The Lua version Reason 14 uses is 5.1, so it makes sense not to use a more recent one.
The dev container config for this project includes Lua already (see section Dev container).
After making changes, to build the codec and copy the files over to Reason, run yarn setup (or yarn setup:dev, see section Debugging / logging).
You do not have to restart Reason every time! It is sufficient to tick the Controller's “active” checkbox off and on again in the MIDI settings.
To find out what's going on as the codec is running, you can send log messages through an extra MIDI port and print them using the utility script logReceiver.
To do this, install a special version of the codec using this command:
yarn setup:dev
It replaces the normal remote surface in the Reason settings. If you've previously installed the normal remote surface, delete it. Then install the dev version (vendor “Novation”, model “Launch Control XL3 (developer version)”).
Set input and output ports as before to the “DAW Out” / “DAW In” ports.
For “Output (log)” select an extra MIDI port of your choosing. It makes sense to create a dedicated port for this, using the macOS “Audio MIDI Setup” app's IAC device. For example, let's call it “LCXL3 Logger”.
Start the logger using the Yarn command, specifying your logger port, e.g.:
yarn log "IAC LCXL3 Logger"
You are now ready to add log statements to the Lua code!
At the top of the Lua model you want to log from, add this statement to import the logging module:
local debug = require("src.lib.debug._")
In the code, add a log statement like so:
debug.log("hello world")
To log a remote MIDI message:
debug.log(debug.midiEventToString(event))
To log a boolean value:
debug.log(my_bool and "true" or "false")
To log a number value:
debug.log(tostring(my_num))
Concatenating strings:
debug.log("value: " .. my_value)
Reason's codecs cannot save anything, so the pad colours of the Launchpad Pro [MK3] codec are kept by a separate script, the surface store, which remembers them per song and LaunchEon in ~/.rebridge/surfaceStore.json (see src/lppmk3/docs/adr/0002-remember-pattern-colours-in-a-surface-store.md).
In the macOS “Audio MIDI Setup” app, add a port to the IAC device called “ReBridge Store”.
In Reason's control surface settings for the Launchpad Pro [MK3], select “IAC ReBridge Store” for both “Input (store)” and “Output (store)”. Both are optional: without them, or without the store running, the pads simply start out white.
Start the store:
yarn store "IAC ReBridge Store"
Run without a port, it lists the available ones. Another file can be given with --file <path>. The store can be started before or after Reason.
Reason tells a remote codec nothing about a Combinator's controls beyond Rotary 1 … Rotary 32 and Button 1 … Button 16, so the labels the patch author wrote on the Combinator's front panel — RELEASE, REVERB and so on — never reach the Launch Control's displays.
Those labels are, however, stored in the patch files, and a script can read them out beforehand:
yarn extract:combi
This searches every directory below the PATH_REASON_COMBI_* paths of your .env (see .env.example) for .cmb files, reads the labels out of each one and writes them to src/config/combinatorLabels.lua, which is bundled into the codec by yarn build. Directories can also be passed on the command line:
yarn extract:combi ~/Documents/Reason/ReasonPatches
A run adds to the file rather than replacing it, so separate runs over separate directories build one file between them:
yarn extract:combi ~/Documents/Reason/ReasonPatches
yarn extract:combi ~/Music/Combis # the patches above are kept
A patch that is extracted again replaces the entry it had before, so re-running over a directory picks up any relabelling. Entries whose patches were not in the directories searched are left alone — which also means a patch you have since deleted keeps its entry. To start over, pass --replace:
yarn extract:combi --replace ~/Documents/Reason/ReasonPatches
The codec looks the labels up by the patch name Reason reports, falling back on the name the Combinator carries in the rack, and shows them in place of the parameter names (see src/lib/display/getDisplayName.lua). A patch that has not been extracted, or a control the patch has not labelled, keeps the name Reason reports for it.
Run the script again whenever you add or relabel a Combinator patch, then yarn setup to build and install the codec.
This project uses LuaUnit for unit testing.
You need to have Lua installed (see section Lua) to run the tests:
yarn test
This also checks that the Combinator label extraction still reads the patch formats correctly, against the example patches in scripts/fixtures — one saved in the layout Reason uses today, one in the layout it used before the Combinator grew from 4 rotaries and 4 buttons to 32 of each.
When using AI tools like Claude Code, it is recommended to use a dev container, so that the AI cannot do dangerous stuff like deleting your personal files.
How this works is out of the scope of this document, so do some googling or ask Claude :-)
This code repository comes with a dev container config that sets up a container with everything that you and the AI need for working on the codec.
If you use the IDE VS Code with the Dev Container extension, the dev container will be built automatically when you open the your local copy of this code repository.
One caveat: The yarn setup command will not work when run inside the dev container — this is intentional, because you do not want the AI to have access to your Reason installation.
You will have to run the command in a terminal outside the dev container (i.e. not in your IDE).
If you are working on the build and installation scripts, you can use the .env.devcontainer file to simlulate a Reason installation on the dev container system, but this is only to see if the files are deployed to the proper file system locations.