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, andDRUMSselection helpers;- a
SAVEaction 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 dBto0 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 dBbutton; - 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:SStimecode display, and a visual
metronome; - remaining time for the current song and the complete set;
- the
VOX +LYRICStrack; - 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-COMMSpage 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









