Summary
Barco Pulse projector controlled via a JSON-RPC 2.0 API ("Pulse API"). The service is reachable over TCP/IP on port 9090 and over an RS-232 serial connection (19200 baud, 8N1, no flow control). The API exposes power control, input source selection, image/picture settings, illumination (laser power), optics (shutter/zoom/focus/lens shift), warping/blending/black-level file management, DMX, environment monitoring, and firmware management. File uploads/downloads use HTTP POST/GET at http://{ip}/api/....
Transport
protocols:
- tcp
- serial
addressing:
port: 9090
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: none # inferred: auth optional for normal end-user access; source describes an optional passcode `authenticate` method for elevated access levels only
Traits
traits:
- powerable # inferred: system.poweron / system.poweroff commands present
- routable # inferred: input source selection commands present
- queryable # inferred: property.get query commands and image.source.list present
- levelable # inferred: brightness/contrast/gamma/saturation/sharpness/laser-power set commands present
Actions
# All payloads are JSON-RPC 2.0 over TCP (port 9090) or serial. The "command"
# field holds the literal JSON-RPC request payload verbatim from the source.
# File operations use HTTP endpoints at http://{ip}/api/...
# --- System ---
- 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: system_state_query
label: System State Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"system.state"}}'
params: []
- id: system_standby_enable_set
label: Set Standby State Enable
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"system.standby.enable","value":{enable}}}'
params:
- name: enable
type: boolean
description: Enable/disable the standby state
- id: system_eco_enable_set
label: Set ECO State Enable
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"system.eco.enable","value":{enable}}}'
params:
- name: enable
type: boolean
description: Enable/disable the ECO state
- id: eco_wake_serial
label: ECO Mode Wake (Serial)
kind: action
command: ':POWR1\r'
params: []
notes: Special ASCII command sent on the RS-232 serial port to wake a projector in ECO mode.
# --- Illumination ---
- id: illumination_state_query
label: Illumination State Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.state"}}'
params: []
- id: illumination_laser_power_query
label: Laser Power Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.sources.laser.power"}}'
params: []
- id: illumination_laser_power_set
label: Set Laser Power
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"illumination.sources.laser.power","value":{power}}}'
params:
- name: power
type: float
description: Target laser power in percent (between minpower and maxpower)
- id: illumination_laser_minpower_query
label: Laser Min Power Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.sources.laser.minpower"}}'
params: []
- id: illumination_laser_maxpower_query
label: Laser Max Power Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.sources.laser.maxpower"}}'
params: []
- id: illumination_clo_engage
label: Engage CLO
kind: action
command: '{"jsonrpc":"2.0","method":"illumination.clo.engage"}'
params: []
notes: Engage Constant Light Output at the current light level.
- id: illumination_laser_getserialnumber
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc":"2.0","method":"illumination.laser.getserialnumber"}'
params: []
# --- Image: source / window ---
- id: image_active_source_query
label: Active Source Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.window.main.source"}}'
params: []
- id: image_set_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 (e.g. "DisplayPort 1", "HDMI"); obtain from image.source.list'
- 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.{sourcename}.listconnectors"}'
params:
- name: sourcename
type: string
description: 'Source object name; derive from source name by removing non-word chars and lowercasing (e.g. "DisplayPort 1" -> "displayport1")'
- id: image_connector_detectedsignal_query
label: Connector Detected Signal Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.connector.{connectorname}.detectedsignal"}}'
params:
- name: connectorname
type: string
description: 'Connector object name (e.g. "displayport1")'
- id: image_window_position_set
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: image_window_size_set
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: image_window_scalingmode_set
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"]
# --- Image: picture settings ---
- id: image_brightness_query
label: Brightness Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.brightness"}}'
params: []
- id: image_brightness_set
label: Set Brightness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.brightness","value":{brightness}}}'
params:
- name: brightness
type: float
description: Normalized offset, min -1 max 1, default 0, precision 0.01
- id: image_contrast_set
label: Set Contrast
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.contrast","value":{contrast}}}'
params:
- name: contrast
type: float
description: Normalized gain, min 0 max 2, default 1, precision 0.01
- id: image_gamma_set
label: Set Gamma
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.gamma","value":{gamma}}}'
params:
- name: gamma
type: float
description: Image gamma, min 1 max 3, default 2.2, precision 0.1
- id: image_saturation_set
label: Set Saturation
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.saturation","value":{saturation}}}'
params:
- name: saturation
type: float
description: Normalized, min 0 max 2, default 1, precision 0.01
- id: image_sharpness_set
label: Set Sharpness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.sharpness","value":{sharpness}}}'
params:
- name: sharpness
type: integer
description: Normalized, min -2 max 8, step 1
- id: image_orientation_set
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"]
# --- Image: color ---
- id: image_color_copy_preset_to_custom
label: Copy Color Preset To Custom
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.copypresettocustom","params":{"presetname":{presetname}}}'
params:
- name: presetname
type: string
- id: image_color_reset_preset
label: Reset Color Preset
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resetpreset","params":{"presetname":{presetname}}}'
params:
- name: presetname
type: string
- id: image_color_reset_to_native
label: Reset Color To Native
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resettonative"}'
params: []
- id: image_color_next_rgbmode
label: Next RGB Mode
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.rgbmode.nextrgbmode"}'
params: []
notes: Cycles to the next RGB mode.
# --- Image processing: warp ---
- id: warp_enable_set
label: Set Warp Enable
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.enable","value":{enable}}}'
params:
- name: enable
type: boolean
- id: warp_file_enable_set
label: Set Warp File Enable
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.file.enable","value":{enable}}}'
params:
- name: enable
type: boolean
- id: warp_file_selected_set
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
description: Warp grid file name (MCM500/400 compatible format)
- id: warp_file_upload
label: Upload Warp File
kind: action
command: 'curl -X POST -F file=@{filename} http://{ip}/api/image/processing/warp/file/transfer'
params:
- name: filename
type: string
description: Local warp grid file path
- name: ip
type: string
description: Projector IP address
# --- Image processing: blend ---
- id: blend_file_enable_set
label: Set Blend File Enable
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.enable","value":{enable}}}'
params:
- name: enable
type: boolean
- id: blend_file_selected_set
label: Select Blend File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.selected","value":{filenames}}}'
params:
- name: filenames
type: array
items: string
description: Currently selected blend files
- id: blend_file_upload
label: Upload Blend Mask
kind: action
command: 'curl -X POST -F file=@{filename} http://{ip}/api/image/processing/blend/file/transfer'
params:
- name: filename
type: string
description: Local blend mask image path (PNG up to 16 bit / JPEG / TIFF, grayscale)
- name: ip
type: string
# --- Image processing: black level ---
- id: blacklevel_file_enable_set
label: Set Black Level File Enable
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blacklevel.file.enable","value":{enable}}}'
params:
- name: enable
type: boolean
- id: blacklevel_file_selected_set
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: blacklevel_file_upload
label: Upload Black Level Mask
kind: action
command: 'curl -X POST -F file=@{filename} http://{ip}/api/image/processing/blacklevel/file/transfer'
params:
- name: filename
type: string
description: Local black level mask image path (PNG up to 16 bit / JPEG / TIFF, grayscale)
- name: ip
type: string
# --- Optics ---
- id: optics_shutter_position_set
label: Set Shutter Position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.shutter.position","value":{position}}}'
params:
- name: position
type: string
enum: ["Open", "Closed"]
- id: optics_shutter_target_set
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: optics_zoom_position_set
label: Set Zoom Position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.zoom.position","value":{position}}}'
params:
- name: position
type: integer
- id: optics_focus_position_set
label: Set Focus Position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.focus.position","value":{position}}}'
params:
- name: position
type: integer
- id: optics_lensshift_horizontal_set
label: Set Lens Shift Horizontal
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.lensshift.horizontal.position","value":{position}}}'
params:
- name: position
type: integer
- id: optics_lensshift_vertical_set
label: Set Lens Shift Vertical
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.lensshift.vertical.position","value":{position}}}'
params:
- name: position
type: integer
# --- DMX ---
- id: dmx_mode_set
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: dmx_startchannel_set
label: Set DMX Start Channel
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.startchannel","value":{startchannel}}}'
params:
- name: startchannel
type: integer
description: DMX start channel [1..512]
- id: dmx_shutdown_set
label: Set DMX Shutdown
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.shutdown","value":{shutdown}}}'
params:
- name: shutdown
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: []
# --- Network ---
- id: network_lan_ip4config_query
label: LAN IPv4 Config Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"network.device.lan.ip4config"}}'
params: []
- id: network_lan_state_query
label: LAN State Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"network.device.lan.state"}}'
params: []
# --- Environment ---
- id: environment_getcontrolblocks_temperature
label: Get Temperature Readings
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"Sensor","valuetype":"Temperature"}}'
params: []
- id: environment_getcontrolblocks_speed
label: Get Fan Speed Readings
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"Sensor","valuetype":"Speed"}}'
params: []
- id: environment_alarmstate_query
label: Alarm State Query
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"environment.alarmstate"}}'
params: []
- 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 Version Status
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponentversionstatus"}'
params: []
- id: firmware_schedulecomponentupgrade
label: Schedule Component Upgrade
kind: action
command: '{"jsonrpc":"2.0","method":"firmware.schedulecomponentupgrade"}'
params: []
notes: Force a component upgrade at the following reboot.
# --- Core API methods ---
- id: authenticate
label: Authenticate (Elevated Access)
kind: action
command: '{"jsonrpc":"2.0","method":"authenticate","params":{"code":{code}}}'
params:
- name: code
type: integer
description: Secret pass code for elevated access level
notes: Optional; only required for access above normal end user.
- id: introspect
label: Introspect Object
kind: query
command: '{"jsonrpc":"2.0","method":"introspect","params":{"object":{object},"recursive":{recursive}}}'
params:
- name: object
type: string
description: 'Object name in dot notation (empty = root)'
- name: recursive
type: boolean
description: If false, only object names at one level are listed.
- id: property_get
label: Get Property
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":{property}}}'
params:
- name: property
type: string
description: Property path in dot notation
- id: property_get_multiple
label: Get Multiple Properties
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":[{properties}]}}'
params:
- name: properties
type: array
items: string
- 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
- name: value
type: any
- id: property_subscribe
label: Subscribe To Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":{property}}}'
params:
- name: property
type: any
description: Property path (string) or array of property paths
- id: property_unsubscribe
label: Unsubscribe From Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":{property}}}'
params:
- name: property
type: any
- id: signal_subscribe
label: Subscribe To Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":{signal}}}'
params:
- name: signal
type: any
description: Signal name (string) or array of signal names
- id: signal_unsubscribe
label: Unsubscribe From Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":{signal}}}'
params:
- name: signal
type: any
- 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
- name: color
type: string
- name: period
type: integer
Feedbacks
- id: system_state
type: enum
values: ["boot", "eco", "standby", "ready", "conditioning", "on", "service", "deconditioning", "error"]
via: property.changed notification on "system.state"
- id: illumination_state
type: enum
values: ["On", "Off"]
via: property.changed notification on "illumination.state"
- id: active_source
type: string
via: property.changed notification on "image.window.main.source"
- id: laser_power
type: number
via: property.changed notification on "illumination.sources.laser.power"
- id: brightness
type: number
via: property.changed notification on "image.brightness"
- id: alarm_state
type: enum
values: ["Fatal", "Error", "Alert", "Warning", "Ok"]
via: property on "environment.alarmstate"
- id: network_lan_state
type: enum
values: ["CONNECTED", "DISCONNECTED"]
via: property on "network.device.lan.state"
Variables
# Settable parameters surfaced as properties in the source.
- id: image_brightness
type: float
min: -1
max: 1
default: 0
precision: 0.01
- id: image_contrast
type: float
min: 0
max: 2
default: 1
precision: 0.01
- id: image_gamma
type: float
min: 1
max: 3
default: 2.2
precision: 0.1
- id: image_saturation
type: float
min: 0
max: 2
default: 1
precision: 0.01
- id: image_sharpness
type: integer
min: -2
max: 8
step: 1
- id: laser_power
type: float
description: Target laser power in percent (between minpower and maxpower, dynamic)
- id: dmx_startchannel
type: integer
min: 1
max: 512
Events
- id: property_changed
description: Unsolicited notification when a subscribed property value changes. Carries an array of property/value pairs.
payload: '{"jsonrpc":"2.0","method":"property.changed","params":{"property":[{"objectname.propertyname":100}]}}'
- id: signal_callback
description: Unsolicited notification when a subscribed signal is emitted. Carries an array of signal/argument-list pairs.
payload: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"objectname.signalname":{"arg1":100,"arg2":"cat"}}]}}'
- id: modelupdated
description: Signal triggered when the object structure changes (objects added or removed). Subscribe via signal.subscribe.
Macros
# UNRESOLVED: no explicit multi-step sequences documented as named macros in source.
Safety
confirmation_required_for: []
interlocks:
- "Power on: verify system.state is 'standby' or 'ready' before issuing system.poweron; otherwise nothing happens."
- "Power off: verify system.state is 'on' before issuing system.poweroff; otherwise nothing happens."
- "property.set best practice: wait for confirmation before setting the same property again; flooding may reduce performance."
# UNRESOLVED: no explicit hardware interlock or power-on sequencing requirements beyond the state-check guidance above stated in source.
Notes
- The API is a generic Barco "Pulse API". Parts are dynamic and depend on the specific projector configuration and peripherals (e.g. motorized lens, DMX extended mode). Introspection is the authoritative way to discover the exact available API surface for a given unit.
- Source/connector object names are derived from human-readable names by removing non-word characters and lowercasing (e.g. "DisplayPort 1" -> "displayport1").
- Notifications are only sent when a value actually changes; subscribing does not return the current value (use property.get for that).
- File endpoints (warp grid, blend mask, black level mask) are HTTP at
http://{ip}/api/...; uploads usecurl -F file=@...(multipart POST). Supported image formats: PNG (up to 16 bit), JPEG, TIFF — grayscale only (blue channel used if colour image supplied). - Mask resolution must match projector blend/black-level layer resolution: WUXGA 1920x1200; WQXGA/4K 1280x800; 4K Cinemascope 1280x540.
- Warp file format is identical to MCM500/400.
- ECO mode wake options: Wake-on-LAN (MAC address), remote power button, keypad power button, or the special serial ASCII command
:POWR1\r. - Available source names vary by projector model; examples in source include DVI 1, DVI 2, DisplayPort 1, DisplayPort 2, Dual DVI, Dual DisplayPort, Dual Head DVI, Dual Head DisplayPort, HDBaseT, HDMI, SDI.
## Provenance
```yaml
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-07-14T08:56:48.881Z
last_checked_at: 2026-07-21T20:50:30.245Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-07-21T20:50:30.245Z
matched_actions: 73
action_count: 73
confidence: medium
summary: "All 73 spec actions matched literally in source; all transport parameters verified in RS232 and network sections; comprehensive API coverage via specific methods plus generic property/signal operations. (8 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "source is a generic \"Pulse API\" document and does not name the \"Ac Wb12\" model explicitly; model mapping assumed from task context. Firmware version compatibility not stated."
- "no explicit multi-step sequences documented as named macros in source."
- "no explicit hardware interlock or power-on sequencing requirements beyond the state-check guidance above stated in source."
- "source is a generic Pulse API document; does not explicitly name the \"Ac Wb12\" model."
- "firmware version compatibility not stated in source."
- "protocol/API version number not stated in source."
- "exact set of available sources/connectors/optics depends on unit configuration; introspect required."
- "voltage/current/power specs not stated in source."
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0