Summary
The Q-SYS VisionSuite Plugin provides AI-driven camera tracking and automated presenter routing within a Q-SYS system. It integrates Seervision AI processing (subject detection, tracking zones, exclusion zones) with ACPR (Automatic Camera Presenter Routing) audio-triggered switching. Control is exposed through Q-SYS plugin control pins; internally the plugin connects to Seervision server instances via websocket. This spec documents the plugin's control pin interface and the event/action automation model.
Transport
# This is a Q-SYS plugin component - control is via Q-SYS platform control pins.
# Internally the plugin connects to Seervision server instances over websocket.
# VSA-100 accelerators (Q-SYS OS) expose an HTTP configuration webpage at port 8123.
protocols:
- tcp # inferred: plugin connects to Seervision server via websocket over TCP
- http # VSA-100 configuration webpage (Q-SYS OS accelerators only)
addressing:
# Seervision server websocket port: UNRESOLVED (not stated in source)
# Server IP is user-configurable per camera in the plugin; instances at /1 or /2
port: 8123 # VSA-100 VisionSuite configuration webpage (HTTP only - Peripheral Manager uses HTTPS)
auth:
type: none # inferred: no auth procedure in source for plugin control pins
Traits
# - powerable # inferred: server reboot controls present
- queryable # inferred: status, connection state, temperature queries present
- levelable # inferred: auto-privacy delay, coordinates adjustable
Actions
# --- Tracking Camera Controls ---
- id: start_tracking
label: Start Tracking
kind: action
params:
- name: camera_index
type: integer
description: Tracking camera index (1-based)
notes: Immediately starts tracking without using a Container recall
- id: stop_tracking
label: Stop Tracking
kind: action
params:
- name: camera_index
type: integer
description: Tracking camera index (1-based)
notes: Immediately stops tracking without using a Container recall
- id: set_tracking_zone
label: Set Tracking Zone
kind: action
params:
- name: camera_index
type: integer
description: Tracking camera index (1-based)
- name: zone
type: string
description: Tracking zone to enable (only one at a time per camera)
- id: set_vip_id
label: Set VIP ID
kind: action
params:
- name: camera_index
type: integer
description: Tracking camera index (1-based)
- name: vip_id
type: string
description: ID of the subject to designate as VIP for tracking
notes: Sets the VIP ID for the currently tracked subject
- id: enable_trigger_zone
label: Enable Trigger Zone
kind: action
params:
- name: zone_index
type: integer
description: Trigger zone index
- name: enabled
type: boolean
description: Enable (true) or disable (false)
- id: enable_exclusion_zone
label: Enable Exclusion Zone
kind: action
params:
- name: zone_index
type: integer
description: Exclusion zone index
- name: enabled
type: boolean
description: Enable (true) or disable (false)
notes: Multiple exclusion zones can be enabled simultaneously per camera
- id: set_exclusion_zone_name
label: Set Exclusion Zone Name
kind: action
params:
- name: camera_index
type: integer
description: Camera index
- name: zone_index
type: integer
description: Exclusion zone index
- name: name
type: string
description: Name for the exclusion zone
- id: manual_recall
label: Manual Recall
kind: action
params:
- name: camera_index
type: integer
description: Camera index for the event/action row
- name: action_id
type: string
description: Container action ID to recall
- id: set_container
label: Set Container
kind: action
params:
- name: camera_index
type: integer
description: Camera index
- name: container_name
type: string
description: Container to recall (dynamically generated based on camera)
- id: set_trigger_zone_name
label: Set Trigger Zone Name
kind: action
params:
- name: camera_index
type: integer
description: Camera index
- name: zone_index
type: integer
description: Trigger zone index
- name: name
type: string
description: Name for the trigger zone
- id: set_acpr_zone_enable
label: Set ACPR Zone Enable/Disable
kind: action
params:
- name: camera_index
type: integer
description: Camera index
- name: zone_index
type: integer
description: Trigger zone index
- name: enabled
type: string
description: Enable or disable ACPR control for this trigger zone
notes: Per-trigger-zone ACPR enable/disable control pin
- id: set_event_camera_number
label: Set Event Camera Number
kind: action
params:
- name: camera_index
type: integer
description: Camera index
- name: zone_index
type: integer
description: Trigger zone index
- name: camera_number
type: string
description: Camera number assigned to the event/action row
- id: set_container_action_id
label: Set Container Action ID
kind: action
params:
- name: camera_index
type: integer
description: Camera index
- name: zone_index
type: integer
description: Trigger zone index
- name: action_id
type: string
description: Container Action ID for the event/action row
- id: set_trigger_zone_container_name
label: Set Trigger Zone Container Name
kind: action
params:
- name: camera_index
type: integer
description: Camera index
- name: zone_index
type: integer
description: Trigger zone index
- name: container_name
type: string
description: Container name for the event/action row
- id: set_video_auto_switch
label: Set Video Auto Switch
kind: action
params:
- name: enabled
type: boolean
description: Enable automatic Seervision Source update on Container recall complete
- id: set_acpr_sv_control
label: Set ACPR/SV Control
kind: action
params:
- name: output_index
type: integer
description: Mediacast Router output index
- name: mode
type: string
description: "ACPR or SV - determines whether ACPR or Seervision controls the Mediacast Router output"
- id: set_event_config
label: Set Event Config
kind: action
params:
- name: camera_index
type: integer
description: Camera index
- name: event_type
type: string
description: "Event type: Enter, Leave, or Fallback"
- name: trigger_zone
type: string
description: Trigger zone assignment
- name: trigger_on_person
type: string
description: "VIP or Any Person"
- name: persons
type: string
description: "Person count trigger: 0, 1, 2+, or Any"
- name: tracking_target
type: string
description: "Left, Middle, Right, Caused By, or Inside (native only)"
# --- Camera Setup Controls ---
- id: set_camera_selection
label: Set Camera Selection
kind: action
params:
- name: camera_index
type: integer
description: Camera index
- name: code_name
type: string
description: Code Name corresponding to the wired camera status component
notes: Used to provide privacy compatibility and daily recalibration
- id: set_camera_streaming_mode
label: Set Camera Streaming Mode
kind: action
params:
- name: camera_index
type: integer
description: Camera index
- name: mode
type: string
description: Streaming mode for the camera (e.g. privacy mode, streaming mode, camera selection mode)
# --- Mediacast Router Controls ---
- id: set_privacy
label: Set Privacy
kind: action
params:
- name: output_index
type: integer
description: Mediacast Router output index
- name: enabled
type: boolean
description: Enable or disable privacy for selected USB Video Bridge
- id: set_auto_privacy_delay
label: Set Auto Privacy Delay
kind: action
params:
- name: delay_seconds
type: integer
description: "Delay in seconds before invoking privacy (5-600)"
- id: set_write_protect
label: Set Write Protect
kind: action
params:
- name: enabled
type: boolean
description: "Prevent ACPR/SV Control buttons from writing state to current Room Configuration"
- id: set_acpr_output_select
label: Set ACPR Output Select Control
kind: action
params:
- name: output_index
type: integer
description: Mediacast Router output index
- name: enabled
type: boolean
description: "Enable (true=1) or disable (false=0) ACPR output select for the Mediacast Router output"
- id: set_mediacast_video_router
label: Set Mediacast Video Router
kind: action
params:
- name: router_name
type: string
description: Code Name of the Mediacast Video Router component to use
notes: Only one Mediacast Router is allowed per Seervision plugin
# --- Camera Recalibration ---
- id: recalibrate_now
label: Recalibrate Now
kind: action
params: []
notes: Immediately recalibrates all Seervision and ACPR cameras
- id: set_recalibration_time
label: Set Recalibration Time
kind: action
params:
- name: time
type: string
description: Daily time for automatic recalibration
# --- Server Management ---
- id: reboot_server
label: Reboot Server
kind: action
params: []
notes: Immediately restarts the Seervision server
- id: set_reboot_schedule
label: Set Reboot Schedule
kind: action
params:
- name: day
type: string
description: "Day of week or All for daily"
- name: time
type: string
description: Time for automatic reboot
- id: server_backup
label: Server Backup
kind: action
params: []
notes: Generates backup of all Seervision Instance settings (Containers, Trigger Zones, Thresholds, PTU Configuration, RTSP settings)
- id: server_restore
label: Server Restore
kind: action
params:
- name: file
type: string
description: Backup file selection from Core Manager
- id: discover_servers
label: Discover Servers
kind: action
params: []
notes: Uses mDNS to discover Seervision servers on the network
# --- Plugin Data ---
- id: plugin_database_backup
label: Plugin Database Backup
kind: action
params: []
notes: Generates JSON string of all plugin controls and configurations
- id: plugin_database_restore
label: Plugin Database Restore
kind: action
params:
- name: json_string
type: string
description: Plugin data JSON string to restore
# --- Room Configuration ---
- id: add_room_configuration
label: Add Room Configuration
kind: action
params: []
- id: remove_room_configuration
label: Remove Room Configuration
kind: action
params: []
- id: rename_room_configuration
label: Rename Room Configuration
kind: action
params:
- name: name
type: string
description: New name for the current room configuration
- id: clear_room_configuration
label: Clear Room Configuration
kind: action
params: []
notes: Resets or clears the current room configuration settings
- id: select_room_configuration
label: Select Room Configuration
kind: action
params:
- name: index
type: integer
description: Room configuration index
# --- Static Camera Position Containers ---
- id: save_position_container
label: Save Position Container
kind: action
params:
- name: camera_index
type: integer
description: Static camera index
- name: zone_index
type: integer
description: Zone index
- name: name
type: string
description: Container name
- id: manually_trigger_container
label: Manually Trigger Container
kind: action
params:
- name: camera_index
type: integer
description: Static camera index
- name: zone_index
type: integer
description: Zone index
- id: set_coordinates
label: Set Coordinates
kind: action
params:
- name: camera_index
type: integer
description: Static camera index
- name: zone_index
type: integer
description: Zone index
- name: pan
type: number
description: "Pan: -0.9936 to +0.9936"
- name: tilt
type: number
description: "Tilt: -0.9936 to +2.9808"
- name: zoom
type: number
description: "Zoom: 0.000000 to 1.0"
# --- Enable/Disable Plugin ---
- id: set_plugin_enabled
label: Set Plugin Enabled
kind: action
params:
- name: enabled
type: boolean
description: "Enable (value=1) or disable (value=0) the plugin"
notes: When disabled, Connection Status changes to "Not Present - Disabled"
# --- Plugin Properties ---
- id: set_lock
label: Set Lock
kind: action
params:
- name: enabled
type: boolean
description: "When Yes, all commissioning-time controls are disabled until unlocked after a design redeploy"
notes: Default setting is No
- id: set_is_managed
label: Set Is Managed
kind: action
params:
- name: enabled
type: boolean
description: "When Yes, adds the plugin to the Inventory list for monitoring in Core Manager and Enterprise Manager"
- id: set_show_debug
label: Set Show Debug
kind: action
params:
- name: enabled
type: boolean
description: "When Yes, shows the Debug Output window"
- id: set_vsa_model
label: Set VSA Model
kind: action
params:
- name: model
type: string
description: "SVS1/4 (Seervision OS) or VSA-100 (Q-SYS OS)"
# --- Reconnection Controls ---
- id: set_enable_fallback_reconnect
label: Set Enable Fallback on Reconnect
kind: action
params:
- name: camera_index
type: integer
description: Tracking or conductor camera index
- name: enabled
type: boolean
description: "Enable or disable the fallback mechanism upon reconnection"
notes: When enabled, fallback will not be triggered when the server reconnects
Feedbacks
- id: connection_status
type: string
description: Websocket connection status for a specific Seervision instance
values: [OK, Initializing, Compromised, Missing, Fault, Unknown, "Not Present"]
- id: global_status
type: string
description: Aggregate status of all Seervision servers and instances
- id: suite_status
type: string
description: Suite status for a specific instance
- id: suite_version
type: string
description: Suite version for a specific instance
- id: is_tracking
type: boolean
description: Indicates whether a tracking camera is actively tracking
- id: camera_is_tracking_led
type: boolean
description: LED indicator for tracking state
- id: vip_id
type: string
description: ID of the currently tracked subject
- id: privacy_opt_out
type: boolean
description: "Indicates whether a camera is excluded from privacy handling logic (per camera: conductor, static, tracking)"
notes: By default disabled for new plugins. Not available for ACPR cameras.
- id: last_event_zone_name
type: string
description: Name of the Trigger Zone that was last triggered
- id: last_event_type
type: string
description: Type of the last triggered event
- id: last_event_caused_by
type: string
description: ID of the subject that caused the last triggered event
- id: last_event_inside_ids
type: string
description: IDs of all subjects remaining in the last-triggered Trigger Zone
- id: triggered_led
type: boolean
description: Indicates when an Event/Action row is triggered
- id: container_running
type: boolean
description: Indicates a Container recall is in progress
- id: container_complete
type: boolean
description: Indicates a Container recall is finished
- id: container_interrupted
type: boolean
description: Indicates an Action was interrupted
- id: container_abandoned
type: boolean
description: Indicates an Action was abandoned
- id: current_route
type: string
description: Current Mediacast Router input selection for a given output
- id: seervision_source
type: string
description: Desired Seervision Source selection for a Mediacast output
- id: acpr_source
type: string
description: Desired ACPR Source selection for a Mediacast output
- id: seervision_output_select_control
type: string
description: Seervision Output Select Control for a specific Mediacast Router output
- id: acpr_presenter_zone_active
type: boolean
description: Indicates a Seervision Zone is active in the ACPR plugin
- id: ptu_status
type: string
description: PTU (Pan-Tilt Unit) connection status for a specific instance
- id: gpu_temperature
type: string
description: GPU temperature in Celsius for a specific instance
- id: cpu_temperature
type: string
description: CPU temperature in Celsius for a specific instance
- id: capture_card_temperature
type: string
description: Capture card temperature for conductor cameras
- id: recalibrating
type: boolean
description: Pulsing LED indicating recalibration is active
- id: camera_streaming_mode
type: string
description: Current streaming mode of a camera
- id: room_configuration_number
type: integer
description: Index of the currently selected room configuration
- id: discovered_servers
type: string
description: Server hostnames discovered via mDNS
- id: container_name
type: string
description: Name of the Position Container for a static camera zone
- id: coordinates
type: string
description: "Current coordinates of a static camera (Pan Tilt Zoom, space-separated)"
- id: event_log
type: string
description: "Last item added to the event log (date/time, severity, category, message)"
Variables
- id: seervision_ip_address
type: string
description: IP address used to connect to the Seervision server (per camera)
- id: server_instance
type: string
description: Instance selector for the Seervision server (/1 or /2)
- id: mcr_input
type: integer
description: Mediacast Input index for a specific camera in a room configuration
- id: mcr_output
type: integer
description: Mediacast Output index for a specific camera in a room configuration
- id: usb_video_bridge
type: string
description: USB Video Bridge selection for Auto-Privacy
- id: auto_privacy_delay
type: integer
description: "Delay in seconds before auto-privacy invokes (5-600)"
- id: recalibration_time
type: string
description: Daily time for automatic camera recalibration
- id: reconnect_interval
type: string
description: Time interval before fallback triggers upon reconnection
- id: debounce_time
type: integer
description: Minutes a websocket can be down before triggering fallback
- id: reboot_day
type: string
description: Scheduled reboot day (day name or All)
- id: reboot_time
type: string
description: Scheduled reboot time
- id: server_configuration_file
type: string
description: Backup file selection from Core Manager > Files > Seervision Server Configurations
- id: plugin_database_text
type: string
description: Plugin Data JSON string (enter or retrieve for backup/restore)
- id: room_configuration_name
type: string
description: Name of the currently selected room configuration
- id: mediacast_video_router
type: string
description: Code Name of the Mediacast Video Router component
- id: tracking_cams_count
type: integer
description: "Number of Tracking Cameras configured (1-8)"
- id: static_cams_count
type: integer
description: "Number of Static Cameras configured (1-8)"
- id: conductor_cams_count
type: integer
description: "Number of Conductor Cameras configured (1-8)"
- id: trigger_zones_count
type: integer
description: "Number of Trigger Zones configured (1-25)"
- id: exclusion_zones_count
type: integer
description: "Number of Exclusion Zones configured (1-25)"
- id: ptu_model
type: string
description: "PTU camera driver model (e.g. Q-SYS NC 12x80 v9.10+, Q-SYS NC 20x60 v9.10+, Virtual Static Camera Driver)"
- id: lens
type: string
description: "Lens selection for the camera (e.g. Q-SYS_NC_12x80, Q-SYS_NC_20x60)"
- id: calibration_model
type: string
description: Calibration model selection (Q-SYS)
- id: invert_pan
type: boolean
description: Invert pan when camera is installed upside down
- id: invert_tilt
type: boolean
description: Invert tilt when camera is installed upside down
- id: rtsp_stream_url
type: string
description: "Camera multicast RTSP stream URL (e.g. rtsp://camera_ip/main or rtsp://camera_ip/rtpstream/config1)"
Events
- id: zone_entered
description: Generated when a subject enters an enabled Trigger Zone
payload:
zone_name: string
caused_by_id: string
inside_ids: string
person_count: integer
- id: zone_leave
description: Generated when a subject leaves a Trigger Zone
payload:
zone_name: string
caused_by_id: string
inside_ids: string
person_count: integer
- id: fallback_triggered
description: Generated when the fallback mechanism is triggered on reconnection
payload: {}
Macros
# UNRESOLVED: no explicit multi-step sequences described in source beyond the
# event→action automation model already documented in Actions
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings, interlock procedures, or power-on sequencing
# requirements found in source
Notes
- This is a Q-SYS plugin component, not a standalone device. Control is via Q-SYS platform control pins, not a direct serial/TCP/REST interface.
- The plugin uses v2 encryption and requires Q-SYS 9.10.1 or above. Do not use with 9.10.0.
- VSA-100 does not support Seervision OS; uses Q-SYS OS with legacy plugins only. VSA-100 configuration web interface is at
http://<IP>:8123(HTTP, not HTTPS). The Peripheral Manager page uses HTTPS. - SVS4-2U supports 2 simultaneous AI processing instances; SVS1-2U supports 1; VSA-100 supports 2. Instances are accessed at
/<n>paths (SVS1/4 athttp://<IP>/<n>, VSA-100 athttp://<IP>:8123/<n>). - SVS4 / SVS1 uses the .patch upgrade file type; VSA-100 uses the .squash file type.
- VisionSuite accelerators are provisioned with DHCP enabled by default. Discover server IP via mDNS (not supported on VSA-100 / Q-SYS OS).
- Position Container recalls use continuous VISCA movements, not absolute coordinates — recall accuracy may not be 100% exact.
- Standard shot framing options for Containers: Full Body, American, Half Body, Medium Close Up.
- Only one Tracking Zone can be enabled per camera at a time. Multiple Exclusion Zones are supported simultaneously.
- Every integration requires at least one camera, one Mediacast Router component, and one Seervision plugin. Only one Mediacast Router per plugin.
- All camera and Mediacast Router components must have Script Access set to All. Plugin Code Name must be "Seervision_Plugin"; Mediacast Router Code Name must be "Mediacast_Router".
- Legacy (Seervision OS + ACPR) and VisionSuite Designer systems must not be commissioned alongside each other.
- Privacy Opt Out is not available for any ACPR cameras.
- Cameras in privacy mode will not recalibrate; an external script must take cameras out of privacy for recalibration when auto-privacy is enabled.
- When plugin is connected, manipulating Trigger/Tracking/Exclusion Zone states via the web interface is not recommended — use plugin controls.
Upgrade done. Added 17 new actions (camera selection, streaming mode, VIP ID set, zone names, ACPR zone enable, event camera number, container action ID, ACPR output select, mediacast router select, clear room config, lock, is managed, show debug, VSA model, fallback reconnect). Added 3 new feedbacks (privacy_opt_out, seervision_output_select_control, event_log). Added 15 new variables (server config file, plugin DB text, room name, camera counts ×5, PTU model, lens, calibration, invert pan/tilt, RTSP URL). Extended transport with HTTP:8123 for VSA-100. Preserved all 30 existing actions + existing feedbacks/variables/events intact.
## Provenance
```yaml
source_domains:
- help.qsys.com
source_urls:
- https://help.qsys.com/Content/VisionSuite/seervision_control.htm
retrieved_at: 2026-07-16T04:03:08.126Z
last_checked_at: 2026-07-22T00:42:05.323Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-07-22T00:42:05.323Z
matched_actions: 47
action_count: 47
confidence: medium
summary: "All 47 spec actions match documented Q-SYS plugin controls; transport (TCP/HTTP on port 8123) verified; no extra source commands. (9 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "underlying Seervision websocket API is not documented in source; only the Q-SYS plugin pin interface is described"
- "compatible hardware accelerators (SVS4-2U, SVS1-2U, VSA-100) firmware version ranges not stated"
- "no explicit multi-step sequences described in source beyond the"
- "no safety warnings, interlock procedures, or power-on sequencing"
- "Seervision server websocket API (message format, authentication) not documented"
- "ACPR plugin API and audio trigger protocol not documented"
- "exact Mediacast Router integration protocol details not documented"
- "compatible camera firmware versions not stated"
- "hardware accelerator (VSA-100, SVS4, SVS1) management API not documented"
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0