Summary

Barco Infinipix Manager NM100 Pulse projector control spec. The device exposes a JSON-RPC 2.0 service over TCP port 9090 and over RS-232C serial at 19200 baud, 8N1, no flow control. An optional authentication request sets a higher access level; normal end-user access can skip authentication. One literal ASCII wake command (:POWR1\r) is sent on the serial port to wake from ECO mode.

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: source states authentication is optional and can be skipped for normal end-user access

Traits

- powerable       # inferred from system.poweron / system.poweroff methods
- routable        # inferred from input/source selection commands
- queryable       # inferred from property.get / property.subscribe examples
- levelable       # inferred from illumination power and image property setters

Actions

- id: authenticate
  label: Authenticate (optional)
  kind: action
  command: '{"jsonrpc": "2.0", "method": "authenticate", "params": { "code": 98765 }, "id": 1}'
  params:
    - name: code
      type: integer
      description: Secret pass code. Source example uses 98765; actual value is deployment-specific.
  notes: "Optional. Skipped for normal end-user access. Sets higher access level."

- id: system_poweron
  label: Power On Projector
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.poweron", "id": 3}'
  params: []

- id: system_poweroff
  label: Power Off Projector
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.poweroff", "id": 4}'
  params: []

- id: get_system_state
  label: Get Projector State
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "system.state" }, "id": 1}'
  params: []

- id: subscribe_system_state
  label: Subscribe to System State Changes
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "system.state" }, "id": 2}'
  params: []

- id: get_active_source
  label: Get Active Source
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "image.window.main.source" }, "id": 0}'
  params: []

- id: list_sources
  label: List Available Sources
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.source.list", "id": 1}'
  params: []

- id: set_active_source
  label: Set Active Source
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.window.main.source", "value": "{source}" }, "id": 2}'
  params:
    - name: source
      type: string
      description: Source name (e.g. "DisplayPort 1", "HDMI"). Obtain valid values via image.source.list.

- id: list_connectors
  label: List Available Connectors
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.connector.list", "id": 3}'
  params: []

- id: list_source_connectors
  label: List Connectors Used by Source
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.source.{sourceobject}.listconnectors", "id": 4}'
  params:
    - name: sourceobject
      type: string
      description: Source object name. Derive by lowercasing source name and stripping non-word chars (e.g. "DisplayPort 1" -> "displayport1").

- id: get_connector_signal
  label: Get Connector Detected Signal
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "image.connector.{connector}.detectedsignal" }, "id": 5}'
  params:
    - name: connector
      type: string
      description: Connector object name (e.g. "displayport1").

- id: subscribe_source_property
  label: Subscribe to Active Source Changes
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "image.window.main.source" }, "id": 6}'
  params: []

- id: get_illumination_state
  label: Get Illumination State
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.state" }, "id": 0}'
  params: []

- id: subscribe_illumination_state
  label: Subscribe to Illumination State Changes
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "illumination.state" }, "id": 1}'
  params: []

- id: get_illumination_power
  label: Get Illumination Power Level
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.sources.{source}.power" }, "id": 3}'
  params:
    - name: source
      type: string
      description: Illumination source object name (e.g. "laser"). Discover via introspect of illumination.sources.

- id: set_illumination_power
  label: Set Illumination Power Level
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "illumination.sources.{source}.power", "value": {value} }, "id": 5}'
  params:
    - name: source
      type: string
      description: Illumination source object name (e.g. "laser").
    - name: value
      type: integer
      description: Power level in percent. Source example uses 40. Constraint range is dynamic; introspect minpower/maxpower first.

- id: get_illumination_min_power
  label: Get Illumination Minimum Power
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.sources.{source}.minpower" }, "id": 6}'
  params:
    - name: source
      type: string
      description: Illumination source object name (e.g. "laser").

- id: get_illumination_max_power
  label: Get Illumination Maximum Power
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.sources.{source}.maxpower" }, "id": 6}'
  params:
    - name: source
      type: string
      description: Illumination source object name (e.g. "laser").

- id: property_get
  label: Get Property Value
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": "{property}" }, "id": 4}'
  params:
    - name: property
      type: string
      description: Dot-notation property name (e.g. "image.brightness").

- id: property_set
  label: Set Property Value
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "{property}", "value": {value} }, "id": 3}'
  params:
    - name: property
      type: string
      description: Dot-notation property name.
    - name: value
      type: string
      description: Value matching the property's type and constraints.

