This is a simple program intended to convert OSC messages between the Behringer X32 console and QLC+. My use case is to control my light show (QLC+) via user assignable buttons on the X32 console. Though this program probably can be extended for your own needs. (Feel free to hack away at it!)
xremote-proxy
works by converting the "Button press" OSC messages that the X32 generates to OSC messages that QLC+ understands. QLC+ only works with float values, while the X32 works with integer values. Also, the X32 will not send OSC messages by itself. It needs to be persuaded to do so by sending an /xremote
OSC message. (That message is actually not valid OSC, but hey...)
Other programs that send OSC messages in either X32 format or QLC+ format are also supported. For example TouchOSC.
This program only supports the user assignable buttons and rotary encoders found on the X32 consoles. Probably other OSC messages could also be captured and converted, but I have no need for that.
When triggering the user assignable button on the X32, the function assigned to it will trigger, and an OSC message will be sent.
This OSC message will be converted by xremote-proxy
and passed on to QLC+.
There, the button assigned to the OSC message will trigger.
The other way around will not trigger the function assigned to the X32 user assignable button. So, when triggering the button from QLC+, the user assignable button on the X32 will light up, but the function assigned to it will not trigger.
Since I only want to control QLC+ using the user assignable buttons, I need to assign a 'dummy' function to my user assignable buttons. I do this by assigning "send MIDI note" functions. I don't use MIDI, so this has no effect on my setup.
I also use TouchOSC which emulates X32 "Button press" OSC messages.
The end result is:
- pressing a button on the X32 will trigger a button in QLC+ and will light up the button in TouchOSC;
- pressing a button in QLC+ will light up the user assignable button on the X32 and will light up the button in TouchOSC;
- pressing a button in TouchOSC will trigger a button in QLC+ and will light up the user assignable button on the X32
Start the application by running it from a command line. (It requires Java 21+.)
java -jar ./target/xremote-proxy-<version>.jar
(update the version number when applicable)
You'll see an error message explaining that you should give some mandatory parameters. Give them, and run again.
I'll explain the most important command line arguments here.
This is the address of your X32 console. You can give either an IP address or a hostname. You can also give a port number, but this will most likely be the default 10023
.
Examples:
--x32 192.168.0.1
--x32 console.local.lan
--x32 172.0.0.1:1111
(for example, if you run Patrick-Gilles Maillot's X32 emulator onlocalhost
port1111
).
This is the host+port where xremote-proxy
will listen on for incoming OSC messages sent by the X32 console (or an OSC client emulating the X32 console).
This is the address of QLC+. You can give either an IP address or a hostname. You can also give a port number. By default the port is 7700
.
Examples:
--qlcplus 192.168.0.2
--qlcplus lighting.local.lan
--qlcplus 172.0.0.1:7711
(for example if you run QLC+ on the same machine asxremote-proxy
and on port7711
)
This is the host+port where xremote-proxy
will listen on for incoming OSC messages sent by QLC+ (or an OSC client emulating QLC+).
If you have a third party OSC client that sends/receives messages just like the ones that QLC+ sends/receives, you should:
- direct that client to send to the host+port you gave with
--qlcplus-listen
; - add another
--qlcplus
command line option with the host+port wherexremote-proxy
should send OSC messages to your client to
If you have a third party OSC client that sends/receives messages just like the ones that the X32 sends/receives, you should:
- direct that client to send to the host+p;ort you gave with
--x32-listen
; - add an
--fake-x32
command line option with the host+port wherexremote-proxy
should send OSC messages to your client to
Indeed, the option --fake-x32
is nearly identical to --x32
. The only difference is that xremote-proxy
will send /xremote
OSC messages to hosts given with --x32
, while the hosts given with --fake-x32
will not receive /xremote
OSC messages from xremote-proxy
.
QLC+ works with input profiles. This is where you define how QLC+ should interpret the OSC messages received. For a correct working of xremote-proxy
you should use this profile. Install it by copying the QXI file to ~/.qlcplus/inputprofiles/
and restart QLC+. Then navigate to the Inputs/Outputs
tab → Profile
tab and select the Jurrie Overgoor Behringer X32 via xremote-proxy
profile.
This is QLC+ project that "emulates" the X32 user assignable buttons. When you want to set up your own X32 ↔ xremote-proxy ↔ QLC+
, you could use this as a starting point for QLC+. Note that the project does not contain any useful functionality. You should see the X32 user assignable buttons light up when you press them in QLC+, and you should see the QLC+ buttons light up when you press them on the X32. Nothing more.
This is a project for TouchOSC that will emulate the X32 sending OSC messages. You can use this project in combination with the --fake-x32
command line argument of xremote-proxy
.
This is a project for TouchOSC that will emulate QLC+ sending OSC messages using the QLC+ input profile
profile. You can use this project in combination with the --qlcplus
command line argument of xremote-proxy
.
Debian packages for AMD64 and ARM64 (which is the architecture of Raspberry Pi for example) are provided. You install these packages like normal: apt install xremote-proxy-<version>.deb
.
A Systemd service is created. But be advised that the default command to start xremote-proxy
will not suffice. You'll need to specify your own command. To do this, do a systemctl edit xremote-proxy.service
and give the following lines:
[Service]
ExecStart=
ExecStart=/opt/xremote-proxy/bin/xremote-proxy --x32 <your-x32-ip-here> --qlcplus <your-qlc+-ip-here> <other-arguments-here>
This will create the file /etc/systemd/system/xremote-proxy.service.d/override.conf
which will override the defaults of the Systemd service. Then do a systemctl daemon-reload
and start the service with systemctl start xremote-proxy
. If things go wrong please check the output of systemctl status xremote-proxy.service
and journalctl -u xremote-proxy.service
. If you want the service to start at boot, do a systemctl enable xremote-proxy
.
Behringer and the Behringer X32 are registered trademarks by Music Tribe. I am not affiliated in any way.
TouchOSC is created by Hexler Limited. I am not affiliated in any way.
QLC+ is created by the QLC+ Development Team. I am not affiliated in any way.