Summary

QLab is a show control platform for audio, video, lighting, and media cue management. Control is via OSC (Open Sound Control) over UDP and TCP. The main OSC listen port is 53000/UDP; UDP replies are sent to port 53001 by default, configurable via /udpReplyPort. QLab also accepts plain text as OSC on UDP port 53535. TCP connections use double-end SLIP framing (RFC 1055) per OSC 1.1 specification. No authentication required.

Transport

protocols:
  - udp
  - tcp
addressing:
  port: 53000  # OSC listen port (UDP)
  reply_port: 53001  # UDP reply port (default, customizable via /udpReplyPort)
  plaintext_port: 53535  # plain text UDP interpreted as OSC
auth:
  type: none  # inferred: no auth procedure in source

Traits

- queryable  # inferred from extensive query commands (isRunning, isPaused, etc.)
- levelable  # inferred from duckLevel (-120 to +12 dB) and audio level controls
- routable  # inferred from audio patch and video routing commands

Actions

# === Workspace core commands ===
- id: workspace_go
  label: Go
  kind: action
  command: "/workspace/{id}/go {cue_number}"
  params:
    - name: cue_number
      type: string
      description: Cue number to GO (optional if playhead already positioned)
- id: workspace_go_address
  label: Go (cue number in address)
  kind: action
  command: "/workspace/{id}/go/{cue_number}"
  params:
    - name: cue_number
      type: string
      description: Cue number encoded in OSC address path
- id: audition_go
  label: Audition Go
  kind: action
  command: "/workspace/{id}/auditionGo {cue_number}"
  params:
    - name: cue_number
      type: string
      description: Cue number to audition
- id: panic
  label: Panic Workspace
  kind: action
  command: "/workspace/{id}/panic"
  params:
    - name: workspace_id
      type: string
      description: Workspace display name or unique ID
- id: panic_in_time
  label: Panic Over Time
  kind: action
  command: "/workspace/{id}/panicInTime {number}"
  params:
    - name: workspace_id
      type: string
    - name: duration
      type: number
      description: Duration in seconds
- id: pause
  label: Pause All
  kind: action
  command: "/workspace/{id}/pause"
  params: []
- id: resume
  label: Resume All
  kind: action
  command: "/workspace/{id}/resume"
  params: []
- id: stop
  label: Stop Playback
  kind: action
  command: "/workspace/{id}/stop"
  params: []
- id: hard_stop
  label: Hard Stop
  kind: action
  command: "/workspace/{id}/hardStop"
  params: []
- id: reset
  label: Reset Workspace
  kind: action
  command: "/workspace/{id}/reset"
  params: []
- id: save
  label: Save Workspace
  kind: action
  command: "/workspace/{id}/save"
  params: []
- id: workspace_select
  label: Select Cue
  kind: action
  command: "/workspace/{id}/select/{cue_number}"
  params:
    - name: cue_number
      type: string
- id: workspace_select_next
  label: Select Next
  kind: action
  command: "/workspace/{id}/select/next"
  params: []
- id: workspace_select_previous
  label: Select Previous
  kind: action
  command: "/workspace/{id}/select/previous"
  params: []
- id: workspace_playhead_set
  label: Set Playhead
  kind: action
  command: "/workspace/{id}/playhead/{cue_number}"
  params:
    - name: cue_number
      type: string
- id: workspace_playhead_next
  label: Playhead Next
  kind: action
  command: "/workspace/{id}/playhead/next"
  params: []
- id: workspace_playhead_previous
  label: Playhead Previous
  kind: action
  command: "/workspace/{id}/playhead/previous"
  params: []
- id: workspace_playhead_none
  label: Unset Playhead
  kind: action
  command: "/workspace/{id}/playhead/none"
  params: []
- id: workspace_connect
  label: Connect to Workspace
  kind: action
  command: "/workspace/{id}/connect {passcode_string}"
  params:
    - name: workspace_id
      type: string
    - name: passcode_string
      type: string
      description: Passcode; returns ok, badpass, or error
- id: workspace_cue_lists
  label: Get Cue Lists
  kind: query
  command: "/workspace/{id}/cueLists"
  params:
    - name: workspace_id
      type: string
- id: workspace_selected_cues
  label: Get Selected Cues
  kind: query
  command: "/workspace/{id}/selectedCues"
  params:
    - name: workspace_id
      type: string
- id: workspace_running_cues
  label: Get Running Cues
  kind: query
  command: "/workspace/{id}/runningCues"
  params:
    - name: workspace_id
      type: string
- id: workspace_running_or_paused_cues
  label: Get Running or Paused Cues
  kind: query
  command: "/workspace/{id}/runningOrPausedCues"
  params:
    - name: workspace_id
      type: string
- id: workspace_thump
  label: Heartbeat Thump
  kind: query
  command: "/workspace/{id}/thump"
  params:
    - name: workspace_id
      type: string
      description: Returns string "thump"
- id: workspace_double_go_window_remaining
  label: Double GO Window Remaining
  kind: query
  command: "/workspace/{id}/doubleGoWindowRemaining"
  params:
    - name: workspace_id
      type: string
      description: Seconds until next GO permitted (0 when allowed)
- id: workspace_new_cue
  label: New Cue
  kind: action
  command: "/workspace/{id}/new {cue_type} {cue_ID} {cart_row} {cart_column}"
  params:
    - name: workspace_id
      type: string
    - name: cue_type
      type: string
      description: "audio, mic, video, camera, text, light, fade, network, midi, midi file, timecode, group, start, stop, pause, load, reset, devamp, goto, target, arm, disarm, wait, memo, script, list, cuelist, cue list, cart, cuecart, cue cart"
    - name: cue_ID
      type: string
      description: Optional unique ID for new cue
    - name: cart_row
      type: integer
      description: Optional cart row
    - name: cart_column
      type: integer
      description: Optional cart column