- id: property_get_multiple
  label: Get Multiple Property Values
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get", "params": { "property": ["{prop1}", "{prop2}"] }, "id": 5}'
  params:
    - name: properties
      type: array
      description: Array of dot-notation property names.

- id: property_subscribe
  label: Subscribe to Property Changes
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": "{property}" }, "id": 6}'
  params:
    - name: property
      type: string
      description: Dot-notation property name.

- id: property_subscribe_multiple
  label: Subscribe to Multiple Property Changes
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": ["{prop1}", "{prop2}"] }, "id": 7}'
  params:
    - name: properties
      type: array
      description: Array of dot-notation property names.

- id: property_unsubscribe
  label: Unsubscribe from Property
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": { "property": "{property}" }, "id": 8}'
  params:
    - name: property
      type: string
      description: Dot-notation property name.

- id: property_unsubscribe_multiple
  label: Unsubscribe from Multiple Properties
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": { "property": ["{prop1}", "{prop2}"] }, "id": 9}'
  params:
    - name: properties
      type: array
      description: Array of dot-notation property names.

- id: signal_subscribe
  label: Subscribe to Signal
  kind: action
  command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": { "signal": "{signal}" }, "id": 10}'
  params:
    - name: signal
      type: string
      description: Signal name (e.g. "modelupdated").

- id: signal_subscribe_multiple
  label: Subscribe to Multiple Signals
  kind: action
  command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": { "signal": ["{sig1}", "{sig2}"] }, "id": 11}'
  params:
    - name: signals
      type: array
      description: Array of signal names (e.g. ["modelupdated", "image.processing.warp.gridchanged"]).

- id: signal_unsubscribe
  label: Unsubscribe from Signal
  kind: action
  command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": { "signal": "{signal}" }, "id": 12}'
  params:
    - name: signal
      type: string
      description: Signal name.

- id: signal_unsubscribe_multiple
  label: Unsubscribe from Multiple Signals
  kind: action
  command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": { "signal": ["{sig1}", "{sig2}"] }, "id": 13}'
  params:
    - name: signals
      type: array
      description: Array of signal names.

- id: introspect
  label: Introspect Object (recursive)
  kind: query
  command: '{"jsonrpc": "2.0", "method": "introspect", "params": { "object": "{object}", "recursive": true }, "id": 1}'
  params:
    - name: object
      type: string
      description: Object name in dot notation. Empty/omitted introspects everything.

- id: introspect_nonrecursive
  label: Introspect Object (non-recursive)
  kind: query
  command: '{"jsonrpc": "2.0", "method": "introspect", "params": { "object": "{object}", "recursive": false }, "id": 2}'
  params:
    - name: object
      type: string
      description: Object name in dot notation.

- id: led_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 name (e.g. "systemstatus").
    - name: color
      type: string
      description: LED color (e.g. "red").
    - name: period
      type: integer
      description: Blink period. Source example uses 42.

- id: enable_warp
  label: Enable Warp Globally
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.enable", "value": true }, "id": 10}'
  params: []

- id: upload_warp_file
  label: Upload Warp Grid File
  kind: action
  command: 'curl -X POST -F file=@warp.xml http://{address}/api/image/processing/warp/file/transfer'
  params:
    - name: file
      type: string
      description: Path to local warp grid XML file.
    - name: address
      type: string
      description: Projector IP address (e.g. "192.168.1.100").

- id: select_warp_file
  label: Select Warp File
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.file.selected", "value": "{filename}" }, "id": 11}'
  params:
    - name: filename
      type: string
      description: Filename of an uploaded warp file (e.g. "warp.xml").

- id: enable_warp_file
  label: Enable Warp File
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.file.enable", "value": true }, "id": 12}'
  params: []

- id: upload_blend_mask
  label: Upload Blend Mask
  kind: action
  command: 'curl -X POST -F file=@mask.png http://{address}/api/image/processing/blend/file/transfer'
  params:
    - name: file
      type: string
      description: Path to PNG blend mask (8 or 16-bit grayscale).
    - name: address
      type: string
      description: Projector IP address.

- id: select_blend_file
  label: Select Blend Mask File
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blend.file.selected", "value": "{filename}" }, "id": 13}'
  params:
    - name: filename
      type: string
      description: Blend mask filename (e.g. "mask.png").

- id: enable_blend_file
  label: Enable Blend File
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blend.file.enable", "value": true }, "id": 14}'
  params: []

- id: upload_blacklevel_mask
  label: Upload Black Level Mask
  kind: action
  command: 'curl -X POST -F file=@blacklevel.png http://{address}/api/image/processing/blacklevel/file/transfer'
  params:
    - name: file
      type: string
      description: Path to PNG black level mask (8 or 16-bit grayscale).
    - name: address
      type: string
      description: Projector IP address.

