# fau-1o/artnet2roblox architecture

> Architecture diagram of the GitHub repository fau-1o/artnet2roblox, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/fau-1o/artnet2roblox
- Repository: https://github.com/fau-1o/artnet2roblox

## Overview

This is a real-time Art-Net-to-Roblox DMX bridge. DMX software sends Art-Net over UDP to the desktop client, which receives and forwards DMX data over WebSocket; the local server normalizes and buffers it, then exposes current and polling data for the in-game Roblox script to apply to supported game lighting and objects. The README documents those major stages and capabilities. Server and client excerpts are partial, and the Roblox script was not sampled, so the graph avoids asserting its internal implementation or unverified calls.

Main entry points: [`server.py`](https://github.com/fau-1o/artnet2roblox/blob/main/server.py) (Bridge server), [`Roblox_Script.lua`](https://github.com/fau-1o/artnet2roblox/blob/main/Roblox_Script.lua) (Roblox DMX script), [`artnet2WSS.py`](https://github.com/fau-1o/artnet2roblox/blob/main/artnet2WSS.py) (Art-Net receiver)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_input["DMX input"]
  node_artnet_receiver["Art-Net receiver<br/>[artnet2WSS.py]"]
  node_dmx_buffer["DMX buffer<br/>[artnet2WSS.py]"]
end

subgraph group_bridge["Local bridge"]
  node_websocket_client["WebSocket client<br/>[artnet2WSS.py]"]
  node_server["Bridge server<br/>[server.py]"]
  node_message_processor["Message processor<br/>[server.py]"]
  node_dmx_state[("DMX state and buffers<br/>[server.py]")]
  node_broadcast["Subscriber broadcast<br/>[server.py]"]
  node_http_api["State and polling API<br/>[server.py]"]
end

subgraph group_game["Roblox output"]
  node_roblox_script["Roblox DMX script<br/>[Roblox_Script.lua]"]
end

node_dmx_software(("DMX software"))
node_operator(("Operator"))
node_roblox_game(("Supported Roblox game"))

node_dmx_software -->|"sends Art-Net"| node_artnet_receiver
node_operator -->|"configures input"| node_artnet_receiver
node_artnet_receiver -->|"updates channels"| node_dmx_buffer
node_dmx_buffer -->|"forwards DMX"| node_websocket_client
node_operator -->|"sets username"| node_websocket_client
node_websocket_client -->|"connects and sends"| node_server
node_server -->|"dispatches messages"| node_message_processor
node_message_processor -->|"updates state and frames"| node_dmx_state
node_message_processor -->|"schedules broadcast"| node_broadcast
node_broadcast -->|"reads current state"| node_dmx_state
node_http_api -->|"reads state and frames"| node_dmx_state
node_roblox_script -->|"requests polling data"| node_server
node_server -->|"serves DMX data"| node_roblox_script
node_roblox_script -->|"controls lighting and objects"| node_roblox_game

click node_artnet_receiver "https://github.com/fau-1o/artnet2roblox/blob/main/artnet2WSS.py"
click node_dmx_buffer "https://github.com/fau-1o/artnet2roblox/blob/main/artnet2WSS.py"
click node_websocket_client "https://github.com/fau-1o/artnet2roblox/blob/main/artnet2WSS.py"
click node_server "https://github.com/fau-1o/artnet2roblox/blob/main/server.py"
click node_message_processor "https://github.com/fau-1o/artnet2roblox/blob/main/server.py"
click node_dmx_state "https://github.com/fau-1o/artnet2roblox/blob/main/server.py"
click node_broadcast "https://github.com/fau-1o/artnet2roblox/blob/main/server.py"
click node_http_api "https://github.com/fau-1o/artnet2roblox/blob/main/server.py"
click node_roblox_script "https://github.com/fau-1o/artnet2roblox/blob/main/Roblox_Script.lua"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_artnet_receiver,node_dmx_buffer toneBlue
class node_websocket_client,node_server,node_message_processor,node_dmx_state,node_broadcast,node_http_api toneAmber
class node_roblox_script toneMint
class node_dmx_software,node_operator,node_roblox_game toneIndigo
```

## Components

### DMX input

- [Art-Net receiver](https://github.com/fau-1o/artnet2roblox/blob/main/artnet2WSS.py): `artnet2WSS.py`
- [DMX buffer](https://github.com/fau-1o/artnet2roblox/blob/main/artnet2WSS.py): `artnet2WSS.py`

### Local bridge

- [WebSocket client](https://github.com/fau-1o/artnet2roblox/blob/main/artnet2WSS.py): `artnet2WSS.py`
- [Bridge server](https://github.com/fau-1o/artnet2roblox/blob/main/server.py): `server.py`
- [Message processor](https://github.com/fau-1o/artnet2roblox/blob/main/server.py): `server.py`
- [DMX state and buffers](https://github.com/fau-1o/artnet2roblox/blob/main/server.py): `server.py`
- [Subscriber broadcast](https://github.com/fau-1o/artnet2roblox/blob/main/server.py): `server.py`
- [State and polling API](https://github.com/fau-1o/artnet2roblox/blob/main/server.py): `server.py`

### Roblox output

- [Roblox DMX script](https://github.com/fau-1o/artnet2roblox/blob/main/Roblox_Script.lua): `Roblox_Script.lua`

### Other components

- **DMX software**
- **Operator**
- **Supported Roblox game**

## Connections

- DMX software → Art-Net receiver: sends Art-Net
- Operator → Art-Net receiver: configures input
- Art-Net receiver → DMX buffer: updates channels
- DMX buffer → WebSocket client: forwards DMX
- Operator → WebSocket client: sets username
- WebSocket client → Bridge server: connects and sends
- Bridge server → Message processor: dispatches messages
- Message processor → DMX state and buffers: updates state and frames
- Message processor → Subscriber broadcast: schedules broadcast
- Subscriber broadcast → DMX state and buffers: reads current state
- State and polling API → DMX state and buffers: reads state and frames
- Roblox DMX script → Bridge server: requests polling data
- Bridge server → Roblox DMX script: serves DMX data
- Roblox DMX script → Supported Roblox game: controls lighting and objects