- id: workspace_move_cue
  label: Move Cue
  kind: action
  command: "/workspace/{id}/move/{cue_id} {new_index} {new_parent_cue_id}"
  params:
    - name: workspace_id
      type: string
    - name: cue_id
      type: string
    - name: new_index
      type: integer
    - name: new_parent_cue_id
      type: string
      description: Optional new parent
- id: workspace_delete_cue
  label: Delete Cue
  kind: action
  command: "/workspace/{id}/delete/{cue_number}"
  params:
    - name: workspace_id
      type: string
    - name: cue_number
      type: string
- id: workspace_delete_cue_id
  label: Delete Cue by ID
  kind: action
  command: "/workspace/{id}/delete_id/{cue_id}"
  params:
    - name: workspace_id
      type: string
    - name: cue_id
      type: string
- id: workspace_delete_selected
  label: Delete Selected Cues
  kind: action
  command: "/workspace/{id}/delete/selected"
  params:
    - name: workspace_id
      type: string
- id: workspace_delete_active
  label: Delete Active Cues
  kind: action
  command: "/workspace/{id}/delete/active"
  params:
    - name: workspace_id
      type: string
- id: workspace_renumber
  label: Renumber Selected Cues
  kind: action
  command: "/workspace/{id}/renumber {startNumber} {incrementNumber} {prefix} {suffix}"
  params:
    - name: workspace_id
      type: string
    - name: startNumber
      type: number
    - name: incrementNumber
      type: number
    - name: prefix
      type: string
    - name: suffix
      type: string

# === Cue-level commands ===
- id: cue_go
  label: Go Cue
  kind: action
  command: "/cue/{cue_number}/go"
  params:
    - name: cue_number
      type: string
- id: cue_start
  label: Start Cue
  kind: action
  command: "/cue/{cue_number}/start"
  params:
    - name: cue_number
      type: string
- id: cue_start_and_autoload_next
  label: Start and Autoload Next
  kind: action
  command: "/cue/{cue_number}/startAndAutoloadNext"
  params:
    - name: cue_number
      type: string
- id: cue_stop
  label: Stop Cue
  kind: action
  command: "/cue/{cue_number}/stop"
  params:
    - name: cue_number
      type: string
- id: cue_panic
  label: Panic Cue
  kind: action
  command: "/cue/{cue_number}/panic"
  params:
    - name: cue_number
      type: string
- id: cue_panic_in_time
  label: Panic Cue Over Time
  kind: action
  command: "/cue/{cue_number}/panicInTime {number}"
  params:
    - name: cue_number
      type: string
    - name: duration
      type: number
- id: cue_pause
  label: Pause Cue
  kind: action
  command: "/cue/{cue_number}/pause"
  params:
    - name: cue_number
      type: string
- id: cue_hard_pause
  label: Hard Pause Cue
  kind: action
  command: "/cue/{cue_number}/hardPause"
  params:
    - name: cue_number
      type: string
- id: cue_hard_stop
  label: Hard Stop Cue
  kind: action
  command: "/cue/{cue_number}/hardStop"
  params:
    - name: cue_number
      type: string
- id: cue_toggle_pause
  label: Toggle Pause/Resume
  kind: action
  command: "/cue/{cue_number}/togglePause"
  params:
    - name: cue_number
      type: string
- id: cue_resume
  label: Resume Cue
  kind: action
  command: "/cue/{cue_number}/resume"
  params:
    - name: cue_number
      type: string
- id: cue_preview
  label: Preview Cue
  kind: action
  command: "/cue/{cue_number}/preview"
  params:
    - name: cue_number
      type: string
- id: cue_audition_go
  label: Audition Go Cue
  kind: action
  command: "/cue/{cue_number}/auditionGo"
  params:
    - name: cue_number
      type: string
- id: cue_audition_preview
  label: Audition Preview Cue
  kind: action
  command: "/cue/{cue_number}/auditionPreview"
  params:
    - name: cue_number
      type: string
- id: cue_reset
  label: Reset Cue
  kind: action
  command: "/cue/{cue_number}/reset"
  params:
    - name: cue_number
      type: string
- id: cue_load
  label: Load Cue
  kind: action
  command: "/cue/{cue_number}/load"
  params:
    - name: cue_number
      type: string
- id: cue_load_at_seconds
  label: Load Cue At Seconds
  kind: action
  command: "/cue/{cue_number}/loadAt {number}"
  params:
    - name: cue_number
      type: string
    - name: seconds
      type: number
      description: Negative = from end
- id: cue_load_at_hms
  label: Load Cue At HMS
  kind: action
  command: "/cue/{cue_number}/loadAt {hours} {minutes} {seconds}"
  params:
    - name: cue_number
      type: string
    - name: hours
      type: number
    - name: minutes
      type: number
    - name: seconds
      type: number
- id: cue_load_and_set_playhead
  label: Load Cue And Set Playhead
  kind: action
  command: "/cue/{cue_number}/loadAndSetPlayhead"
  params:
    - name: cue_number
      type: string
- id: cue_load_action_at_seconds
  label: Load Action At Seconds
  kind: action
  command: "/cue/{cue_number}/loadActionAt {number}"
  params:
    - name: cue_number
      type: string
    - name: seconds
      type: number
      description: Negative = from end; auto-adds pre-wait
- id: cue_load_action_at_hms
  label: Load Action At HMS
  kind: action
  command: "/cue/{cue_number}/loadActionAt {hours} {minutes} {seconds}"
  params:
    - name: cue_number
      type: string
    - name: hours
      type: number
    - name: minutes
      type: number
    - name: seconds
      type: number
