Skip to main content

AVPro Edge AC-MX88

The avpro_acmx88 driver controls the AVPro Edge AC-MX88 8×8 HDMI matrix switcher. It speaks the AVPro ASCII IP control protocol over TCP — plain-text commands such as SET OUT1 VS IN2, \r\n terminated in both directions, no login. Each of the eight outputs carries two mirrored video ports — an HDMI port and an HDBaseT (Cat-cable) port — plus a separate extracted audio output, so in GEM the AC-MX88 is a controller: one device drives eight output rooms and routes eight source inputs between them.

You route any input to any output for video, and (in matrix mode) route audio independently. Bind each output to an AV zone and each input to an AV source; once an AV zone's Volume Device points at the matrix, the zone's volume/mute controls drive that output and the matrix mirrors the output's state back onto the zone.

Prerequisites

  • The AC-MX88 on the same LAN as GEM, with a static IP or a DHCP reservation.
  • IP control enabled in the AC-MX88 web UI. Note the control port shown there — you enter it when you create the device.
  • A rack map of which physical OUT number feeds each room (and whether that room is on the HDMI port or the HDBaseT port), and which IN number each source is wired to. AVPro numbers OUT/IN ports 1-based, 1–8; confirm the numbering printed on the chassis matches your drawings before you start.
Addressing

An AC-MX88 AV zone address is the output (OUT) number and an AV source address is the input (IN) number — both 1-based integers, 1–8, that match the chassis. The query OUT0 is a wildcard the driver uses internally to read all outputs at once; you never enter 0 as a real zone address.

