LANDR gamepad control is not about pretending an AI mastering service is a real-time instrument. It is about cutting the click-fatigue of going through six tracks across three style options each in the LANDR web UI. We use a PS5 DualSense to drive an A/B/C supervisor script that uploads bounces, plays the loud bits, and lets you approve or reject masters with thumbs — no mouse, no tab-switching, no losing your headphone level. This guide wires LANDR to a controller via Universal Controller MIDI.
- What it is: a gamepad supervisor for LANDR's mastering pipeline.
- What it does: upload, A/B/C three styles, approve, download — all from a DualSense.
- What it saves: roughly 90 seconds per track of UI fiddling, plus the headphone-volume drift from tab-switching.
- What it does not do: make LANDR better. The AI is the AI. The gamepad is just a faster lens on it.
The problem with the LANDR web UI
LANDR's interface is fine for one track. Past three tracks, the friction is real: click upload, wait, click each style preset, wait for the preview to load, click play, click pause, click another preset, lose your spot, click again. Every click is a moment of focus you spent on UI rather than on listening. The supervisor pattern moves the entire workflow into headphones — uploads happen in the background, previews auto-play the loudest 8 bars, and the gamepad keeps your hands on a single surface while your ears stay on the music.
What the gamepad actually controls
| Input | MIDI | Action |
|---|---|---|
| X (Cross) | Note 60 | Pick "Warm" style |
| Circle | Note 61 | Pick "Balanced" style |
| Square | Note 62 | Pick "Open" style |
| Triangle | Note 63 | Pick "Loud" style |
| L2 trigger | Note 64 | Upload current bounce to LANDR |
| R2 trigger | Note 65 | Approve current master, download keeper |
| R1 bumper | Note 66 | Reject, re-render with next style |
| Touchpad click | Note 67 | Re-play loudest 8 bars |
| D-pad up/down | Note 68/69 | Next/previous track in queue |
| Left stick Y | CC 7 | Master preview volume |
The supervisor script
The script orchestrates LANDR's watched-folder app or API and a local audio player. It listens to the bridge for MIDI events, fires the right action, and updates a tiny terminal UI with current state. Node + a few packages — nothing exotic.
// landr-supervisor.mjs
import easymidi from 'easymidi';
import { spawn } from 'node:child_process';
import fs from 'node:fs/promises';
import path from 'node:path';
const STYLES = ['warm', 'balanced', 'open', 'loud'];
const queue = await fs.readdir('./to-master');
let currentTrack = queue[0];
let currentStyle = 'balanced';
const input = new easymidi.Input('Universal Controller MIDI');
input.on('noteon', async (m) => {
switch (m.note) {
case 60: case 61: case 62: case 63:
currentStyle = STYLES[m.note - 60];
await dropIntoLandrWatcher(currentTrack, currentStyle);
break;
case 65:
await approveAndDownload(currentTrack, currentStyle);
break;
case 66:
currentStyle = STYLES[(STYLES.indexOf(currentStyle) + 1) % 4];
await dropIntoLandrWatcher(currentTrack, currentStyle);
break;
case 67:
previewLoudBars(currentTrack, currentStyle);
break;
}
});
async function dropIntoLandrWatcher(track, style) {
const dst = path.join(process.env.LANDR_WATCH, `${track}_${style}.wav`);
await fs.copyFile(`./to-master/${track}`, dst);
}
async function approveAndDownload(track, style) {
const src = path.join(process.env.LANDR_RESULTS, `${track}_${style}_mastered.wav`);
const dst = `./releases/${new Date().toISOString().slice(0, 10)}/${track}`;
await fs.mkdir(path.dirname(dst), { recursive: true });
await fs.rename(src, dst);
}
function previewLoudBars(track, style) {
spawn('afplay', [
path.join(process.env.LANDR_RESULTS, `${track}_${style}_mastered.wav`),
]);
} Why "play the loudest 8 bars" matters
When you are A/B-ing masters, the only bit that matters is the loudest section. That is where compression artefacts surface, where the limiter ceiling becomes obvious, where the difference between "Warm" and "Loud" is audible. Skipping straight to that section saves you the intro and the breakdown. The supervisor script scans the WAV for the highest-RMS 8-bar window and starts playback there. Cheap, fast, and it changes how quickly you can make a confident call.
The four LANDR styles, in plain English
- Warm. Gentle low-end emphasis, softer top. Good for jazz, neo-soul, lo-fi.
- Balanced. The safe default. Most pop, indie, electronic.
- Open. Brighter, less compressed. Acoustic, ambient, anything with breathing room.
- Loud. Aggressive limiting. Hip-hop, EDM, anything that needs to hit on a car system.
The supervisor workflow in 30 seconds
- D-pad up to the first track in the queue.
- X to mark intent as "Warm", L2 to upload to LANDR.
- Wait ~90 seconds. The script auto-plays the loudest 8 bars when the master is ready.
- R1 to cycle to "Balanced", listen again. R1 again for "Open".
- R2 on your favourite — the master gets renamed into
/releases/YYYY-MM-DD/with the track name. - D-pad up to the next track.
Where AI mastering still falls short
LANDR is good. It is not a substitute for a human engineer on a release that matters. The blind spots are: low-end clarity on tracks with sub-bass and kick that share fundamentals, dynamic restraint on quiet acoustic material (the limiter sometimes over-eggs the loud), and tonal corrective EQ on a mix that already has problems baked in. Read LANDR's mastering best practices before you submit anything — most issues are upstream of the AI.
The verdict
AI mastering services live and die on workflow friction. LANDR's web UI is fine for one track; it is exhausting for ten. A gamepad supervisor flips the ergonomics — your hands stay on a single surface, your ears stay on the music, and you can A/B/C three styles in the time it takes to load one preset in the browser. It pairs well with the reference-tracks gamepad workflow from the same rig. Universal Controller MIDI sends the MIDI; LANDR does the actual mastering; the gamepad keeps you in the chair.