- id: cue_load_file_at_seconds
  label: Load File At Seconds
  kind: action
  command: "/cue/{cue_number}/loadFileAt {number}"
  params:
    - name: cue_number
      type: string
    - name: seconds
      type: number
      description: Ignores slice loop counts
- id: cue_load_file_at_hms
  label: Load File At HMS
  kind: action
  command: "/cue/{cue_number}/loadFileAt {hours} {minutes} {seconds}"
  params:
    - name: cue_number
      type: string
    - name: hours
      type: number
    - name: minutes
      type: number
    - name: seconds
      type: number
- id: cue_capture_timecode
  label: Capture Timecode Trigger
  kind: action
  command: "/cue/{cue_number}/captureTimecode"
  params:
    - name: cue_number
      type: string
      description: Set timecode trigger to incoming timecode
- id: cue_collapse
  label: Collapse Group Cue
  kind: action
  command: "/cue/{cue_number}/collapse"
  params:
    - name: cue_number
      type: string
- id: cue_expand
  label: Expand Group Cue
  kind: action
  command: "/cue/{cue_number}/expand"
  params:
    - name: cue_number
      type: string
- id: cue_move_cart_cue
  label: Move Cart Cue
  kind: action
  command: "/cue/{cue_number}/moveCartCue/{child} {row} {column}"
  params:
    - name: cue_number
      type: string
      description: Cart cue number
    - name: child
      type: string
      description: Child cue ID
    - name: row
      type: integer
    - name: column
      type: integer
- id: cue_playhead_next
  label: Cue Playhead Next
  kind: action
  command: "/cue/{cue_number}/playhead/next"
  params:
    - name: cue_number
      type: string
- id: cue_playhead_previous
  label: Cue Playhead Previous
  kind: action
  command: "/cue/{cue_number}/playhead/previous"
  params:
    - name: cue_number
      type: string
- id: cue_playhead_none
  label: Cue Playhead None
  kind: action
  command: "/cue/{cue_number}/playhead/none"
  params:
    - name: cue_number
      type: string
- id: cue_playhead_next_sequence
  label: Cue Playhead Next Sequence
  kind: action
  command: "/cue/{cue_number}/playhead/nextSequence"
  params:
    - name: cue_number
      type: string
- id: cue_playhead_previous_sequence
  label: Cue Playhead Previous Sequence
  kind: action
  command: "/cue/{cue_number}/playhead/previousSequence"
  params:
    - name: cue_number
      type: string
- id: cue_playlist_next
  label: Playlist Next
  kind: action
  command: "/cue/{cue_number}/playlist/next"
  params:
    - name: cue_number
      type: string
      description: Playlist Group cue number
- id: cue_playlist_previous
  label: Playlist Previous
  kind: action
  command: "/cue/{cue_number}/playlist/previous"
  params:
    - name: cue_number
      type: string
      description: Playlist Group cue number

# === Show control listen/ignore ===
- id: subscribe_updates
  label: Subscribe to Updates
  kind: action
  command: "/updates {enable}"
  params:
    - name: enable
      type: boolean
      description: "1 to subscribe, 0 to unsubscribe"
- id: listen_all
  label: Listen to All Show Control
  kind: action
  command: "/listen"
  params: []
- id: ignore_all
  label: Stop Receiving Show Control
  kind: action
  command: "/ignore"
  params: []
- id: listen_audition_go
  label: Listen Audition Go
  kind: action
  command: "/listen/auditionGo"
  params: []
- id: listen_audition_go_number
  label: Listen Audition Go Number
  kind: action
  command: "/listen/auditionGo/number"
  params: []
- id: listen_audition_go_name
  label: Listen Audition Go Name
  kind: action
  command: "/listen/auditionGo/name"
  params: []
- id: listen_audition_go_unique_id
  label: Listen Audition Go UniqueID
  kind: action
  command: "/listen/auditionGo/uniqueID"
  params: []
- id: listen_cue_start
  label: Listen Cue Start
  kind: action
  command: "/listen/cue/start"
  params: []
- id: listen_cue_start_number
  label: Listen Cue Start Number
  kind: action
  command: "/listen/cue/start/number"
  params: []
- id: listen_cue_start_name
  label: Listen Cue Start Name
  kind: action
  command: "/listen/cue/start/name"
  params: []
- id: listen_cue_start_unique_id
  label: Listen Cue Start UniqueID
  kind: action
  command: "/listen/cue/start/uniqueID"
  params: []
- id: listen_cue_stop
  label: Listen Cue Stop
  kind: action
  command: "/listen/cue/stop"
  params: []
- id: listen_cue_stop_number
  label: Listen Cue Stop Number
  kind: action
  command: "/listen/cue/stop/number"
  params: []
- id: listen_cue_stop_name
  label: Listen Cue Stop Name
  kind: action
  command: "/listen/cue/stop/name"
  params: []
- id: listen_cue_stop_unique_id
  label: Listen Cue Stop UniqueID
  kind: action
  command: "/listen/cue/stop/uniqueID"
  params: []
- id: listen_go
  label: Listen Go
  kind: action
  command: "/listen/go"
  params: []
- id: listen_go_number
  label: Listen Go Number
  kind: action
  command: "/listen/go/number"
  params: []
- id: listen_go_name
  label: Listen Go Name
  kind: action
  command: "/listen/go/name"
  params: []
- id: listen_go_unique_id
  label: Listen Go UniqueID
  kind: action
  command: "/listen/go/uniqueID"
  params: []
- id: listen_hard_stop_all
  label: Listen HardStop All
  kind: action
  command: "/listen/hardStopAll"
  params: []
