Skip to the content
PCBKitNew board
2 layers235 × 171 mmDMX MIDI FIGHTER, the printed circuit board in 3D

This tool is used in combination with a MagicQ light control desk to extend the amount of physical buttons on the desk.

Size
235 × 171 mm
Copper layers
2
Thickness
1.6 mm
Parts
149
Nets
118
Pads
788
Tracks, vias
1,092, 447
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
8 Feb 2025
Updated
5 Oct 2026

Overview

DMX MIDI FIGHTER is an open-source printed circuit board by kellertobias, from the kellertobias/magic-cueboard repository on GitHub. It is a 2-layer board of 235 × 171 mm with 149 parts on 118 nets, routed with 1,092 tracks and 447 vias.

It is built around the MAX485ED. Its parts include 41 diodes, 41 switches, 40 capacitors, 18 resistors and 4 connectors. It belongs with the audio and music boards of this library.

Main components

1

README

README.md

Light Assistant

This tool is used in combination with a MagicQ light control desk to extend the amount of physical buttons on the desk.

It communicates via OSC to MagicQ and uses its HTTP API to update the available executors. It also interfaces with a gm1356 based SPL meter to display a little graph of how much the current DJ destroys your ears.

! This project is written by AI in large parts (as an experiment how far you can push it). That's why the code might not be super clean. The project however is fully functional and has been used to control lights for a few events.

Project Screenshot

Project Layout:

text
light-assistant/
├── hardware/ # Hardware specific code and PCB schematics
├── src/
│ ├── app/ # NextJS frontend code
│ ├── components/ # React components
│ ├── contexts/ # React contexts
│ ├── hooks/ # React hooks
│ ├── mocks/ # Mock implementations of the interfacing systems to test against
│ ├── websocket-server/ # The Server to interface with the external systems

Setup and running the project:

Setup of Webserver & GUI:

You might want to run this on a raspberry PI and set it up so that it automatically starts when the pi starts and then opens the browser to the local webserver.

MagicQ Setup

  • Enable OSC (tx & rx) in the setup
  • Enable the http server in the setup
  • Create a grid of 10x10 executors on the MagicQ executor window (! only page 1 is supported)
  • Each first line is the actual executor that will be controlled (contains the name of the executor)
  • Each second line contains the color of the button in the grid, the type (Flash/ Toggle) and the color of the icon (e.g. AAA,T,FF0 for a gray toggle button with a yellow icon)

MagicQ data source

The Raspberry Pi server also accepts the original MagicQ source setting for compatibility:

bash
# Local MagicQ compatibility: the Pi reads MagicQ directly and discovers its
# attached Cueboard by USB ID.
MAGICQ_SOURCE=self

# Windows mode: the ToskLight Windows hardware bridge owns MagicQ and the USB board.
MAGICQ_SOURCE=windows
WINDOWS_MAGICQ_WS_URL=ws://10.99.0.1:47872/surface
WINDOWS_MAGICQ_TOKEN=tosklight-magicq-feed-v1

auto is the default. In windows mode the Pi keeps serving its local UI, SPL meter, and MQTT data, while executor names, colours, types, and live values come from Windows. The dot colour is inferred from whole colour words in the MagicQ executor name, including Red, Orange, Yellow, Green, Blue, Cyan, CTO, White, Amber, Magenta, Purple, Pink, and UV.

The preferred deployment now uses a selectable surface source:

bash
# Automatic mode (default): the Windows bridge selects MagicQ whenever it is
# running, otherwise ToskLight, otherwise the waiting screen.
SURFACE_SOURCE=auto

# MagicQ on the Windows show computer. Buttons travel back over the same
# authenticated WebSocket and Windows uses MagicQ Remote (CHWP), not OSC.
SURFACE_SOURCE=windows
WINDOWS_MAGICQ_WS_URL=ws://10.99.0.1:47872/surface
WINDOWS_MAGICQ_TOKEN=tosklight-magicq-feed-v1

