A modular multi-iPad IEM mixer using RME TotalMix Global OSC

Transparency note: This post was initially written with the help of OpenAI Codex.
I personally reviewed and verified the content and edited it where necessary before publishing it.

Hi everyone,

I would like to share a project that has reached a very satisfying milestone:
a modular personal-monitoring system for our band. Built with
AbleSet Canvases, AbleSet Connect, JavaScript, and the Global OSC beta implementation
of an RME Fireface UFX+.

DIVINATIONS is a four-piece metalcore band from Berlin:

  • Martin β€” drums
  • Mario Albrecht β€” shouts and growls
  • Zac β€” guitar and clean vocals
  • Mario Paler β€” bass (me)

Every musician uses an individual iPad for their own IEM mix. A fifth iPad is
available for our FOH engineer and remains separate from the four personal IEM
profiles. The FOH Canvas provides show information, lyrics, timed comments, a
compact Ontime status strip, dedicated technical reference pages, and a
full-screen communication channel back to all AbleSet devices.

The live host is a Mac mini M1 running Ableton Live and AbleSet. I currently
develop and validate the production environment on a Windows PC at home.
AbleSet Connect provides the control surfaces on the iPads over Wi-Fi.

The result is a set of four visually related Canvases that can be used at the
same time while remaining functionally independent. I also have a dedicated
output-master Canvas because, as the bassist and system operator, I want a
little more information and control than the other musicians need. The FOH
Canvas is a separate operational view and does not expose the musicians’ RME
mix controls.

AbleSet communicates with the UFX+ through OSC, while the FOH Canvas reads
AbleSet show data and embeds a small custom Ontime-powered web view.
Ontime does not participate in the RME audio-control path.

The important design principle is that the network carries control data only.
The audio mix remains inside TotalMix and the UFX+.

Tested system

Component Reference configuration
Validation date 6 August 2026
Audio interface RME Fireface UFX+ / TotalMix FX
Development host Windows PC
Live host Apple Mac mini M1
Remote devices Five iPads running AbleSet Connect
DAW Ableton Live 12.4.3
Show-control software AbleSet 3.2.0-beta.3
Canvas scripting JavaScript
Mixer communication RME Global OSC
Auxiliary Live integration AbletonOSC on 127.0.0.1:11000, feedback on 11001
FOH timing service Ontime with a custom status view; development deployment on the Windows host
Network All devices on the same Wi-Fi network

Independent IEM profiles

Each musician has a fixed TotalMix submix bus and a dedicated namespace in the
AbleSet Project Script:

Profile TotalMix submix bus Physical output meter Canvas
Martin 0 Output 0/1 MARTIN.json
Zac 2 Output 2/3 ZAC.json
Paler 4 Output 4/5 PALER.json
Mario 6 Output 6/7 MARIO.json

The visual layout can be mirrored between musicians, but every OSC path and
every Shared Variable key is profile-specific. Moving a fader in Martin’s
Canvas therefore changes bus 0, while the same visual fader in Paler’s Canvas
changes bus 4.

The submix replaces the * placeholder in the OSC mapping:

