REAPER ↔ RME TotalMix FX Global OSC bridge. In Erinnerung an ASIO Direct Monitoring in Samplitude.
A REAPER extension that turns RME audio interfaces (UFX+ family) into a fully DAW-controlled hardware console. Mic gain, 48V phantom, pad, phase, submix sends — all driven from REAPER tracks via TotalMix FX 2.1's new Global OSC protocol.
Out of scope: TotalMix-internal effects (channel EQ, dynamics, room EQ, FX send/return bus). Those stay in TotalMix.
Status: Phase 1 — MVP working. Track-to-input routing mirror, per-track preamp controls, and track-to-track sends all flow from REAPER to TotalMix in real time. Not yet ready for unattended production use.
TotalReaper: Toggle Routing Mirror — when enabled, REAPER becomes the source of truth for the TotalMix input matrix:
- Track volume / mute / pan / width →
/mix/in/<n>/<bus>/fader|balpanon the bus the track records to. REAPER's own software monitor is muted while the mirror is engaged, so you only hear TotalMix's hardware path. - Stereo input tracks emit fader/pan/width for both halves of the pair.
- Track-to-track sends → matrix routings to the destination bus, with per-send level/pan respected.
- Only tracks the user has actually engaged (armed, monitor-on, or with active sends) participate, so the mirror doesn't wipe TotalMix routings the user set up by hand on other channels.
- Reacts live to input reassignment, send add/remove, and stereo-link changes.
- Toggle state persists across REAPER restarts.
TotalReaper: Toggle 2-Way Control — on top of the routing mirror, this toggle adds the reverse direction: moving a fader or balpan in TotalMix also moves the matching REAPER track / send. First REAPER track whose input maps to the hardware channel wins. Echo-suppression is value-based, so the loop stays stable.
Five actions operate on selected tracks and address the device's input
strip via /input/<n>/...:
- TotalReaper: Increase / Decrease preamp gain on selected tracks (±1 dB)
- TotalReaper: Toggle 48V phantom on selected tracks
- TotalReaper: Toggle pad on selected tracks
- TotalReaper: Toggle phase invert on selected tracks
- TotalReaper: Toggle AutoLevel on selected tracks — TotalMix rides the input gain automatically. Useful for unattended gain-staging during sound-check: arm the channel, enable AutoLevel, let the source play, disable when settled.
Bind these to keyboard shortcuts (or a control surface) and you have direct mic-pre control from inside REAPER.
Global TotalMix controls and project-state recall:
- TotalReaper: Toggle Talkback — drives
/controlroom/talkback. Bind to a footswitch via Stream Deck / SSL UF8 / keyboard shortcut. - TotalReaper: Toggle Auto-Talkback on Stop — drives talkback from REAPER's transport state. Stop/pause opens talkback, play/record closes it. Toggling the action on while stopped opens talkback immediately; toggling off closes it.
- TotalReaper: Save / Load TotalMix Snapshot Slot 1…8 — sixteen actions, one save and one load per snapshot slot. Bind each to the key you want for that slot.
- TotalReaper: Toggle OSC Dump — listens on UDP 7002 and prints every incoming OSC message from TotalMix to the REAPER console. The original Phase 0 protocol-exploration tool, kept around for debugging.
Find all actions in REAPER's Action List by typing "TotalReaper".
-
TotalMix FX 2.1 Alpha 4 (or later) with Global OSC enabled.
- Download: https://www.rme-audio.de/downloads/tmfx_mac_globalosc_21alpha4.zip (Mac)
- Or: https://www.rme-audio.de/downloads/tmfx_win_globalosc_21alpha4.zip (Win)
- In TotalMix: Settings → OSC → Compatibility Mode → Global OSC, then Options → Enable OSC Control.
- Default ports: TotalMix RX 7001, TX 7002 (TotalReaper assumes these).
- Settings → OSC → Details… → "Receive to hidden channels" must be
checked. Otherwise TotalMix silently drops
/mix/in/<n>/<bus>/faderwrites to any input row or output column that isn't in the current layout — the routing mirror appears completely dead even though TotalReaper is sending correctly. Default in some TotalMix versions is OFF.
-
REAPER 6 or later.
-
Build toolchain (only if building from source — see Install below for pre-built binaries):
- macOS: Xcode Command Line Tools, CMake 3.20+
- Windows: Visual Studio 2022 (or Build Tools), CMake 3.20+
If you already use ReaPack, add the Frank Acklin Scripts repository — TotalReaper updates then arrive automatically:
- Extensions → ReaPack → Import repositories…
- Paste:
https://github.com/acklin83/reaper-scripts/raw/main/index.xml - Extensions → ReaPack → Browse packages… → search TotalReaper → install
- Restart REAPER
Grab the binary for your platform from the latest release and drop it in REAPER's UserPlugins folder, then restart REAPER:
| Platform | Asset | Destination |
|---|---|---|
| macOS (Apple Silicon) | reaper_totalreaper-arm64.dylib |
~/Library/Application Support/REAPER/UserPlugins/ |
| macOS (Intel) | reaper_totalreaper-x86_64.dylib |
~/Library/Application Support/REAPER/UserPlugins/ |
| Windows (x64) | reaper_totalreaper.dll |
%APPDATA%\REAPER\UserPlugins\ |
The Windows DLL has the MSVC runtime statically linked, so you don't need the Visual C++ Redistributable installed. The macOS dylib targets macOS 11 (Big Sur) or later.
git clone --recursive https://github.com/acklin83/totalreaper.git
cd totalreaper
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config ReleaseIf you forgot --recursive:
git submodule update --init --recursiveAfter building, copy the resulting library to REAPER's UserPlugins folder. There's a CMake target that does this for you:
cmake --build build --target install_localOr do it manually:
| Platform | Source | Destination |
|---|---|---|
| macOS | build/reaper_totalreaper-<arch>.dylib |
~/Library/Application Support/REAPER/UserPlugins/ |
| Windows | build/Release/reaper_totalreaper.dll |
%APPDATA%\REAPER\UserPlugins\ |
Restart REAPER. You should see in the console (View → Show Console):
[TotalReaper] loaded — find actions in Action List by typing 'TotalReaper'
- Start TotalMix with Global OSC enabled (see Prerequisites).
- In REAPER: Actions → Show action list..., type
TotalReaper. - Run TotalReaper: Toggle Routing Mirror. Move a track fader and the corresponding TotalMix input fader should follow.
- Select a track recording from a mic input and run TotalReaper: Toggle 48V phantom on selected tracks — the device should click and the strip's 48V indicator should light.
- If something looks wrong, run TotalReaper: Toggle OSC Dump and
watch the console as you click around in TotalMix. Compare paths
against
docs/osc-paths-discovered.md.
If nothing happens, check that TotalMix is actually emitting OSC and that no firewall is blocking UDP 7001/7002 on localhost.
totalreaper/
├── src/
│ ├── main.cpp # Plugin entry, action + csurf registration
│ ├── osc/ # Minimal OSC 1.0, no dependencies
│ │ ├── OscMessage.{h,cpp} # Wire format
│ │ ├── OscClient.{h,cpp} # UDP TX
│ │ ├── OscServer.{h,cpp} # UDP RX, bundle dispatch
│ │ └── TotalMixState.{h,cpp} # Cache of last-seen TotalMix values
│ ├── reaper/
│ │ ├── ReaperAPI.{h,cpp} # SDK function-pointer glue
│ │ ├── ChannelMap.{h,cpp} # REAPER input slot → device hw index
│ │ └── Console.h
│ ├── csurf/
│ │ └── TotalReaperCSurf.{h,cpp}# Routing mirror (REAPER → TotalMix)
│ └── actions/
│ ├── Actions.h
│ ├── DumpOscAction.cpp
│ ├── RoutingMirrorAction.cpp
│ ├── TwoWayControlAction.cpp
│ ├── AutoTalkbackAction.cpp
│ ├── PreampActions.cpp
│ └── GlobalActions.cpp
├── external/
│ └── reaper-sdk/ # git submodule
├── docs/
│ └── osc-paths-discovered.md # Living protocol reference
├── .github/workflows/
│ ├── build.yml # macOS + Windows CI
│ └── release.yml # Publish on v* tag push
├── CMakeLists.txt
├── LICENSE # MIT
└── README.md
- Phase 0 — done: Protocol discovery. Global OSC vocabulary mapped in
docs/osc-paths-discovered.md. - Phase 1 — current: MVP. Routing mirror via control surface; per-track preamp (gain / 48V / pad / phase); track-to-track sends mirrored to the TotalMix matrix.
MIT — see LICENSE.