# ToskLight on the Windows show computer. The Pi reads page/show metadata
# through its operator session and sends physical Cueboard actions to the bridge.
SURFACE_SOURCE=tosklight
TOSKLIGHT_API_URL=http://10.99.0.1:5000
WINDOWS_MAGICQ_WS_URL=ws://10.99.0.1:47872/surface

MAGICQ_SOURCE=self|windows remains accepted for existing installations. SURFACE_SOURCE takes precedence and supports auto|self|windows|tosklight. In automatic mode the Pi can boot before the Windows computer; both the Windows surface connection and the ToskLight API retry after boot, disconnects, and restarts. MagicQ always has priority.

External SPL meter API

Set SPL_API_URL to a JSON endpoint to display a network SPL meter instead of the local splread binary. Native { "measured": 91.2, "freqMode": "dBA" }, simple { "value": 91.2 }, and Home Assistant { "state": "91.2", "attributes": { "unit_of_measurement": "dBA" } } responses are accepted. SPL_API_INTERVAL_MS controls polling and defaults to 250 ms.

Every reading is also published by the Pi's MQTT broker on port 1883. Existing consumers can continue using retained spl/value and spl/mode. New consumers should subscribe to retained tosklight/spl for the complete JSON measurement, or tosklight/spl/value, tosklight/spl/unit, tosklight/spl/timestamp, and tosklight/spl/availability for individual fields. Availability is online while readings are being published and changes to offline during a clean shutdown.

The executor layout can be changed in the on-screen Settings panel and is persisted across restarts. EXECUTOR_LAYOUT=legacy|new selects the initial value on a new installation (compact remains accepted as an alias for new):

  • legacy: buttons use MagicQ rows 1, 3, 5, and 7; rows 2, 4, 6, and 8 contain each button's colour/type configuration; the two potentiometers use items 81 and 82.
  • new: buttons use every row and take their colour, Toggle/Flash/Solo type, region, active state, and fader metadata directly from Execute Page 1. The two potentiometers control the first two fader items on the page. In both layouts the live Remote grid supplies button text and active state. Legacy mode preserves the existing paired name/configuration rows; New mode gets colour, button type, region and fader properties directly from the selected API or MagicQ Remote metadata.

The Cueboard is attached to the Raspberry Pi. On Linux, Magic Qboard discovers only its Leonardo USB ID 2341:8037, so the SPL meter or another serial device cannot be mistaken for the board. BUTTON_CONTROLLER_PORT can pin a known port if needed. On Windows, local serial discovery stays off unless a port is explicitly set. All physical Cueboard button and fader actions travel from the Pi through the authenticated Windows bridge, which routes them to MagicQ or ToskLight according to its current owner. MagicQ feed and ToskLight API snapshots provide live values and colours to drive the Pi board LEDs. The UI remains visible while the board or Windows reconnects.

Setup of the Hardware:

  • compile the arduino file (either the USB MIDI file or the USB Custom file)
  • buy the PCB and solder it together
  • upload the compiled arduino file to the microcontroller
  • connect it via USB to this project

Alternatively the PCB also supports Hardware MIDI out (not tested yet) or DMX out (tested and works)

when you have flashed the USB Midi version and press the top left button while powering it up, you can select the colors and brightness of the buttons' backlight. In the USB Custom version, the buttons' backlights are controlled by the server application and the DMX out of the board is disabled. In this mode it only interfaces with this project.

AI Experiment

This project was an experiment to see how far you could push an AI to write an entire application. It started from an empty folder and the following prompt:

Debugging

Sending OSC Messages:

Install https://github.com/yoggy/sendosc

and then

text
sendosc 192.168.42.147 8000 /exec/1/12 f 0.6

Parts

