Summary
Barco Pulse projector controlled via JSON-RPC 2.0 over TCP/IP (port 9090) or RS-232 serial (19200 baud). Spec covers power, source selection, illumination, picture, warping, blending, black level, optics, environment, DMX, firmware, and introspection commands documented in the Pulse API catalog.
Transport
protocols:
- tcp
- serial
- http
addressing:
port: 9090
# http base used for file endpoints (warp/blend/blacklevel transfer)
base_url: "http://{projector_ip}/api"
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: optional # source: auth only required for higher-than-end-user access; end-user may skip
# UNRESOLVED: secret pass code format/credentials not specified in source
Traits
traits:
- powerable # inferred: system.poweron / system.poweroff present
- queryable # inferred: property.get queries present
- levelable # inferred: brightness/contrast/gamma/saturation/power level controls present
- routable # inferred: image.window.main.source selection present
Actions
actions:
# --- Power ---
- 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: eco_serial_wake
label: ECO Mode Serial Wake
kind: action
command: ":POWR1\r"
params: []
notes: ASCII sent on RS-232 to wake projector in ECO mode
# --- Authentication ---
- id: authenticate
label: Authenticate (set access level)
kind: action
command: '{"jsonrpc":"2.0","method":"authenticate","params":{"code":98765}}'
params:
- name: code
type: integer
description: Secret pass code
# --- Property set/get (generic; concrete settable properties listed as separate actions) ---
- id: property_set
label: Set Property
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"{property}","value":{value}}}'
params:
- name: property
type: string
description: Dot-notation property name
- name: value
type: any
description: Property value
- id: property_get
label: Get Property
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"{property}"}}'
params:
- name: property
type: string
description: Dot-notation property name
- id: property_get_multi
label: Get Multiple Properties
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":["{prop1}","{prop2}"]}}'
params:
- name: property
type: array
description: Array of dot-notation property names
- id: property_subscribe
label: Subscribe to Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":"{property}"}}'
params:
- name: property
type: string
description: Dot-notation property name (or array)
- id: property_unsubscribe
label: Unsubscribe from Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":"{property}"}}'
params:
- name: property
type: string
description: Dot-notation property name (or array)
# --- Signals ---
- id: signal_subscribe
label: Subscribe to Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":"{signal}"}}'
params:
- name: signal
type: string
description: Signal name (or array)
- id: signal_unsubscribe
label: Unsubscribe from Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":"{signal}"}}'
params:
- name: signal
type: string
description: Signal name (or array)
# --- Introspection ---
- id: introspect
label: Introspect Object
kind: query
command: '{"jsonrpc":"2.0","method":"introspect","params":{"object":"{object}","recursive":true}}'
params:
- name: object
type: string
description: Object name in dot notation (default empty = everything)
- name: recursive
type: boolean
description: If false, only object names listed (one level)
# --- Source / connector management ---
- id: image_source_list
label: List Available Sources
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.list"}'
params: []
- id: image_connector_list
label: List Available Connectors
kind: query
command: '{"jsonrpc":"2.0","method":"image.connector.list"}'
params: []
- id: image_source_listconnectors
label: List Connectors for Source
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.{name}.listconnectors"}'
params:
- name: name
type: string
description: Source object name (lowercase, non-word chars removed; e.g. displayport1)
- id: set_main_source
label: Set Active Source (main window)
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 (e.g. DisplayPort 1, HDMI)
# --- Illumination ---
- 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: float
description: Target power in percent
- id: illumination_clo_engage
label: Engage CLO (Constant Light Output)
kind: action
command: '{"jsonrpc":"2.0","method":"illumination.clo.engage"}'
params: []
- id: illumination_laser_getserialnumber
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc":"2.0","method":"illumination.laser.getserialnumber"}'
params: []
# --- Picture settings ---
- id: set_brightness
label: Set Brightness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.brightness","value":{value}}}'
params:
- name: value
type: float
description: Normalized, -1..1, default 0
- id: set_contrast
label: Set Contrast
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.contrast","value":{value}}}'
params:
- name: value
type: float
description: Normalized, 0..2, default 1
- id: set_gamma
label: Set Gamma
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.gamma","value":{value}}}'
params:
- name: value
type: float
description: 1..3, default 2.2
- id: set_saturation
label: Set Saturation
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.saturation","value":{value}}}'
params:
- name: value
type: float
description: Normalized, 0..2, default 1
- id: set_sharpness
label: Set Sharpness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.sharpness","value":{value}}}'
params:
- name: value
type: integer
description: -2..8
- id: set_orientation
label: Set Image Orientation
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.orientation","value":"{value}"}}'
params:
- name: value
type: string
description: 'Enum: DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR'
- id: set_scalingmode
label: Set Main Window Scaling Mode
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.window.main.scalingmode","value":"{value}"}}'
params:
- name: value
type: string
description: 'Enum: Fill, OneToOne, FillScreen, Stretch'
# --- Color management ---
- id: color_p7_custom_copypresettocustom
label: Copy Color Preset to Custom (P7)
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.copypresettocustom","params":{"presetname":"{presetname}"}}'
params:
- name: presetname
type: string
description: Preset name
- id: color_p7_custom_resetpreset
label: Reset Custom Color Preset (P7)
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resetpreset","params":{"presetname":"{presetname}"}}'
params:
- name: presetname
type: string
description: Preset name
- id: color_p7_custom_resettonative
label: Reset Custom Color to Native (P7)
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resettonative"}'
params: []
- id: color_rgbmode_next
label: Cycle to Next RGB Mode
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.rgbmode.nextrgbmode"}'
params: []
# --- Warping ---
- id: set_warp_enable
label: Enable/Disable Warp
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.enable","value":{value}}}'
params:
- name: value
type: boolean
- id: set_warp_file_enable
label: Enable/Disable Warp File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.file.enable","value":{value}}}'
params:
- name: value
type: boolean
- id: set_warp_file_selected
label: Select Warp File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.file.selected","value":"{filename}"}}'
params:
- name: filename
type: string
- id: upload_warp_file
label: Upload Warp Grid File (HTTP)
kind: action
command: "curl -X POST -F file=@warp.xml http://{projector_ip}/api/image/processing/warp/file/transfer"
params:
- name: projector_ip
type: string
# --- Blending ---
- id: set_blend_file_enable
label: Enable/Disable Blend File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.enable","value":{value}}}'
params:
- name: value
type: boolean
- id: set_blend_file_selected
label: Select Blend File(s)
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.selected","value":{filenames}}}'
params:
- name: filenames
type: array
description: Array of selected blend file names
- id: upload_blend_mask
label: Upload Blend Mask (HTTP)
kind: action
command: "curl -X POST -F file=@mask.png http://{projector_ip}/api/image/processing/blend/file/transfer"
params:
- name: projector_ip
type: string
# --- Black level ---
- id: set_blacklevel_file_enable
label: Enable/Disable Black Level Correction
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blacklevel.file.enable","value":{value}}}'
params:
- name: value
type: boolean
- id: set_blacklevel_file_selected
label: Select Black Level File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blacklevel.file.selected","value":"{filename}"}}'
params:
- name: filename
type: string
- id: upload_blacklevel_mask
label: Upload Black Level Mask (HTTP)
kind: action
command: "curl -X POST -F file=@blacklevel.png http://{projector_ip}/api/image/processing/blacklevel/file/transfer"
params:
- name: projector_ip
type: string
# --- Optics ---
- id: set_shutter_target
label: Set Shutter Target
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.shutter.target","value":"{value}"}}'
params:
- name: value
type: string
description: 'Enum: Open, Closed'
# --- System states toggles ---
- 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
# --- DMX ---
- id: set_dmx_mode
label: Set DMX Mode
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.mode","value":"{value}"}}'
params:
- name: value
type: string
- id: set_dmx_startchannel
label: Set DMX Start Channel
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.startchannel","value":{value}}}'
params:
- name: value
type: integer
description: 1..512
- id: set_dmx_shutdown
label: Enable/Disable DMX Shutdown
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.shutdown","value":{value}}}'
params:
- name: value
type: boolean
- id: dmx_listchannels
label: List DMX Channels
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listchannels"}'
params: []
- id: dmx_listmodes
label: List DMX Modes
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listmodes"}'
params: []
# --- Environment ---
- id: environment_getcontrolblocks
label: Get Environment Control Blocks
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"{type}","valuetype":"{valuetype}"}}'
params:
- name: type
type: string
description: 'Enum: Sensor, Filter, Controller, Actuator, Alarm, GenericBlock'
- name: valuetype
type: string
description: 'Enum: Temperature, Speed, PWM, Voltage, Current, Power, ...'
- id: environment_getalarminfo
label: Get Alarm Info
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getalarminfo"}'
params: []
# --- Firmware ---
- id: firmware_listcomponents
label: List Firmware Components
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponents"}'
params: []
- id: firmware_listcomponentversionstatus
label: List Firmware Component Version Status
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponentversionstatus"}'
params: []
- id: firmware_schedulecomponentupgrade
label: Schedule Component Upgrade at Next Reboot
kind: action
command: '{"jsonrpc":"2.0","method":"firmware.schedulecomponentupgrade"}'
params: []
# --- LED control (documented in Methods example) ---
- id: ledctrl_blink
label: Blink LED
kind: action
command: '{"jsonrpc":"2.0","method":"ledctrl.blink","params":{"led":"{led}","color":"{color}","period":{period}}}'
params:
- name: led
type: string
description: e.g. systemstatus
- name: color
type: string
description: e.g. red
- name: period
type: integer
Feedbacks
feedbacks:
- id: system_state
type: enum
values: [boot, eco, standby, ready, conditioning, on, deconditioning, service, error]
property: system.state
- id: illumination_state
type: enum
values: [On, Off]
property: illumination.state
- id: alarm_state
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
property: environment.alarmstate
- id: network_device_state
type: enum
values: [CONNECTED, DISCONNECTED]
property: network.device.lan.state
- id: shutter_position
type: enum
values: [Open, Closed]
property: optics.shutter.position
Variables
variables:
- id: laser_power
property: illumination.sources.laser.power
type: float
unit: percent
access: RW
- id: laser_minpower
property: illumination.sources.laser.minpower
type: float
unit: percent
access: R
- id: laser_maxpower
property: illumination.sources.laser.maxpower
type: float
unit: percent
access: R
- id: brightness
property: image.brightness
type: float
access: RW
constraints: {min: -1, max: 1, precision: 0.01}
- id: contrast
property: image.contrast
type: float
access: RW
constraints: {min: 0, max: 2, precision: 0.01}
- id: gamma
property: image.gamma
type: float
access: RW
constraints: {min: 1, max: 3, precision: 0.1}
- id: saturation
property: image.saturation
type: float
access: RW
constraints: {min: 0, max: 2, precision: 0.01}
- id: sharpness
property: image.sharpness
type: integer
access: RW
constraints: {min: -2, max: 8}
- id: zoom_position
property: optics.zoom.position
type: integer
access: RW
- id: focus_position
property: optics.focus.position
type: integer
access: RW
- id: lensshift_horizontal_position
property: optics.lensshift.horizontal.position
type: integer
access: RW
- id: lensshift_vertical_position
property: optics.lensshift.vertical.position
type: integer
access: RW
# UNRESOLVED: optics position properties are listed but read/write access not explicitly stated
Events
events:
- id: property_changed
description: Unsolicited notification when a subscribed property value changes
method: property.changed
payload: '{"jsonrpc":"2.0","method":"property.changed","params":{"property":[{name:value}]}}'
- id: signal_callback
description: Unsolicited notification when a subscribed signal is emitted
method: signal.callback
payload: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{name:{args}}]}}'
- id: modelupdated
description: Signal triggered when object structure changes (objects added/removed)
method: modelupdated
Macros
# UNRESOLVED: no explicit multi-step sequences described in source
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source notes ECO wake requires special handling (WoL/remote/keypad/serial :POWR1) but
# no interlock or power-on sequencing requirements stated. Source advises verifying projector state
# before issuing power on/off but does not define a mandatory interlock.
Notes
- API uses JSON-RPC 2.0 over TCP/IP port 9090 and RS-232 (19200 8N1, no flow control). Same command set for all connection types.
- Source warns API is dynamic: parts depend on peripherals and configuration (e.g. lens without motorized zoom omits that API; DMX extended mode exposes more channels). Exact API best obtained via
introspect. - Source signal-detection property uses connector-object naming
image.connector.{name}.detectedsignal(e.g.l1hdmi,displayport1); names derived by lowercasing and stripping non-word chars. - File transfer endpoints are HTTP at
http://{ip}/api/...; upload via HTTP POST multipart (-F file=@...). - ECO-mode wake over serial uses raw ASCII
:POWR1\r, distinct from JSON-RPC.
Spec emitted. JSON-RPC Pulse projector, TCP 9090 + serial 19200 8N1. Enumerated all documented methods + settable properties. Gaps marked UNRESOLVED: exact model/firmware, auth passcode format, optics RW access.
## Provenance
```yaml
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-07-14T09:02:14.140Z
last_checked_at: 2026-07-21T21:18:14.375Z
Verification Summary
verdict: verified
checked_at: 2026-07-21T21:18:14.375Z
matched_actions: 54
action_count: 54
confidence: medium
summary: "All 54 spec actions map to documented JSON-RPC methods, HTTP endpoints, or special serial commands. Transport verified: TCP 9090, serial 19200 8N1, base_url with /api path, optional auth. (9 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "exact projector model line and firmware compatibility not stated in source. API is dynamic and parts depend on peripherals/configuration (see source note)."
- "secret pass code format/credentials not specified in source"
- "optics position properties are listed but read/write access not explicitly stated"
- "no explicit multi-step sequences described in source"
- "source notes ECO wake requires special handling (WoL/remote/keypad/serial :POWR1) but"
- "exact projector model family and firmware compatibility range not stated in source."
- "authentication secret pass code format not specified (only that one exists for elevated access)."
- "read/write access for many optics/window position properties not explicitly stated in source."
- "exact model/firmware, auth passcode format, optics RW access."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0