Blog QLC+ 12 min read

QLC+ Gamepad Input Profiles: XY Pads and Relative Mode

Build a QLC+ controller input profile properly: why Relative mode suits thumbsticks, the Virtual Console layout that works, and the DMX rig it drives.

By Aidxn Design

Q Light Controller Plus is the lighting software that should not be as good as it is. It is free, open source, cross-platform, and it will happily drive real fixtures through real interfaces at a real gig. What it does not have is a hardware ecosystem — there is no QLC+ console, no branded wing, no officially blessed controller. What it has instead is an input profile system that will map almost anything, and a Virtual Console that is explicitly designed to be driven from outside. Point a game controller at that and you have a complete lighting rig for the cost of the dongle and an afternoon.

TL;DR
  • Input profiles are the core concept — they map external device signals onto channels QLC+ understands. See the input profiles documentation.
  • Relative mode is the gamepad unlock. Self-centring sticks in Absolute mode snap values to the middle; Relative nudges from the current position instead.
  • Sensitivity tunes Relative speed — higher values slow it down, lower values speed it up.
  • Virtual Console widgets — XY Pad, Slider, Button — are the mapping targets.
  • Cost: QLC+ is free, the bridge has a free tier, and the controller is already on your shelf.

What is an input profile and why does QLC+ insist on one?

An input profile is a translation layer that turns raw protocol messages into named QLC+ channels, so the rest of the application never has to know what MIDI is.

Signal flow diagram: Gamepad to Bridge to Virtual MIDI port to Input profile to Virtual Console. Gamepad sticks and buttons Bridge MIDI notes and CC Virtual MIDI port QLC+ input universe Input profile named channels Virtual Console then DMX out
The profile is the layer that makes the rest portable — swap the controller, rewrite one file, keep the show.

QLC+ documentation describes it as mapping "the signals coming from an external control device… to channels QLC+ can understand", so that you can control your show with your preferred hardware without knowing the underlying protocol. That is an unusually clean piece of architecture and it pays off in two ways.

It makes the mapping portable. Your Virtual Console is bound to profile channels, not to CC numbers. Change controller, write a new profile, and the entire show keeps working. If you have ever rebuilt a mapping because you swapped hardware three weeks before a tour, you will appreciate this more than the feature list suggests.

It makes the mapping readable. A profile entry can be called "Left stick X" rather than "CC 3", which matters enormously eighteen months later when you open a show file and have no memory of what you did. Name your channels properly while you are building the profile — the wizard will not do it for you, and nothing you do in this workflow pays off more.

You create one from the Inputs/Outputs tab: select a universe, click the create-new-input-profile button, fill in manufacturer and model in the General tab, choose the type (MIDI, OSC, HID, DMX or ENTTEC), and then define channels in the Input Mapping tab either by hand or with the automatic wizard.

Why is Relative mode the right choice for a thumbstick?

Because a self-centring stick has no meaningful absolute position, and Absolute mode will snap your parameter to the middle the instant you touch it.

This is the single most useful thing in this article, so it is worth spelling out carefully.

In Absolute mode, which is the default, QLC+ uses the slider values exactly as received from the external controller — the widget position mirrors the hardware position. That is correct behaviour for a fader on a console, where the physical object stays where you left it. It is wrong behaviour for a thumbstick, which springs back to centre every time you let go. Pan a moving head to the far left, release the stick, and the stick's value returns to 64 — so your fixture snaps back to centre too. That is not a bug, it is Absolute mode doing exactly what it says.

In Relative mode, values received from an external controller are treated as relative movement starting from the current position of the Virtual Console widget. The documentation gives precisely the use case: a HID joystick driving an XY Pad or Slider, where a joystick adjustment modifies a moving head's current pan and tilt rather than jumping to an absolute position. Sensitivity controls how fast that movement travels — higher values slow adjustments down, lower values speed them up.

So the rule is: sticks → Relative, triggers → Absolute. A trigger rests at zero and its full travel is meaningful, so Absolute is honest. A stick rests at centre and its deflection means "move", so Relative is honest. Getting this one choice right is the difference between a controller that feels like a lighting desk and one that feels broken.

What should the Virtual Console look like?

One XY Pad for position, sliders for the continuous parameters you ride, buttons for scenes and chasers, and frames to group it so the layout matches the controller.

Virtual Console turns the computer into a customisable lighting control surface and supports external control from MIDI, OSC and DMX controllers as well as gamepad/joystick input. Design it as the mirror of your hand, not as a generic desk.