149
QtyValueFootprintReferences
41D_Small_FilledDiode_SMD:D_SOD-323D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +25
40C_SmallCapacitor_SMD:C_0805_2012MetricC1, C2, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23 +24
40Switch_SW_WS2812BButton_Switch_Keyboard:Cherry_MX_SK6812_BSSW1, SW2, SW10, SW11, SW12, SW13, SW14, SW15, SW16, SW17, SW18, SW19, SW20, SW21, SW22, SW23 +24
810kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR6, R7, R8, R9, R10, R11, R12, R13
5100Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R2, R3, R4, R5
3220Resistor_THT:R_Axial_DIN0411_L9.9mm_D3.6mm_P12.70mm_HorizontalR14, R15, R16
2R_PotentiometerPotentiometer_THT:Potentiometer_Alps_RK09K_Single_VerticalRV1, RV2
110kResistor_THT:R_Axial_DIN0411_L9.9mm_D3.6mm_P12.70mm_HorizontalR18
1470Resistor_THT:R_Axial_DIN0411_L9.9mm_D3.6mm_P12.70mm_HorizontalR17
16N138Package_DIP:DIP-8_W7.62mmU3
1Conn_01x02_PinConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ7
1Conn_01x03_PinConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ8
1Conn_01x03_PinButton_Switch_THT:SW_CK_JS202011AQN_DPDT_AngledJ5
1MAX485EPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU2
1SW_PushButton_Switch_THT:SW_Tactile_SPST_Angled_PTS645Vx58-2LFSSW41
1XLR3Connector_Audio:Jack_XLR_Neutrik_NC3FAH1-0_HorizontalJ3
1~Module:Arduino_PRO_MIcro_USB-CU1

Questions

How big is the DMX MIDI FIGHTER PCB?

It measures 235 × 171 mm and has 2 copper layers, 1.6 mm thick.

What parts does the DMX MIDI FIGHTER use?

149 parts, built around the MAX485ED. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the DMX MIDI FIGHTER KiCad files?

From the kellertobias/magic-cueboard repository on GitHub, at the commit this page was made from: the board is hardware/kicad/DMX_MIDI_FIGHTER.kicad_pcb and its schematic hardware/kicad/DMX_MIDI_FIGHTER.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the DMX MIDI FIGHTER design in my own project?

Its repository states no licence, so its author keeps all rights: ask kellertobias before reusing the design.

Similar boards

  • 2 layers63 × 46 mmPi485, the printed circuit board in 3D

    Pi485

    bvarner/pi485

    An open-source TTL UART <-> RS485 converter, intended for a Raspberry Pi or Arduino

    31 parts41MIT
  • 2 layers150 × 50 mmEsp32-led smps, the printed circuit board in 3D

    Esp32-led smps

    lucysrausch/esp32-led-smps

    230V main LED smps. 2x30W Constant Current.

    179 parts30
  • 4 layers96 × 172 mmServo cpu, the printed circuit board in 3D

    Servo cpu

    wiciu15/servo2

    Servo inverter for 3-phase AC motor with/out encoder feedback

    167 parts29
  • 2 layers60 × 30 mmScoring table hardware, the printed circuit board in 3D

    Scoring table hardware

    GrappleRobotics/JMS

    Another alternative field management system for the FIRST Robotics Competition.

    30 parts18
  • 2 layers68.6 × 53.3 mmXyloShield, the printed circuit board in 3D

    XyloShield

    StefanKrupop/XyloShield

    Shield for Arduino that hosts a RFM26W radio module and allows DMX-512 connectivity

    19 parts17
  • 2 layers65 × 56.5 mmPool pi v1.1, the printed circuit board in 3D

    Pool pi v1.1

    ChaseDurand/Pool-Pi

    Hardware+software solution for controlling a Goldline/Hayward Aqualogic pool control board over WiFi via a Raspberry Pi.

    28 parts14
  • 2 layers53 × 68.7 mmEEC IV Reader, the printed circuit board in 3D

    EEC IV Reader

    flxkrmr/eec-iv-reader-arduino

    Arduino based diagnostics-tool for Fords EEC IV ECUs

    39 parts14GPL-3.0