Setup

  1. System → Devices → Add Device: choose driver AVPro Edge AC-MX88 (avpro_acmx88). Set ip to the matrix's LAN address and port to the IP control port from the AC-MX88 web UI. Set Enabled to Yes and save. On connect the driver sweeps every output's video route, audio route, extracted-audio volume, and mute state once, so the current matrix state populates immediately.

  2. On that first connect the driver also auto-creates one plain zone per outputOutput 1 through Output 8, each addressed with its OUT number — in the AV subsystem. You do not pre-create these; they appear on their own and are where the driver mirrors live per-output state. (The AV subsystem ships with GEM; if it has been removed, the zones can't be created.)

  3. AV → AV Zones → Add — create one AV zone per output you want on a touchpanel:

    • AV Typevideo for a display/room fed HDMI or HDBaseT; audio if you only use the output's extracted audio.
    • Address — the OUT number for this room (e.g. 3 for OUT3). This one number covers both video routing and volume, because the matrix addresses both by output.
    • Volume Device — the Device that controls volume for this zone picker. Set it to the AC-MX88 so the zone's volume and mute controls reach that output. (See Volume, mute, and the three audio paths below for exactly what they affect.)
  4. AV → AV Sources → Add — create one AV source per input:

    • Device — the physical source feeding that input (cable box, streamer, media player).
    • AV Type, Label — required; the label is what users see when they pick the source.
    • Address — the IN number this source is wired to (e.g. 5 for IN5).
    • On Macro — the route command (see Routing a source to a zone below).
  5. On a touchpanel, selecting a source for the zone runs that source's On Macro to route the input to the zone's output; the zone's volume/mute controls drive the output directly.

Routing a source to a zone

GEM does not auto-route a matrix — a source is routed by its On Macro. Build one Run Command macro and reuse it for every AC-MX88 source:

  1. Automation → Macros → Add a macro, e.g. Route AC-MX88.
  2. Add a step that sends the AC-MX88 set_input command (wire: SET OUT[address] VS IN[input]). This is the video route — it switches both the HDMI and HDBaseT mirror ports of the output together.
  3. Leave its argument pickers on the AV defaults — address resolves to the AV zone's OUT number and input resolves to the AV source's IN number. GEM fills both in at run time from whichever zone and source are involved, so the single macro works for all of them.
  4. Set this macro as the On Macro on each AC-MX88 AV source.

When a user picks that source in a zone, GEM substitutes the zone's OUT and the source's IN and sends SET OUT<out> VS IN<in>. The matrix reports the new route back and the zone's input attribute updates.

Independent audio routing

By default audio follows the video route. To route audio separately from video, set the matrix to full-matrix audio mode once with set_audio_matrix_mode (mode = 2), then route audio with the audio_source command (SET OUT[address] AS IN[input]). In the default binding modes (0 bind-to-output, 1 bind-to-input) audio_source has no effect — the video route carries the audio. The driver tracks the routed video input on the zone's input attribute and the routed audio input on audio_input; it never writes the zone's source field, which GEM manages from your AV source selection.

Volume, mute, and the three audio paths

Every output on the AC-MX88 has three independent audio surfaces, and GEM's controls map to specific ones — know which before you commission:

  • Extracted audio (EXAUD) — the output's dedicated audio breakout, typically feeding a local amp or the room's audio system. The zone's volume control (volume command, SET OUT[address] EXAUD LEV[level], 0–100) drives this level.
  • HDMI-port embedded audio (HP) — the audio inside the HDMI mirror output. The zone's mute control (mute_on / mute_off, SET OUT[address] HP HA MUTE ON/OFF) mutes this path. mute_toggle is synthesized from the last known mute state.
  • HDBaseT-port embedded audio (TP) — the audio inside the HDBaseT (Cat-cable) mirror output. This has its own mute commands (hdbt_mute_on / hdbt_mute_off) — the zone's standard mute does not touch it.

Practical consequences:

  • If a room's audio rides the HDBaseT link to a downstream receiver, the zone's standard volume and mute won't silence it — control volume at the receiver, or use the HDBaseT mute commands in a macro. The zone volume/mute path is meant for rooms driven off the extracted audio output and HDMI port.
  • To fully kill a room's picture and sound at the matrix, use the per-port stream commands (hdmi_stream_off / hdbt_stream_off), which disable the whole output signal, rather than mute alone.

Attributes

Device — required

AttributeTypeDescription
ipstringLAN IP of the AC-MX88.
portintIP control (TCP) port from the AC-MX88 web UI.

Reflected output-zone attributes

The driver writes these onto the auto-created output zone as the matrix confirms each command and during the connect sweep. You can watch them live in the Attribute editor and use them in attribute triggers — for example, alert when an input loses signal or when an output's routed input changes.

AttributeTypeNotes
inputintThe IN number currently routed to this output (video).
audio_inputintThe IN number currently routed for audio (only differs from input in full-matrix audio mode).
volumeintExtracted-audio output level, 0–100.
mute_statestringOutput audio mute, on / off. The matrix reports HDMI-port and HDBaseT-port mute onto this one value, so it reflects whichever the driver read most recently.
hdmi_streamstringHDMI mirror-port signal, on / off.
hdbt_streamstringHDBaseT mirror-port signal, on / off.
Status is read on connect, not on a poll

The AC-MX88 reads all outputs once when GEM connects (and again after any reconnect) — it does not poll on a cycle. After that, the displayed state stays current because the driver applies the matrix's own confirmations to every command it sends. A change made outside GEM — at the matrix web UI or front panel — shows up the next time GEM reconnects, not immediately. For a manual refresh, run get_system_status, or the per-output get_video_route / get_audio_route / get_volume queries (pass 0 as the address to sweep all outputs at once).

AV zone

  • Address required: yes — the output (OUT) number, 1-based (1–8), in the AV zone's Address field. A zone whose Volume Device is the AC-MX88 is what the driver drives for that output.
  • Advanced addressing: the AC-MX88 addresses video and audio by the same OUT number, so the plain Address field is all you need. The Advanced addressing panel (separate Video Routing / Audio Routing fields) is only for matrices that split those addresses — leave it off here.

AV source

  • Address: the input (IN) number, 1-based (1–8), in the AV source Address field. The source's On Macro routes this input to the chosen zone output.

Commands

get_* commands take an output (address) or input (input) argument and return current state; the rest are control commands. The address argument is an AV zone (output) address and input is an AV source (input) address — the pickers offer your real zones and sources, and most get_* commands also accept 0 to query all outputs/inputs at once.

Routing

CommandArgsWireNotes
set_inputaddress, inputSET OUT[address] VS IN[input]Route an input to an output (video; drives both mirror ports). Used by AV source On Macros.
audio_sourceaddress, inputSET OUT[address] AS IN[input]Route audio independently — only in full-matrix audio mode.
set_ir_routeaddress, inputSET IRT OUT[address] IS IN[input]Route the bidirectional IR pass-through channel between an output and input.

Volume & mute (per output)

CommandArgsWireNotes
volumeaddress, levelSET OUT[address] EXAUD LEV[level]Set the extracted-audio output level, 0–100.
get_volumeaddressGET OUT[address] EXAUD LEVRead the extracted-audio level.
mute_on / mute_offaddressSET OUT[address] HP HA MUTE ON/OFFMute / unmute the HDMI-port audio.
hdbt_mute_on / hdbt_mute_offaddressSET OUT[address] TP HA MUTE ON/OFFMute / unmute the HDBaseT-port audio.
get_hdmi_muteaddressGET OUT[address] HP HA MUTERead HDMI-port mute state.
get_hdbt_muteaddressGET OUT[address] TP HA MUTERead HDBaseT-port mute state.

Output stream on/off

CommandArgsWireNotes
hdmi_stream_on / hdmi_stream_offaddressSET OUT[address] HP STREAM ON/OFFEnable / disable the HDMI mirror-port signal.
hdbt_stream_on / hdbt_stream_offaddressSET OUT[address] TP STREAM ON/OFFEnable / disable the HDBaseT mirror-port signal.
enable_audio_output / disable_audio_outputaddressSET OUT[address] EXA EN/DISEnable / disable the extracted-audio output.

Audio processing (per output)

CommandArgsWireNotes
set_audio_delayaddress, delay (07)SET OUT[address] EXADL PH[delay]Lip-sync delay on extracted audio: 0 = bypass, 17 = 90–630 ms.
set_eq_modeaddress, mode (07)SET OUT[address] EXEQ MODE[mode]Audio EQ preset: 0 Off, 1 Classical, 2 Headphone, 3 Hall, 4 Live, 5 Pop, 6 Rock, 7 Vocal.
set_audio_matrix_modemode (0/1/2)SET EXAMX MODE[mode]Whole-matrix audio mode: 0 bind to output, 1 bind to input, 2 full matrix (enables audio_source).

Video output modes

CommandArgsWireNotes
set_hdbt_video_modeaddress, mode (2/5)SET OUT[address] TP VIDEO[mode]HDBaseT scaling: 2 = 4K→2K downscale, 5 = ICT (full-bandwidth) mode.
set_hdmi_video_modeaddress, mode (1/3)SET OUT[address] HP VIDEO[mode]HDMI scaling: 1 = bypass, 3 = 2K→4K upscale.
set_long_range_modeaddress, state (EN/DIS)SET OUT[address] LR MODE [state]HDBaseT long-range mode (reduced bandwidth for longer cable runs).

EDID

CommandArgsWireNotes
set_edidinput, edid (032)SET IN[input] EDID [edid]Set the EDID presented to a source input. Fixes handshake / no-picture issues; values per AVPro documentation.

Queries

CommandArgsWire
get_video_routeaddressGET OUT[address] VS
get_audio_routeaddressGET OUT[address] AS IN
get_input_signalinputGET IN[input] SIG STA
get_input_video_infoinputGET IN[input] VID FMT INF
get_input_audio_infoinputGET IN[input] AUD FMT INF
get_system_statusGET STA
get_global_statusSTA
get_dhcp_statusGET DHCP
get_ip_addressGET HIP
get_mac_addressGET MAC

System

CommandArgsWireNotes
rebootSET RBTReboot the matrix.
factory_resetSET RSTReset to factory defaults — clears all routing and settings.
helpHDevice help / command list.

Known quirks

  • Output zones are auto-created, not pre-built. The eight Output N zones appear the first time the matrix answers for that output — the connect-time all-outputs sweep creates all eight. Pre-creating them is not required; if their addresses ever look wrong, re-run get_video_route with address 0 to refresh.
  • OUT/IN numbers are 1-based and must match the chassis labels. OUT0 is an internal all-outputs query, never a real zone address.
  • Audio follows video unless you switch modes. audio_source only takes effect after set_audio_matrix_mode is set to full matrix (2); otherwise the video route carries the audio.
  • mute_state collapses two ports. The matrix reports HDMI-port and HDBaseT-port mute onto the same mute_state attribute, so the reflected value tracks whichever port was read last. Use the port-specific get_hdmi_mute / get_hdbt_mute queries when you need to be certain.
  • Status is read on connect, not on a poll. Changes made directly at the matrix (web UI or front panel) appear after GEM's next reconnect. Run a get_* query for an on-demand refresh.

Troubleshooting

SymptomCheck
Source select does not switch the pictureThe source needs an On Macro that runs the set_input command (see Routing a source to a zone). Confirm the source Address is the right IN number and the zone Address is the right OUT number.
Video switches but audio doesn't followIf you routed audio with audio_source, confirm the matrix is in full-matrix audio mode (set_audio_matrix_mode = 2). In the default binding modes, only set_input routes audio.
Zone volume or mute does nothing for a roomConfirm the AV zone's Volume Device is set to the AC-MX88 and the Address is the output's OUT number. If the room is fed over HDBaseT to a receiver, the matrix's extracted-audio volume/HDMI mute won't affect it — control volume at the receiver or use the HDBaseT mute commands.
No picture on one display, others fineTry setting that input's EDID (set_edid) to a mode the display supports; check the output's video scaling mode (set_hdmi_video_mode / set_hdbt_video_mode) matches the display.
Sparkles / dropouts on a long HDBaseT runEnable set_long_range_mode (EN) on that output for reduced-bandwidth, longer-cable operation.
Auto-created output zones have wrong addressesThe driver creates zones from incoming OUT responses. Run get_video_route with address 0 to refresh, and confirm the matrix responds with the \r\n terminator.
Reported state is stale after a web-UI changeStatus is read on connect, not polled. Reconnect the device, or run get_system_status / the per-output queries.
  • AV Zones — bind each output as a zone's Volume Device.
  • AV Sources — define the inputs and their routing macros.
  • Macros — build the source On Macro.
  • Devices — add and configure the matrix.
  • Commands — the command grid and the Test runner.