Summary
Barco Pulse-family projector controlled via the Pulse API, a JSON-RPC 2.0 interface reachable over TCP/IP (port 9090) and RS-232 serial (19200 8N1). The API exposes power control, source selection, illumination (laser) power, picture settings (brightness/contrast/gamma/saturation/sharpness), warp/blend/black-level file management, optics (shutter/zoom/focus/lens shift), DMX, environment monitoring (temperatures/fan speeds/alarms), firmware management, and HTTP file-transfer endpoints for upload/download of warp grids and masks.
Transport
protocols:
- tcp
- serial
- http
addressing:
port: 9090 # Pulse services TCP port
base_url: http://{projector_ip}/api # HTTP file-transfer endpoints; projector IP not fixed by source (example: 192.168.1.100)
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
connector: 9-pin female (host) to 9-pin male (projector); pin2-pin2, pin3-pin3, pin5-pin5
auth:
type: code # optional pass-code authentication for elevated access; normal end-user access skips it
# UNRESOLVED: real pass code not documented; source example uses code 98765
Traits
traits:
- powerable # inferred: system.poweron / system.poweroff present
- queryable # inferred: property.get / *list / getcontrolblocks queries present
- routable # inferred: image.window.main.source selection present
- levelable # inferred: image.brightness/contrast and illumination power present
Actions
# JSON-RPC 2.0 over TCP/serial. Each entry's `command` is the verbatim method
# invocation; params shown are templates where the source parameterizes them.
- id: authenticate
label: Authenticate
kind: action
command: '{"jsonrpc":"2.0","method":"authenticate","params":{"code":98765},"id":1}'
params:
- name: code
type: integer
description: Secret pass code (98765 shown as example in source)
notes: Sets user access level; skippable for normal end-user access. Response result true on success.
- id: system_poweron
label: Power On
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweron"}'
params: []
notes: Result null on success (not an error). Verify system.state is standby/ready first.
- id: system_poweroff
label: Power Off
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweroff"}'
params: []
notes: Result null on success (not an error). Verify system.state is on first.
- 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 name in dot notation (e.g. image.window.main.source)
- name: value
type: any
description: Value to set (type depends on property)
notes: Wait for confirmation before setting same property again to avoid flooding.
- 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: Property name in dot notation (or array of names for multi-get)
- 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 or array of property names
- id: property_unsubscribe
label: Unsubscribe From Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":"{property}"},"id":{id}}'
params:
- name: property
type: string
description: Property name or array of property names
- 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 or array of signal names (e.g. modelupdated)
- 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 or array of signal names
- id: introspect
label: Introspect Object Metadata
kind: query
command: '{"jsonrpc":"2.0","method":"introspect","params":{"object":"{object}","recursive":true},"id":{id}}'
params:
- name: object
type: string
description: Object name in dot notation (empty introspects everything)
- name: recursive
type: boolean
description: If false, only object names listed (one level)
- id: image_source_list
label: List Available Sources
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.list","id":1}'
params: []
notes: Returns array of source names (varies by model; e.g. DVI 1, DVI 2, DisplayPort 1, DisplayPort 2, Dual DVI, Dual DisplayPort, Dual Head DVI, Dual Head DisplayPort, HDBaseT, HDMI, SDI).
- id: image_connector_list
label: List Available Connectors
kind: query
command: '{"jsonrpc":"2.0","method":"image.connector.list","id":3}'
params: []
notes: Returns array of physical connector names (varies by model).
- id: image_source_listconnectors
label: List Connectors For Source
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.{sourceobject}.listconnectors","id":4}'
params:
- name: sourceobject
type: string
description: Source object name (source name lowercased, non-word chars removed; e.g. displayport1)
- id: environment_getcontrolblocks
label: Get Environment Sensor Readings
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"{type}","valuetype":"{valuetype}"},"id":{id}}'
params:
- name: type
type: string
description: Sensor type enum (Sensor, Filter, Controller, Actuator, Alarm, GenericBlock)
- name: valuetype
type: string
description: Value type enum (Temperature, Speed, PWM, Voltage, Current, Power, Altitude, Pressure, Humidity, ADC, Coordinate, Peltier, Waveform, Average, Delay, Difference, Interpolation, Limit, Median, Noise, Weighting, Comparison, Threshold, Formula, Driver, PID, Mode, State, Pump, Resistance, Simulation, Constant, Manual, Range, Any)
- id: ledctrl_blink
label: Blink LED
kind: action
command: '{"jsonrpc":"2.0","method":"ledctrl.blink","params":{"led":"{led}","color":"{color}","period":{period}},"id":3}'
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: dmx_listchannels
label: List DMX Channels
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listchannels"}'
params: []
notes: Returns list of available channel names.
- id: dmx_listmodes
label: List DMX Modes
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listmodes"}'
params: []
notes: Returns list of all modes.
- id: environment_getalarminfo
label: Get Alarm Info
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getalarminfo"}'
params: []
notes: Returns array of alarm info objects (severity, timestamp, source, description, custommessage).
- id: firmware_listcomponents
label: List Firmware Components
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponents"}'
params: []
notes: Returns names of all managed firmware components.
- id: firmware_listcomponentversionstatus
label: List Firmware Version Status
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponentversionstatus"}'
params: []
notes: Returns components with available/running version and status (Unknown, OK, Upgradable).
- id: firmware_schedulecomponentupgrade
label: Schedule Component Upgrade
kind: action
command: '{"jsonrpc":"2.0","method":"firmware.schedulecomponentupgrade"}'
params: []
notes: Forces a component upgrade at next reboot.
- id: illumination_clo_engage
label: Engage CLO
kind: action
command: '{"jsonrpc":"2.0","method":"illumination.clo.engage"}'
params: []
notes: Engages Constant Light Output at current light level.
- id: illumination_laser_getserialnumber
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc":"2.0","method":"illumination.laser.getserialnumber"}'
params: []
notes: Returns laser serial number string.
- id: image_color_p7_custom_copypresettocustom
label: Copy Preset To Custom
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.copypresettocustom","params":{"presetname":"{presetname}"}}'
params:
- name: presetname
type: string
description: Preset name to copy
- id: image_color_p7_custom_resetpreset
label: Reset Color Preset
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resetpreset","params":{"presetname":"{presetname}"}}'
params:
- name: presetname
type: string
description: Preset name to reset to defaults
- id: image_color_p7_custom_resettonative
label: Reset Custom To Native
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resettonative"}'
params: []
- id: image_color_rgbmode_nextrgbmode
label: Next RGB Mode
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.rgbmode.nextrgbmode"}'
params: []
notes: Cycles to next RGB mode.
- id: eco_wake_serial
label: ECO Mode Wake (Serial)
kind: action
command: ':POWR1\r'
params: []
notes: ASCII characters sent over RS-232 serial port to wake a projector in ECO mode. Alternatives: Wake-on-LAN (HW/MAC address), IR remote power button, keypad power button.
Feedbacks
- id: system_state
type: enum
values: [boot, eco, standby, ready, conditioning, on, deconditioning]
# full enum from properties list also includes service, error
query_command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"system.state"}}'
subscribe: true
- id: illumination_state
type: enum
values: [On, Off]
query_command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.state"}}'
subscribe: true
- id: active_source
type: string
query_command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.window.main.source"}}'
subscribe: true
- id: alarm_state
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
query_command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"environment.alarmstate"}}'
- id: network_device_lan_state
type: enum
values: [CONNECTED, DISCONNECTED]
query_command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"network.device.lan.state"}}'
- id: connector_detected_signal
type: object
description: Detected signal info (active, name, resolutions, timings, color space, etc.) per connector object image.connector.{name}.detectedsignal
Variables
# Settable properties accessed via property.set (value constraints from source introspection data).
- id: illumination_sources_laser_power
type: float
min: 0 # minpower (dynamic)
max: 100 # maxpower (dynamic)
unit: percent
access: read_write
description: Target laser power in percent
- id: image_brightness
type: float
min: -1
max: 1
precision: 0.01
access: read_write
description: Image brightness/offset (0 default, 1 = 100% offset)
- id: image_contrast
type: float
min: 0
max: 2
precision: 0.01
access: read_write
description: Image contrast/gain (1 default)
- id: image_gamma
type: float
min: 1
max: 3
precision: 0.1
access: read_write
description: Image gamma (default 2.2)
- id: image_saturation
type: float
min: 0
max: 2
precision: 0.01
access: read_write
description: Image color saturation (1 default)
- id: image_sharpness
type: integer
min: -2
max: 8
access: read_write
description: Image sharpness (normalized)
- id: image_orientation
type: enum
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
access: read_write
- id: image_window_main_scalingmode
type: enum
values: [Fill, OneToOne, FillScreen, Stretch]
access: read_write
- id: optics_shutter_target
type: enum
values: [Open, Closed]
access: read_write
- id: dmx_mode
type: string
access: read_write
- id: dmx_startchannel
type: integer
min: 1
max: 512
access: read_write
- id: dmx_shutdown
type: boolean
access: read_write
- id: system_standby_enable
type: boolean
access: read_write
- id: system_eco_enable
type: boolean
access: read_write
- id: image_processing_warp_enable
type: boolean
access: read_write
- id: image_processing_warp_file_enable
type: boolean
access: read_write
- id: image_processing_warp_file_selected
type: string
access: read_write
- id: image_processing_blend_file_enable
type: boolean
access: read_write
- id: image_processing_blend_file_selected
type: array
items: string
access: read_write
- id: image_processing_blacklevel_file_enable
type: boolean
access: read_write
- id: image_processing_blacklevel_file_selected
type: string
access: read_write
# UNRESOLVED: optics.zoom.position, optics.focus.position, optics.lensshift.horizontal.position,
# optics.lensshift.vertical.position, image.window.main.position, image.window.main.size are read
# positions; set methods (if any) not shown explicitly in source.
Events
- id: property_changed
description: Unsolicited notification when a subscribed property value changes. Carries array of property/value pairs.
payload: '{"jsonrpc":"2.0","method":"property.changed","params":{"property":[{"{objectname.propertyname}":{value}}]}}'
notes: No id, no response must be returned. Two notifications may fire for source switches (deselect then select).
- id: signal_callback
description: Unsolicited notification when a subscribed signal is emitted. Carries array of signal/argument-list pairs.
payload: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"{objectname.signalname}":{"arg1":100}}]}}'
- id: modelupdated
description: Signal triggered when object structure changes (objects added/removed); via signal.subscribe. Callback delivers introspect.objectchanged with object name and isnew flag.
Macros
# UNRESOLVED: no explicit multi-step named sequences documented as presets in source.
# Warp-grid activation flow documented procedurally (upload via HTTP -> select -> enable) but
# not packaged as a named macro.
Safety
confirmation_required_for: []
interlocks:
- power_on: source recommends verifying system.state is standby or ready before issuing system.poweron
- power_off: source recommends verifying system.state is on before issuing system.poweroff
# UNRESOLVED: no explicit safety interlock procedures, power-on sequencing hard requirements,
# or hazard warnings stated beyond the soft recommendations above.
Notes
- API is JSON-RPC 2.0; parameters passed by name, order does not matter.
- Property introspection (via
introspecton owning object) reveals type, min/max/step/precision and access level — recommended before driving settable properties. Individual properties cannot be introspected directly; ask the owning service. - Notifications carry no
idand must not be answered. - Best practice: wait for
property.setconfirmation before re-setting the same property (avoids server flooding). - ECO wake: Wake-on-LAN, IR remote, keypad, or serial
:POWR1\r. - HTTP file endpoints: upload via
curl -F file=@<file> http://{ip}/api/{endpoint}; download via browser/curl on same URL. Endpoints include/image/processing/warp/file/transfer,/image/processing/blend/file/transfer,/image/processing/blacklevel/file/transfer. - Blend/black-level masks: grayscale 8/16-bit PNG/JPEG/TIFF; color images accepted but only blue channel used. Mask resolution must match projector (WUXGA 1920x1200; WQXGA/4K 1280x800; 4K Cinemascope 1280x540).
- Warp file format same as MCM500/400.
## Provenance
```yaml
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-08-09T18:05:58.625Z
last_checked_at: 2026-08-19T08:34:52.860Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-08-19T08:34:52.860Z
matched_actions: 33
action_count: 33
confidence: medium
summary: "All 33 spec action units (27 JSON-RPC methods + 1 ECO serial wake + 5 feedbacks with query_command) are present verbatim in the Pulse API source. (10 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "exact projector model variant and feature set vary by hardware config; source states API is partly dynamic and best resolved via introspection. Voltage/current/power specs, fault recovery sequences, and firmware compatibility ranges not stated."
- "real pass code not documented; source example uses code 98765"
- "optics.zoom.position, optics.focus.position, optics.lensshift.horizontal.position,"
- "no explicit multi-step named sequences documented as presets in source."
- "no explicit safety interlock procedures, power-on sequencing hard requirements,"
- "exact device model identity ambiguous — \"Hdd Set 3 X 2Tb For Icmp X\" does not appear in source body; source is generic Pulse API reference. Confirm model mapping."
- "authentication real pass code, token format, and elevated access levels beyond example code 98765 not documented."
- "DMX extended-mode channel enumeration beyond basic 2-channel mode not listed."
- "optics set methods (zoom/focus/lensshift motorized movement commands) not explicitly shown; only read positions documented."
- "full property catalogue is dynamic — source states introspection is the authoritative source for a given configured unit."
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0