Ports and endpoints
Every UDP port the devices listen on, and every place each one sends, stated per device. One page, because the alternative is what happened on 2026-09-24: three files disagreed about the A³ Mixer’s address and port, and each of them looked authoritative on its own.
Everything below was measured on the running rig, not read out of a config file. Where a config disagrees with this page, the config is the thing to fix.
Hosts
Device |
Address |
|---|---|
A³ Core |
|
A³ Mixer |
|
A³ Motion’s UI currently runs on the Core machine, which is why Core and
the beat-analyzer address it as 127.0.0.1. On a rig where it runs on its own
Raspberry Pi that becomes the Pi’s address; nothing else changes.
Cabling
The router has one free port, so the A³ Mixer hangs on the Core machine’s second socket, and the Core bridges its two sockets into one segment (since 2026-09-25):
router 192.168.8.1 ───── eno1 ┐
├─ br0 A³ Core 192.168.8.10
A³ Mixer 192.168.8.11 ── enp5s0 ┘
The address lives on
br0, not on either socket.networkctlshowsbr0as routable and both sockets as enslaved.Spanning tree is on, so the bridge forwards about thirty seconds after boot, not at once.
The Core sits in the path. With the Core machine off, the A³ Mixer has no network.
The a3-core package writes this: its install asks for the second socket (
a3-core/bridge-with, empty for no bridge) and for the address. See the a3-core README.
Measured on the rig after a cold boot (2026-09-25): the mixer answers in 0.7 ms, the router in 0.5 ms.
The list
Per service: where it sends, and where its return arrives. A send is an address and port on the far end; a return is a port this service holds open.
A³ MIXER
send 192.168.8.10:9000 Core gain, EQ, volume, PFL, FX, 3D toggle
192.168.8.10:7775 beat-analyzer /tap
return 7772 VU and lamp state
A³ MOTION
send 127.0.0.1:9000 Core positions, clip settings, /state/recall
127.0.0.1:7775 beat-analyzer /tap, /beat, /clockmode
return 7771 relayed state, recall answer, /beat
7772 /vu/0..11
7777 /EnergyVisualizer/RMS
A³ CORE
send 127.0.0.1:9001 REAPER everything that becomes audio
127.0.0.1:7771 A³ Motion relayed state, recall answer
192.168.8.11:7772 A³ Mixer VU and lamp state
return 9000 commands from Mixer, Motion, analyzer
9002 REAPER feedback
REAPER
send 127.0.0.1:9002 A³ Core what a fader or a plugin did
127.0.0.1:7777 A³ Motion /EnergyVisualizer/RMS (IEM plugin)
return 9001 from Core
1337-1340 its own OSC devices
BEAT-ANALYZER
send 127.0.0.1:7771 A³ Motion /beat
127.0.0.1:7772 A³ Motion /vu/0..11
192.168.8.11:7772 A³ Mixer /vu/0..11
192.168.43.96:9000 radla /beat
192.168.43.96:9001 radla /vu/0..11
return 7775 /beat, /tap, /clockmode
50000-50002 Pioneer Pro DJ Link
Three of these are worth reading twice.
REAPER sends to A³ Motion directly. /EnergyVisualizer/RMS is a VST3
plugin inside the REAPER project addressing Motion on 7777. It does not pass
through Core, which is why Core’s register marks it aside and why it keeps
working across things that stop Core.
A³ Core holds two return ports on purpose. Reading REAPER’s feedback on the same port as commands would have Core answering its own reports — a loop on a rig that is making sound.
radla is off this subnet. 192.168.43.96, reached through the gateway
at 192.168.8.1, and it answers — a live target, not a leftover. Worth saying
because the two other 192.168.43.x addresses that used to sit in the
analyzer’s config (.55 for the Mixer, .54 for Motion) are dead and were
wrong. What radla does with what it receives is not documented here.
Ports, by listener
Port |
Listener |
|---|---|
7771 |
A³ Motion UI — control |
7772 |
A³ Motion UI — VU |
7772 |
A³ Mixer — VU (same number, different host) |
7775 |
beat-analyzer — beat clock |
7777 |
A³ Motion UI — energy |
9000 |
A³ Core — commands |
9001 |
REAPER |
9002 |
A³ Core — REAPER’s feedback |
50000–50002 |
beat-analyzer — Pioneer Pro DJ Link |
1337–1340 |
REAPER — its own OSC devices |
A³ Core
The machine that makes the sound. It has no interface of its own; everything it does, something else asked for.
Receives
Port |
From |
What |
|---|---|---|
9000 |
A³ Mixer, A³ Motion, beat-analyzer |
Commands: gain, EQ, volume, PFL, FX, positions, |
9002 |
REAPER |
Feedback: what a fader or a plugin actually did |
Sends
To |
Port |
What |
|---|---|---|
REAPER |
9001 |
Everything that becomes audio |
A³ Motion UI |
7771 |
Relayed state and the answer to |
A³ Mixer |
7772 |
VU and lamp state |
Two receive ports rather than one is deliberate: reading REAPER’s reports on the same port as commands would have Core answering its own feedback — a loop on a rig that is making sound. See OSC.
A³ Mixer
Four channels of desk. Sends what the hands do; receives what the meters and lamps should show.
Receives
Port |
From |
What |
|---|---|---|
7772 |
A³ Core, beat-analyzer |
|
Sends
To |
Port |
What |
|---|---|---|
A³ Core |
9000 |
gain, EQ, volume, PFL, FX, the 3D toggle |
beat-analyzer |
7775 |
|
/tap goes straight at the beat-analyzer rather than through Core. Core’s
handler for it is gone.
A³ Motion
The one with the screen. Records movement trajectories and plays them back in time.
Receives
Port |
From |
What |
|---|---|---|
7771 |
A³ Core, beat-analyzer |
Relayed channel state, the recall answer, |
7772 |
beat-analyzer |
|
7777 |
A³ Core |
|
Sends
To |
Port |
What |
|---|---|---|
A³ Core |
9000 |
Positions, clip settings, |
beat-analyzer |
7775 |
|
Three receive ports because the three streams have nothing to do with each other and very different rates: control is occasional, VU is 25 Hz, and the energy sphere is 426 floats a frame.
beat-analyzer
Beat detection and VU metering, straight off JACK.
Receives
Port |
From |
What |
|---|---|---|
7775 |
A³ Motion, A³ Mixer |
|
50000–50002 |
Pioneer Pro DJ Link |
Keep-alive, beat packets, status |
Sends
To |
Port |
What |
|---|---|---|
A³ Motion UI |
7771 |
|
A³ Motion UI |
7772 |
|
A³ Mixer |
7772 |
|
Targets are named in its .env as OSC_HOST_<name> and OSC_VU_<name>. With
no .env present it falls back to a single target on 127.0.0.1 — so a build
directory without one reaches nothing off the machine, quietly.
REAPER
Core’s engine. Not a device anyone touches, but it holds ports and it is easy to confuse with Core because the numbers are adjacent.
Receives on 9001, from Core. Sends to Core on 9002. It also holds 1337–1340 for its own OSC devices.
Two things worth knowing
The same port number appears on more than one host, on purpose. 7772 is
“the VU port” on both A³ Motion and the A³ Mixer. Reading a port number
without its host is how 192.168.43.55:7771 came to sit in a config file: the
port was taken from the wrong device and the address from an older network.
A port a device sends from is not a port anything listens on. Every device also holds a handful of high-numbered ephemeral sockets; those are the kernel’s, they change on every start, and they mean nothing. Only the ports on this page are fixed.
The numbering, and what would be better
The present allocation grew rather than being chosen, and it shows:
7771,7772,7775,7777are four ports in one range with three different owners and two gaps.9000,9001,9002interleave Core and REAPER, so “the 900x port” is ambiguous in exactly the conversation where it matters.Nothing about a number says which device owns it.
A scheme where the block says the owner would remove a class of mistake:
Block |
Owner |
|---|---|
|
A³ Core |
|
REAPER, as Core’s engine |
|
A³ Motion |
|
A³ Mixer |
|
beat-analyzer |
with the offset inside a block keeping its meaning everywhere: +0 control,
+1 VU, +2 energy, +5 beat clock.
This is a proposal, not the current state. Renumbering touches all four devices plus the REAPER OSC config, and a half-done renumbering is worse than an untidy one that works — a device sending into a port nobody holds is silent, and silence is the hardest fault here to see. The tables above are what the rig does today.