Summary
Barco Pulse-based projector controllable over TCP/IP (JSON-RPC 2.0 on port 9090) and RS-232. The spec covers authentication, power control, source selection, illumination/laser power, picture settings, warp/blend/black-level file upload, environment telemetry, DMX, optics, and introspection.
Transport
protocols:
- tcp
- serial
addressing:
port: 9090
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: passcode # source: authenticate JSON-RPC method requires code parameter; passcode not stated to be optional for non-end-user access levels
Notes on auth: Source states authentication is optional for normal end-user access. To access higher privilege levels, send a JSON-RPC authenticate request with a code integer (e.g. 98765). Code format and value not documented.
Traits
- powerable # inferred from system.poweron / system.poweroff commands
- routable # inferred from image.window.main.source selection
- queryable # inferred from property.get / property.subscribe
- levelable # inferred from illumination.sources.laser.power and image.brightness/contrast/saturation/gamma
Actions
- id: authenticate
label: Authenticate (set access level)
kind: action
command: '{"jsonrpc": "2.0", "method": "authenticate", "params": { "code": {code} }, "id": 1}'
params:
- name: code
type: integer
description: Secret pass code (value not documented in source)
- id: power_on
label: Power On
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweron" }'
params: []
- id: power_off
label: Power Off
kind: action
command: '{ "jsonrpc": "2.0", "method": "system.poweroff" }'
params: []
- id: system_state_query
label: System State Query
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "system.state" } }'
params: []
- id: system_state_subscribe
label: Subscribe to System State Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "system.state" } }'
params: []
- id: active_source_query
label: Get Active Source
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "image.window.main.source" } }'
params: []
- id: list_sources
label: List Available Sources
kind: query
command: '{"jsonrpc": "2.0", "method": "image.source.list" }'
params: []
- id: set_active_source
label: Set Active Source
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.window.main.source", "value": "{source}" } }'
params:
- name: source
type: string
description: Source name from image.source.list (e.g. "DisplayPort 1", "HDMI")
- id: source_subscribe
label: Subscribe to Active Source Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "image.window.main.source" } }'
params: []
- id: list_connectors
label: List Available Connectors
kind: query
command: '{"jsonrpc": "2.0", "method": "image.connector.list" }'
params: []
- id: list_source_connectors
label: List Connectors Used By Source
kind: query
command: '{"jsonrpc": "2.0", "method": "image.source.{source}.listconnectors" }'
params:
- name: source
type: string
description: Source object name (lowercase, non-word chars stripped; e.g. "displayport1")
- id: connector_signal_query
label: Get Connector Detected Signal
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "image.connector.{connector}.detectedsignal" } }'
params:
- name: connector
type: string
description: Connector object name (e.g. "l1hdmi", "displayport1")
- id: connector_signal_subscribe
label: Subscribe to Connector Signal Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "image.connector.{connector}.detectedsignal" } }'
params:
- name: connector
type: string
description: Connector object name
- id: set_brightness
label: Set Image Brightness
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.brightness", "value": {value} } }'
params:
- name: value
type: float
description: Normalized brightness, range -1 to 1 (0 default)
- id: get_brightness
label: Get Image Brightness
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "image.brightness" } }'
params: []
- id: subscribe_brightness
label: Subscribe to Brightness Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "image.brightness" } }'
params: []
- id: set_contrast
label: Set Image Contrast
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.contrast", "value": {value} } }'
params:
- name: value
type: float
description: Normalized contrast, range 0 to 2 (1 default)
- id: get_contrast
label: Get Image Contrast
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "image.contrast" } }'
params: []
- id: set_gamma
label: Set Image Gamma
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.gamma", "value": {value} } }'
params:
- name: value
type: float
description: Gamma, range 1 to 3 (2.2 default)
- id: get_gamma
label: Get Image Gamma
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "image.gamma" } }'
params: []
- id: set_saturation
label: Set Image Saturation
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.saturation", "value": {value} } }'
params:
- name: value
type: float
description: Normalized saturation, range 0 to 2 (1 default)
- id: set_sharpness
label: Set Image Sharpness
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.sharpness", "value": {value} } }'
params:
- name: value
type: integer
description: Sharpness, range -2 to 8
- id: set_orientation
label: Set Image Orientation
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.orientation", "value": "{orientation}" } }'
params:
- name: orientation
type: string
enum: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: set_window_position
label: Set Window Position
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.window.main.position", "value": { "x": {x}, "y": {y} } } }'
params:
- name: x
type: integer
- name: y
type: integer
- id: set_window_size
label: Set Window Size
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.window.main.size", "value": { "width": {width}, "height": {height} } } }'
params:
- name: width
type: integer
- name: height
type: integer
- id: set_scaling_mode
label: Set Window Scaling Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.window.main.scalingmode", "value": "{mode}" } }'
params:
- name: mode
type: string
enum: [Fill, OneToOne, FillScreen, Stretch]
- id: illumination_state_query
label: Illumination State Query
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.state" } }'
params: []
- id: illumination_state_subscribe
label: Subscribe to Illumination State Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "illumination.state" } }'
params: []
- id: set_laser_power
label: Set Laser Power
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "illumination.sources.laser.power", "value": {value} } }'
params:
- name: value
type: integer
description: Power percent (min/max are dynamic, introspect first)
- id: get_laser_power
label: Get Laser Power
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.sources.laser.power" } }'
params: []
- id: get_laser_min_power
label: Get Laser Min Power
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.sources.laser.minpower" } }'
params: []
- id: get_laser_max_power
label: Get Laser Max Power
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.sources.laser.maxpower" } }'
params: []
- id: subscribe_laser_power
label: Subscribe to Laser Power Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "illumination.sources.laser.power" } }'
params: []
- id: illumination_clo_engage
label: Engage CLO at Current Light Level
kind: action
command: '{"jsonrpc": "2.0", "method": "illumination.clo.engage" }'
params: []
- id: get_laser_serial_number
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc": "2.0", "method": "illumination.laser.getserialnumber" }'
params: []
- id: enable_warp
label: Enable Global Warp
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.enable", "value": {value} } }'
params:
- name: value
type: boolean
- id: upload_warp_file
label: Upload Warp Grid File (HTTP POST)
kind: action
command: 'curl -X POST -F file=@{file} http://{address}/api/image/processing/warp/file/transfer'
params:
- name: file
type: string
description: Warp file (e.g. warp.xml)
- name: address
type: string
description: Projector IP address (e.g. 192.168.1.100)
- id: select_warp_file
label: Select Warp File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.file.selected", "value": "{file}" } }'
params:
- name: file
type: string
- id: enable_warp_file
label: Enable Warp File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.file.enable", "value": true } }'
params: []
- id: upload_blend_mask
label: Upload Blend Mask (HTTP POST)
kind: action
command: 'curl -X POST -F file=@{file} http://{address}/api/image/processing/blend/file/transfer'
params:
- name: file
type: string
description: Blend mask image (PNG/JPEG/TIFF, 8 or 16 bit grayscale; resolution must match blend layer)
- name: address
type: string
description: Projector IP address
- id: select_blend_file
label: Select Blend File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blend.file.selected", "value": "{file}" } }'
params:
- name: file
type: string
- id: enable_blend_file
label: Enable Blend File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blend.file.enable", "value": true } }'
params: []
- id: upload_blacklevel_mask
label: Upload Black Level Mask (HTTP POST)
kind: action
command: 'curl -X POST -F file=@{file} http://{address}/api/image/processing/blacklevel/file/transfer'
params:
- name: file
type: string
description: Black level mask image (8 or 16 bit grayscale)
- name: address
type: string
description: Projector IP address
- id: select_blacklevel_file
label: Select Black Level File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blacklevel.file.selected", "value": "{file}" } }'
params:
- name: file
type: string
- id: enable_blacklevel_file
label: Enable Black Level File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blacklevel.file.enable", "value": true } }'
params: []
- id: introspect
label: Introspect Object (recursive)
kind: query
command: '{"jsonrpc": "2.0", "method": "introspect", "params": { "object": "{object}", "recursive": {recursive} }, "id": 1 }'
params:
- name: object
type: string
description: Dot-notation object name (default empty introspects all)
- name: recursive
type: boolean
description: Default true; false lists only direct children
- id: introspect_compact
label: Introspect Object (array form)
kind: query
command: '{"jsonrpc": "2.0", "method": "introspect", "params": [ "{object}", {recursive} ], "id": 1 }'
params:
- name: object
type: string
- name: recursive
type: boolean
- id: subscribe_signal
label: Subscribe to Signal
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": { "signal": "{signal}" } }'
params:
- name: signal
type: string
description: Signal name (e.g. "modelupdated", "image.processing.warp.gridchanged")
- id: subscribe_signals_multi
label: Subscribe to Multiple Signals
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": { "signal": ["{signal1}", "{signal2}"] } }'
params:
- name: signal1
type: string
- name: signal2
type: string
- id: unsubscribe_signal
label: Unsubscribe from Signal
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": { "signal": "{signal}" } }'
params:
- name: signal
type: string
- id: unsubscribe_signals_multi
label: Unsubscribe from Multiple Signals
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": { "signal": ["{signal1}", "{signal2}"] } }'
params:
- name: signal1
type: string
- name: signal2
type: string
- id: subscribe_property
label: Subscribe to Property Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "{property}" } }'
params:
- name: property
type: string
description: Property name in dot notation (e.g. "image.brightness")
- id: subscribe_properties_multi
label: Subscribe to Multiple Properties
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": ["{property1}", "{property2}"] } }'
params:
- name: property1
type: string
- name: property2
type: string
- id: unsubscribe_property
label: Unsubscribe from Property
kind: action
command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": { "property": "{property}" } }'
params:
- name: property
type: string
- id: unsubscribe_properties_multi
label: Unsubscribe from Multiple Properties
kind: action
command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": { "property": ["{property1}", "{property2}"] } }'
params:
- name: property1
type: string
- name: property2
type: string
- id: get_property
label: Get Property Value
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "{property}" } }'
params:
- name: property
type: string
- id: get_properties_multi
label: Get Multiple Property Values
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": ["{property1}", "{property2}"] } }'
params:
- name: property1
type: string
- name: property2
type: string
- id: set_property
label: Set Property Value
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "{property}", "value": {value} } }'
params:
- name: property
type: string
- name: value
type: string
description: Value appropriate to property type (boolean, int, float, string, object)
- id: led_blink
label: Blink Status LED
kind: action
command: '{"jsonrpc": "2.0", "method": "ledctrl.blink", "params": { "led": "{led}", "color": "{color}", "period": {period} } }'
params:
- name: led
type: string
description: LED identifier (e.g. "systemstatus")
- name: color
type: string
description: LED color (e.g. "red")
- name: period
type: integer
description: Blink period
- id: get_environment_temperatures
label: Get Environment Temperatures
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getcontrolblocks", "params": { "type": "Sensor", "valuetype": "Temperature" } }'
params: []
- id: get_environment_fan_speeds
label: Get Fan Speeds
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getcontrolblocks", "params": { "type": "Sensor", "valuetype": "Speed" } }'
params: []
- id: get_environment_alarms
label: Get Alarm Info
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getalarminfo" }'
params: []
- id: get_alarm_state
label: Get Environment Alarm State
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "environment.alarmstate" } }'
params: []
- id: get_lan_ipv4_config
label: Get LAN IPv4 Configuration
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "network.device.lan.ip4config" } }'
params: []
- id: get_lan_state
label: Get LAN State
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "network.device.lan.state" } }'
params: []
- id: get_shutter_position
label: Get Shutter Position
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "optics.shutter.position" } }'
params: []
- id: set_shutter_target
label: Set Shutter Target
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "optics.shutter.target", "value": "{target}" } }'
params:
- name: target
type: string
enum: [Open, Closed]
- id: get_zoom_position
label: Get Zoom Position
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "optics.zoom.position" } }'
params: []
- id: get_focus_position
label: Get Focus Position
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "optics.focus.position" } }'
params: []
- id: get_lensshift_horizontal_position
label: Get Lens Shift Horizontal Position
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "optics.lensshift.horizontal.position" } }'
params: []
- id: get_lensshift_vertical_position
label: Get Lens Shift Vertical Position
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "optics.lensshift.vertical.position" } }'
params: []
- id: set_standby_enable
label: Enable/Disable Standby State
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "system.standby.enable", "value": {value} } }'
params:
- name: value
type: boolean
- id: set_eco_enable
label: Enable/Disable ECO State
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "system.eco.enable", "value": {value} } }'
params:
- name: value
type: boolean
- id: list_dmx_modes
label: List DMX Modes
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listmodes" }'
params: []
- id: list_dmx_channels
label: List DMX Channels (for current mode)
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listchannels" }'
params: []
- id: get_dmx_mode
label: Get DMX Mode
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "dmx.mode" } }'
params: []
- id: set_dmx_mode
label: Set DMX Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "dmx.mode", "value": "{mode}" } }'
params:
- name: mode
type: string
- id: get_dmx_startchannel
label: Get DMX Start Channel
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "dmx.startchannel" } }'
params: []
- id: set_dmx_startchannel
label: Set DMX Start Channel
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "dmx.startchannel", "value": {channel} } }'
params:
- name: channel
type: integer
description: DMX start channel, range 1 to 512
- id: get_dmx_shutdown
label: Get DMX Shutdown Flag
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "dmx.shutdown" } }'
params: []
- id: set_dmx_shutdown
label: Set DMX Shutdown Flag
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "dmx.shutdown", "value": {value} } }'
params:
- name: value
type: boolean
- id: copy_p7_preset_to_custom
label: P7 Color - Copy Preset to Custom
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.copypresettocustom", "params": { "presetname": "{presetname}" } }'
params:
- name: presetname
type: string
- id: reset_p7_preset_to_default
label: P7 Color - Reset Preset to Default Values
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resetpreset", "params": { "presetname": "{presetname}" } }'
params:
- name: presetname
type: string
- id: reset_p7_preset_to_native
label: P7 Color - Reset to Native
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resettonative" }'
params: []
- id: rgb_mode_next
label: Cycle to Next RGB Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.rgbmode.nextrgbmode" }'
params: []
- id: list_firmware_components
label: List Firmware Components
kind: query
command: '{"jsonrpc": "2.0", "method": "firmware.listcomponents" }'
params: []
- id: list_firmware_versions
label: List Firmware Component Versions and Status
kind: query
command: '{"jsonrpc": "2.0", "method": "firmware.listcomponentversionstatus" }'
params: []
- id: schedule_firmware_upgrade
label: Schedule Firmware Component Upgrade at Next Reboot
kind: action
command: '{"jsonrpc": "2.0", "method": "firmware.schedulecomponentupgrade" }'
params: []
# UNRESOLVED: source does not document the params object for this method (component name, target version).
- id: serial_wake_from_eco
label: Wake from ECO via RS-232
kind: action
command: ':POWR1\r'
params: []
notes: |
Serial-port ASCII wake command. Documented as the only RS-232 ASCII command
in the source. All other control is via JSON-RPC over TCP/serial.
Feedbacks
- id: system_state
type: enum
values: [boot, eco, standby, ready, conditioning, on, service, deconditioning, error]
- id: illumination_state
type: enum
values: [On, Off]
- id: laser_power_percent
type: integer
description: Laser illumination power in percent (range is dynamic; introspect minpower/maxpower)
- id: laser_min_power_percent
type: integer
description: Laser illumination minimum power in percent (read-only, dynamic)
- id: laser_max_power_percent
type: integer
description: Laser illumination maximum power in percent (read-only, dynamic)
- id: image_brightness
type: float
description: Normalized brightness, range -1 to 1
- id: image_contrast
type: float
description: Normalized contrast, range 0 to 2
- id: image_gamma
type: float
description: Gamma, range 1 to 3
- id: image_saturation
type: float
description: Normalized saturation, range 0 to 2
- id: image_sharpness
type: integer
description: Sharpness, range -2 to 8
- id: image_orientation
type: enum
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: window_scaling_mode
type: enum
values: [Fill, OneToOne, FillScreen, Stretch]
- id: shutter_position
type: enum
values: [Open, Closed]
- id: shutter_target
type: enum
values: [Open, Closed]
- id: lan_state
type: enum
values: [CONNECTED, DISCONNECTED]
- id: lan_ipv4_config
type: object
description: Object with Address, Mask, Gateway, NameServers (all string)
- id: alarm_state
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
- id: environment_temperatures
type: object
description: Dictionary of sensor name -> float temperature reading
- id: environment_fan_speeds
type: object
description: Dictionary of fan name -> int/float RPM reading
- id: firmware_component_versions
type: object
description: Array of {name, versions:{available,running}, status} per component; status enum {Unknown, OK, Upgradable}
- id: dmx_startchannel
type: integer
description: DMX start channel, range 1 to 512
- id: dmx_shutdown
type: boolean
- id: connector_detected_signal
type: object
description: Signal info dict with active, name, vertical/horizontal resolution, sync/timing, frequency, pixel_rate, scan, bits_per_component, color_space, signal_range, chroma_sampling, gamma_type, color_primaries, mastering_luminance, content_aspect_ratio, is_stereo, stereo_mode. See source for full schema.
Variables
- id: image_brightness
type: float
range: [-1, 1]
default: 0
- id: image_contrast
type: float
range: [0, 2]
default: 1
- id: image_gamma
type: float
range: [1, 3]
default: 2.2
- id: image_saturation
type: float
range: [0, 2]
default: 1
- id: image_sharpness
type: integer
range: [-2, 8]
- id: image_orientation
type: enum
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: window_scaling_mode
type: enum
values: [Fill, OneToOne, FillScreen, Stretch]
- id: window_position
type: object
schema: {x: int, y: int}
- id: window_size
type: object
schema: {width: int, height: int}
- id: illumination_laser_power
type: integer
description: Percent. Bounds are dynamic - introspect illumination.sources.laser.{min,max}power.
- id: shutter_target
type: enum
values: [Open, Closed]
- id: system_standby_enable
type: boolean
- id: system_eco_enable
type: boolean
- id: dmx_mode
type: string
- id: dmx_startchannel
type: integer
range: [1, 512]
- id: dmx_shutdown
type: boolean
- id: warp_enable
type: boolean
- id: warp_file_enable
type: boolean
- id: blend_file_enable
type: boolean
- id: blacklevel_file_enable
type: boolean
Events
- id: property_changed
description: |
Server-initiated notification carrying array of {property_name: value}
pairs. Client must implement `property.changed` handler. Notifications
carry no `id` and require no response.
payload_example: |
{ "jsonrpc": "2.0", "method": "property.changed", "params": { "property": [ { "image.window.main.source": "DisplayPort 2" } ] } }
- id: signal_callback
description: |
Server-initiated notification for emitted signals. Carries array of
{signal_name: args_object}.
payload_example: |
{ "jsonrpc": "2.0", "method": "signal.callback", "params": { "signal": [ { "image.processing.warp.gridchanged": { } } ] } }
- id: introspect_objectchanged
description: |
Delivered via `signal.callback` when the object tree changes (objects
added or removed). Payload: {object: name, isnew: bool}.
payload_example: |
{ "jsonrpc": "2.0", "method": "signal.callback", "params": { "signal": [ { "introspect.objectchanged": { "object": "motors.motor1", "newobject": true } } ] } }
- id: modelupdated
description: |
Signal triggered when object structure changes (subscribe via
signal.subscribe with signal "modelupdated").
Macros
- id: power_on_safe
description: Verify state before powering on (per source best-practice guidance).
steps:
- method: property.get
params: {property: system.state}
expect: ["standby", "ready"]
- method: system.poweron
params: {}
- id: power_off_safe
description: Verify state before powering off (per source best-practice guidance).
steps:
- method: property.get
params: {property: system.state}
expect: ["on"]
- method: system.poweroff
params: {}
- id: switch_active_source
description: Look up available sources and select one.
steps:
- method: image.source.list
params: {}
- method: property.set
params: {property: image.window.main.source, value: "{source}"}
- id: upload_and_activate_warp
description: Upload warp file, select it, then enable file-based warp.
steps:
- command: 'curl -X POST -F file=@{file} http://{address}/api/image/processing/warp/file/transfer'
description: HTTP POST warp file
- method: property.set
params: {property: image.processing.warp.file.selected, value: "{file}"}
- method: property.set
params: {property: image.processing.warp.file.enable, value: true}
- method: property.set
params: {property: image.processing.warp.enable, value: true}
- id: upload_and_activate_blend
description: Upload blend mask, select it, then enable file-based blend.
steps:
- command: 'curl -X POST -F file=@{file} http://{address}/api/image/processing/blend/file/transfer'
- method: property.set
params: {property: image.processing.blend.file.selected, value: "{file}"}
- method: property.set
params: {property: image.processing.blend.file.enable, value: true}
- id: upload_and_activate_blacklevel
description: Upload black-level mask, select it, then enable file-based black-level correction.
steps:
- command: 'curl -X POST -F file=@{file} http://{address}/api/image/processing/blacklevel/file/transfer'
- method: property.set
params: {property: image.processing.blacklevel.file.selected, value: "{file}"}
- method: property.set
params: {property: image.processing.blacklevel.file.enable, value: true}
Safety
confirmation_required_for:
- system.poweron # source recommends verifying state is standby/ready before issuing
- system.poweroff # source recommends verifying state is on before issuing
- firmware.schedulecomponentupgrade # forces upgrade at next reboot
interlocks: []
# UNRESOLVED: source contains no explicit safety interlocks, voltage/current
# specs, fault recovery sequences, or lockout procedures. The only documented
# state-machine guard is the recommendation to verify system.state before
# power transitions. Do not invent additional safety claims.
Notes
- All commands are JSON-RPC 2.0 over TCP port 9090. The same JSON-RPC surface is also reachable via the RS-232 serial port (19200/8/N/1, no flow control), with the documented exception of
:POWR1\rfor waking from ECO mode. - Authentication: optional for end-user access. To elevate access, call
authenticatewithcodeinteger. Code value is not documented in source. - The
idfield in requests is optional (string or number). JSON-RPC responses echo it; notifications omit it. - Properties are dot-notation strings (e.g.
image.brightness,illumination.sources.laser.power). Source object/connector names follow a normalize-to-lowercase-strip-non-word convention (e.g.DisplayPort 1->displayport1). - Property discovery is dynamic — the source explicitly warns that some methods/properties/signals exist only depending on installed peripherals (lens type, DMX mode, etc.). Use
introspectat runtime to enumerate the live API for a specific unit. - File upload endpoints (
/api/image/processing/warp/file/transfer,/api/image/processing/blend/file/transfer,/api/image/processing/blacklevel/file/transfer) accept HTTP POST with multipartfile=@...form data viacurl. The base URL pattern ishttp://<projector-ip>/api/.... - Source names returned by
image.source.listvary by projector model and installed options; treat as dynamic enum. - Best practice from source: after
property.set, wait for the confirmation response before issuing anotherproperty.seton the same property, otherwise the server can be flooded and performance degraded. - The source documents JSON-RPC 2.0 semantics — clients must implement
property.changedandsignal.callbackhandlers; notifications carry noidand require no reply.
Provenance
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-07-14T08:34:13.403Z
last_checked_at: 2026-07-21T20:30:37.626Z
Verification Summary
verdict: verified
checked_at: 2026-07-21T20:30:37.626Z
matched_actions: 89
action_count: 89
confidence: medium
summary: "All 89 spec actions verified as literal matches in source; all transport parameters (port 9090, baud 19200, etc.) confirmed. (5 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "complete list of peripherals (DMX channels, motorized lens options, lamp vs laser) is dynamic — depends on installed configuration. Use introspection at runtime."
- "source does not document the params object for this method (component name, target version)."
- "source contains no explicit safety interlocks, voltage/current"
- "- Firmware version compatibility / minimum required firmware for any specific feature is not stated."
- "port not stated."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0