:UFX/mix/pb/0/*/fader
              ↑
    target IEM submix bus

Examples:

:UFX/mix/pb/0/0/fader     CLICK in Martin's mix
:UFX/mix/pb/0/4/fader     CLICK in Paler's mix
:UFX/mix/in/34/6/fader    OH L in Mario's mix
:UFX/mix/in/34/6/balpan   OH L pan in Mario's mix

Canvas workflow

The musician Canvases are designed for quick use on stage. They provide:

  • individual source faders with live TotalMix feedback;
  • optional pan controls that can be shown or hidden independently per iPad;
  • visual peak alarms on all profiles, plus output acknowledgement on every
    musician Canvas and per-source acknowledgement on the extended Paler view;
  • FOCUS selection directly on the source faders;
  • ALL, ONE, and DRUMS selection helpers;
  • a SAVE action for accepting a focused mix as the new reference;
  • a maximum user-facing gain of 0 dB.

The pan-visibility state is stored as an AbleSet Local Variable.
Local Variables are browser-local, so each iPad can show or hide pan controls without
changing the presentation on the other devices.

A key part of this workflow is enabled by the new Slider Script on Tap feature
introduced in AbleSet 3.2.0-beta.3.

Every IEM source fader uses it: dragging still changes that source’s level in TotalMix,
while a simple tap selects or deselects the source for FOCUS.

Combined with the new option to disable snapping to the pointer on tap, the level remains unchanged when the selection script runs.

This allows a single control to act as both mix fader and FOCUS selector,
avoiding a separate row of selection buttons and keeping the Canvas compact.

A big thank-you to @leolabs for implementing these additions β€” they fit this workflow perfectly and have made the interface cleaner and faster to use on stage.

FOCUS: temporary attenuation without losing the mix

FOCUS is the central convenience feature of the system. It does not boost a
selected channel. Instead, it temporarily attenuates all non-selected source
channels in that musician’s own submix.

The sequence is:

Select source channels
        β”‚
        β–Ό
Capture all 27 source-fader values as the profile baseline
        β”‚
        β–Ό
Keep selected channels at their baseline
        β”‚
        β–Ό
Attenuate non-selected channels by the chosen FOCUS amount
        β”‚
        β”œβ”€ FOCUS β†’ 0 dB: restore the original baseline exactly
        β”‚
        └─ SAVE: keep the audible result as the new reference

The state is namespaced per musician, for example:

iem/paler/focus/selected/20
└─ profile β”€β”˜  └─ OH L track ID β”€β”˜

This prevents one Canvas from selecting or attenuating channels in another
musician’s mix. Output-master tracks are excluded from FOCUS entirely, so this
feature can never turn down somebody else’s IEM master or the Bass Riser.

AbleSet’s Persist Shared Variables option is enabled. A persisted FOCUS
baseline can therefore survive a restart, but the Project Script validates it
before use. If a stored baseline is incomplete, the corresponding FOCUS
session is disabled instead of applying an unsafe partial restore.

Peak monitoring and acknowledgement

The Project Script monitors the source and output meter paths and stores a
latched AbleSet alarm per track. A PEAK! button is only a visual
acknowledgement: it clears that track’s AbleSet alarm but does not reset or
alter TotalMix Peak Hold.

This distinction matters because Peak Hold is enabled in TotalMix. A held
0 dB value must not prevent the musician from acknowledging the warning in
AbleSet. After the live level drops below the threshold, a later peak can arm
the warning again.

Mono and stereo meters are handled by the same logic. The Project Script and
Canvas buttons accept either a single OSC address or an array of two addresses.

Dedicated output-master Canvas

The OUTPUTS Canvas gives me a compact overview of all five relevant outputs:

Control RME output Volume path Peak track
Martin IEM 0/1 :UFX/output/0/volume 28
Zac IEM 2/3 :UFX/output/2/volume 29
Paler IEM 4/5 :UFX/output/4/volume 30
Mario IEM 6/7 :UFX/output/6/volume 31
Bass Riser 8 :UFX/output/8/volume 32

Each strip contains:

  • a master fader from -65 dB to 0 dB;
  • a live peak readout above the fader;
  • separate left/right values for stereo IEM outputs;
  • a mono value for the Bass Riser;
  • a yellow SET 0 dB button;
  • a dedicated PEAK! acknowledgement button.

Originally, tapping a master fader set it directly to 0 dB. Although the
logic worked, I removed it because it was too easy to trigger accidentally.
The action now lives on a clearly separated yellow button.

FOH Canvas: show awareness, reference, and communication

The fifth iPad uses a dedicated FOH Canvas. It is intentionally separate
from the four musician IEM profiles and from the OUTPUTS master-control
page. Its purpose is show awareness, technical reference and communication
rather than audio mixing.

The FOH view combines:

  • the full setlist;
  • the current song, next song, current section, and next section;
  • BPM, beat, time signature, a reduced MM:SS timecode display, and a visual
    metronome;
  • remaining time for the current song and the complete set;
  • the VOX +LYRICS track;
  • current and next FOH comments from dedicated Ableton Live tracks;
  • an embedded Ontime status strip with project name, current time, and ETA;
  • direct links to SOUND CHECK, INPUTS, STAGE PLOT, FOH COMMS,
    and the main MENU;
  • a separate FOH-COMMS page with green FOH IS READY, red
    FOH PROBLEM, and custom full-screen notifications for all AbleSet devices.

Ontime

Ontime is a separate application that serves data and custom web views over HTTP on port 4001. For this project, I built a compact FOH view that shows the project title, current time, and the estimated end of the DIVINATIONS set.

It intentionally ignores unrelated rundown events when calculating the ETA.

Reduced timecode and transport-state color

For this view, the FOH engineer does not need hours or frame numbers. I only
want the minute and second fields, so the Canvas uses a regular Label element
that reads /timecode/tc, splits the SMPTE value, and displays MM:SS:

const parts = String(osc("/timecode/tc") ?? "").split(/[:;]/);
return parts.length >= 4 ? parts.slice(-3, -1).join(":") : "--:--";

The timecode background also acts as a large transport-status indicator:

  • green while playback is running;
  • yellow while the system is stopped and ready;
  • red for an unexpected pause or a stop in the middle of a song.

The text automatically switches between white and black for contrast. Small
minutes and seconds labels remove any ambiguity for engineers who are not
used to reading an abbreviated SMPTE display.

This works well as a Canvas-level solution, although I would still welcome
native per-field visibility options for hours, minutes, seconds, and frames in
AbleSet’s Timecode element.

The Ableton project contains separate data tracks for this page:

VOX +LYRICS +CC
FOH COMMENTS +LYRICS
FOH CC CURRENT +OSC [/shared/canvas/foh_cc1 ?cc] [single]
FOH CC NEXT +OSC [/shared/canvas/foh_cc2 ?cc] [single]

The two OSC tracks write the current and next comment colors to AbleSet Shared
Variables. Persist Shared Variables is enabled, and the Canvas still uses
an explicit red fallback so that a missing initial value never produces an
invalid dynamic color.

All dynamic FOH labels are null-safe. For example, the time-signature display
only calls .join("/") after confirming that AbleSet returned an array. Until
that value is available, the display falls back to 4/4. Song names, section
names, remaining times, comment colors, and tempo also have defined startup
values.

The notification buttons on the linked FOH-COMMS page use AbleSet’s internal
/notify/big command:

sendOsc("/notify/big", "all", message, 10000, "green");

The duration is sent as a number in milliseconds. The custom-message button
also rejects empty input instead of sending a blank full-screen overlay. These
notifications are internal AbleSet commands; they are not sent through the
UFX OSC connection.

Handling -∞, missing feedback, and safe limits

Depending on the path and returned value type, the lowest TotalMix fader
position can arrive as a very low numeric value such as approximately
-300 dB, as -Infinity, or as an infinity string. The AbleSet sliders use
-65 dB as their supported lower boundary, so the Canvas and Project Script
normalize all of these representations:

TotalMix fader at -∞  β†’  very low / infinity OSC value  β†’  Canvas value -65 dB

The output templates are also null-safe. When a Canvas first opens, the UFX+
may not have returned every value yet. Until feedback arrives, AbleSet shows
-65 dB instead of trying to call .toFixed() on null and displaying an
error.

All user-facing audio faders are capped at 0 dB. This prevents accidental
positive gain from the Canvas. It is a control-surface guardrail and does not
replace correct gain staging in TotalMix.

OSC path model

The JavaScript model separates sources, IEM profiles, output meters, and
physical output masters:

Purpose Path pattern
Playback source fader :UFX/mix/pb/<channel>/<submix>/fader
Hardware input fader :UFX/mix/in/<channel>/<submix>/fader
Source pan :UFX/mix/<pb-or-in>/<channel>/<submix>/balpan
Physical output master :UFX/output/<channel>/volume
Playback peak :UFX/level/pb/<channel>
Input peak :UFX/level/in/<channel>
Output peak :UFX/level/out/<channel>

OSC addresses used for reading are deliberately literal in the Project Script
and Canvas templates. Dynamic address composition is convenient for sending,
but literal osc() readers give AbleSet dependable subscriptions for live
feedback.

AbleSet OSC connections

The RME connection is named UFX.

AbleSet setting Value
Send address 127.0.0.1:7001
Listen port 9001
Persist Shared Variables Enabled

Commands sent when the connection is created:

/sendsubmix/0 1;
/sendsubmix/2 1;
/sendsubmix/4 1;
/sendsubmix/6 1;
/sendsubmix/8 1;

The project also contains a separate connection named AbletonOSC:

AbleSet setting Value
Send address 127.0.0.1:11000
Listen port 11001
OSC on Create Subscribe to mute-state feedback for Live tracks 0–167

This auxiliary connection follows AbleSet’s documented AbletonOSC setup and
is separate from the UFX Global OSC path. The IEM faders, FOCUS logic, output
meters, and output masters described here continue to use UFX exclusively.

RME TotalMix FX / UFX+ configuration

These are the RME settings used in this reference configuration, not
AbleSet settings or universal requirements for every RME setup:

TotalMix FX / UFX+ setting Reference state in this project
Enable OSC Control Enabled
Compatibility mode Global OSC
Submix linked to OSC Controller Not linked; no controller selected
Send changes Enabled
Send status cyclic Enabled
Receive on hidden channels Enabled
Re-send received / re-send-on-use behaviour Enabled
Send Peak Level Data Enabled
Peak Hold Enabled
Send faders in linear scale Disabled; this project uses dB values
Lock Remote to submix Disabled
Bandwidth limit 500 kByte/s
UFX+ incoming port 7001
UFX+ outgoing port 9001
Remote controller address 127.0.0.1

The Submix linked to OSC Controller submenu is intentionally left
unselected. The visible controller 1 belongs to Remote Controller Select;
it does not mean that the submix-link submenu is connected to controller 1.
The OSC path itself explicitly chooses bus 0, 2, 4, or 6.

Project structure

AbleSet/
β”œβ”€ Scripting/
β”‚  β”œβ”€ project-script.js          Shared model, FOCUS and peak monitoring
β”‚  └─ shared-variables.json      Persisted AbleSet state
β”œβ”€ Canvases/
β”‚  β”œβ”€ MARTIN.json               Martin's personal IEM mix
β”‚  β”œβ”€ ZAC.json                  Zac's personal IEM mix
β”‚  β”œβ”€ PALER.json                Paler's extended IEM/system view
β”‚  β”œβ”€ MARIO.json                Mario's personal IEM mix
β”‚  β”œβ”€ OUTPUTS.json              Five output-master strips
β”‚  β”œβ”€ FOH.json                  FOH live information and navigation
β”‚  β”œβ”€ FOH-COMMS.json            FOH broadcast messages
β”‚  β”œβ”€ IEM.json                  IEM profile navigation
β”‚  β”œβ”€ PLAYBACK.json             Playback status and controls
β”‚  β”œβ”€ INPUTS.json               Input and patch reference
β”‚  β”œβ”€ SOUNDCHECK.json           Soundcheck reference
β”‚  β”œβ”€ STAGEPLOT.json            Stage-plot reference
β”‚  β”œβ”€ RMEMIC.json               RME 12Mic web view
β”‚  β”œβ”€ BASS.json                 Bass-note view
β”‚  β”œβ”€ CONTACT.json              Contact reference
β”‚  β”œβ”€ Transition.json           Transition setlist view
β”‚  β”œβ”€ MENU.json                 Main Canvas navigation
β”‚  └─ Resources/                Canvas images and graphics
β”œβ”€ Ontime/
β”‚  └─ divinations-foh/          Custom project/time/ETA web view
β”œβ”€ Settings/
β”‚  └─ osc-connections.json       AbleSet OSC connection definitions
└─ README-IEM-MIXER.md           Technical project documentation

EXTRAS/
β”œβ”€ UFX_OSC.xlsx                  Track IDs and project OSC mappings
└─ OSCProtocoll_260721.ods       RME Global OSC protocol reference

The configuration is data-driven: source-track metadata, IEM profile metadata,
and output-meter metadata are declared separately. Adding another musician or
changing an output mainly means adding a profile, adding the literal readers,
copying a Canvas, and changing its submix bus and Shared Variable namespace.

Result

The system now gives every musician a simple personal mix while keeping the
more technical overview on my own Canvas. Changes are synchronized through
TotalMix feedback, all four IEM profiles remain independent, and the dangerous
operations are separated from ordinary fader gestures. The separate FOH view
adds show timing, transport-state feedback, lyrics, comments, technical
reference pages, and operational communication without exposing the
musicians’ audio controls.

I hope this is useful for anyone considering AbleSet as a remote IEM control
surface for TotalMix. I am happy to discuss the Canvas structure, the Project
Script, the OSC mapping, or the decisions behind FOCUS.

References

Thanks for reading!

β€” Paler / DIVINATIONS

1 Like

That looks awesome, thank you for the detailed write-up! :tada: