Summary
Professional projection laser light engine. Control via JSON-RPC 2.0 over TCP (port 9090) or RS-232 serial (19200 8N1). Supports power on/off, source routing, image adjustment, warp/blend/blacklevel file upload, environment monitoring, and DMX512 control. Authentication optional for normal user; higher-privilege operations require pass code.
Transport
protocols:
- tcp
- serial
addressing:
port: 9090 # stated: "service is available on port number 9090"
serial:
baud_rate: 19200 # stated: RS232 table
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: none # inferred: normal end user access requires no auth; optional higher-level auth via authenticate method
Traits
# inferred from command examples in source:
# - powerable (system.poweron, system.poweroff present)
# - routable (image.window.main.source set/get, image.source.list, image.connector.list)
# - queryable (property.get, property.subscribe, system.state, illumination.state)
# - levelable (image.brightness/contrast/saturation/sharpness/gamma all have set/get)
Actions
- id: system_poweron
label: Power On
kind: action
params: []
description: Power on projector. Result null on success. Idempotent - no effect if already on or transitioning.
- id: system_poweroff
label: Power Off
kind: action
params: []
description: Power off projector. Result null on success. Idempotent.
- id: property_set
label: Set Property
kind: action
params:
- name: property
type: string
description: Dot-notation property name (e.g. "image.window.main.source")
- name: value
type: any
description: New value for the property
description: Set a property value. Best practice: wait for confirmation before setting same property again.
- id: property_get
label: Get Property
kind: action
params:
- name: property
type: string
description: Dot-notation property name
description: Read current value of a property.
- id: property_subscribe
label: Subscribe to Property
kind: action
params:
- name: property
type: string | array
description: Single property name or array of property names
description: Subscribe to change notifications for property. Notifications delivered via property.changed signal.
- id: property_unsubscribe
label: Unsubscribe from Property
kind: action
params:
- name: property
type: string | array
description: Single property name or array of property names
description: Stop observing property changes.
- id: signal_subscribe
label: Subscribe to Signal
kind: action
params:
- name: signal
type: string | array
description: Signal name or array of signal names
description: Subscribe to signal callbacks. Notifications delivered via signal.callback.
- id: signal_unsubscribe
label: Unsubscribe from Signal
kind: action
params:
- name: signal
type: string | array
description: Signal name or array of signal names
description: Stop observing signal callbacks.
- id: authenticate
label: Authenticate
kind: action
params:
- name: code
type: integer
description: Pass code for elevated access level
description: Start authenticated session with higher privilege. Not required for normal end user access.
- id: introspect
label: Introspect Object
kind: action
params:
- name: object
type: string
description: Object name to introspect (dot notation; empty/default introspects all)
- name: recursive
type: boolean
description: If true, include nested object names (default true)
description: Read metadata of available objects, methods, properties, and signals.
- id: image_source_list
label: List Sources
kind: action
params: []
description: Returns array of available source names (e.g. ["DVI 1", "HDMI", "DisplayPort 1", ...]).
- id: image_connector_list
label: List Connectors
kind: action
params: []
description: Returns array of available physical connector names.
- id: environment_getcontrolblocks
label: Get Environment Sensors
kind: action
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.
description: Get snapshot of sensor readings (temperatures, fan speeds, etc.) as key-value dictionary.
- id: firmware_listcomponents
label: List Firmware Components
kind: action
params: []
description: Returns array of managed firmware component names.
- id: firmware_listcomponentversionstatus
label: List Firmware Versions
kind: action
params: []
description: Returns array of firmware components with available/running versions and upgrade status.
- id: illumination_clo_engage
label: Engage Constant Light Output
kind: action
params: []
description: Engage CLO (Constant Light Output) at current light level.
- id: dmx_listmodes
label: List DMX Modes
kind: action
params: []
description: Return list of all available DMX modes.
- id: dmx_listchannels
label: List DMX Channels
kind: action
params:
- name: mode
type: string
description: DMX mode name
description: Return list of available channel names for given DMX mode.
# UNRESOLVED: additional methods present in source but truncated/partial:
# - image.color.p7.custom.copypresettocustom, resetpreset, resettonative
# - image.color.rgbmode.nextrgbmode
# - illumination.laser.getserialnumber
# - firmware.schedulecomponentupgrade
# - image.source.[name].listconnectors
# - dmx.shutdown, dmx.mode, dmx.startchannel (properties, not methods)
- id: environment_getalarminfo
label: Get Alarm Info
kind: query
method: environment.getalarminfo
params: []
description: Returns array of alarm info objects with severity, timestamp, source, description, custommessage fields.
- id: illumination_laser_getserialnumber
label: Get Laser Serial Number
kind: query
method: illumination.laser.getserialnumber
params: []
description: Returns the serial number of the laser illumination source as a string.
- id: image_color_p7_custom_copypresettocustom
label: Copy P7 Preset to Custom
kind: action
method: image.color.p7.custom.copypresettocustom
params:
- name: presetname
type: string
description: Name of the preset to copy to custom slot
description: Copy a named P7 color preset to the custom preset slot.
- id: image_color_p7_custom_resetpreset
label: Reset P7 Preset
kind: action
method: image.color.p7.custom.resetpreset
params:
- name: presetname
type: string
description: Name of the preset to reset back to default values
description: Reset a P7 color preset back to its default values.
- id: image_color_p7_custom_resettonative
label: Reset P7 to Native
kind: action
method: image.color.p7.custom.resettonative
params: []
description: Reset P7 color calibration to native/factory values.
- id: image_color_rgbmode_nextrgbmode
label: Next RGB Mode
kind: action
method: image.color.rgbmode.nextrgbmode
params: []
description: Change to the next RGB mode; cycles through all possible modes.
- id: firmware_schedulecomponentupgrade
label: Schedule Component Firmware Upgrade
kind: action
method: firmware.schedulecomponentupgrade
params: []
description: Force a firmware component upgrade to occur at the following reboot.
Feedbacks
- id: system_state
label: System State
type: enum
values:
- boot
- eco
- standby
- ready
- conditioning
- on
- deconditioning
- error
description: Current operational state of projector. Subscribe for change notifications.
- id: illumination_state
label: Illumination State
type: enum
values:
- "On"
- "Off"
description: Laser/light engine on/off state. Subscribe for change notifications.
- id: active_source
label: Active Source
type: string
description: Currently selected source name for main window (e.g. "DisplayPort 1", "HDMI").
- id: property_changed_notification
label: Property Changed
type: object
description: |
Unsolicited notification when a property value changes.
Format: { "property": [{ "objectname.propertyname": <value> }, ...] }
No id field; no response required.
- id: signal_callback_notification
label: Signal Callback
type: object
description: |
Unsolicited notification for signal events.
Format: { "signal": [{ "objectname.signalname": { <args> } }, ...] }
- id: modelupdated_signal
label: Model Updated Signal
type: object
description: Triggered when object structure changes (objects added or removed). Argument: object name and isnew boolean.
- id: network_device_state
label: Network Device State
type: enum
values:
- CONNECTED
- DISCONNECTED
- id: environment_alarmstate
label: Alarm State
type: enum
values:
- Fatal
- Error
- Alert
- Warning
- Ok
- id: detected_signal
label: Connector Detected Signal
type: object
description: |
Signal detection info for a connector. Fields:
- active (bool): true if signal present
- name (string): resolution and rate (e.g. "2560x1600 @ 50.10Hz")
- horizontal_resolution, vertical_resolution (int)
- horizontal_frequency, vertical_frequency (float)
- pixel_rate (int)
- scan (enum: Progressive/Interlaced)
- bits_per_component, color_space, signal_range, chroma_sampling, gamma_type
- is_stereo, stereo_mode
- id: illumination_sources_laser_power
label: Laser Power Level
type: float
description: Current laser power in percent (0-100). Read/write.
- id: illumination_sources_laser_minpower
label: Laser Minimum Power
type: float
description: Minimum available power in percent. Dynamic - may vary with lens/firmware.
- id: illumination_sources_laser_maxpower
label: Laser Maximum Power
type: float
description: Maximum available power in percent. Dynamic.
- id: image_brightness
label: Brightness
type: float
description: Normalized -1 to 1, 0 is default, 1 is 100% offset.
- id: image_contrast
label: Contrast
type: float
description: Normalized 0-2, 1 is default.
- id: image_gamma
label: Gamma
type: float
description: 1-3, default 2.2.
- id: image_saturation
label: Saturation
type: float
description: Normalized 0-2, 1 is default.
- id: image_sharpness
label: Sharpness
type: integer
description: Normalized -2 to 8.
- id: image_orientation
label: Orientation
type: enum
values:
- DESKTOP_FRONT
- DESKTOP_REAR
- CEILING_FRONT
- CEILING_REAR
- id: optics_shutter_position
label: Shutter Position
type: enum
values:
- Open
- Closed
- id: image_processing_warp_enable
label: Warp Enable
type: boolean
description: Global warp enable/disable.
- id: image_processing_blend_file_enable
label: Blend File Enable
type: boolean
description: Enable/disable uploaded blend mask.
- id: image_processing_blacklevel_file_enable
label: Black Level File Enable
type: boolean
description: Enable/disable uploaded black level mask.
- id: dmx_mode
label: DMX Mode
type: string
description: Current DMX mode name.
- id: dmx_startchannel
label: DMX Start Channel
type: integer
description: DMX start channel [1..512].
- id: dmx_shutdown
label: DMX Shutdown
type: boolean
description: DMX shutdown enabled/disabled.
- id: optics_shutter_target
label: Shutter Target
type: enum
values:
- Open
- Closed
- id: system_standby_enable
label: Standby Enable
type: boolean
description: Enable/disable standby state.
- id: system_eco_enable
label: ECO Mode Enable
type: boolean
description: Enable/disable ECO/power save mode.
- id: network_device_lan_ip4config
label: IPv4 Config
type: object
description: |
Current IPv4 configuration.
Fields: Address, Mask, Gateway, NameServers (all strings).
- id: optics_zoom_position
label: Zoom Position
type: integer
description: Current zoom motor position.
- id: optics_focus_position
label: Focus Position
type: integer
description: Current focus motor position.
- id: optics_lensshift_horizontal_position
label: Lens Shift Horizontal
type: integer
description: Current horizontal lens shift position.
- id: optics_lensshift_vertical_position
label: Lens Shift Vertical
type: integer
description: Current vertical lens shift position.
- id: image_window_main_position
label: Window Position
type: object
description: Main window XY position { x: int, y: int }.
- id: image_window_main_size
label: Window Size
type: object
description: Main window dimensions { width: int, height: int }.
- id: image_window_main_scalingmode
label: Window Scaling Mode
type: enum
values:
- Fill
- OneToOne
- FillScreen
- Stretch
- id: image_processing_warp_file_selected
label: Selected Warp File
type: string
description: Currently selected warp grid file name.
- id: image_processing_blend_file_selected
label: Selected Blend Files
type: array
description: Array of selected blend mask file names.
- id: image_processing_blacklevel_file_selected
label: Selected Black Level File
type: string
description: Currently selected black level mask file name.
Variables
# Variables mirror Feedbacks - settable properties that are not discrete action calls.
# All property.get/set pairs listed in Feedbacks apply here as writeable Variables.
# Key writeable variables (not already listed in Feedbacks as separate types):
- id: illumination_sources_laser_power
label: Laser Power
type: float
min: 0 # from minpower (dynamic)
max: 100 # from maxpower (dynamic)
default: null
description: Target laser power in percent. Writeable via property.set.
- id: image_brightness
label: Brightness
type: float
min: -1
max: 1
default: 0
- id: image_contrast
label: Contrast
type: float
min: 0
max: 2
default: 1
- id: image_gamma
label: Gamma
type: float
min: 1
max: 3
default: 2.2
- id: image_saturation
label: Saturation
type: float
min: 0
max: 2
default: 1
- id: image_sharpness
label: Sharpness
type: integer
min: -2
max: 8
default: 0
- id: dmx_startchannel
label: DMX Start Channel
type: integer
min: 1
max: 512
default: 1
# UNRESOLVED: variable ranges for zoom/focus/lensshift not stated in source
Events
# Unsolicited notifications device sends to client:
- id: property_changed
description: |
Fires when any subscribed property changes.
Format: { "jsonrpc": "2.0", "method": "property.changed", "params": { "property": [{ "<property>": <value> }] } }
- id: signal_callback
description: |
Fires when any subscribed signal emits.
Format: { "jsonrpc": "2.0", "method": "signal.callback", "params": { "signal": [{ "<signal>": { <args> } }] } }
- id: modelupdated
description: |
Fires when object structure changes (objects added/removed).
Format: signal callback with "introspect.objectchanged" signal.
Args: object (string), isnew (bool).
Macros
# Multi-step sequences described in source:
- id: upload_and_activate_warp_grid
label: Upload and Activate Warp Grid
description: |
Three-step sequence to enable warp geometry correction.
Step 1: Upload warp XML via HTTP POST to /api/image/processing/warp/file/transfer
Step 2: property.set "image.processing.warp.file.selected" = "<filename>"
Step 3: property.set "image.processing.warp.file.enable" = true
Also requires: property.set "image.processing.warp.enable" = true (global enable)
- id: upload_and_activate_blend_mask
label: Upload and Activate Blend Mask
description: |
Three-step sequence for multi-channel blending.
Step 1: Upload PNG via HTTP POST to /api/image/processing/blend/file/transfer
Step 2: property.set "image.processing.blend.file.selected" = "<filename>"
Step 3: property.set "image.processing.blend.file.enable" = true
- id: upload_and_activate_blacklevel_mask
label: Upload and Activate Black Level Mask
description: |
Three-step sequence for black level correction in blended setups.
Step 1: Upload PNG via HTTP POST to /api/image/processing/blacklevel/file/transfer
Step 2: property.set "image.processing.blacklevel.file.selected" = "<filename>"
Step 3: property.set "image.processing.blacklevel.file.enable" = true
- id: wake_from_eco_mode
label: Wake from ECO Mode
description: |
One of: (1) Wake on LAN with projector MAC address, (2) power button on remote, (3) power button on keypad,
(4) RS-232 send ASCII ":POWR1\\r"
- id: verify_power_on_prerequisite
label: Verify Before Power On
description: |
Best practice: check system.state is "standby" or "ready" before sending system.poweron.
Idempotent - command has no effect if already on or transitioning.
- id: subscribe_to_all_image_changes
label: Subscribe to All Image Changes
description: |
For source + signal updates: subscribe to image.window.main.source for source changes,
plus image.connector.[name].detectedsignal for each connector in active source.
Full client-side reflection pattern described in source: list sources → translate to object names →
list connectors per source → translate connector names → subscribe to detectedsignal per connector.
- id: set_brightness_with_wait
label: Set Brightness with Confirmation
description: |
Best practice sequence:
Step 1: property.set image.brightness = <value>
Step 2: Wait for confirmation result: true
Step 3: property.subscribe ["image.brightness"] for change notification
Step 4: Receive property.changed notification confirming new value
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings, interlock procedures, or power-on sequencing requirements stated in source.
Notes
Protocol: JSON-RPC 2.0 over TCP (port 9090) or RS-232. All commands are JSON objects with jsonrpc: "2.0", method, optional params (with optional id), and optional id for request correlation.
Authentication: Optional. Normal end user access skips auth. Higher privilege requires authenticate method with pass code. Example code shown in docs: 98765. Not enforced for basic operations.
ECO mode wake: Projector in ECO mode requires Wake-on-LAN, remote/keypad button, or RS-232 ASCII :POWR1\r to exit ECO before power commands work.
File upload: HTTP POST to projector at <ip>/api/<endpoint>/file/transfer. Upload blend masks (PNG/JPEG/TIFF, up to 16-bit grayscale, size must match projector resolution per resolution table), black level masks (same format requirements), or warp grids (XML format same as MCM500/400).
Dynamic API note: Source states parts of API are dynamic and depend on peripherals/configuration. Lens without motorized zoom won't expose zoom API. DMX in basic mode has 2 channels; extended mode exposes more. Introspection is recommended to discover exact available objects/properties for a specific configuration.
Property.set best practice: Wait for confirmation before setting same property again. Continuously setting without waiting may flood server and reduce performance.
Property notification: Notifications only fire on actual value changes. Subscribing to a property does not deliver the current value — use property.get to retrieve current state.
Source naming translation: Source names like "DisplayPort 1" translate to object names via regex /\W/g + lowercase → "displayport1". Connector names follow same translation.
Image formats: Blend/blacklevel masks accept PNG (up to 16-bit), JPEG, TIFF. Interface uses grayscale only; color images use blue channel only.
Provenance
source_domains:
- audiogeneral.com
- docs
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-05-14T11:27:33.427Z
last_checked_at: 2026-06-02T22:04:12.959Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T22:04:12.959Z
matched_actions: 25
action_count: 25
confidence: medium
summary: "All 25 spec actions traced to source (dip-safe re-verify). (10 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "firmware compatibility range not stated in source"
- "additional methods present in source but truncated/partial:"
- "variable ranges for zoom/focus/lensshift not stated in source"
- "no safety warnings, interlock procedures, or power-on sequencing requirements stated in source."
- "firmware version compatibility not stated in source"
- "voltage/current/power specifications not stated in source"
- "fault behavior and error recovery sequences not stated in source"
- "precise variable ranges for optics (zoom/focus/lensshift) not stated in source"
- "all DMX channel definitions not provided in source (only listchannels method)"
- "authentication credential format beyond example code 98765 not specified"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0