ControlProfile channelVirtual Console widgetModeWhy
Left stick XLeft stick XXY Pad — horizontalRelativeThe canonical documented use case. Pans from wherever the head currently is instead of snapping to centre.
Left stick YLeft stick YXY Pad — verticalRelativeSame reasoning. One thumb drives the whole position axis pair.
R2 triggerRight triggerSlider — master dimmerAbsoluteBounded travel, spring return to zero. Releasing it takes you to black, which is the safest possible default.
L2 triggerLeft triggerSlider — strobe rateAbsoluteMomentary gesture with a hard zero. A strobe should never be a state you can walk away from.
Right stick XRight stick XSlider — chaser speedRelativeNudge faster or slower from the current tempo rather than jumping to it mid-chase.
Right stick YRight stick YSlider — colour wheel positionRelativeStepping through positions by nudge suits a wheel better than absolute recall does.
Touchpad X / YTouchpad X / YSecond XY Pad — colour mixAbsoluteA genuine 2D absolute surface, so Absolute is correct here and Relative would throw away the thing that makes it useful.
Cross / Circle / Square / TriangleButtons 1–4Button widgets — scenesToggleFour known looks reachable by shape without looking down.
D-pad up / downD-pad up / downButton widgets — chaser next / previousMomentaryStepping through a chaser is inherently momentary.
D-pad left / rightD-pad left / rightButton widgets — frame pageMomentaryPaging the Virtual Console changes what the sticks address, which is how you get past the control count limit.
L1L1Button — solo frame enableMomentaryHold-to-solo. Safer than latch, because you cannot leave it engaged.
R1R1Button — blackoutToggleThe one control that must work blind, instantly, every time.

The paging row matters more than it looks. A gamepad has fewer controls than a console, and the answer is not to cram more onto it but to change what the controls address. Frames and pages in Virtual Console do that cleanly, and the pattern is identical to the banking approach described in banks, layers and scoping.

Should you use the HID joystick path instead of MIDI?

You can, and for a quick test it is fine — but a MIDI bridge gives you curves, deadzones, shift layers and preset recall that the raw HID route does not.

QLC+ supports HID input and its documentation explicitly discusses joystick use with XY Pad and Slider widgets, so the direct route exists. For a single stick driving a single pan/tilt pair it will work, and if that is your entire requirement you should take it.

The reasons to go through MIDI instead are all about what happens between the stick and QLC+:

  • Deadzones. An older controller drifts, and a drifting stick in Relative mode is a moving head that slowly wanders across the stage all night. A bridge applies a deadzone before anything downstream sees it — see how drift compensation actually works.
  • Response curves. Linear stick-to-pan means you have almost no fine control near centre, which is exactly where you need it. A curve fixes that at the source.
  • Shift layers. Twelve buttons becomes twenty-four when a held shoulder button changes the notes being sent, and that happens at the bridge, invisibly to QLC+.
  • Preset recall. Different shows want different maps. Saving them as bridge presets is far easier than maintaining multiple QLC+ profiles. The free tier stores three presets, which covers most working situations.
  • Portability. The same MIDI map works in Lightjams, in Resolume, in a DAW. A HID binding works only in QLC+.

If you want the conceptual background on what the bridge is actually doing to the HID stream, the bridge explainer covers it, and hidapi versus native drivers covers why HID coverage varies so much between controllers.

How do you get the profile built quickly without making a mess?

Use the wizard, but work through the controller in a deliberate order and rename every channel as you go.

The automatic wizard in the Input Mapping tab listens for incoming messages and creates channel entries as you move controls. It is much faster than entering channel, message, parameter and note by hand — but it names things generically, and generic names are how profiles become unreadable.

A working order that produces a tidy profile: left stick X, left stick Y, right stick X, right stick Y, L2, R2, touchpad X, touchpad Y, then buttons in the order Cross, Circle, Square, Triangle, d-pad up, right, down, left, L1, R1, L3, R3, Options. Doing analog first means every continuous channel is grouped at the top of the profile, which makes the Virtual Console binding stage much faster.

Then rename. Every single one. "Left stick X" beats "Channel 3" by a margin you will only appreciate when you reopen the file next year. For MIDI profiles the editor gives you Channel, Message, Param and Note fields so you can enter the specification directly when the wizard gets something wrong.

What goes wrong in a QLC+ gamepad rig?

