Skip to main content

DigitaLinx AV over IP

The digitalinx driver controls a DigitaLinx (Intelix) AV-over-IP system — the encoders (transmitters) and decoders (receivers) that carry HDMI video, audio, USB, IR and serial over a network switch instead of a hard-wired HDMI matrix. Every source (cable box, media server, PC, game console) plugs into an encoder, every display plugs into a decoder, and all of them live on a managed switch. In GEM, one device is the DigitaLinx "Linx" controller, and you route any source to any display by telling a decoder to join an encoder's stream.

DigitaLinx is a virtual matrix: unlike a fixed HDMI matrix with numbered OUT/IN ports, video, audio, USB, IR and serial each route independently, endpoint-to-endpoint. "Show source 2 on display 4" means telling decoder 4 to join encoder 2 — the network is the matrix, so it grows to as many endpoints as the switch fabric allows.

GEM talks to the Linx controller, not each box

GEM adds one device, and points it at the Linx controller (the DigitaLinx control unit), not at an individual encoder or decoder. Every command is an HTTP request to that controller, which relays it to the endpoints. You still name a source encoder and a destination decoder in each route — GEM just sends those through the one controller.

Commission the DigitaLinx hardware and network first

GEM routes streams; it does not configure the endpoints or the switch. Provision the encoders and decoders (IP addresses, endpoint names, stream settings) in DigitaLinx's own tooling, and set the network switch up for multicast — IGMP snooping on, an IGMP querier active, and the DigitaLinx units on a multicast-capable VLAN. Without proper multicast handling, decoders show snow or freeze on route changes. Once each box has a reachable name on the controller and the switch passes multicast cleanly, GEM can route between them.

Prerequisites

  • The DigitaLinx (Linx) controller reachable on the same LAN as GEM, with a static IP or a DHCP reservation.
  • API access enabled on the Linx controller, and its security key copied. Every command GEM sends carries this key; if it is wrong or rotated, all commands fail.
  • Every encoder and decoder already bound to the controller, and a note of each endpoint's name — that name is what you enter as the zone Address in GEM. Run get_devices (below) to list them.
  • A note of which encoder feeds each source and which decoder drives each display, so you can match names to rooms.

Setup

  1. Enable the API on the Linx controller. From the controller's web UI, turn on API access and copy the security key.

  2. System → Devices → Add Device — choose driver DigitaLinx AV over IP (digitalinx). Set:

    • Controller IP (ip) — the LAN address of the Linx controller (not an individual encoder or decoder).
    • API Security Key (security_key) — the key you copied from the controller. This is stored encrypted.
    • Status Poll Interval (ms) (status_interval) — optional, default 30000 (30 s). How often GEM reads each endpoint's status. On large systems (50+ endpoints) raise this — polling walks every zone with a 2-second gap between endpoints, so a big system can otherwise overlap its own polls.

    Set Enabled to Yes and save. GEM connects over plain HTTP (port 80) and POSTs each command to /api/command with the security key in the request body.

  3. List the endpoint names. Run the get_devices command against the DigitaLinx device with target set to all (or all_tx for encoders only, all_rx for decoders only). The quickest way: System → Commands, pick the DigitaLinx device as the test device, find get_devices, and run it. The response lists the encoder and decoder names the controller knows about — those exact names are what you enter as zone Addresses next.

  4. Create one zone per endpoint. Under System → Zones, add a zone in the AV subsystem for each encoder and each decoder you will control. Set the zone Address to the endpoint's DigitaLinx name exactly as it appears in get_devices — the Address is the identifier GEM routes on and polls status for. Give each a room-friendly Label (the Label is cosmetic; the Address is the key).

    No auto-discovery — zones are added by hand

    Unlike some AV-over-IP drivers, DigitaLinx does not create zones for you. There is no "sync" or "discover" command; you add one zone per endpoint yourself, using the names from get_devices as the Addresses. A typo in the Address looks identical to a disconnected endpoint — the zone's status will simply never update.

  5. Route a source to a display. Run a join_* command with the encoder set to the source endpoint and the decoder set to the display endpoint (both are zone pickers listing your endpoint zones). Start with join_fast for most rooms. See Routing below.

Routing

A DigitaLinx route names a source encoder and a destination decoder, and picks a join mode for how the stream is switched. The encoder and decoder arguments both show a picker that lists your endpoint zones and sends each zone's Address (the DigitaLinx name).