- id: listen_panic_all
  label: Listen Panic All
  kind: action
  command: "/listen/panicAll"
  params: []
- id: listen_pause_all
  label: Listen Pause All
  kind: action
  command: "/listen/pauseAll"
  params: []
- id: listen_playhead
  label: Listen Playhead
  kind: action
  command: "/listen/playhead"
  params: []
- id: listen_playhead_number
  label: Listen Playhead Number
  kind: action
  command: "/listen/playhead/number"
  params: []
- id: listen_playhead_name
  label: Listen Playhead Name
  kind: action
  command: "/listen/playhead/name"
  params: []
- id: listen_playhead_unique_id
  label: Listen Playhead UniqueID
  kind: action
  command: "/listen/playhead/uniqueID"
  params: []
- id: listen_reset_all
  label: Listen Reset All
  kind: action
  command: "/listen/resetAll"
  params: []
- id: listen_resume_all
  label: Listen Resume All
  kind: action
  command: "/listen/resumeAll"
  params: []
- id: listen_stop_all
  label: Listen Stop All
  kind: action
  command: "/listen/stopAll"
  params: []
# Note: corresponding /ignore/{event}[/detail] variants exist for each /listen
# variant above (e.g. /ignore/go, /ignore/go/number, /ignore/playhead, etc.) and
# stop those specific messages.

# === Application OSC messages ===
- id: app_always_reply
  label: Always Reply
  kind: action
  command: "/alwaysReply {number}"
  params:
    - name: number
      type: number
      description: Non-zero = send reply for every OSC message
- id: app_disconnect
  label: Disconnect
  kind: action
  command: "/disconnect"
  params: []
- id: app_forget_me_not
  label: Forget Me Not
  kind: action
  command: "/forgetMeNot {boolean}"
  params:
    - name: enable
      type: boolean
      description: Keep client settings until QLab quits
- id: app_udp_keep_alive
  label: UDP Keep Alive
  kind: action
  command: "/udpKeepAlive {boolean}"
  params:
    - name: enable
      type: boolean
      description: Same as forgetMeNot
- id: app_reply_format
  label: Set Reply Format
  kind: action
  command: "/replyFormat {format_string}"
  params:
    - name: format_string
      type: string
      description: "Tokens: #workspace_id#, #address#, #status#, #data#. Empty string resets."
- id: app_event_format
  label: Set Event Format
  kind: action
  command: "/eventFormat {format_string}"
  params:
    - name: format_string
      type: string
      description: "Tokens: #workspace_id#, #address#, #status#, #data#. Empty string resets."
- id: app_toggle_timecode_window
  label: Toggle Timecode Window
  kind: action
  command: "/toggleTimecodeWindow"
  params: []
- id: app_toggle_override_window
  label: Toggle Override Window
  kind: action
  command: "/toggleOverrideWindow"
  params: []
- id: app_version
  label: Get Version
  kind: query
  command: "/version"
  params: []
- id: app_workspaces
  label: Get Open Workspaces
  kind: query
  command: "/workspaces"
  params: []
  description: Returns array of workspaces with ID, display name, port, UDP reply port, version
- id: app_font_names
  label: Get Font Names
  kind: query
  command: "/fontNames"
  params: []
- id: app_font_families_and_styles
  label: Get Font Families and Styles
  kind: query
  command: "/fontFamiliesAndStyles"
  params: []

# === Override controls ===
- id: override_toggle_dmx_output
  label: Toggle DMX Output Override
  kind: action
  command: "/overrides/toggleDmxOutput"
  params: []
- id: override_toggle_midi_input
  label: Toggle MIDI Input Override
  kind: action
  command: "/overrides/toggleMidiInput"
  params: []
- id: override_toggle_midi_output
  label: Toggle MIDI Output Override
  kind: action
  command: "/overrides/toggleMidiOutput"
  params: []
- id: override_toggle_msc_input
  label: Toggle MSC Input Override
  kind: action
  command: "/overrides/toggleMscInput"
  params: []
- id: override_toggle_msc_output
  label: Toggle MSC Output Override
  kind: action
  command: "/overrides/toggleMscOutput"
  params: []
- id: override_toggle_sysex_input
  label: Toggle SysEx Input Override
  kind: action
  command: "/overrides/toggleSysexInput"
  params: []
- id: override_toggle_sysex_output
  label: Toggle SysEx Output Override
  kind: action
  command: "/overrides/toggleSysexOutput"
  params: []
- id: override_toggle_network_external_input
  label: Toggle External Network Input Override
  kind: action
  command: "/overrides/toggleNetworkExternalInput"
  params: []
- id: override_toggle_network_external_output
  label: Toggle External Network Output Override
  kind: action
  command: "/overrides/toggleNetworkExternalOutput"
  params: []
- id: override_toggle_network_local_input
  label: Toggle Local Network Input Override
  kind: action
  command: "/overrides/toggleNetworkLocalInput"
  params: []
- id: override_toggle_network_local_output
  label: Toggle Local Network Output Override
  kind: action
  command: "/overrides/toggleNetworkLocalOutput"
  params: []
- id: override_toggle_timecode_input
  label: Toggle Timecode Input Override
  kind: action
  command: "/overrides/toggleTimecodeInput"
  params: []
- id: override_toggle_timecode_output
  label: Toggle Timecode Output Override
  kind: action
  command: "/overrides/toggleTimecodeOutput"
  params: []

# === Settings: audio map ===
- id: settings_audio_map
  label: Get Audio Map
  kind: query
  command: "/settings/audio/map/{map_name}"
  params:
    - name: map_name
      type: string
- id: settings_audio_map_by_id
  label: Get Audio Map By ID
  kind: query
  command: "/settings/audio/mapID/{map_ID}"
  params:
    - name: map_ID
      type: string