Absolute mode on a stick, a universe with no input assigned, and a port that was created after QLC+ launched.

  • Fixtures snap back to centre when you let go of the stick. Absolute mode. Change the widget to Relative and tune the sensitivity. This is not a subtle symptom and it has exactly one cause.
  • Nothing arrives at all. Check that the MIDI plugin is assigned as the input for the specific universe you are working in. QLC+ assigns input per universe, and a profile attached to the wrong universe looks identical to a broken one.
  • The bridge port is not in the device list. It was created after QLC+ started. Quit, confirm the port exists at OS level, relaunch. If it is missing at OS level, work through the missing-port decision tree — and if you are on Linux, which many QLC+ users are, the ALSA virtual MIDI guide covers the sequencer side.
  • Relative movement is uncontrollably fast or glacially slow. Sensitivity. Higher values slow adjustments, lower values speed them up. Set it with the real fixtures running, because the right value depends entirely on the fixture's own pan speed.
  • A head drifts across the stage with nobody touching the controller. Stick drift plus Relative mode, which is a nastier combination than drift plus Absolute because the error accumulates. Deadzone at the bridge, not in QLC+.

How do you scale past fourteen controls?

With Virtual Console frames and pages, so the same physical controls address different fixture groups rather than adding more physical controls.

This is the structural problem every controller-driven lighting rig eventually hits. A gamepad has roughly fourteen usable inputs. A modest rig has four fixture types, a dozen parameters each, and a handful of global masters. The arithmetic does not work, and the wrong response is to start stacking two functions onto every button until nobody can remember what anything does.

The right response is to treat the controller as a window onto the rig rather than a map of it. Frames in Virtual Console are the mechanism: you build one frame per fixture group, each containing the same widget layout — an XY Pad, a dimmer slider, a strobe slider, a colour pad — and you bind the controller once to the widget positions rather than to specific fixtures. Paging between frames changes what the sticks address without changing a single binding.

That gives you a mental model that stays constant no matter how big the rig gets: left stick is always position, R2 is always dimmer, the touchpad is always colour, and the d-pad decides who is listening. Four fixture groups is four presses of a d-pad, and the operator's muscle memory never has to change. Fourteen controls times six pages is eighty-four addressable functions with no additional hardware and no cognitive load, because the layout is identical every time.

Two cautions. First, always show the current page somewhere large in the Virtual Console — paging without visible state is how you end up panning the wrong truss during a song. Second, keep the masters off the paging system. Blackout, grand master and your panic path must do the same thing on every page, or they are not a panic path. Put them on controls you deliberately exclude from the frame layout, and test them from every page before you trust the rig.

FAQ

Can QLC+ be controlled with a MIDI controller?

Yes. The QLC+ MIDI plugin provides input and output support for the MIDI protocol, covering channels, Notes, Program Change and Control Change, and is designed to work with MIDI controllers and software sequencers alike.

What is an input profile in QLC+?

An input profile maps the signals coming from an external control device — a MIDI controller, an OSC app, a DMX desk, a joystick — onto channels QLC+ understands, so you can control a show without knowing the underlying protocol.

Where do I create an input profile in QLC+?

In the Inputs/Outputs tab, select a universe and click the create new input profile button. Enter manufacturer and model in the General tab, pick the type, then define channels in the Input Mapping tab manually or with the wizard.

What is the difference between Absolute and Relative in QLC+?

Absolute is the default and uses slider values exactly as they are received, so the widget mirrors the controller position. Relative treats incoming values as movement starting from the widget current position, which suits a joystick driving an XY Pad.

Should a gamepad stick use Absolute or Relative in QLC+?

Relative, in nearly every case. A self-centring stick in Absolute mode snaps the parameter to the middle the moment you touch it, whereas Relative lets you nudge from wherever the value already is.

Does QLC+ support gamepads natively?

QLC+ has a HID path and the documentation references joystick use with XY Pad and Slider widgets, but a MIDI bridge gives you a far richer and more portable mapping — curves, deadzones, shift layers and preset recall that the raw HID route does not provide.

Is QLC+ free?

Yes, Q Light Controller Plus is free and open source, which makes the combination of QLC+ and a controller you already own one of the cheapest credible lighting rigs available.

Build the cheapest credible lighting rig there is

Free software, a controller you already own, and one input profile. Download Universal Controller MIDI, create a named virtual port, and set your first XY Pad to Relative — that one setting is what makes the whole thing feel like a desk.

Keep reading

More setup walkthroughs