Summary
Barco Balder Series projectors use the Pulse JSON-RPC 2.0 API, accessible via TCP/IP on port 9090 or RS-232 serial at 19200 baud. The API provides control over power, source selection, illumination, image adjustment, warp/blend, optics (lens shift, zoom, focus, shutter), DMX, environment monitoring, and firmware management. Authentication is optional for normal end-user access; a passcode is required for elevated privileges.
Transport
protocols:
- tcp
- serial
addressing:
port: 9090
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: optional # inferred: normal end-user access requires no auth; elevated access requires passcode via authenticate method
Traits
- powerable # inferred from system.poweron / system.poweroff commands
- queryable # inferred from property.get and introspect commands
- routable # inferred from image.window.main.source / image.source.list commands
- levelable # inferred from illumination.sources.laser.power, image.brightness, image.contrast, etc.
Actions
- id: power_on
label: Power On
kind: action
method: system.poweron
params: []
description: Powers on the projector. No-op if already on or transitioning.
- id: power_off
label: Power Off
kind: action
method: system.poweroff
params: []
description: Powers off the projector. No-op if already off or transitioning.
- id: goto_ready
label: Go to Ready
kind: action
method: system.gotoready
params: []
- id: goto_eco
label: Go to ECO
kind: action
method: system.gotoeco
params: []
- id: reboot
label: Reboot
kind: action
method: system.reboot
params: []
description: Reboots the projector. Powers off first.
- id: select_source
label: Select Source
kind: action
method: property.set
params:
- name: property
type: string
value: "image.window.main.source"
description: Fixed property path
- name: value
type: string
description: "Source name, e.g. DisplayPort 1, HDMI, HDBaseT, DVI 1, SDI"
description: Sets the active source for the main window. Best practice to wait for confirmation before issuing another set.
- id: set_brightness
label: Set Brightness
kind: action
method: property.set
params:
- name: property
type: string
value: "image.brightness"
- name: value
type: float
description: "Normalized value, -1 to 1, step 0.01"
- id: set_contrast
label: Set Contrast
kind: action
method: property.set
params:
- name: property
type: string
value: "image.contrast"
- name: value
type: float
description: "Normalized value, 0 to 2, step 0.01, default 1"
- id: set_gamma
label: Set Gamma
kind: action
method: property.set
params:
- name: property
type: string
value: "image.gamma"
- name: value
type: float
description: "Range 1 to 3, step 0.1, default 2.2"
- id: set_saturation
label: Set Saturation
kind: action
method: property.set
params:
- name: property
type: string
value: "image.saturation"
- name: value
type: float
description: "Normalized value, 0 to 2, step 0.01, default 1"
- id: set_sharpness
label: Set Sharpness
kind: action
method: property.set
params:
- name: property
type: string
value: "image.sharpness"
- name: value
type: integer
description: "Range -2 to 8, step 1"
- id: set_intensity
label: Set Intensity
kind: action
method: property.set
params:
- name: property
type: string
value: "image.intensity"
- name: value
type: float
description: "Range 0 to 1, step 0.01"
- id: set_laser_power
label: Set Laser Power
kind: action
method: property.set
params:
- name: property
type: string
value: "illumination.sources.laser.power"
- name: value
type: float
description: "Target power in percent"
- id: set_orientation
label: Set Orientation
kind: action
method: property.set
params:
- name: property
type: string
value: "image.orientation"
- name: value
type: string
description: "DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR"
- id: set_scaling_mode
label: Set Scaling Mode
kind: action
method: property.set
params:
- name: property
type: string
value: "image.window.main.scalingmode"
- name: value
type: string
description: "Fill, OneToOne, FillScreen, Stretch"
- id: enable_warp
label: Enable Warp
kind: action
method: property.set
params:
- name: property
type: string
value: "image.processing.warp.enable"
- name: value
type: boolean
- id: enable_blend
label: Enable Blend File
kind: action
method: property.set
params:
- name: property
type: string
value: "image.processing.blend.file.enable"
- name: value
type: boolean
- id: enable_blacklevel
label: Enable Black Level File
kind: action
method: property.set
params:
- name: property
type: string
value: "image.processing.blacklevel.file.enable"
- name: value
type: boolean
- id: shutter_toggle
label: Toggle Shutter
kind: action
method: optics.shutter.toggle
params: []
- id: set_test_pattern
label: Select Test Pattern
kind: action
method: property.set
params:
- name: property
type: string
value: "image.testpattern.selected"
- name: value
type: string
description: "Unique test pattern ID"
- id: show_test_pattern
label: Show Test Pattern
kind: action
method: property.set
params:
- name: property
type: string
value: "image.testpattern.show"
- name: value
type: boolean
- id: reset_domains
label: Reset Domains
kind: action
method: system.reset
params:
- name: domains
type: array
description: "List of domain enums, e.g. ImageFeatures, Optics, Illumination, etc."
- id: authenticate
label: Authenticate
kind: action
method: authenticate
params:
- name: code
type: integer
description: "Secret passcode for elevated access level"
- id: eco_wake_serial
label: ECO Wake (Serial Only)
kind: action
description: "Send ASCII :POWR1\\r over RS-232 to wake from ECO mode"
params: []
- id: set_display_mode
label: Set Display Mode
kind: action
method: property.set
params:
- name: property
type: string
value: "image.display.desireddisplaymode"
- name: value
type: string
description: "Mono, AutoStereo, ActiveStereo, NightVision, IGPixelShift"
- id: set_rgb_mode
label: Set RGB Mode
kind: action
method: property.set
params:
- name: property
type: string
value: "image.color.rgbmode.rgbmode"
- name: value
type: string
description: "Full, Red, Green, Blue, RedGreen, GreenBlue, BlueRed"
- id: set_stealth_mode
label: Set Stealth Mode
kind: action
method: property.set
params:
- name: property
type: string
value: "ui.stealthmode"
- name: value
type: string
description: "Off, On. When on, all controllable LEDs are switched off."
- id: set_osd
label: Enable/Disable OSD
kind: action
method: property.set
params:
- name: property
type: string
value: "ui.osd"
- name: value
type: boolean
- id: signal_user_activity
label: Signal User Activity
kind: action
method: system.activity
params: []
description: Resets timeout countdown timers.
Feedbacks
- id: system_state
type: enum
property: system.state
values: [boot, eco, standby, ready, conditioning, on, service, deconditioning, error]
subscribable: true
- id: illumination_state
type: enum
property: illumination.state
values: [On, Off]
subscribable: true
- id: laser_power
type: float
property: illumination.sources.laser.power
description: Current laser power in percent
subscribable: true
- id: laser_max_power
type: float
property: illumination.sources.laser.maxpower
description: Maximum laser power in percent (read-only)
- id: laser_min_power
type: float
property: illumination.sources.laser.minpower
description: Minimum laser power in percent (read-only)
- id: active_source
type: string
property: image.window.main.source
subscribable: true
description: "Name of the currently active source, e.g. DisplayPort 1"
- id: brightness
type: float
property: image.brightness
subscribable: true
description: "Normalized, -1 to 1"
- id: contrast
type: float
property: image.contrast
subscribable: true
description: "Normalized, 0 to 2"
- id: gamma
type: float
property: image.gamma
subscribable: true
- id: saturation
type: float
property: image.saturation
subscribable: true
- id: sharpness
type: integer
property: image.sharpness
subscribable: true
- id: intensity
type: float
property: image.intensity
subscribable: true
- id: connector_detected_signal
type: object
property: "image.connector.<name>.detectedsignal"
subscribable: true
description: "Signal info per connector including active, resolution, frequency, color space, etc."
- id: alarm_state
type: enum
property: environment.alarmstate
values: [Fatal, Error, Alert, Warning, Ok]
- id: firmware_version
type: string
property: firmware.firmwareversion
description: Currently installed firmware version (read-only)
- id: model_name
type: string
property: system.modelname
description: Projector model name (read-only)
- id: serial_number
type: string
property: system.serialnumber
description: Projector serial number (read-only)
- id: display_mode
type: enum
property: image.display.displaymode
values: [Mono, AutoStereo, ActiveStereo, NightVision, IGPixelShift]
subscribable: true
- id: orientation
type: enum
property: image.orientation
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: scaling_mode
type: enum
property: image.window.main.scalingmode
values: [Fill, OneToOne, FillScreen, Stretch]
- id: lens_present
type: boolean
property: optics.lenspresent
description: Whether a lens is mounted (read-only)
- id: lens_info
type: object
property: optics.lens
description: Lens details including ID, Name, Zoom/Focus/Iris capabilities and speeds (read-only)
- id: clo_state
type: enum
property: illumination.clo.state
values: [Ok, TooDim, TooBright]
- id: clo_availability
type: enum
property: illumination.clo.availability
values: [Available, SensorUnavailable, PendingWarmup, Unavailable, Unknown]
- id: laser_power_limited
type: boolean
property: illumination.sources.laser.ispowerlimited
- id: network_state
type: enum
property: network.device.lan.state
values: [CONNECTED, DISCONNECTED]
Variables
- id: laser_power_target
property: illumination.sources.laser.power
type: float
min: 0
max: dynamic # see illumination.sources.laser.maxpower
description: Laser target power in percent
- id: brightness_value
property: image.brightness
type: float
min: -1
max: 1
step: 0.01
- id: contrast_value
property: image.contrast
type: float
min: 0
max: 2
step: 0.01
- id: gamma_value
property: image.gamma
type: float
min: 1
max: 3
step: 0.1
- id: saturation_value
property: image.saturation
type: float
min: 0
max: 2
step: 0.01
- id: sharpness_value
property: image.sharpness
type: integer
min: -2
max: 8
step: 1
- id: intensity_value
property: image.intensity
type: float
min: 0
max: 1
step: 0.01
- id: dmx_start_channel
property: dmx.startchannel
type: integer
min: 1
max: 512
- id: dmx_mode
property: dmx.mode
type: string
- id: hostname
property: network.hostname
type: string
- id: on_timeout_duration
property: system.on.timeout.duration
type: integer
description: Time in seconds before transitioning to lower state
- id: ready_timeout_duration
property: system.ready.timeout.duration
type: integer
description: Time in seconds before transitioning to lower state
- id: standby_timeout_duration
property: system.standby.timeout.duration
type: integer
description: Time in seconds before transitioning to lower state
Events
- id: property_changed
description: >
Unsolicited notification sent when a subscribed property changes.
Method: property.changed. Params contain an array of property/value pairs.
format:
method: property.changed
params:
property:
- "<objectname.propertyname>": <value>
- id: signal_callback
description: >
Unsolicited notification sent when a subscribed signal fires.
Method: signal.callback. Params contain an array of signal/argument pairs.
format:
method: signal.callback
params:
signal:
- "<objectname.signalname>":
arg1: value
- id: model_updated
description: >
Fires when objects appear or disappear (e.g. peripherals connected/disconnected).
Subscribe via signal.subscribe with signal "modelupdated".
args:
object: string
newobject: boolean
accesslevel: enum
- id: notification_emitted
description: >
Fires when the projector emits a notification (info, caution, warning, error, critical).
args:
severity: enum [INFO, CAUTION, WARNING, ERROR, CRITICAL]
id: string
code: string
message: string
- id: system_performed
description: Emitted when one or more reset domains have completed resetting.
args:
domains: "array of domain enums"
Macros
# UNRESOLVED: no explicit multi-step macro sequences documented in source
Safety
confirmation_required_for:
- system.reboot
- system.poweroff
interlocks:
- description: >
Power on is a no-op if projector is already on or transitioning between states.
Best practice: verify system.state is standby or ready before issuing power on.
- description: >
Power off is a no-op if projector is already off or transitioning.
Best practice: verify system.state is on before issuing power off.
- description: >
ECO wake requires special serial command (:POWR1\\r), Wake-on-LAN, or physical button press.
# UNRESOLVED: full interlock procedures and safety warnings not detailed in source
Notes
- The API uses JSON-RPC 2.0 over both TCP/IP and RS-232. All commands are identical regardless of transport.
- Property subscription uses
property.subscribefor change notifications; the client must implementproperty.changedto receive them. - Signal subscription uses
signal.subscribe; client implementssignal.callback. - The API is dynamic -- available objects/properties vary by projector model and connected peripherals. Use
introspectto discover the exact API for a given unit. - Source names are translated to object names by removing non-word characters and lowercasing (e.g. "DisplayPort 1" becomes "displayport1").
- Best practice: wait for
property.setconfirmation before setting the same property again to avoid flooding. - File transfer (warp grids, blend masks, black level masks, firmware, EDIDs, test patterns) uses HTTP POST/GET at
http://<projector-ip>/api/<endpoint>. - Supported image formats for masks: PNG (up to 16-bit), JPEG, TIFF. Grayscale only (blue channel used for RGB images).
- Authentication is tiered: UNAUTHENTICATED_END_USER, END_USER, POWER_USER, SERVICE_PARTNER, MANUFACTURING, DEVELOPMENT, INACCESSIBLE. Normal end-user access requires no authentication.
- Access levels for the
authenticatemethod:{"jsonrpc": "2.0", "method": "authenticate", "params": {"code": <passcode>}}.
Provenance
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-05-04T06:15:26.319Z
last_checked_at: 2026-06-02T21:47:49.953Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T21:47:49.953Z
matched_actions: 29
action_count: 29
confidence: medium
summary: "All 29 spec actions traced to source. (8 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "exact Balder sub-models not enumerated in source (doc covers generic Pulse API for UDX/Balder families)"
- "no explicit multi-step macro sequences documented in source"
- "full interlock procedures and safety warnings not detailed in source"
- "exact Balder-specific connector list not stated (varies by model)"
- "firmware version compatibility ranges not stated"
- "protocol version number not stated"
- "maximum concurrent TCP connections not stated"
- "RS-232 pinout detailed for 9-pin but no mention of RJ-45 serial if applicable"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0