- id: settings_audio_maps
  label: Get All Audio Maps
  kind: query
  command: "/settings/audio/maps"
  params: []
- id: settings_audio_map_marks
  label: Get Audio Map Marks
  kind: query
  command: "/settings/audio/map/{map_name}/marks"
  params:
    - name: map_name
      type: string
- id: settings_audio_map_filters
  label: Get Audio Map Filters
  kind: query
  command: "/settings/audio/map/{map_name}/filters"
  params:
    - name: map_name
      type: string
- id: settings_audio_map_objects
  label: Get Audio Map Objects
  kind: query
  command: "/settings/audio/map/{map_name}/objects"
  params:
    - name: map_name
      type: string
- id: settings_audio_map_size
  label: Get Audio Map Size
  kind: query
  command: "/settings/audio/map/{map_name}/size"
  params:
    - name: map_name
      type: string
- id: settings_audio_map_size_width
  label: Get Audio Map Width
  kind: query
  command: "/settings/audio/map/{map_name}/size/width"
  params:
    - name: map_name
      type: string
- id: settings_audio_map_size_height
  label: Get Audio Map Height
  kind: query
  command: "/settings/audio/map/{map_name}/size/height"
  params:
    - name: map_name
      type: string

# === Settings: audio patch ===
- id: settings_audio_patch
  label: Get Audio Patch
  kind: query
  command: "/settings/audio/patch/{name}"
  params:
    - name: name
      type: string
- id: settings_audio_patch_by_id
  label: Get Audio Patch By ID
  kind: query
  command: "/settings/audio/patchID/{id}"
  params:
    - name: id
      type: string
- id: settings_audio_patch_reset
  label: Reset Audio Patch
  kind: action
  command: "/settings/audio/patch/{name}/reset"
  params:
    - name: name
      type: string
- id: settings_audio_patch_mute_clear
  label: Clear Patch Mutes
  kind: action
  command: "/settings/audio/patch/{name}/mute/clear"
  params:
    - name: name
      type: string
- id: settings_audio_patch_solo_clear
  label: Clear Patch Solos
  kind: action
  command: "/settings/audio/patch/{name}/solo/clear"
  params:
    - name: name
      type: string
- id: settings_audio_patch_routing_reset
  label: Reset Patch Routing
  kind: action
  command: "/settings/audio/patch/{name}/routing/reset"
  params:
    - name: name
      type: string
- id: settings_audio_patch_mute_channels
  label: Get Patch Muted Channels
  kind: query
  command: "/settings/audio/patch/{name}/muteChannels"
  params:
    - name: name
      type: string
- id: settings_audio_patch_solo_channels
  label: Get Patch Soloed Channels
  kind: query
  command: "/settings/audio/patch/{name}/soloChannels"
  params:
    - name: name
      type: string
- id: settings_audio_patch_routing
  label: Get Patch Routing
  kind: query
  command: "/settings/audio/patch/{name}/routing"
  params:
    - name: name
      type: string
- id: settings_audio_patch_list
  label: Get Audio Patch List
  kind: query
  command: "/settings/audio/patchList"
  params: []
- id: settings_audio_cue_output_channel_counts
  label: Get Cue Output Channel Counts
  kind: query
  command: "/settings/audio/cueOutputChannelCounts"
  params: []
- id: settings_audio_output_channel_names
  label: Get Output Channel Names
  kind: query
  command: "/settings/audio/outputChannelNames"
  params: []

# === Settings: light ===
- id: settings_light_patch
  label: Get Light Patch
  kind: query
  command: "/settings/light/patch"
  params: []
  description: Returns verbose JSON of light patch (groups, instruments, parameters)
- id: settings_light_undo
  label: Light Undo
  kind: action
  command: "/settings/light/undo"
  params: []
- id: settings_light_redo
  label: Light Redo
  kind: action
  command: "/settings/light/redo"
  params: []

# === Settings: general ===
- id: settings_general_toggle_selection_is_playhead
  label: Toggle Selection/Playhead Lock
  kind: action
  command: "/settings/general/toggleSelectionIsPlayhead"
  params: []
- id: settings_general_undo
  label: General Undo
  kind: action
  command: "/settings/general/undo"
  params: []
- id: settings_general_redo
  label: General Redo
  kind: action
  command: "/settings/general/redo"
  params: []

# === Settings: MIDI / network / mic ===
- id: settings_midi_patch_list
  label: Get MIDI Patch List
  kind: query
  command: "/settings/midi/patchList"
  params: []
- id: settings_network_patch_list
  label: Get Network Patch List
  kind: query
  command: "/settings/network/patchList"
  params: []
- id: settings_mic_patch_list
  label: Get Mic Input Patch List
  kind: query
  command: "/settings/mic/patchList"
  params: []

# === Settings: video ===
- id: settings_video_input_patch_list
  label: Get Video Input Patch List
  kind: query
  command: "/settings/video/inputPatchList"
  params: []
- id: settings_video_routes
  label: Get Video Routes
  kind: query
  command: "/settings/video/routes"
  params: []
- id: settings_video_stages
  label: Get All Stages
  kind: query
  command: "/settings/video/stages"
  params: []
- id: settings_video_stage
  label: Get Stage
  kind: query
  command: "/settings/video/stage/{name}"
  params:
    - name: name
      type: string
- id: settings_video_stage_size
  label: Get Stage Size
  kind: query
  command: "/settings/video/stage/{name}/size"
  params:
    - name: name
      type: string
- id: settings_video_stage_size_width
  label: Get Stage Width
  kind: query
  command: "/settings/video/stage/{name}/size/width"
  params:
    - name: name
      type: string
