WebsiteGet Ultimate VJ
DocumentationCommon questions

Control and integrations

On this page

Can I control it from a MIDI controller?

Yes. Connect a source explicitly at Settings → MIDI → Connect MIDI, then learn:

  • Learn selected clip - a note to that clip
  • Learn selected column - a note to that column
  • Learn parameter CC - a continuous control to one of six parameters: layer opacity, master opacity, crossfader, BPM, clip speed, clip playhead

MIDI input always starts disconnected at launch, and reconnecting is unique-ID only - a device with the same name will never be substituted for yours. See Keyboard and MIDI.

Does my controller's lighting / LED ring work?

Partly, and only through standard messages. Feedback is a separate destination connection you make explicitly. Lit clips send Note On velocity 127, inactive ones Note Off velocity 0, at up to 10 Hz.

Device-specific LED colours, protocols and motorized-fader profiles are explicitly out of scope and were not verified against hardware.

CC feedback isn't responding with relative encoders

That is intentional. Each mapping has a CC feedback picker:

  • Input mode default keeps relative mappings silent and enables absolute/pickup mappings
  • Off never sends
  • Absolute 0–127 always sends, whatever the input mode

Feedback never emits relative movement deltas. Note also that fixed ranges (max == min) send nothing.

Why does nothing happen until I move my fader to a particular spot?

That is pickup, and only if you chose Absolute · pickup. It waits until the fader reaches - within half a CC step - or crosses the target's actual value, so a physical fader cannot jump the parameter when you touch it.

It re-arms on changing bank, any native change to that target (including undo and REST/OSC writes), input overflow, and reconnect. Acquisition is runtime-only, so reopening a set re-arms it. Each mapping acquires independently.

Yes, for tempo and bar phase. Enable Settings → Ableton Link → Enable Ableton Link; peers join automatically and the UI shows peer count and phase.

Link does not sync transport start/stop or play state. While Link is on it overrides everything - manual tempo edits merely propose to the session, and Auto BPM yields entirely.

Can it follow MIDI clock / timecode?

No. There is no MIDI clock input, no MTC, no song-position pointer, and no clock output. The receive path accepts Note On, Note Off and Control Change and drops everything else before it becomes a show command.

The available alternatives are Ableton Link, tap tempo (shortcut T) and Auto BPM.

Does tempo detection actually work?

It works, with honest limits. BPM detection is an onset estimator, so syncopated and non-percussive material stay genuinely ambiguous, as does half/double tempo. When the app is unsure it says "Beat detected · tap to choose half or double time." rather than silently picking.

Confidence is explicitly documented as not a calibrated probability - it is a stability indicator. Auto BPM only adopts estimates at 0.65 confidence or above.

File analysis covers the first 120 seconds; the input detector uses a rolling 12-second horizon.

Can I automate it from a script?

Yes, three ways: REST, OSC and MCP - plus WebSocket for state events. Start it at Settings → Connections → Start local control; nothing listens until you do.

It binds to loopback only (127.0.0.1), authenticates with a bearer key you copy from the UI, and publishes a full OpenAPI 3.1.1 description of itself at /api/v1/openapi.json so you do not have to guess endpoints.

Targets are addressed by persistent UUIDs, discoverable through paginated /targets. Everything is bounded

  • 64 clients, 64 commands per envelope, a 2-second future-scheduling horizon. Those caps exist so a misbehaving script is refused rather than served; they are a resource bound, not a real-time reliability guarantee. See Local control API.

Can an AI agent drive it?

Yes, through the MCP endpoint at http://127.0.0.1:<REST port>/mcp, protocol version 2026-07-28, stateless, with eight tools: uvj_capabilities, uvj_state, uvj_targets, uvj_target_state, uvj_apply, uvj_receipt, uvj_heartbeat, uvj_disconnect.

Each maps one-to-one onto the REST handlers, and the tool schemas are derived from the same models, so they cannot drift.

Can I control it from an iPad or another computer?

Not directly. The API binds IPv4 loopback only; there is no Bonjour service, no wildcard listener and no LAN access. Second-host operation does not exist today.

A local proxy that forwards to loopback is outside what the app provides, and would be your own responsibility for security - the access key is the only authentication.

Can I use a QWERTY keyboard as a controller?

Yes. Keyboard mappings support clip, column, cue and fixed numeric value parameter keys. Cue rows in Clip → Transport offer Learn key and Learn MIDI note. Parameter keys cover six continuous targets but set one captured value per press. Those are the notable constraints: a learned parameter key writes one captured value per press rather than acting as a continuous control.

Shift and Option are capturable; Command and Control are reserved and can never conflict with menus. Keys are stored by physical macOS position, so labels are display-only. Mappings save with the set.

Not verified

  • All real hardware behaviour: every MIDI claim here rests on virtual CoreMIDI endpoints in the app's own test suites. No physical controller, LED ring or motorized fader was exercised.
  • Whether the local keyboard monitor shadows AppKit menu key-equivalents for unmodified Space, T, R and the digits - and hence whether a learned mapping on those keys is reachable at all. Test that combination before relying on it.