- id: select_blacklevel_file
  label: Select Black Level File
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blacklevel.file.selected", "value": "{filename}" }, "id": 15}'
  params:
    - name: filename
      type: string
      description: Black level mask filename (e.g. "blacklevel.png").

- id: enable_blacklevel_file
  label: Enable Black Level File
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blacklevel.file.enable", "value": true }, "id": 16}'
  params: []

- id: get_environment_controlblocks
  label: Get Environment Control Blocks
  kind: query
  command: '{"jsonrpc": "2.0", "method": "environment.getcontrolblocks", "params": { "type": "{type}", "valuetype": "{valuetype}" }, "id": 18}'
  params:
    - name: type
      type: string
      description: One of Sensor, Filter, Controller, Actuator, Alarm, GenericBlock.
    - name: valuetype
      type: string
      description: One of 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: get_alarm_info
  label: Get Alarm Info
  kind: query
  command: '{"jsonrpc": "2.0", "method": "environment.getalarminfo"}'
  params: []

- id: list_firmware_components
  label: List Firmware Components
  kind: query
  command: '{"jsonrpc": "2.0", "method": "firmware.listcomponents"}'
  params: []

- id: list_firmware_version_status
  label: List Firmware Component Version Status
  kind: query
  command: '{"jsonrpc": "2.0", "method": "firmware.listcomponentversionstatus"}'
  params: []

- id: schedule_firmware_upgrade
  label: Schedule Firmware Component Upgrade
  kind: action
  command: '{"jsonrpc": "2.0", "method": "firmware.schedulecomponentupgrade"}'
  params: []

- id: engage_clo
  label: Engage CLO at Current Light Level
  kind: action
  command: '{"jsonrpc": "2.0", "method": "illumination.clo.engage"}'
  params: []

- id: get_laser_serial_number
  label: Get Laser Serial Number
  kind: query
  command: '{"jsonrpc": "2.0", "method": "illumination.laser.getserialnumber"}'
  params: []

- id: color_p7_copy_preset_to_custom
  label: Color P7 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: Source preset name.

- id: color_p7_reset_preset
  label: Color P7 Reset Preset
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resetpreset", "params": { "presetname": "{presetname}" }}'
  params:
    - name: presetname
      type: string
      description: Preset to reset.

- id: color_p7_reset_to_native
  label: Color P7 Reset to Native
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resettonative"}'
  params: []

- id: rgb_mode_next
  label: Cycle to Next RGB Mode
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.rgbmode.nextrgbmode"}'
  params: []

- id: dmx_list_channels
  label: List DMX Channels
  kind: query
  command: '{"jsonrpc": "2.0", "method": "dmx.listchannels"}'
  params: []

- id: dmx_list_modes
  label: List DMX Modes
  kind: query
  command: '{"jsonrpc": "2.0", "method": "dmx.listmodes"}'
  params: []

- id: serial_wake_from_eco
  label: Wake from ECO via Serial
  kind: action
  command: ":POWR1\r"
  params: []
  notes: "Plain ASCII bytes sent to the RS-232 port per source. Not JSON-RPC."

Feedbacks

- id: system_state
  type: enum
  values: [boot, eco, standby, ready, conditioning, on, deconditioning, service, error]
  property: system.state

- id: illumination_state
  type: enum
  values: [On, Off]
  property: illumination.state

- id: image_window_main_source
  type: string
  property: image.window.main.source

- id: image_window_main_scalingmode
  type: enum
  values: [Fill, OneToOne, FillScreen, Stretch]
  property: image.window.main.scalingmode

- id: image_orientation
  type: enum
  values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
  property: image.orientation

- id: illumination_sources_laser_power
  type: float
  property: illumination.sources.laser.power
  description: Target power in percent.

- id: illumination_sources_laser_minpower
  type: float
  property: illumination.sources.laser.minpower
  description: Minimum power in percent.

- id: illumination_sources_laser_maxpower
  type: float
  property: illumination.sources.laser.maxpower
  description: Maximum power in percent.

- id: image_brightness
  type: float
  property: image.brightness
  description: Normalized. 0 default, 1 = 100% offset. Range [-1, 1].

- id: image_contrast
  type: float
  property: image.contrast
  description: Normalized. 1 is default. Range [0, 2].

- id: image_gamma
  type: float
  property: image.gamma
  description: Default 2.2. Range [1, 3].