- id: settings_video_stage_size_height
  label: Get Stage Height
  kind: query
  command: "/settings/video/stage/{name}/size/height"
  params:
    - name: name
      type: string
- id: settings_video_stage_unique_id
  label: Get Stage Unique ID
  kind: query
  command: "/settings/video/stage/{name}/uniqueID"
  params:
    - name: name
      type: string
- id: settings_video_stage_regions
  label: Get Stage Regions
  kind: query
  command: "/settings/video/stage/{name}/regions"
  params:
    - name: name
      type: string
- id: settings_video_stage_region_reset_control_points
  label: Reset Region Control Points
  kind: action
  command: "/settings/video/stage/{name}/region/{name}/resetControlPoints"
  params:
    - name: stage_name
      type: string
    - name: region_name
      type: string
- id: settings_video_undo
  label: Video Undo
  kind: action
  command: "/settings/video/undo"
  params: []
- id: settings_video_redo
  label: Video Redo
  kind: action
  command: "/settings/video/redo"
  params: []

# === Cue custom state queries ===
- id: cue_values_for_keys
  label: Values For Keys
  kind: query
  command: "/cue/{cue_number}/valuesForKeys \"[\\\"key1\\\",\\\"key2\\\"]\""
  params:
    - name: cue_number
      type: string
    - name: keys
      type: string
      description: JSON array of key names
- id: cue_values_for_keys_with_arguments
  label: Values For Keys With Arguments
  kind: query
  command: "/cue/{cue_number}/valuesForKeysWithArguments \"{\\\"key\\\":[arg1,arg2]}\""
  params:
    - name: cue_number
      type: string
    - name: key_args
      type: string
      description: JSON dictionary of key to arguments

Feedbacks

- id: reply
  type: object
  description: Reply to every OSC message in JSON format
  fields:
    workspace_id: string
    address: string
    status: enum [ok, error, denied]
    data: value
- id: workspace_event
  type: object
  description: Show control broadcast message from QLab
  fields:
    event: string
    cue_number: string
    cue_name: string
    cue_unique_id: string
    cue_type: string
- id: update_workspace
  type: object
  description: Client needs to reload cue lists
  fields:
    workspace_id: string
- id: update_cue
  type: object
  description: Client needs to reload cue state
  fields:
    workspace_id: string
    cue_id: string
- id: update_playback_position
  type: object
  description: Playback position changed
  fields:
    workspace_id: string
    cue_list_id: string
    cue_id: string
- id: disconnect
  type: string
  description: Client must disconnect event
- id: cue_is_running
  type: boolean
- id: cue_is-paused
  type: boolean
- id: cue_is-auditioning
  type: boolean
- id: cue_is-loaded
  type: boolean
- id: cue_is-broken
  type: boolean
- id: cue_is-warning
  type: boolean
- id: cue_is-panicking
  type: boolean
- id: cue_is-tailing-out
  type: boolean
- id: cue_is-crossfading-out
  type: boolean
- id: cue_is-overridden
  type: boolean
- id: cue_is-action-running
  type: boolean
- id: cue_is-next-in-playlist
  type: boolean
- id: cue_has-cue-targets
  type: boolean
- id: cue_has-file-targets
  type: boolean
- id: cue_list-name
  type: string
- id: cue_display-name
  type: string
- id: cue_default-name
  type: string
- id: cue_type
  type: string
- id: cue_unique-id
  type: string
- id: cue_number
  type: string
- id: cue_parent
  type: string
- id: cue_pre-wait-elapsed
  type: number
- id: cue_percent-pre-wait-elapsed
  type: number
- id: cue_post-wait-elapsed
  type: number
- id: cue_percent-post-wait-elapsed
  type: number
- id: cue_action-elapsed
  type: number
- id: cue_percent-action-elapsed
  type: number
- id: cue_max-time-in-cue-sequence
  type: number
- id: cue_current-duration
  type: number
- id: cue_allows-editing-duration
  type: boolean
- id: cue_can-have-audio-map-targets
  type: boolean
- id: cue_can-have-patch-targets
  type: boolean
- id: cue_cart-columns
  type: integer
- id: cue_cart-rows
  type: integer
- id: cue_cart-position-row
  type: integer
- id: cue_cart-position-column
  type: integer
- id: cue_children
  type: array
- id: cue_children-shallow
  type: array
- id: cue_children-unique-ids
  type: array
- id: cue_children-unique-ids-shallow
  type: array
- id: cue_is-child-flagged
  type: boolean
- id: cue_is-child-auditioning
  type: boolean
- id: cue_current-timecode
  type: number
- id: cue_current-timecode-hours
  type: number
- id: cue_current-timecode-minutes
  type: number
- id: cue_current-timecode-seconds
  type: number
- id: cue_current-timecode-frames
  type: number
- id: cue_current-timecode-bits
  type: number
- id: cue_current-timecode-text
  type: string
- id: cue_timecode-trigger
  type: number
- id: workspace_thump
  type: string
- id: workspace_double-go-window-remaining
  type: number
- id: workspace_cue-lists
  type: array
- id: workspace_selected-cues
  type: array
- id: workspace_running-cues
  type: array
- id: workspace_running-or-paused-cues
  type: array
- id: app_version
  type: string
- id: app_workspaces
  type: array
- id: app_font-names
  type: array
- id: app_font-families-and-styles
  type: object

Variables

- id: workspace_current-cue-list
  type: string
  access: read_write
  description: Current cue list by cue number
- id: workspace_current-cue-list-id
  type: string
  access: read_write
  description: Current cue list by cue ID
- id: workspace_show-mode
  type: boolean
  access: read_write
  description: "true=show mode, false=edit mode"
- id: workspace_full-screen
  type: boolean
  access: read_write
