Working Example

A real-world 3-page OSC layout controlling a Behringer Wing mixing console and QLab show control. Importable JSON at the bottom — paste it into your Layout → JSON tab and you're up.

What This Layout Does

This example demonstrates a practical live-sound setup using OSC transport with two endpoints and three pages of controls, showing off most of Venue Commander's widget types and layout features. Venue Commander also supports Shelly Gen2+ devices via WebSocket and an optional audio board — this example focuses on the OSC side.

Use Case

A stage manager's remote control for a theatre show: QLab cue transport and level faders on the first page, Wing channel faders and mutes across two more pages, plus a dedicated bus/DCA page. Page navigation arrows let the operator swipe between pages on the touchscreen.

At a Glance

Pages3 — "QLab + Wing Ch1-4", "Wing Ch5-12", "Buses + DCA"
Endpoints2 — QLab (port 53000) + Wing (port 2223)
Total widgets50 across all pages
Grid4 columns × 2 rows (all pages)
Widget types usedButton, Fader, Fader (log), Toggle Button
Page arrowsEnabled — < > navigation in the status bar

OSC Endpoints

#0 QLab

IP10.18.100.116
Port53000
Heartbeat/thump every 2s
Value feedbackEnabled
Preamble/udpReplyPort 9000
/udpKeepAlive 1

The preamble tells QLab to send OSC replies to UDP port 9000 and keep the connection alive. The heartbeat /thump is a no-op probe — any response means QLab is reachable.

#1 Behringer Wing

