Summary
Barco Pulse projector family (UDX-titled reference; Loki-named spec). JSON-RPC 2.0 facade over TCP port 9090, plus RS-232 serial. Source is the "Power User Reference guide" rev 1.7 (2019-03-04), which covers Pulse API across TCP/IP and RS-232.
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 # source describes "authenticate" JSON-RPC call with `code` param; skipped for normal end user
Traits
- powerable # system.poweron / system.poweroff documented
- routable # image.window.main.source set documented
- queryable # property.get documented
- levelable # image.brightness, illumination.sources.laser.power, image.color.p7.custom.* documented
Actions
- id: authenticate
label: Authenticate (raise access level)
kind: action
command: '{"jsonrpc":"2.0","method":"authenticate","params":{"code":98765}}'
params:
- name: code
type: integer
description: Pass code (example: 98765)
- 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_wake_rs232
label: Wake from ECO (RS-232 ASCII)
kind: action
command: ':POWR1\r'
params: []
- id: property_set
label: Set property value
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"<name>","value":<value>}}'
params:
- name: property
type: string
description: Property dot-path (e.g. image.window.main.source)
- name: value
type: any
description: JSON value (string/integer/float/boolean/object/array)
- id: property_get
label: Get property value
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"<name>"}}'
params:
- name: property
type: string
description: Property dot-path
- id: property_get_multi
label: Get multiple property values
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":["<a>","<b>"]}}'
params:
- name: property
type: array
description: Array of property dot-paths
- id: property_subscribe
label: Subscribe to property change notifications
kind: action
command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":"<name>"}}'
params:
- name: property
type: string
description: Property dot-path
- id: property_subscribe_multi
label: Subscribe to multiple property change notifications
kind: action
command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":["<a>","<b>"]}}'
params:
- name: property
type: array
description: Array of property dot-paths
- id: property_unsubscribe
label: Unsubscribe from property change notifications
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":"<name>"}}'
params:
- name: property
type: string
description: Property dot-path
- id: property_unsubscribe_multi
label: Unsubscribe from multiple properties
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":["<a>","<b>"]}}'
params:
- name: property
type: array
description: Array of property dot-paths
- id: signal_subscribe
label: Subscribe to a signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":"<name>"}}'
params:
- name: signal
type: string
description: Signal dot-path (e.g. modelupdated)
- id: signal_subscribe_multi
label: Subscribe to multiple signals
kind: action
command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":["<a>","<b>"]}}'
params:
- name: signal
type: array
description: Array of signal dot-paths
- id: signal_unsubscribe
label: Unsubscribe from a signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":"<name>"}}'
params:
- name: signal
type: string
description: Signal dot-path
- id: signal_unsubscribe_multi
label: Unsubscribe from multiple signals
kind: action
command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":["<a>","<b>"]}}'
params:
- name: signal
type: array
description: Array of signal dot-paths
- id: introspect
label: Introspect object metadata
kind: query
command: '{"jsonrpc":"2.0","method":"introspect","params":{"object":"<name>","recursive":true}}'
params:
- name: object
type: string
description: Object dot-path
- name: recursive
type: boolean
description: Recursive listing (default true)
- id: introspect_positional
label: Introspect (positional params form)
kind: query
command: '{"jsonrpc":"2.0","method":"introspect","params":["<name>",true]}'
params:
- name: object
type: string
description: Object dot-path
- name: recursive
type: boolean
description: Recursive flag
- 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 a source
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.<sourcename>.listconnectors"}'
params:
- name: sourcename
type: string
description: Lowercase name with non-word chars stripped (e.g. displayport1)
- id: environment_getcontrolblocks
label: Query environment sensors
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"<type>","valuetype":"<valuetype>"}}'
params:
- name: type
type: string
description: Sensor type (Sensor, Filter, Controller, Actuator, Alarm, GenericBlock)
- name: valuetype
type: string
description: Value type (Temperature, Speed, Voltage, Current, Power, etc.)
- id: ledctrl_blink
label: Blink an LED (example method invocation)
kind: action
command: '{"jsonrpc":"2.0","method":"ledctrl.blink","params":{"led":"<name>","color":"<color>","period":<n>}}'
params:
- name: led
type: string
description: LED name (e.g. systemstatus)
- name: color
type: string
description: LED color (e.g. red)
- name: period
type: integer
description: Blink period
- id: warp_enable
label: Enable global warping
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.enable","value":true}}'
params: []
- id: warp_file_select
label: Select uploaded 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 (e.g. warp.xml)
- id: warp_file_enable
label: Enable warp grid file
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.file.enable","value":true}}'
params: []
- id: warp_file_upload
label: Upload warp grid file (HTTP POST)
kind: action
command: 'curl -X POST -F file=@<file> http://<address>/api/image/processing/warp/file/transfer'
params:
- name: file
type: string
description: Local warp grid file
- name: address
type: string
description: Projector IP address
- id: blend_file_select
label: Select uploaded blend mask
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.selected","value":"<filename>"}}'
params:
- name: filename
type: string
description: Blend mask file name (e.g. mask.png)
- id: blend_file_enable
label: Enable blend mask
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.enable","value":true}}'
params: []
- id: blend_file_upload
label: Upload blend mask (HTTP POST)
kind: action
command: 'curl -X POST -F file=@<file> http://<address>/api/image/processing/blend/file/transfer'
params:
- name: file
type: string
description: Local blend mask file
- name: address
type: string
description: Projector IP address
- id: blacklevel_file_select
label: Select uploaded black-level mask
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blacklevel.file.selected","value":"<filename>"}}'
params:
- name: filename
type: string
description: Black level mask file name (e.g. blacklevel.png)
- id: blacklevel_file_enable
label: Enable black-level mask
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blacklevel.file.enable","value":true}}'
params: []
- id: blacklevel_file_upload
label: Upload black-level mask (HTTP POST)
kind: action
command: 'curl -X POST -F file=@<file> http://<address>/api/image/processing/blacklevel/file/transfer'
params:
- name: file
type: string
description: Local black-level mask file
- name: address
type: string
description: Projector IP address
- id: set_input_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, DVI 1, DVI 2, DisplayPort 2, Dual DVI, Dual DisplayPort, Dual Head DVI, Dual Head DisplayPort, HDBaseT, SDI)
- 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":<pct>}}'
params:
- name: pct
type: number
description: Power percent (bounded by minpower/maxpower)
- id: set_image_brightness
label: Set image brightness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.brightness","value":<v>}}'
params:
- name: v
type: number
description: Normalized brightness, -1 to 1, step 0.01
Feedbacks
- id: system_state
type: enum
values: [boot, eco, standby, ready, conditioning, on, deconditioning]
notes: Returned by property.get on system.state
- id: illumination_state
type: enum
values: [On, Off]
notes: Returned by property.get on illumination.state
- id: alarm_state
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
notes: Returned by property.get on environment.alarmstate
- id: gsm_pinstate
type: enum
values: [Accepted, Failed, Locked, Unknown]
notes: Returned by property.get on gsm.pinstate
- id: illumination_clo_availability
type: enum
values: [Available, SensorUnavailable, PendingWarmup, Unavailable, Unknown]
- id: illumination_clo_state
type: enum
values: [Ok, TooDim, TooBright]
- id: active_source
type: string
notes: Returned by property.get on image.window.main.source
- id: dmx_connectionstate_active
type: boolean
notes: True if a DMX/Artnet packet was received in last 10 s
- id: detected_signal
type: object
notes: image.connector.<name>.detectedsignal (active, name, resolution, frequency, scan, color_space, signal_range, chroma_sampling, gamma_type, etc.)
- id: environment_temperatures
type: object
notes: environment.getcontrolblocks with valuetype Temperature
- id: environment_fan_speeds
type: object
notes: environment.getcontrolblocks with valuetype Speed
Variables
# Documented RW property examples (all set via property.set / read via property.get).
# Use the source's exhaustive property catalog to extend.
- name: image.window.main.source
type: string
settable: true
notes: Active source name
- name: illumination.sources.laser.power
type: float
settable: true
notes: Target laser power percent
- name: illumination.sources.laser.minpower
type: float
settable: false
- name: illumination.sources.laser.maxpower
type: float
settable: false
- name: illumination.clo.enable
type: boolean
settable: true
- name: illumination.clo.setpoint
type: float
settable: true
- name: illumination.clo.scale
type: float
settable: true
- name: image.brightness
type: float
settable: true
range: [-1, 1]
- name: image.processing.warp.enable
type: boolean
settable: true
- name: image.processing.warp.file.selected
type: string
settable: true
- name: image.processing.warp.file.enable
type: boolean
settable: true
- name: image.processing.blend.file.selected
type: string
settable: true
- name: image.processing.blend.file.enable
type: boolean
settable: true
- name: image.processing.blacklevel.file.selected
type: string
settable: true
- name: image.processing.blacklevel.file.enable
type: boolean
settable: true
- name: dmx.artnet
type: boolean
settable: true
- name: dmx.artnetnet
type: integer
settable: true
- name: dmx.artnetuniverse
type: integer
settable: true
- name: dmx.mode
type: string
settable: true
- name: dmx.shutdown
type: boolean
settable: true
- name: dmx.shutdowntimeout
type: integer
settable: true
notes: Minutes
- name: dmx.startchannel
type: integer
settable: true
range: [1, 512]
- name: gsm.pin
type: string
settable: true
# Source contains a much longer RW property list (image.color.p7.custom.*,
# image.blackcontentdetection.*, etc.) - populate from refined source as needed.
Events
- id: property_changed
description: Unsolicited property change notification from server
payload: '{"jsonrpc":"2.0","method":"property.changed","params":{"property":[{"<dot.path>":<value>}]}}'
- id: signal_callback
description: Signal callback notification from server
payload: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"<dot.path>":{"arg":<value>}}]}}'
- id: modelupdated_signal
description: Object added or removed in introspection tree
payload: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"introspect.objectchanged":{"object":"<path>","newobject":true}}]}}'
Macros
- id: wake_from_eco
label: Wake projector from ECO mode
steps:
- "Send WOL frame (projector MAC) - alternative path"
- "Or send :POWR1\\r on RS-232"
- "Or issue power button on remote / keypad"
- id: select_input_pipeline
label: Get sources, pick one, set active
steps:
- "image.source.list - get available source names"
- "image.connector.list - list connectors"
- "property.set image.window.main.source = <name>"
- "property.subscribe image.window.main.source - get change notifications"
- id: apply_warp_grid
label: Upload + apply a warp grid file
steps:
- "property.set image.processing.warp.enable = true"
- "curl POST warp grid to /api/image/processing/warp/file/transfer"
- "property.set image.processing.warp.file.selected = <name>"
- "property.set image.processing.warp.file.enable = true"
- id: apply_blend_mask
label: Upload + apply a blend mask image
steps:
- "curl POST mask to /api/image/processing/blend/file/transfer"
- "property.set image.processing.blend.file.selected = <name>"
- "property.set image.processing.blend.file.enable = true"
- id: apply_blacklevel_mask
label: Upload + apply a black-level mask
steps:
- "curl POST mask to /api/image/processing/blacklevel/file/transfer"
- "property.set image.processing.blacklevel.file.selected = <name>"
- "property.set image.processing.blacklevel.file.enable = true"
Safety
confirmation_required_for:
- system.poweroff
- dmx.shutdown
interlocks:
- "system.poweron is a no-op if projector already on or transitioning between states - verify state is 'standby' or 'ready' first"
- "system.poweroff is a no-op if projector already off or transitioning - verify state is 'on' first"
- "ECO-mode wake requires WOL, physical button, or RS-232 :POWR1 - JSON-RPC system.poweron may not wake from ECO"
# UNRESOLVED: no explicit safety warnings, lamp-cooling timers, or interlock procedures stated beyond the above power-state guards.
Notes
JSON-RPC 2.0 envelopes are line-delimited JSON; "params" member may be absent (e.g. system.poweron) and is ignored if present. Parameter order does not matter; only the key/value binding matters. Authentication is optional for normal end-user access; raise access level by calling authenticate with a passcode (code is an integer — example value 98765 shown in source, actual codes are projector-specific). ECO-mode projectors will not respond to JSON-RPC system.poweron while in ECO — wake via WOL, physical button, or RS-232 :POWR1\r first. Property.set requests should be confirmed before sending another for the same property to avoid flooding. property.subscribe only sends notifications on change; use property.get to fetch the current value. The Pulse API surface is dynamic — peripheral / lens / configuration presence gates which properties exist; use introspect to enumerate what the connected unit exposes. Source document was the UDX-tagged Power User Reference guide (rev 1.7, 2019-03-04) — file endpoints, property list, and method list apply to Loki as part of the Pulse family.
Provenance
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-06-01T22:38:26.750Z
last_checked_at: 2026-06-02T22:04:15.073Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T22:04:15.073Z
matched_actions: 35
action_count: 35
confidence: medium
summary: "All 35 spec actions traced to source (dip-safe re-verify). (3 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "spec covers one model name; full UDX family also shares this API."
- "no explicit safety warnings, lamp-cooling timers, or interlock procedures stated beyond the above power-state guards."
- "full property catalog (~hundreds of RW properties) not exhaustively reproduced in this spec — the source lists them all under \"Alphabetical list of all properties\" and the implementer should introspect the live device or read that section when filling in additional Variables."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0