- id: workspace_always-audition
  type: boolean
  access: read_write
- id: workspace_live-fade-preview
  type: boolean
  access: read_write
- id: workspace_light-dashboard
  type: boolean
  access: read_write
- id: workspace_min-go-time
  type: number
  access: read_write
  description: Minimum time between GO commands (seconds)
- id: workspace_selection-is-playhead
  type: boolean
  access: read_write
  description: Lock selection to playhead
- id: app_udp-reply-port
  type: integer
  access: read_write
  description: UDP reply port (0 resets to 53001)
- id: app_timecode-window
  type: boolean
  access: read_write
  description: Show/hide Timecode Window
- id: app_override-window
  type: boolean
  access: read_write
  description: Show/hide Override Window
- id: app_working-directory
  type: string
  access: read_write
  description: Working directory (full paths or ~/ paths)
- id: cue_armed
  type: boolean
  access: read_write
- id: cue_flagged
  type: boolean
  access: read_write
- id: cue_pre-wait
  type: number
  access: read_write
  description: Pre-wait time in seconds
- id: cue_post-wait
  type: number
  access: read_write
  description: Post-wait time in seconds
- id: cue_duration
  type: number
  access: read_write
  description: Cue duration in seconds
- id: cue_temp-duration
  type: number
  access: read_write
  description: Temporary duration (reverts on reset)
- id: cue_color-name
  type: string
  access: read_write
  description: Cue color (berry, blue, crimson, cyan, forest, gray, green, hot pink, indigo, lavender, magenta, midnight, olive, orange, peach, plum, purple, red, sky blue, yellow, none)
- id: cue_color-name-live
  type: string
  access: write
  description: Live version of colorName
- id: cue_second-color-name
  type: string
  access: read_write
  description: Second color (same value set as colorName)
- id: cue_second-color-name-live
  type: string
  access: write
  description: Live version of secondColorName
- id: cue_use-second-color
  type: boolean
  access: read_write
- id: cue_continue-mode
  type: integer
  access: read_write
  description: "0=No continue, 1=Auto-continue, 2=Auto-follow"
- id: cue_name
  type: string
  access: read_write
- id: cue_number
  type: string
  access: read_write
- id: cue_notes
  type: string
  access: read_write
- id: cue_duck-level
  type: number
  access: read_write
  description: Duck/boost level (-120 to +12 dB)
- id: cue_duck-others
  type: boolean
  access: read_write
- id: cue_duck-time
  type: number
  access: read_write
- id: cue_fade-and-stop-others
  type: integer
  access: read_write
  description: "0=None, 1=Peers, 2=List or cart, 3=All"
- id: cue_fade-and-stop-others-time
  type: number
  access: read_write
- id: cue_solo-cue-in-time
  type: number
  access: read_write
  description: Fade and stop all other cues in same list over N seconds
- id: cue_auto-load
  type: boolean
  access: read_write
- id: cue_skip-if-disarmed
  type: boolean
  access: read_write
- id: cue_second-trigger-action
  type: integer
  access: read_write
  description: "0=Do nothing, 1=Panic, 2=Stop, 3=Hard stop, 4=Hard stop & restart, 5=Devamp, 6=Playlist Next, 7=Playlist Previous"
- id: cue_second-trigger-on-release
  type: boolean
  access: read_write
- id: cue_target-mode
  type: integer
  access: read_write
  description: "0=Cue target, 1=Patch target"
- id: cue_cue-target-id
  type: string
  access: read_write
  description: Target cue ID. Empty string = no target, "none" = unset.
- id: cue_cue-target-number
  type: string
  access: read_write
- id: cue_file-target
  type: string
  access: read_write
  description: "File target path. 'none' or '' = unset. Full/~/relative paths supported."
- id: cue_patch-target-id
  type: string
  access: read_write
- id: cue_mode
  type: integer
  access: read_write
  description: "Group/list/cart mode. 0=List, 3=Timeline, 4=Start random, 5=Cart, 6=Playlist. Lists/carts are read-only mode."
- id: cue_playhead
  type: string
  access: read_write
  description: "Playhead cue number for group/list/cart. Values: cue number, next, previous, none."
- id: cue_playhead-id
  type: string
  access: read_write
  description: Playhead by cue ID
- id: cue_timecode-trigger-hours
  type: number
  access: read_write
- id: cue_timecode-trigger-minutes
  type: number
  access: read_write
- id: cue_timecode-trigger-seconds
  type: number
  access: read_write
- id: cue_timecode-trigger-frames
  type: number
  access: read_write
- id: cue_timecode-trigger-bits
  type: number
  access: read_write
- id: cue_timecode-trigger-text
  type: string
  access: read_write
  description: Timecode trigger as text string
- id: cue_playlist-current-cue
  type: string
  access: read_write
  description: Current cue in playlist (Playlist Group)
- id: cue_playlist-current-cue-id
  type: string
  access: read_write
- id: cue_playlist-do-crossfade
  type: boolean
  access: read_write
- id: cue_playlist-do-loop
  type: boolean
  access: read_write
- id: cue_playlist-do-shuffle
  type: boolean
  access: read_write
- id: cue_playlist-crossfade-duration
  type: number
  access: read_write
  description: Crossfade duration in seconds
- id: audio_patch_level
  type: number
  access: read_write
  description: Crosspoint level for {patch}/{inChannel}/{outChannel} in dB; -INF accepted as string
- id: audio_patch_level_live
  type: number
  access: write
  description: Live version of crosspoint level
- id: audio_patch_mute
  type: boolean
  access: read_write
  description: Mute {patch} device output {output}
- id: audio_patch_solo
  type: boolean
  access: read_write
  description: Solo {patch} device output {output}
