Skip to main content

Overview

The Art-Net plugin implements the Art-Net protocol for transmitting and receiving DMX512 data over Ethernet networks. Art-Net is an industry-standard protocol widely supported by lighting consoles, controllers, and fixtures.
The plugin name as reported by QLC+ is “Art-Net”

Capabilities

The Art-Net plugin supports:
  • Output - Send DMX data over network
  • Input - Receive DMX data from network nodes
  • Infinite - Unlimited universes
  • RDM - Remote Device Management (experimental)

Protocol Specifications

  • Protocol: Art-Net (UDP-based)
  • Port: 6454 (UDP)
  • Universe Range: 0-32767 (per Art-Net spec)
  • Channels per Universe: 512
#define ARTNET_PORT 6454

Network Interface Structure

The plugin creates a controller for each network interface:
typedef struct _aio
{
    QNetworkInterface iface;          // Network interface
    QNetworkAddressEntry address;     // IP address configuration
    ArtNetController* controller;     // Controller instance
} ArtNetIO;

Configuration

Network Interface Detection

The plugin automatically detects all available network interfaces at startup. You can configure the interface wait time:
#define SETTINGS_IFACE_WAIT_TIME "ArtNetPlugin/ifacewait"
Some systems need time for network interfaces to become fully ready after QLC+ starts. The default wait time ensures interfaces are properly initialized before the plugin attempts to bind to them.

Custom Parameters

Art-Net supports several custom parameters:
#define ARTNET_INPUTUNI "inputUni"       // Input universe number
#define ARTNET_OUTPUTIP "outputIP"       // Output IP address  
#define ARTNET_OUTPUTUNI "outputUni"     // Output universe number
#define ARTNET_TRANSMITMODE "transmitMode" // Transmission mode

Setting Parameters

void setParameter(quint32 universe, quint32 line, 
                  Capability type, QString name, QVariant value);
Example parameters:
  • outputIP - Target IP address (broadcast or unicast)
  • outputUni - Art-Net universe number (0-32767)
  • inputUni - Universe number to listen for
  • transmitMode - Standard, Full, or Partial transmission

Output Configuration

Opening an Output

bool openOutput(quint32 output, quint32 universe);
When you open an output line:
  1. The plugin creates or reuses an Art-Net controller for the network interface
  2. Configures the output universe mapping
  3. Sets up UDP socket for transmission

Output Modes

The Art-Net controller supports three transmission modes:
enum TransmissionMode { 
    Standard,  // Send only changed channels
    Full,      // Always send full 512-channel universe
    Partial    // Send only up to highest changed channel
};
Sends DMX data only when channel values change. Most efficient for typical use.Best for: Normal operation, conserving bandwidth

Sending Data

void writeUniverse(quint32 universe, quint32 output, 
                   const QByteArray& data, bool dataChanged);
The plugin:
  1. Retrieves the Art-Net controller for the output line
  2. Calls sendDmx() with universe and data
  3. Controller packetizes and transmits via UDP

Broadcast vs Unicast

You can configure the output IP address: Broadcast (default):
2.255.255.255  // Subnet broadcast
255.255.255.255 // Limited broadcast
Unicast:
192.168.1.100  // Specific device IP
Unicast is more efficient and reduces network traffic. Use it when you know the exact IP addresses of your Art-Net nodes.

Input Configuration

Opening an Input

bool openInput(quint32 input, quint32 universe);
The plugin listens for Art-Net packets on UDP port 6454.

Receiving Data

When Art-Net packets arrive:
  1. The plugin’s UDP socket receives the datagram
  2. handlePacket() processes the Art-Net packet
  3. Controller emits valueChanged() signal for each changed channel
  4. QLC+ engine receives and processes the input
signal void valueChanged(quint32 universe, quint32 input, 
                        quint32 channel, uchar value);

Input Universe Mapping

Set the Art-Net universe to listen for:
setParameter(universe, line, Input, "inputUni", artnetUniverseNumber);

