Layout

Design your touchscreen control surface — widget types, grid placement, and JSON import/export.

Tab Layout — Edit Mode

The Layout tab is where you design your touchscreen control surface. It has two modes: Edit (form-based) and JSON (raw import/export).

Layout editor — page settings and widget list
Layout editor (top) — page selector, page title, grid dimensions, and the list of widgets on the current page
Layout editor — Page PIN Lock and live preview
Layout editor (bottom) — Page PIN Lock sub-panel and the live preview grid

Pages

Venue Commander supports up to 8 pages (numbered 0–7), each with its own grid dimensions, widgets, and optional PIN lock. Page 0 is always public; pages 1–7 can be PIN-locked. Use the dropdown to switch between pages.

+ Add PageCreates a new blank page.
Page titleThe name shown in the status bar on the touchscreen.
Show page arrowsWhen checked, < and > navigation arrows appear on the touchscreen status bar for switching pages.
Page PIN LockPer-page lock with up to 10 PINs and an auto-return timeout. See Page PIN Locks.

Grid Layout

Set the number of Columns and Rows to define the grid. Widgets are placed at specific column/row positions within this grid. Up to 48 widgets of each type per page (OSC, Shelly, Home Assistant, and gang widgets each have their own pool).

Widgets

Widget Types

Aa
Label
Static text. No message sent.
Toggle
On/off switch. Configurable on/off colours. Receives feedback.
Button
Momentary press. Fire-and-forget (GO, STOP).
|
Fader
Vertical or horizontal slider. Receives feedback. Optional dB-style audio taper for mixing-console faders.
Toggle Button
Latching on/off. Configurable on/off colours (supports ‘on’ vs ‘mute’ semantics).
Info
Read-only text display. Shows feedback values (e.g. now-playing, device name). No send.
••
Gang Toggle
On/off switch controlling an entire Shelly gang. Tristate liveness border.
██
Gang Toggle Button
Latching button controlling an entire Shelly gang. Tristate liveness border.

Grid sizing per widget type: labels, toggles, buttons, toggle-buttons, info, and gang toggles default to 1 column; faders default to 3 columns. You can override with the column-span and row-span fields.

Adding a Widget

Click + Add Widget to open the widget editor:

Widget editor
Widget editor — fields adapt to the endpoint type (OSC, Shelly, Home Assistant, or gang)

The widget editor adapts its fields based on the type of endpoint you've picked. Common fields are always shown; endpoint-specific fields appear as needed.

Common Widget Fields

FieldDescription
Widget PresetQuick-fill from device-specific presets. Available presets are filtered by the type of device the endpoint points at — a Wing endpoint shows Wing presets, a Shelly endpoint shows Shelly Switch/Dimmer/Cover presets, and so on. Some presets prompt you for a channel number.
TypeThe widget type (see cards above).
EndpointWhich endpoint this widget sends to. The optional audio board appears here when it's connected.
LabelDisplay text shown on the widget.
Column / RowPosition in the grid (counting from 0).
Col Span / Row SpanHow many grid cells the widget spans.
OrientationFor faders: Vertical or Horizontal.
H Split / V SplitDivide one cell into smaller sub-positions. The Index field picks which sub-position this widget sits in. Useful for fitting two toggles side-by-side in one cell.

OSC Widget Fields

Shown when the selected endpoint is an OSC endpoint:

FieldDescription
OSC AddressThe OSC path (e.g. /ch/1/mix/fader).
OSC ValueConfigure the value sent with the OSC message — tick “Send parameter value”, then choose whole-number or decimal, and set the min and max.
Display RangeOptional display min/max override and suffix for faders (e.g. show dB values).
On ColourFor toggles and toggle buttons: the colour shown when on. Choose from green (default), red, or blue.
Off ColourFor toggles and toggle buttons: the colour shown when off. Choose from default (grey), green, red, or blue. Use with On Colour to express ‘on’ vs ‘mute’ meaning — e.g. X32/M32 mutes: green on / red off; Wing mutes: red on / green off.

Shelly Widget Fields

Shown when the selected endpoint is a Shelly endpoint:

FieldDescription
ActionWhat this widget does on the Shelly device: turn a switch on/off (Switch Set / Toggle), set a light's brightness or colour (Light Set / RGB Set), or move a cover to a position / open / close / stop.
ChannelWhich channel on the Shelly device (0–3). Most devices use 0 for their first or only switch / light.
Feedback KeyThe state value to read back from the Shelly device (e.g. switch:0.output for on/off, light:0.brightness for brightness, cover:0.current_pos for cover position). The preset fills this in for you.
Value Min / MaxValue range for fader widgets (e.g. 0–100 for brightness percentage).
SuffixDisplay suffix (e.g. %, W).
On ColourFor toggles and toggle buttons: the colour when on. Choose from green (default), red, or blue.
Off ColourFor toggles and toggle buttons: the colour when off. Choose from default (grey), green, red, or blue.
Shelly widget presets auto-fill the method, component ID, feedback key, and value range for common configurations. Available presets include: Shelly Switch (on/off toggle, momentary toggle, power info), Shelly Dimmer (brightness fader with built-in on/off “bare toggle” affordance — a small label appears above the fader when the light is on), and Shelly Cover (position fader, open/close/stop buttons).