- id: image_saturation
  type: float
  property: image.saturation
  description: Normalized. 1 default. Range [0, 2].

- id: image_sharpness
  type: integer
  property: image.sharpness
  description: Range [-2, 8].

- id: optics_shutter_position
  type: enum
  values: [Open, Closed]
  property: optics.shutter.position

- id: optics_shutter_target
  type: enum
  values: [Open, Closed]
  property: optics.shutter.target

- id: optics_zoom_position
  type: integer
  property: optics.zoom.position

- id: optics_focus_position
  type: integer
  property: optics.focus.position

- id: optics_lensshift_horizontal_position
  type: integer
  property: optics.lensshift.horizontal.position

- id: optics_lensshift_vertical_position
  type: integer
  property: optics.lensshift.vertical.position

- id: system_standby_enable
  type: boolean
  property: system.standby.enable

- id: system_eco_enable
  type: boolean
  property: system.eco.enable

- id: environment_alarmstate
  type: enum
  values: [Fatal, Error, Alert, Warning, Ok]
  property: environment.alarmstate

- id: network_device_lan_state
  type: enum
  values: [CONNECTED, DISCONNECTED]
  property: network.device.lan.state

- id: dmx_mode
  type: string
  property: dmx.mode

- id: dmx_startchannel
  type: integer
  property: dmx.startchannel
  description: Range [1, 512].

- id: dmx_shutdown
  type: boolean
  property: dmx.shutdown

Variables

# Image geometry and window placement (image.window.main.*)
- id: image_window_main_position
  property: image.window.main.position
  type: object
  fields:
    - name: x
      type: integer
    - name: y
      type: integer

- id: image_window_main_size
  property: image.window.main.size
  type: object
  fields:
    - name: width
      type: integer
    - name: height
      type: integer

# Network configuration (network.device.lan.ip4config)
- id: network_device_lan_ip4config
  property: network.device.lan.ip4config
  type: object
  fields:
    - name: Address
      type: string
    - name: Mask
      type: string
    - name: Gateway
      type: string
    - name: NameServers
      type: string

Events

# Client-implemented notifications the server delivers (no request id, no response).
- id: property_changed
  description: Server pushes an array of property/value pairs when subscribed properties change.
  payload_example: '{"jsonrpc": "2.0", "method": "property.changed", "params": { "property": [ { "system.state": "ready" } ] }}'

- id: signal_callback
  description: Server sends an array of signal/argument-list pairs when subscribed signals fire.
  payload_example: '{"jsonrpc": "2.0", "method": "signal.callback", "params": { "signal": [ { "objectname.signalname": { "arg1": 100, "arg2": "cat" } } ] }}'

- id: introspect_objectchanged
  description: Emitted via modelupdated signal when objects are added or removed.
  args:
    - name: object
      type: string
    - name: isnew
      type: boolean

Macros

# UNRESOLVED: source documents no explicit multi-step macro sequences.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no explicit safety warnings or interlock procedures.
# Power sequencing guidance: source recommends verifying system.state is standby/ready
# before poweron and verifying state is on before poweroff; these are best-practice
# hints, not safety interlocks.

Notes

JSON-RPC 2.0 over TCP/9090 and RS-232 share the same call/response model; both transports are interchangeable per the source. Property and signal names use dot-notation, lowercase, JavaScript-like. Responses may include id matching the request; notifications omit id. Image parameters pass by name; params key order is irrelevant. File uploads/download use plain HTTP (curl) to /api/... endpoints independent of the JSON-RPC service. Parts of the API are dynamic; introspect at runtime to discover available objects, methods, properties, and signals. DMX exposes different channels depending on mode (basic: 2 channels; extended: more). The serial-only :POWR1\r wake command is the lone ASCII action outside the JSON-RPC envelope.

Provenance

source_domains:
  - audiogeneral.com
source_urls:
  - "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-08-12T18:21:54.207Z
last_checked_at: 2026-08-19T08:42:38.720Z

Verification Summary

verdict: verified
checked_at: 2026-08-19T08:42:38.720Z
matched_actions: 56
action_count: 56
confidence: medium
summary: "All 56 spec actions map to wire-level JSON-RPC methods, HTTP endpoints, or serial tokens documented verbatim in the source. (6 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "list any major gaps here"
- "source documents no explicit multi-step macro sequences."
- "source contains no explicit safety warnings or interlock procedures."
- "firmware version compatibility not stated in source."
- "error object schema and recovery sequences not stated in source."
- "explicit interlock procedures not stated in source."

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0