IP10.200.0.101
Port2223
Heartbeat/*S every 9s
Value feedbackEnabled
Preamble(none)

The Wing heartbeat /*S queries the system info string. The 9-second interval keeps the connection alive (Wing drops idle UDP clients after ~10s).

Pages & Layout

Click each tab to see the page layout, a device screenshot, and a visual grid map of the widgets.

QLab + Wing Ch1-4
Wing Ch5-12
Buses + DCA
📷 Screenshot: Touchscreen showing Page 0 — QLab + Wing Ch1-4 Live photo of the touchscreen displaying this page: GO/STOP buttons top-left, Prev/Next next to them, four QLab cue faders, then the row of Wing Ch1-4 mutes and log-scale faders, with the horizontal master fader + mute button on the right.

Widget Grid Map

4 columns × 2 rows. Cells use h_split and v_split to pack multiple widgets into single grid positions.

GO/go
STOP/panic
Prev/select/previous
Next/select/next
Cue 1fader/cue/1/level/0/0
Cue 2fader/cue/2/level/0/0
Cue 3fader/cue/3/level/0/0
Cue 4fader/cue/4/level/0/0
M1/ch/1/mute
M2/ch/2/mute
M3/ch/3/mute
M4/ch/4/mute
Ch1log/ch/1/fdr
Ch2log/ch/2/fdr
Ch3log/ch/3/fdr
Ch4log/ch/4/fdr
Masterh-fader log/main/1/fdr
M Mute/main/1/mute

Endpoint Mapping

  • #0 QLab — GO, STOP, Prev, Next, Cue 1-4 faders
  • #1 Wing — M1-M4 mutes, Ch1-4 faders, Master fader, M Mute

Key Techniques

  • v_split: 2 on columns 0-1 stacks two buttons (GO/STOP, Prev/Next) or two mute buttons per cell.
  • h_split: 4 on columns 2-3 (row 0) fits four QLab cue faders side by side in a 2-column span.
  • h_split: 4 on column 2 (row 1) packs four Wing channel faders into a single cell.
  • Horizontal fader for the Master — orientation set to "h" with v_split stacking it above the master mute button.
  • All Wing faders use log_scale: true for the audio dB taper curve.
📷 Screenshot: Touchscreen showing Page 1 — Wing Ch5-12 Live photo of the touchscreen with Wing channels 5–12 across two rows: M5/M6 + M7/M8 mute buttons in the top row with Ch5–Ch8 faders to their right, and the same pattern for Ch9–Ch12 below.

Widget Grid Map

Same 4×2 grid. Mirrors the channel strip pattern from page 0 but for channels 5-12.

M5/ch/5/mute
M6/ch/6/mute
M7/ch/7/mute
M8/ch/8/mute
Ch5log/ch/5/fdr
Ch6log/ch/6/fdr
Ch7log/ch/7/fdr
Ch8log/ch/8/fdr
M9/ch/9/mute
M10/ch/10/mute
M11/ch/11/mute
M12/ch/12/mute
Ch9log/ch/9/fdr
Ch10log/ch/10/fdr
Ch11log/ch/11/fdr
Ch12log/ch/12/fdr

Endpoint Mapping

All widgets on this page use #1 Wing.

Pattern

Each row is identical in structure: two mute toggle-buttons (v_split: 2) in columns 0-1, four log-scale faders (h_split: 4) in column 2. Column 3 is empty on this page, leaving space for future expansion.

📷 Screenshot: Touchscreen showing Page 2 — Buses + DCA Live photo of the touchscreen displaying Bus 1–4 mutes and log-scale faders in the top row, and DCA 1–4 mutes and log-scale faders below.

Widget Grid Map

Same grid structure as page 1, but controlling buses (row 0) and DCAs (row 1) instead of input channels.

B1/bus/1/mute
B2/bus/2/mute
B3/bus/3/mute
B4/bus/4/mute
Bus1log/bus/1/fdr
Bus2log/bus/2/fdr
Bus3log/bus/3/fdr
Bus4log/bus/4/fdr
D1/dca/1/mute
D2/dca/2/mute
D3/dca/3/mute
D4/dca/4/mute
DCA1log/dca/1/fdr
DCA2log/dca/2/fdr
DCA3log/dca/3/fdr
DCA4log/dca/4/fdr

Endpoint Mapping

All widgets on this page use #1 Wing.

Full JSON Configuration

This is the complete multi-page JSON export for this layout. You can import it directly into any Venue Commander via the Layout → JSON tab.

You will need to configure your own OSC endpoints first (QLab as #0, Wing as #1). The JSON only contains the layout — endpoints are configured separately so the same layout can move between boards and venues with different IPs.
{
  "pages": [
    {
      "page": 0,
      "name": "QLab + Wing Ch1-4",
      "cols": 4,
      "rows": 2,
      "widgets": [
        {"type":"button","label":"GO","osc_addr":"/go","col":0,"row":0,"v_split":2,"v_index":0,"endpoint":0},
        {"type":"button","label":"STOP","osc_addr":"/panic","col":0,"row":0,"v_split":2,"v_index":1,"endpoint":0},
        {"type":"button","label":"Prev","osc_addr":"/select/previous","col":1,"row":0,"v_split":2,"v_index":0,"endpoint":0},
        {"type":"button","label":"Next","osc_addr":"/select/next","col":1,"row":0,"v_split":2,"v_index":1,"endpoint":0},
        {"type":"fader","label":"Cue 1","osc_addr":"/cue/1/level/0/0","col":2,"row":0,"col_span":2,"h_split":4,"h_index":0,"endpoint":0,"value_type":"float","send_value":true,"value_min":-60,"value_max":12},
        {"type":"fader","label":"Cue 2","osc_addr":"/cue/2/level/0/0","col":2,"row":0,"col_span":2,"h_split":4,"h_index":1,"endpoint":0,"value_type":"float","send_value":true,"value_min":-60,"value_max":12},
        {"type":"fader","label":"Cue 3","osc_addr":"/cue/3/level/0/0","col":2,"row":0,"col_span":2,"h_split":4,"h_index":2,"endpoint":0,"value_type":"float","send_value":true,"value_min":-60,"value_max":12},
        {"type":"fader","label":"Cue 4","osc_addr":"/cue/4/level/0/0","col":2,"row":0,"col_span":2,"h_split":4,"h_index":3,"endpoint":0,"value_type":"float","send_value":true,"value_min":-60,"value_max":12},
        {"type":"toggle_button","label":"M1","osc_addr":"/ch/1/mute","col":0,"row":1,"v_split":2,"v_index":0,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"M2","osc_addr":"/ch/2/mute","col":0,"row":1,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"M3","osc_addr":"/ch/3/mute","col":1,"row":1,"v_split":2,"v_index":0,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"M4","osc_addr":"/ch/4/mute","col":1,"row":1,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"fader","label":"Ch1","osc_addr":"/ch/1/fdr","col":2,"row":1,"h_split":4,"h_index":0,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Ch2","osc_addr":"/ch/2/fdr","col":2,"row":1,"h_split":4,"h_index":1,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Ch3","osc_addr":"/ch/3/fdr","col":2,"row":1,"h_split":4,"h_index":2,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Ch4","osc_addr":"/ch/4/fdr","col":2,"row":1,"h_split":4,"h_index":3,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Master","osc_addr":"/main/1/fdr","col":3,"row":1,"orientation":"h","v_split":2,"v_index":0,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"toggle_button","label":"M Mute","osc_addr":"/main/1/mute","col":3,"row":1,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1}
      ]
    },
    {
      "page": 1,
      "name": "Wing Ch5-12",
      "cols": 4,
      "rows": 2,
      "widgets": [
        {"type":"toggle_button","label":"M5","osc_addr":"/ch/5/mute","col":0,"row":0,"v_split":2,"v_index":0,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"M6","osc_addr":"/ch/6/mute","col":0,"row":0,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"M7","osc_addr":"/ch/7/mute","col":1,"row":0,"v_split":2,"v_index":0,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"M8","osc_addr":"/ch/8/mute","col":1,"row":0,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"fader","label":"Ch5","osc_addr":"/ch/5/fdr","col":2,"row":0,"h_split":4,"h_index":0,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Ch6","osc_addr":"/ch/6/fdr","col":2,"row":0,"h_split":4,"h_index":1,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Ch7","osc_addr":"/ch/7/fdr","col":2,"row":0,"h_split":4,"h_index":2,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Ch8","osc_addr":"/ch/8/fdr","col":2,"row":0,"h_split":4,"h_index":3,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"toggle_button","label":"M9","osc_addr":"/ch/9/mute","col":0,"row":1,"v_split":2,"v_index":0,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"M10","osc_addr":"/ch/10/mute","col":0,"row":1,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"M11","osc_addr":"/ch/11/mute","col":1,"row":1,"v_split":2,"v_index":0,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"M12","osc_addr":"/ch/12/mute","col":1,"row":1,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"fader","label":"Ch9","osc_addr":"/ch/9/fdr","col":2,"row":1,"h_split":4,"h_index":0,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Ch10","osc_addr":"/ch/10/fdr","col":2,"row":1,"h_split":4,"h_index":1,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Ch11","osc_addr":"/ch/11/fdr","col":2,"row":1,"h_split":4,"h_index":2,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Ch12","osc_addr":"/ch/12/fdr","col":2,"row":1,"h_split":4,"h_index":3,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10}
      ]
    },
    {
      "page": 2,
      "name": "Buses + DCA",
      "cols": 4,
      "rows": 2,
      "widgets": [
        {"type":"toggle_button","label":"B1","osc_addr":"/bus/1/mute","col":0,"row":0,"v_split":2,"v_index":0,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"B2","osc_addr":"/bus/2/mute","col":0,"row":0,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"B3","osc_addr":"/bus/3/mute","col":1,"row":0,"v_split":2,"v_index":0,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"B4","osc_addr":"/bus/4/mute","col":1,"row":0,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"fader","label":"Bus1","osc_addr":"/bus/1/fdr","col":2,"row":0,"h_split":4,"h_index":0,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Bus2","osc_addr":"/bus/2/fdr","col":2,"row":0,"h_split":4,"h_index":1,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Bus3","osc_addr":"/bus/3/fdr","col":2,"row":0,"h_split":4,"h_index":2,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"Bus4","osc_addr":"/bus/4/fdr","col":2,"row":0,"h_split":4,"h_index":3,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"toggle_button","label":"D1","osc_addr":"/dca/1/mute","col":0,"row":1,"v_split":2,"v_index":0,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"D2","osc_addr":"/dca/2/mute","col":0,"row":1,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"D3","osc_addr":"/dca/3/mute","col":1,"row":1,"v_split":2,"v_index":0,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"toggle_button","label":"D4","osc_addr":"/dca/4/mute","col":1,"row":1,"v_split":2,"v_index":1,"endpoint":1,"active_color":"red","off_color":"green","value_type":"int","send_value":true,"value_min":0,"value_max":1},
        {"type":"fader","label":"DCA1","osc_addr":"/dca/1/fdr","col":2,"row":1,"h_split":4,"h_index":0,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"DCA2","osc_addr":"/dca/2/fdr","col":2,"row":1,"h_split":4,"h_index":1,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"DCA3","osc_addr":"/dca/3/fdr","col":2,"row":1,"h_split":4,"h_index":2,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10},
        {"type":"fader","label":"DCA4","osc_addr":"/dca/4/fdr","col":2,"row":1,"h_split":4,"h_index":3,"endpoint":1,"log_scale":true,"value_type":"float","send_value":true,"value_min":-144,"value_max":10}
      ]
    }
  ]
}
To use this layout: set up two endpoints (QLab as #0, Wing as #1), then paste this JSON into the Layout → JSON tab and click Import / Update Preview, then Save & Restart.