Universe Mapping

Art-Net uses 15-bit universe addressing (0-32767), while QLC+ has its own universe indexing:
typedef struct _uinfo
{
    int type;                     // Input, Output, or both
    ushort inputUniverse;         // Art-Net universe for input
    QHostAddress outputAddress;   // Destination IP for output  
    ushort outputUniverse;        // Art-Net universe for output
    int outputTransmissionMode;   // Standard/Full/Partial
} UniverseInfo;

Example Mapping

QLC+ UniverseArt-Net UniverseDirectionIP Address
10Output2.255.255.255
21Output192.168.1.100
30Input(listening)
410Both192.168.1.101

RDM Support

The plugin has experimental RDM over Art-Net support:
bool sendRDMCommand(quint32 universe, quint32 line, 
                    uchar command, QVariantList params);
RDM over Art-Net is experimental and may not work with all devices. Most Art-Net nodes do not support RDM.

Network Configuration Best Practices

Dedicated Network

1

Use a dedicated network interface

Dedicate one NIC for Art-Net to avoid conflicts with general network traffic
2

Use appropriate subnet

Common Art-Net subnet: 2.x.x.x or 10.x.x.x
3

Configure static IPs

Avoid DHCP for Art-Net devices to ensure consistent addressing
4

Disable firewall for Art-Net port

Ensure UDP port 6454 is open for both input and output

IP Address Configuration

Recommended ranges:
2.0.0.0/8     // Traditional Art-Net range
10.0.0.0/8    // Private network range
192.168.0.0/16 // Private network range
The 2.x.x.x range is historically used for Art-Net, but any private IP range works fine.

Subnet Broadcast Addresses

For a 255.255.255.0 subnet mask:
2.0.0.255      // 2.0.0.x subnet broadcast
10.0.1.255     // 10.0.1.x subnet broadcast  
192.168.1.255  // 192.168.1.x subnet broadcast

Performance Optimization

Reduce Broadcast Traffic

  • Use unicast when possible instead of broadcast
  • Use Standard or Partial transmission modes
  • Patch only required universes

Network Switch Configuration

  • Use switches with IGMP snooping for multicast
  • Ensure switches support sufficient bandwidth (Gigabit recommended)
  • Use QoS to prioritize Art-Net traffic

Multiple Network Interfaces

If you have multiple NICs:
  1. QLC+ creates a separate controller for each interface
  2. Each controller can handle multiple universes
  3. Distribute universes across interfaces for load balancing

Troubleshooting

No Output

Verify the network interface is up and configured with an IP address
Ensure QLC+ and Art-Net devices are on the same subnet (or properly routed)
UDP port 6454 must be open for both incoming and outgoing traffic
Double-check the Art-Net universe numbers match between QLC+ and receiving devices

No Input

  1. Ensure input line is opened and patched
  2. Verify the Art-Net node is sending to the correct IP address
  3. Check that input universe numbers match
  4. Use Wireshark to verify Art-Net packets are arriving

Performance Issues

  • Switch to unicast addressing
  • Use Standard transmission mode
  • Reduce number of patched universes
  • Check for network congestion
  • Verify switch/router performance

Firewall Configuration

Linux (iptables):
sudo iptables -A INPUT -p udp --dport 6454 -j ACCEPT
sudo iptables -A OUTPUT -p udp --sport 6454 -j ACCEPT
Linux (firewalld):
sudo firewall-cmd --permanent --add-port=6454/udp
sudo firewall-cmd --reload
Windows:
New-NetFirewallRule -DisplayName "Art-Net" -Direction Inbound -Protocol UDP -LocalPort 6454 -Action Allow

Protocol Details

For full Art-Net protocol specifications, see:

E1.31 (sACN)

Alternative streaming ACN protocol

OSC

Open Sound Control protocol

Plugin Overview

Learn about the plugin architecture

Build docs developers (and LLMs) love