CommandModeWhen to use
join_fastFast switchThe everyday "switch this display to that source". Lowest-latency switch; small blink on change.
join_syncGenlockedSwitches with the decoders genlocked — cleaner on tiled/side-by-side displays.
join_sync_scaleGenlocked + scaledGenlocked and scaled to a forced width/height (e.g. 1920×1080 or 3840×2160).
join_advAdvancedFast/sync with explicit aspect (keep / crop / stretch) and flags.
join_audio_analogAnalog audio onlyRoute just the analog audio path (audio_a) to a decoder.
join_audio_digitalDigital audio onlyRoute just the digital audio path (audio_d) to a decoder.
join_irIR onlyPass IR between the two endpoints.
join_serialSerial (RS-232)Route serial, optionally bidirectional.
join_usbUSB / KMRoute USB from the decoder side to the encoder side.
join_multiMultiviewAdd an encoder to a decoder's multiview layout (subscription, scaled, layout).
join_wallVideo wallPlace an encoder onto a wall decoder at a display position within a wall type grid.
joinAnyThe general form: pick the mode yourself from a dropdown, plus encoder and decoder.

Route flags (booleans)

The join commands expose several on/off flags. These matter most when you build a Send Command step in a macro, because DigitaLinx encodes a flag by presence — turning it on adds the keyword to the command, turning it off leaves it out entirely:

FlagEffect when on
avRoute audio together with video in one join, instead of video only.
exclusiveMake the join exclusive — the decoder drops its other subscriptions of that type first.
lockGenlock the decoder to the source.
autoAuto-scale the output to the display.

aspect (keep / crop / stretch), width, height and fps (30 / 60) further tune how the stream fills the display where the mode supports it.

Un-routing (leave)

To blank a display or drop one path without routing a new source, send a leave_* command against the decoder. Most take a decoder picker that also offers all to clear every decoder at once.

CommandClears
leave_allEvery stream on the decoder (or all decoders).
leave_avThe combined audio+video subscription.
leave_videoThe video subscription only.
leave_audio_analogThe analog audio path (audio_a).
leave_audio_digitalThe digital audio path (audio_d).
leave_subscriptionA named subscription on the decoder.
Switch a whole room in one action

Because paths route independently, a "watch this source here" button is usually a macro. Most rooms need only one join_fast (or join_av on join_fast with the av flag) so audio follows video; add join_audio_digital / join_audio_analog only where a room takes audio on a separate path. Automation → Macros → Add a macro per route, add a Send Command step that targets the DigitaLinx device and sends the join with the source encoder and destination decoder selected, and bind that macro to the touchpanel button or source tile that should trigger it.

Streaming (encoders)

An encoder must be streaming for decoders to join it. On most systems the encoders stream continuously once commissioned, but GEM can start and stop a stream and set its multicast address:

CommandArgsNotes
start_avencoder, audio_multicast_address, video_multicast_addressStart the combined AV stream.
start_videoencoder, multicast_addressStart the video stream.
start_audio_analogencoder, multicast_addressStart the analog audio stream.
start_audio_digitalencoder, multicast_addressStart the digital audio stream.
start_subencoder, multicast_addressStart the secondary (sub) stream.
stop_av / stop_video / stop_audio_analog / stop_audio_digital / stop_subencoder, free_modeStop the stream. free_mode = free or free_all releases the multicast group.
stop_ir / stop_serial / stop_usbencoderStop the IR / serial / USB pass-through on the encoder.

Live state

DigitaLinx zones do report status. On the Status Poll Interval, GEM walks each zone in turn, asks the controller for that endpoint's status, and writes it onto the zone as the state attribute. If the controller returns an error for an endpoint, GEM records the message on the zone's error attribute and sets state to error. You can also read status on demand with get_status (per endpoint) or the other get_* commands below.

Practically:

  • A zone tile reflects the endpoint's last polled state; it is not instantaneous — a change made at the DigitaLinx web UI is seen on the next poll (default 30 s).
  • Large systems poll slowly by design (a 2-second gap per endpoint). Raise Status Poll Interval rather than lowering it if polls start to overlap on a big system.
  • DigitaLinx zones do not carry the generic on/off/volume/mute controls — they are routing endpoints, not volume zones. Route with the join/leave commands above; handle room volume at the display or AVR.

Attributes

Device — required

AttributeTypeDescription
ipstringLAN IP of the DigitaLinx Linx controller.
security_keystring (secure)API security key from the Linx controller. Stored encrypted; sent in the body of every command.

Device — optional

