Summary
The Barco MDMX 22400 GNTB is a projector controllable via JSON-RPC 2.0 over TCP/IP on port 9090, and via RS-232 serial using a fixed ASCII wake-up command. The spec covers the Pulse API: power, input selection, illumination, picture settings, warping, blending, black level, environment telemetry, and DMX/optic/firmware 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: code # explicit: source documents an authentication method "authenticate" with params {id, code}
Traits
- powerable # inferred from system.poweron / system.poweroff examples
- routable # inferred from image.window.main.source input selection examples
- queryable # inferred from system.state and other property.get examples
- levelable # inferred from illumination.sources.laser.power (RW) and image.brightness/contrast/gamma/saturation examples
Actions
- id: authenticate
label: Authenticate
kind: action
command: '{"jsonrpc": "2.0", "method": "authenticate", "params": { "id": 1, "code": 98765 }, "id": 1}'
params:
- name: id
type: integer
description: Request identifier
- name: code
type: integer
description: Secret pass code that sets user access level
- id: system_poweron
label: Power On
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweron"}'
params: []
- id: system_poweroff
label: Power Off
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweroff"}'
params: []
- id: property_set
label: Set Property
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "{property}", "value": {value} }, "id": {id}}'
params:
- name: property
type: string
description: Object.property in dot notation
- name: value
type: string
description: Value appropriate for the property's type
- name: id
type: integer
description: Request identifier
- id: property_get
label: Get Property
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "{property}" }, "id": {id}}'
params:
- name: property
type: string
description: Object.property in dot notation
- name: id
type: integer
description: Request identifier
- id: property_get_multi
label: Get Multiple Properties
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": ["{prop1}", "{prop2}"] }, "id": {id}}'
params:
- name: prop1
type: string
description: First property name
- name: prop2
type: string
description: Second property name
- name: id
type: integer
description: Request identifier
- id: property_subscribe
label: Subscribe To Property Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "{property}" }, "id": {id}}'
params:
- name: property
type: string
description: Property name to subscribe to
- name: id
type: integer
description: Request identifier
- id: property_subscribe_multi
label: Subscribe To Multiple Property Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": ["{prop1}", "{prop2}"] }, "id": {id}}'
params:
- name: prop1
type: string
description: First property name
- name: prop2
type: string
description: Second property name
- name: id
type: integer
description: Request identifier
- id: property_unsubscribe
label: Unsubscribe From Property
kind: action
command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": { "property": "{property}" }, "id": {id}}'
params:
- name: property
type: string
description: Property name to stop observing
- name: id
type: integer
description: Request identifier
- id: property_unsubscribe_multi
label: Unsubscribe From Multiple Properties
kind: action
command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": { "property": ["{prop1}", "{prop2}"] }, "id": {id}}'
params:
- name: prop1
type: string
description: First property name
- name: prop2
type: string
description: Second property name
- name: id
type: integer
description: Request identifier
- id: signal_subscribe
label: Subscribe To Signal
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": { "signal": "{signal}" }, "id": {id}}'
params:
- name: signal
type: string
description: Signal name (e.g. modelupdated)
- name: id
type: integer
description: Request identifier
- id: signal_subscribe_multi
label: Subscribe To Multiple Signals
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": { "signal": ["{sig1}", "{sig2}"] }, "id": {id}}'
params:
- name: sig1
type: string
description: First signal name
- name: sig2
type: string
description: Second signal name
- name: id
type: integer
description: Request identifier
- id: signal_unsubscribe
label: Unsubscribe From Signal
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": { "signal": "{signal}" }, "id": {id}}'
params:
- name: signal
type: string
description: Signal name
- name: id
type: integer
description: Request identifier
- id: signal_unsubscribe_multi
label: Unsubscribe From Multiple Signals
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": { "signal": ["{sig1}", "{sig2}"] }, "id": {id}}'
params:
- name: sig1
type: string
description: First signal name
- name: sig2
type: string
description: Second signal name
- name: id
type: integer
description: Request identifier
- id: introspect
label: Introspect Object (recursive)
kind: query
command: '{"jsonrpc": "2.0", "method": "introspect", "params": { "object": "{object}", "recursive": true }, "id": {id}}'
params:
- name: object
type: string
description: Object name (dot notation allowed); empty/omitted introspects everything
- name: id
type: integer
description: Request identifier
- id: introspect_nonrecursive
label: Introspect Object (non-recursive)
kind: query
command: '{"jsonrpc": "2.0", "method": "introspect", "params": [ "{object}", false ], "id": {id}}'
params:
- name: object
type: string
description: Object name (dot notation allowed)
- name: id
type: integer
description: Request identifier
- id: ledctrl_blink
label: Blink LED
kind: action
command: '{"jsonrpc": "2.0", "method": "ledctrl.blink", "params": { "id": 3, "led": "systemstatus", "color": "{color}", "period": {period} }, "id": 3}'
params:
- name: color
type: string
description: LED color (e.g. "red")
- name: period
type: integer
description: Blink period
- id: image_source_list
label: List Available Sources
kind: query
command: '{"jsonrpc": "2.0", "method": "image.source.list", "id": 1}'
params: []
- id: image_connector_list
label: List Available Connectors
kind: query
command: '{"jsonrpc": "2.0", "method": "image.connector.list", "id": 3}'
params: []
- id: image_source_listconnectors
label: List Connectors Used By Source
kind: query
command: '{"jsonrpc": "2.0", "method": "image.source.{sourcename}.listconnectors", "id": 4}'
params:
- name: sourcename
type: string
description: Lowercase source object name (non-word chars stripped), e.g. "displayport1"
- id: illumination_clo_engage
label: Engage CLO At Current Light Level
kind: action
command: '{"jsonrpc": "2.0", "method": "illumination.clo.engage", "params": {}, "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: illumination_laser_getserialnumber
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc": "2.0", "method": "illumination.laser.getserialnumber", "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: environment_getcontrolblocks
label: Get Environment Control Blocks
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getcontrolblocks", "params": { "type": "{type}", "valuetype": "{valuetype}" }, "id": {id}}'
params:
- name: type
type: string
description: Sensor type - one of Sensor, Filter, Controller, Actuator, Alarm, GenericBlock
- name: valuetype
type: string
description: Sensor value type - e.g. Temperature, Speed, PWM, Voltage, Current, Power
- name: id
type: integer
description: Request identifier
- id: environment_getalarminfo
label: Get Alarm Info
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getalarminfo", "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: firmware_listcomponents
label: List Firmware Components
kind: query
command: '{"jsonrpc": "2.0", "method": "firmware.listcomponents", "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: firmware_listcomponentversionstatus
label: List Firmware Component Versions
kind: query
command: '{"jsonrpc": "2.0", "method": "firmware.listcomponentversionstatus", "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: firmware_schedulecomponentupgrade
label: Schedule Firmware Component Upgrade
kind: action
command: '{"jsonrpc": "2.0", "method": "firmware.schedulecomponentupgrade", "params": { "component": "{component}" }, "id": {id}}'
params:
- name: component
type: string
description: Firmware component name (from firmware.listcomponents)
- name: id
type: integer
description: Request identifier
- id: dmx_listchannels
label: List DMX Channels
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listchannels", "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: dmx_listmodes
label: List DMX Modes
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listmodes", "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: image_color_p7_custom_copypresettocustom
label: Copy P7 Preset To Custom
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.copypresettocustom", "params": { "presetname": "{presetname}" }, "id": {id}}'
params:
- name: presetname
type: string
description: Preset name
- name: id
type: integer
description: Request identifier
- id: image_color_p7_custom_resetpreset
label: Reset P7 Preset To Defaults
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resetpreset", "params": { "presetname": "{presetname}" }, "id": {id}}'
params:
- name: presetname
type: string
description: Preset name
- name: id
type: integer
description: Request identifier
- id: image_color_p7_custom_resettonative
label: Reset P7 To Native Colors
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resettonative", "params": {}, "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: image_color_rgbmode_nextrgbmode
label: Cycle To Next RGB Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.rgbmode.nextrgbmode", "params": {}, "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- 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}" }, "id": 2}'
params:
- name: source
type: string
description: Source name (e.g. "DisplayPort 1", "HDMI"); obtain list via image.source.list
- id: get_active_source
label: Get Active Source
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "image.window.main.source" }, "id": 0}'
params: []
- id: get_system_state
label: Get System State
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "system.state" }, "id": 1}'
params: []
- id: subscribe_system_state
label: Subscribe To System State Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "system.state" }, "id": 2}'
params: []
- id: get_illumination_state
label: Get Illumination State
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.state" }, "id": 0}'
params: []
- id: subscribe_illumination_state
label: Subscribe To Illumination State Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "illumination.state" }, "id": 1}'
params: []
- id: get_laser_power
label: Get Laser Power
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.sources.laser.power" }, "id": 3}'
params: []
- id: set_laser_power
label: Set Laser Power (percent)
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "illumination.sources.laser.power", "value": {percent} }, "id": 5}'
params:
- name: percent
type: integer
description: Target power in percent (consult minpower/maxpower)
- 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" }, "id": 4}'
params: []
- id: get_laser_minpower
label: Get Laser Minimum Power
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.sources.laser.minpower" }, "id": 6}'
params: []
- id: get_laser_maxpower
label: Get Laser Maximum Power
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.sources.laser.maxpower" }, "id": 5}'
params: []
- id: get_image_brightness
label: Get Image Brightness
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "image.brightness" }, "id": 7}'
params: []
- id: set_image_brightness
label: Set Image Brightness
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.brightness", "value": {value} }, "id": 9}'
params:
- name: value
type: float
description: Normalized offset (0 default, 1 = 100% offset, -1..1)
- id: subscribe_image_brightness
label: Subscribe To Brightness Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "image.brightness" }, "id": 8}'
params: []
- id: set_image_contrast
label: Set Image Contrast
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.contrast", "value": {value} }, "id": {id}}'
params:
- name: value
type: float
description: Normalized gain (1 default, 0..2)
- name: id
type: integer
description: Request identifier
- id: set_image_gamma
label: Set Image Gamma
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.gamma", "value": {value} }, "id": {id}}'
params:
- name: value
type: float
description: Gamma (default 2.2, range 1..3)
- name: id
type: integer
description: Request identifier
- id: set_image_saturation
label: Set Image Saturation
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.saturation", "value": {value} }, "id": {id}}'
params:
- name: value
type: float
description: Normalized saturation (1 default, 0..2)
- name: id
type: integer
description: Request identifier
- id: set_image_sharpness
label: Set Image Sharpness
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.sharpness", "value": {value} }, "id": {id}}'
params:
- name: value
type: integer
description: Normalized sharpness (-2..8)
- name: id
type: integer
description: Request identifier
- id: set_image_orientation
label: Set Image Orientation
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.orientation", "value": "{orientation}" }, "id": {id}}'
params:
- name: orientation
type: string
description: One of DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR
- name: id
type: integer
description: Request identifier
- 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} } }, "id": {id}}'
params:
- name: x
type: integer
description: Window X position
- name: y
type: integer
description: Window Y position
- name: id
type: integer
description: Request identifier
- 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} } }, "id": {id}}'
params:
- name: width
type: integer
description: Window width
- name: height
type: integer
description: Window height
- name: id
type: integer
description: Request identifier
- id: set_scaling_mode
label: Set Scaling Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.window.main.scalingmode", "value": "{mode}" }, "id": {id}}'
params:
- name: mode
type: string
description: One of Fill, OneToOne, FillScreen, Stretch
- name: id
type: integer
description: Request identifier
- id: enable_warp
label: Enable Warp (global)
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.enable", "value": true }, "id": 10}'
params: []
- id: select_warp_file
label: Select Active Warp File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.file.selected", "value": "{filename}" }, "id": 11}'
params:
- name: filename
type: string
description: Name of previously uploaded warp file (e.g. warp.xml)
- id: enable_warp_file
label: Enable File-Based Warping
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.file.enable", "value": true }, "id": 12}'
params: []
- id: upload_warp_file
label: Upload Warp File (HTTP)
kind: action
command: 'curl -X POST -F file=@{warpfile} http://{address}/api/image/processing/warp/file/transfer'
params:
- name: warpfile
type: string
description: Local path to warp XML file (e.g. warp.xml)
- name: address
type: string
description: Projector IP address (e.g. 192.168.1.100)
- id: select_blend_file
label: Select Active Blend Files
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blend.file.selected", "value": ["{filename}"] }, "id": 13}'
params:
- name: filename
type: string
description: Name of previously uploaded blend mask (e.g. mask.png)
- 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 }, "id": 14}'
params: []
- id: upload_blend_mask
label: Upload Blend Mask (HTTP)
kind: action
command: 'curl -X POST -F file=@{maskfile} http://{address}/api/image/processing/blend/file/transfer'
params:
- name: maskfile
type: string
description: Local path to blend mask PNG (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": "{filename}" }, "id": 15}'
params:
- name: filename
type: string
description: Name of previously uploaded black level mask
- 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 }, "id": 16}'
params: []
- id: upload_blacklevel_mask
label: Upload Black Level Mask (HTTP)
kind: action
command: 'curl -X POST -F file=@{maskfile} http://{address}/api/image/processing/blacklevel/file/transfer'
params:
- name: maskfile
type: string
description: Local path to black level mask PNG (8 or 16 bit, grayscale)
- name: address
type: string
description: Projector IP address
- id: get_signal_info
label: Get Connector Signal Info
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "image.connector.{connectorname}.detectedsignal" }, "id": 5}'
params:
- name: connectorname
type: string
description: Lowercase connector object name (e.g. "l1hdmi")
- id: set_dmx_mode
label: Set DMX Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "dmx.mode", "value": "{mode}" }, "id": {id}}'
params:
- name: mode
type: string
description: DMX mode (obtain list via dmx.listmodes)
- name: id
type: integer
description: Request identifier
- id: set_dmx_startchannel
label: Set DMX Start Channel
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "dmx.startchannel", "value": {channel} }, "id": {id}}'
params:
- name: channel
type: integer
description: DMX start channel in range 1..512
- name: id
type: integer
description: Request identifier
- id: set_dmx_shutdown
label: Set DMX Shutdown
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "dmx.shutdown", "value": {value} }, "id": {id}}'
params:
- name: value
type: boolean
description: True to enable DMX shutdown
- name: id
type: integer
description: Request identifier
- id: set_lan_ip4config
label: Set LAN IPv4 Configuration
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "network.device.lan.ip4config", "value": { "Address": "{address}", "Mask": "{mask}", "Gateway": "{gateway}", "NameServers": "{nameservers}" } }, "id": {id}}'
params:
- name: address
type: string
description: IPv4 address
- name: mask
type: string
description: IPv4 netmask
- name: gateway
type: string
description: IPv4 gateway
- name: nameservers
type: string
description: DNS servers
- name: id
type: integer
description: Request identifier
- id: get_lan_state
label: Get LAN State
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "network.device.lan.state" }, "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: get_shutter_position
label: Get Shutter Position
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "optics.shutter.position" }, "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: set_shutter_target
label: Set Shutter Target
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "optics.shutter.target", "value": "{target}" }, "id": {id}}'
params:
- name: target
type: string
description: One of Open, Closed
- name: id
type: integer
description: Request identifier
- id: get_zoom_position
label: Get Zoom Position
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "optics.zoom.position" }, "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: get_focus_position
label: Get Focus Position
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "optics.focus.position" }, "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- 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" }, "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- 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" }, "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: set_system_standby_enable
label: Enable Standby State
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "system.standby.enable", "value": {value} }, "id": {id}}'
params:
- name: value
type: boolean
description: True/false; verify availability via introspection first
- name: id
type: integer
description: Request identifier
- id: set_system_eco_enable
label: Enable ECO State
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "system.eco.enable", "value": {value} }, "id": {id}}'
params:
- name: value
type: boolean
description: True/false; verify availability via introspection first
- name: id
type: integer
description: Request identifier
- id: get_environment_alarmstate
label: Get Environment Alarm State
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "environment.alarmstate" }, "id": {id}}'
params:
- name: id
type: integer
description: Request identifier
- id: serial_wake_from_eco
label: Wake From ECO Mode (RS-232)
kind: action
command: ':POWR1\r'
params: []
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: alarm_state
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
- id: lan_state
type: enum
values: [CONNECTED, DISCONNECTED]
- id: shutter_position
type: enum
values: [Open, Closed]
- id: shutter_target
type: enum
values: [Open, Closed]
- id: image_orientation
type: enum
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: scaling_mode
type: enum
values: [Fill, OneToOne, FillScreen, Stretch]
- id: scan_type
type: enum
values: [Progressive]
- id: color_space
type: enum
values: [RGB]
- id: signal_range
type: enum
values: ["0-255", "16-235"]
- id: chroma_sampling
type: enum
values: ["4:4:4", "4:2:2", "4:2:0"]
- id: gamma_type
type: enum
values: [POWER, sRGB, REC_BT1886, SMPTE_ST2084]
- id: color_primaries
type: enum
values: [REC709, REC2020, "DCI-P3-D65", "DCI-P3-Theater"]
- id: content_aspect_ratio
type: enum
values: ["5:4", "4:3", "16:10", "16:9", "1.85:1", "2.20:1", "2.35:1", "2.37:1", "2.39:1", "Unknown"]
- id: stereo_mode
type: enum
values: [None, Sequential, FramePacked, TopBottom, SideBySide]
- id: firmware_upgrade_status
type: enum
values: [Unknown, OK, Upgradable]
- id: detected_signal
type: object
description: |
Object returned by image.connector.{name}.detectedsignal property.get; includes
active (bool), name (string), vertical_total, horizontal_total,
vertical_resolution, horizontal_resolution, vertical_sync_width,
vertical_front_porch, vertical_back_porch, horizontal_sync_width,
horizontal_front_porch, horizontal_back_porch, horizontal_frequency,
vertical_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
Variables
- id: image_brightness
type: float
min: -1
max: 1
step: 0.01
description: Image brightness/offset (0 default, 1 = 100% offset)
- id: image_contrast
type: float
min: 0
max: 2
step: 0.01
description: Image contrast/gain (1 default)
- id: image_gamma
type: float
min: 1
max: 3
step: 0.1
description: Image gamma (2.2 default)
- id: image_saturation
type: float
min: 0
max: 2
step: 0.01
description: Image color saturation (1 default)
- id: image_sharpness
type: integer
min: -2
max: 8
step: 1
description: Image sharpness
- id: illumination_laser_power
type: integer
min: 0
max: 100
description: Laser illumination power in percent (range bounded by minpower/maxpower)
- id: optics_zoom_position
type: integer
description: Current zoom motor position
- id: optics_focus_position
type: integer
description: Current focus motor position
- id: optics_lensshift_horizontal_position
type: integer
description: Current horizontal lens shift position
- id: optics_lensshift_vertical_position
type: integer
description: Current vertical lens shift position
- id: dmx_startchannel
type: integer
min: 1
max: 512
description: DMX start channel
- id: dmx_mode
type: string
description: Current DMX mode name
- id: dmx_shutdown
type: boolean
description: Whether DMX shutdown is enabled
- id: system_standby_enable
type: boolean
description: Whether standby state is enabled
- id: system_eco_enable
type: boolean
description: Whether ECO state is enabled
- id: network_lan_ip4config
type: object
description: |
IPv4 LAN configuration object with keys Address (string), Mask (string),
Gateway (string), NameServers (string)
Events
- id: property_changed
description: |
Server-initiated JSON-RPC notification with no id. Params contain an array of
property/value pairs. Client must implement a listener. Example:
{ "jsonrpc": "2.0", "method": "property.changed", "params": { "property": [ { "system.state": "ready" } ] } }
- id: signal_callback
description: |
Server-initiated JSON-RPC notification carrying signal/argument-list pairs.
Example:
{ "jsonrpc": "2.0", "method": "signal.callback", "params": { "signal": [ { "objectname.signalname": { "arg1": 100, "arg2": "cat" } } ] } }
- id: introspect_objectchanged
description: |
Signal payload delivered via signal.callback when the introspect model
changes (object added/removed). Argument object: { "object": "name", "newobject": true|false }
- id: modelupdated
description: Signal that fires when the introspected object structure changes (objects added/removed).
Macros
# UNRESOLVED: source documents a sequence (upload warp file → select warp file → enable warp file)
# but does not provide a named macro. Listed here as a procedure for implementers.
- id: warp_grid_apply
description: |
Three-step procedure to apply a warp grid file:
1. Upload file via HTTP: curl -X POST -F file=@warp.xml http://<addr>/api/image/processing/warp/file/transfer
2. Select file: property.set image.processing.warp.file.selected = "warp.xml"
3. Enable file warp: property.set image.processing.warp.file.enable = true
(Globally enable warp first: property.set image.processing.warp.enable = true)
- id: blend_mask_apply
description: |
Procedure to apply a blend mask:
1. Upload via HTTP: curl -X POST -F file=@mask.png http://<addr>/api/image/processing/blend/file/transfer
2. Select file: property.set image.processing.blend.file.selected = ["mask.png"]
3. Enable: property.set image.processing.blend.file.enable = true
- id: blacklevel_mask_apply
description: |
Procedure to apply a black level mask:
1. Upload via HTTP: curl -X POST -F file=@blacklevel.png http://<addr>/api/image/processing/blacklevel/file/transfer
2. Select file: property.set image.processing.blacklevel.file.selected = "blacklevel.png"
3. Enable: property.set image.processing.blacklevel.file.enable = true
Safety
confirmation_required_for: []
interlocks:
- description: |
Verify system.state is "standby" or "ready" before issuing system.poweron;
verify system.state is "on" before issuing system.poweroff. State transitions
are no-ops when projector is already in target state or in transition.
- description: |
On ECO-mode projectors, sending a TCP request alone will not wake the unit.
Wake up requires: (a) wake-on-LAN using the projector MAC address, (b)
the IR remote power button, (c) the keypad power button, or (d) sending
the ASCII command ":POWR1\r" to the RS-232 serial port.
- description: |
When sending property.set repeatedly to the same property, wait for
confirmation between calls. Continuous fire-and-forget may flood the
server and reduce performance.
Notes
- Protocol is JSON-RPC 2.0 over TCP port 9090; parameters are passed by name and ordering does not matter.
- The Pulse API is dynamic: feature availability depends on connected peripherals (e.g. motorised lens), DMX mode (basic vs extended), and projector configuration. Always introspect the target projector to confirm available properties, objects, methods, and signals.
- For end-user level access, the authentication request may be skipped; authentication is only required to elevate to a higher access level.
- HTTP file endpoints are used for warp grids, blend masks, and black-level masks. JSON-RPC is used to select/activate uploaded files and to enable file-based processing.
- Image formats accepted for blend and black-level masks: PNG (up to 16-bit), JPEG, TIFF. Only the blue channel is used.
- Blend mask resolutions: WUXGA → 1920x1200; WQXGA → 1280x800; 4K → 1280x800; 4K Cinemascope → 1280x540. Source object names are derived from source names by stripping non-word characters and lowercasing (e.g. "DisplayPort 1" → "displayport1").
Provenance
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-08-18T18:07:34.697Z
last_checked_at: 2026-08-19T08:58:23.568Z
Verification Summary
verdict: verified
checked_at: 2026-08-19T08:58:23.568Z
matched_actions: 81
action_count: 81
confidence: medium
summary: "All 81 spec action units (JSON-RPC methods, HTTP endpoints, serial wake) and all transport values match the source verbatim. (3 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "firmware compatibility ranges and exact feature availability per hardware/peripheral configuration are dynamic — source states introspection is required to know actual API for a given configuration"
- "source documents a sequence (upload warp file → select warp file → enable warp file)"
- "full property/method/signal catalogue is dynamic; only those documented in the source are listed above. Firmware upgrade procedures and full DMX channel mapping are model/configuration-dependent and must be discovered via introspection."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0