- id: audio_patch_cue-output-channels
  type: integer
  access: read_write
  description: Number of cue outputs (1-128)
- id: override_dmx-output-enabled
  type: boolean
  access: read_write
- id: override_midi-input-enabled
  type: boolean
  access: read_write
- id: override_midi-output-enabled
  type: boolean
  access: read_write
- id: override_msc-input-enabled
  type: boolean
  access: read_write
- id: override_msc-output-enabled
  type: boolean
  access: read_write
- id: override_sysex-input-enabled
  type: boolean
  access: read_write
- id: override_sysex-output-enabled
  type: boolean
  access: read_write
- id: override_network-external-input-enabled
  type: boolean
  access: read_write
- id: override_network-external-output-enabled
  type: boolean
  access: read_write
- id: override_network-local-input-enabled
  type: boolean
  access: read_write
- id: override_network-local-output-enabled
  type: boolean
  access: read_write
- id: override_timecode-input-enabled
  type: boolean
  access: read_write
- id: override_timecode-output-enabled
  type: boolean
  access: read_write
- id: video_stage_region_bounds
  type: object
  access: read_write
  description: "Region bounds {x} {y} {width} {height} for stage/{stage}/region/{region}"
- id: video_stage_region_enable-grid
  type: boolean
  access: read_write
- id: video_stage_region_enable-guide
  type: boolean
  access: read_write

Events

- id: qlab_event_workspace
  type: object
  description: Workspace event broadcast (GO, stop, start, playhead move, etc.)
  fields:
    event: string
    cue_number: string
    cue_name: string
    cue_unique_id: string
    cue_type: string
- id: qlab_event_workspace_go
  type: object
  description: GO event (4 message forms sent)
  fields:
    number: integer
    name: string
    unique_id: string
    type: string
- id: qlab_event_workspace_audition-go
  type: object
  description: Audition GO event (4 message forms)
- id: qlab_event_workspace_cue_stop
  type: object
  description: Cue stop event
- id: qlab_event_workspace_cue_start
  type: object
  description: Cue start event
- id: qlab_event_workspace_playhead
  type: object
  description: Playhead move event (4 message forms)
- id: qlab_event_workspace_pause-all
  type: object
- id: qlab_event_workspace_resume-all
  type: object
- id: qlab_event_workspace_panic-all
  type: object
- id: qlab_event_workspace_stop-all
  type: object
- id: qlab_event_workspace_hard-stop-all
  type: object
- id: qlab_event_workspace_reset-all
  type: object
- id: update_workspace
  type: object
  description: Client must reload cue lists
- id: update_cue
  type: object
  description: Client must reload cue state
- id: update_playback_position
  type: object
  description: Playback position changed
- id: disconnect
  type: string
  description: Client must disconnect

Macros

# UNRESOLVED: no explicit multi-step macros described in source

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures stated in source

Notes

OSC messages arriving on a given port are received by every open workspace listening on that port. OSC 1.1 booleans supported: True/False, integers/floats (0=false, any other number=true), strings (N/n/F/f/0=false, Y/y/T/t/1-9=true). Any boolean OSC message accepts toggle as argument or /toggle suffix. TCP uses double-end SLIP framing (RFC 1055) per OSC 1.1 specification. QLab also listens on UDP port 53535 interpreting plain text as OSC (e.g., sending /cue/selected/start as plain text behaves same as OSC command to port 53000).

Query commands returning values use /reply/{/invoked/osc/method} json_string format with status ok, error, or denied. JSON reply form: { "workspace_id": string, "address": "/osc/message/that/was/sent", "status": string, "data": value }.

Form /workspace/{id}/command where {id} is display name (e.g., hamlet.qlab5, omit .qlab5) or unique ID. Without /workspace/{id} prefix, message sent to all open workspaces on that port.

Cue OSC form: /workspace/{id}/cue/{cue_number}/command or /workspace/{id}/cue_id/{id}/command. Special cue addresses: /cue/selected, /cue/playhead, /cue/playbackPosition (same as playhead), /cue/active. Wildcards supported: * matches any characters, ? matches single character. Example: /cue/*/armed 0 disarms all cues.

Custom event/reply formats: send /eventFormat {format_string} or /replyFormat {format_string} with tokens #workspace_id#, #address#, #status#, #data#. Empty string resets to default.

Network cues send OSC, plain text, or hex code over TCP or UDP. OSC argument rules: single space separates address and arguments; string args with spaces require quotes; digit-only args are integers; decimal-separator args are floats; OSC 1.1 literals \T \F \I \N supported. Fade types for Network cues: Resend (1-120 fps), 1D Fade (single #v# token with curve), 2D Fade (#x#/#y# along drawn path).

MSC broadcast uses configured MIDI output patches: GO -> MSC GO {cue number}; Panic All / Stop All / HardStop All -> MSC ALL_OFF; Reset All -> MSC RESET.

Provenance

source_domains:
  - qlab.app
source_urls:
  - https://qlab.app/docs/QLab_5_Reference_Manual.pdf
retrieved_at: 2026-07-13T21:15:25.250Z
last_checked_at: 2026-07-21T22:44:11.219Z

Verification Summary

verdict: verified
checked_at: 2026-07-21T22:44:11.219Z
matched_actions: 164
action_count: 164
confidence: medium
summary: "All 164 spec actions match literal OSC addresses in the source verbatim with correct param shapes; transport ports confirmed; the source OSC command catalogue is fully represented with no missing or drifted commands. (5 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "device model version (e.g., QLab 5, QLab 4) not stated in source"
- "no explicit multi-step macros described in source"
- "no safety warnings or interlock procedures stated in source"
- "device model version not stated in source"
- "baud rate / serial config not applicable (software-only, no RS-232)"

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0