AttributeTypeDefaultDescription
status_intervalint (ms)30000How often GEM polls each endpoint's status. Raise on large systems.

Zone (encoder / decoder endpoint)

  • Address required: yes — the endpoint's DigitaLinx name exactly as get_devices reports it. This is the identifier GEM routes on and polls.
  • state — cataloged; GEM fills it from status polling. It is read-only feedback, not something you set. (No other DigitaLinx-specific attributes are pre-cataloged, so the Attribute editor's name picker won't auto-suggest endpoint attributes beyond state.)

Commands

Run any of these from System → Commands (select the DigitaLinx device as the test device), from a macro Send Command step, or from the AI assistant. Any argument shown as a zone picker (encoder, decoder) offers your endpoint zones and sends the zone's Address.

Read / status

get_status, get_devices, get_api, get_version, get_temperature, get_bandwidth, get_display_status, get_preferred_resolution, get_edid, get_video, get_video_mode, get_video_mute, get_video_source, get_video_status, get_video_compress, get_audio_io, get_audio_out, get_audio_source, get_encoder_subscription, get_frame_converter, get_variable — each queries the named endpoint (or, for get_devices/get_api/get_variable, the controller) and returns the current value.

Set (encoder)

CommandArgsNotes
set_video_sourceencoder, valueChoose the encoder's input: auto, hdmi, or dp.
set_video_compressencoder, stateTurn video compression on/off (true / false).
set_audio_ioencoder, valueSet the encoder audio direction: in or out.
set_frame_converterencoder, stream, stateFrame converter on the sub or main stream.
set_edidencoder, dataPush an EDID to the encoder.
set_securityencoder, keySet the security key on an encoder.

Set (decoder)

CommandArgsNotes
set_video_modedecoder, display_mode, aspect, width, height, fpsForce the decoder's output: display_mode = sync / sync_scale / fast; aspect = keep / stretch / crop; res/fps optional. Use when a display goes blank on an unsupported native resolution.
set_video_mutedecoder, state, colorMute (blank) the decoder video (true / false), optionally to a color.
set_audio_outdecoder, valueDecoder audio output: hdmi_2 or analog.
set_audio_sourcedecoder, valueDecoder audio source: hdmi, hdmi_2, hdmi_sync, or analog.

Maintenance

CommandArgsNotes
rebootdeviceReboot one endpoint, or all / all_rx / all_tx.
set_variable / get_variablename, valueRead or write a controller variable by name.
defaultwidth, height, fpsApply a default resolution.

Known limitations

  • No auto-discovery. DigitaLinx has no sync/discover command. Add one zone per endpoint by hand, using the names from get_devices as the zone Addresses.
  • No per-zone volume/mute. DigitaLinx zones are routing endpoints; the generic on/off/volume/mute verbs are not implemented. Room volume belongs to the display or AVR.
  • Independent paths. A video-only join leaves audio/USB/IR wherever they were last routed — send each path you need, or use the av flag to carry audio with the video.
  • Security-key coupling. The security key is sent with every command. Rotating it on the controller breaks every device until you update the API Security Key attribute to match.

Troubleshooting

SymptomCheck
All commands fail / return 401/403The security key is wrong or was rotated. Re-copy it from the Linx controller and update the device's API Security Key (security_key) attribute.
A zone's status never updatesThe zone Address doesn't match a real endpoint name — a typo looks identical to a disconnected endpoint. Run get_devices and confirm the exact name.
Device never connectsConfirm Controller IP is the Linx controller (not an encoder/decoder) and that API access is enabled on it. GEM connects over plain HTTP on port 80 to /api/command.
A route switches video but not audioAudio routes on a separate path. Use the av flag on the join, or send join_audio_digital / join_audio_analog in the same macro.
A display goes blank after a route changeThe source may be outputting a resolution the display can't take. Force a known mode with set_video_mode, or reboot the decoder.
Status polls overlap on a large systemEach poll walks every endpoint with a 2-second gap. Raise Status Poll Interval (status_interval) so a full sweep finishes before the next one starts.
  • Just Add Power and AVPro Edge MXNet — sibling AV-over-IP encoder/decoder systems, for comparison of routing models.
  • Devices — add and configure the DigitaLinx controller.
  • Zones — create the encoder/decoder endpoint zones.
  • Commands — run get_devices and the join/leave commands from the Test runner.
  • Macros — build per-route or per-button switch actions.
  • AV Sources and AV Zones — model sources and rooms for touchpanel source selection.