Home Assistant Widget Fields

Shown when the selected endpoint is a Home Assistant endpoint. The available actions are filtered by the entity's device type (light, switch, media_player, cover, fan, input_number, scene, script, automation, input_boolean).

FieldDescription
ActionWhat this widget controls. Examples: state on/off, brightness, volume, mute, play/pause, next/prev, position, percentage, value, activate (for scenes/scripts/automations). The dropdown only shows actions that make sense for the entity type.
Attribute (Info widgets only)Which Home Assistant attribute to show as text. Common values: media_title, media_artist, current_temperature, current_position, or any attribute name you like. Leave blank for the entity's main state.
Value Min / MaxFader range. Defaults to 0–100 for percentage-style controls (brightness, volume, etc.); for an input_number entity, match its Home Assistant-side range.
SuffixDisplay suffix (e.g. %, °C). Display only.
On / Off ColourFor toggle / toggle button: same colour options as OSC/Shelly.

Home Assistant Widget Presets

Common combinations per device type:

PresetTypeWhat it does
Light On/OffToggle / ToggleButtonTurns the light on or off
BrightnessFader0–100% brightness
SwitchToggle / ToggleButtonTurns the switch on or off
VolumeFaderMedia player volume, 0–100
MuteToggleMedia player mute
Play / Pause / Play-Pause / Next / PrevButtonMedia player transport
Cover PositionFaderCover/blind position, 0–100%
Cover StopButtonStops the cover mid-move
Fan PercentageFaderFan speed, 0–100
Number ValueFaderSets an input_number value — set Min/Max to match the entity's range
Scene / Script / AutomationButtonRuns a scene, script, or automation. The widget flashes briefly on tap to confirm.
Info: Now Playing / Position / TempInfoDisplays a chosen attribute — track name, position, current temperature, etc.
Home Assistant widgets dim and disable touch when the entity is unreachable, or when the connection to Home Assistant is down. See Setup → Home Assistant for the colour codes.
Gangs are Shelly-only. If you have a room with both Home-Assistant-managed and Shelly-managed lights and want them to switch together, set up an automation on the Home Assistant side — or just put two widgets side by side.
The Shelly brightness fader is dual-state: dragging the fader sets brightness as expected; if the light is currently off, dragging up also turns it on. Tapping at zero turns it off. The fader displays a small “on” pill above its track while the light is on, even if you can't read the exact level from across the room.

Gang Widget Fields

Shown when the widget type is Gang Toggle or Gang Toggle Button. Gang widgets control an entire group of Shelly devices as one — no endpoint selection is needed since the gang definition already specifies which devices to control.

FieldDescription
GangWhich gang this widget controls.
On ColourThe colour when the gang is on. Choose from green (default), red, or blue (accent).
Off ColourThe colour when the gang is off. Choose from default (grey), green, red, or blue.

Gang widgets display a coloured border indicating the liveness of the gang members:

Audio Board Widget Presets

When the optional audio board is connected, audio-specific widget presets become available:

PresetTypeNotes
BT VolumeFader0–100, syncs with the connected phone in both directions
Aux LevelFader0–100, line-in mix level (only on audio boards with line-in support)
Play / PauseToggle ButtonLights up while music is playing; tap to play/pause
Prev / NextButtonSkip backward / forward
Now PlayingInfoTitle / artist / album from the connected device
Device NameInfoFriendly name of the connected Bluetooth device (stays put until the device actually disconnects)
Show ModeToggle ButtonLock to the current Bluetooth device for the duration of a show
KickButtonDisconnect the current Bluetooth device (disabled while Show Mode is on)

Preview

The bottom of the Layout tab shows a Preview grid so you can visualise widget placement before saving.

JSON Import / Export

Layout tab in JSON mode
JSON mode — export / import layouts as text

JSON mode lets you save and load layouts as text files:

Single-page format

{
  "cols": 6,
  "rows": 2,
  "widgets": [
    {
      "type": "fader",
      "label": "Ch 1",
      "osc_addr": "/ch/1/mix/fader",
      "col": 0, "row": 0,
      "col_span": 1, "row_span": 2,
      "endpoint": 0
    }
  ]
}

Multi-page format

{
  "pages": [
    {
      "page": 0,
      "name": "Main",
      "cols": 6,
      "rows": 2,
      "widgets": [...]
    },
    {
      "page": 1,
      "name": "Engineer",
      "cols": 4,
      "rows": 3,
      "pin_lock": {
        "timeout_min": 30,
        "pins": ["1234", "9999"]
      },
      "widgets": [...]
    }
  ]
}

The pin_lock block is optional on each page. An empty "pins": [] clears any existing PINs. Leaving pin_lock out entirely leaves existing PIN settings unchanged on import.

Export your layout as a backup before making changes or updating firmware. Exports are portable between boards — the only thing that doesn't move is endpoint configuration, which is saved separately so each device can have its own target IP addresses.