Summary
Barco Pulse-family projector controlled via a JSON-RPC 2.0 API ("Pulse API") over TCP/IP (port 9090) or RS-232 serial, with additional HTTP file endpoints under /api for uploading/downloading warp grids, blend masks, and black-level masks. Covers power, source selection, illumination (laser power, CLO), picture settings, warp/blend/black-level file workflows, optics, DMX, environment monitoring, and firmware methods.
Transport
protocols:
- tcp
- serial
- http
addressing:
port: 9090
base_url: "http://{projector-host}/api" # pattern from source; example given was http://192.168.1.100/api/...
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
# Source: authentication optional; only needed for access above normal end-user level.
type: passcode # JSON-RPC "authenticate" method with numeric "code" param
# UNRESOLVED: actual pass code value not stated in source (example "code": 98765 is illustrative only)
Traits
# inferred from power on/off commands present in source
- powerable
# inferred from property.get / list methods returning state
- queryable
# inferred from input source selection commands present in source
- routable
# inferred from brightness / laser power / picture setting controls present in source
- levelable
Actions
# kind: action
- id: power_on
label: Power On Projector
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweron"}'
params: []
notes: Best practice: verify system.state is standby or ready before issuing.
- id: power_off
label: Power Off Projector
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweroff"}'
params: []
notes: Best practice: verify system.state is on before issuing.
- id: eco_wake_serial
label: Wake From ECO Mode (serial only)
kind: action
command: ':POWR1\r'
params: []
notes: ASCII characters sent on RS232 serial port to wake projector in ECO mode. Alternatives: Wake-on-LAN with MAC address, remote/keypad power button.
- id: authenticate
label: Authenticate (elevated access)
kind: action
command: '{"jsonrpc": "2.0", "method": "authenticate", "params": {"code": {passcode}}, "id": 1}'
params:
- name: passcode
type: integer
description: Secret pass code; UNRESOLVED - value not stated in source
notes: Sets user access level. Skippable for normal end-user access.
- id: set_property
label: Set Property Value (generic)
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "{property}", "value": {value}}, "id": 3}'
params:
- name: property
type: string
description: Property path in dot notation (e.g. objectname.propertyname)
- name: value
type: any
description: Value to set (string/integer/float/boolean/array/object)
notes: Wait for confirmation before setting the same property again; flooding degrades performance.
- id: select_source
label: Select Input 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 from image.source.list; examples seen in source include "DVI 1", "DVI 2", "DisplayPort 1", "DisplayPort 2", "Dual DVI", "Dual DisplayPort", "Dual Head DVI", "Dual Head DisplayPort", "HDBaseT", "HDMI", "SDI". List varies by model.
- id: set_laser_power
label: Set Laser Power Level
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "illumination.sources.laser.power", "value": {value}}}'
params:
- name: value
type: float
description: Target power in percent; read illumination.sources.laser.minpower/maxpower for valid range
- id: set_brightness
label: Set Image Brightness
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.brightness", "value": {value}}}'
params:
- name: value
type: float
description: Normalized, -1 to 1, 0 is default, precision 0.01
- id: set_warp_enable
label: Enable/Disable All Warp Functions
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.warp.enable", "value": {value}}}'
params:
- name: value
type: boolean
- id: set_warp_file_selected
label: Select Warp Grid 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: Uploaded warp grid file name (e.g. warp.xml)
- id: set_warp_file_enable
label: Enable File Warp
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.warp.file.enable", "value": {value}}}'
params:
- name: value
type: boolean
- id: upload_warp_file
label: Upload Warp Grid File
kind: action
command: 'curl -F file=@warp.xml http://{host}/api/image/processing/warp/file/transfer'
params:
- name: host
type: string
description: Projector IP address (example in source: 192.168.1.100)
notes: HTTP multipart POST; -X POST implied by -F. Warp file format same as MCM500/400.
- id: set_blend_file_selected
label: Select Blend Mask File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blend.file.selected", "value": "{filename}"}}'
params:
- name: filename
type: string
description: Uploaded blend mask file name (e.g. mask.png)
- id: set_blend_file_enable
label: Enable Blend Mask
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blend.file.enable", "value": {value}}}'
params:
- name: value
type: boolean
- id: upload_blend_mask
label: Upload Blend Mask
kind: action
command: 'curl -F file=@mask.png http://{host}/api/image/processing/blend/file/transfer'
params:
- name: host
type: string
description: Projector IP address
notes: Grayscale 8/16-bit PNG/JPEG/TIFF; size must match blend layer resolution (WUXGA 1920x1200, WQXGA 1280x800, 4K 1280x800, 4K Cinemascope 1280x540). Color images accepted but only blue channel used.
- id: set_blacklevel_file_selected
label: Select Black Level Mask File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blacklevel.file.selected", "value": "{filename}"}}'
params:
- name: filename
type: string
description: Uploaded black level mask file name (e.g. blacklevel.png)
- id: set_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": {value}}}'
params:
- name: value
type: boolean
- id: upload_blacklevel_mask
label: Upload Black Level Mask
kind: action
command: 'curl -F file=@blacklevel.png http://{host}/api/image/processing/blacklevel/file/transfer'
params:
- name: host
type: string
description: Projector IP address
notes: Same format/size rules as blend masks.
- id: engage_clo
label: Engage CLO (Constant Light Output)
kind: action
command: '{"jsonrpc": "2.0", "method": "illumination.clo.engage"}'
params: []
notes: Engages CLO at the current light level.
- id: blink_led
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 (example in source: systemstatus)
- name: color
type: string
description: Color (example in source: red)
- name: period
type: integer
description: Blink period (example in source: 42)
- id: schedule_firmware_upgrade
label: Schedule Firmware Component Upgrade
kind: action
command: '{"jsonrpc": "2.0", "method": "firmware.schedulecomponentupgrade"}'
params: []
notes: Forces a component upgrade at next reboot. UNRESOLVED: source does not document its parameters.
- id: copy_preset_to_custom
label: Copy Color Preset To Custom
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.copypresettocustom", "params": {"presetname": "{presetname}"}}'
params:
- name: presetname
type: string
- id: reset_preset
label: Reset Color Preset To Defaults
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resetpreset", "params": {"presetname": "{presetname}"}}'
params:
- name: presetname
type: string
- id: reset_to_native
label: Reset Color To Native
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resettonative"}'
params: []
- id: next_rgb_mode
label: Cycle To Next RGB Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.rgbmode.nextrgbmode"}'
params: []
notes: Cycles through all possible RGB modes.
# kind: query
- id: get_property
label: Get Property Value
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "{property}"}, "id": 4}'
params:
- name: property
type: string
description: Property path in dot notation
- id: get_properties_multiple
label: Get Multiple Property Values
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": ["{property1}", "{property2}"]}, "id": 5}'
params:
- name: property
type: array
description: List of property paths; result is a name/value dictionary
- 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: 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: []
notes: Returns array of source names; contents vary by projector model.
- 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 derived from source name by removing non-word chars and lowercasing (e.g. "DisplayPort 1" -> "displayport1")
notes: Returns connector name and grid position (row/column/plane).
- id: get_detected_signal
label: Get Connector Detected Signal Info
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "image.connector.{connectorobject}.detectedsignal"}, "id": 5}'
params:
- name: connectorobject
type: string
description: Connector object name (e.g. displayport1)
notes: Returns active, name, resolutions, porches, sync widths, frequencies, pixel rate, scan, bits per component, color space/range, chroma sampling, gamma type.
- 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: get_laser_power
label: Get Laser Power Level
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "illumination.sources.laser.power"}, "id": 3}'
params: []
- id: get_laser_minpower
label: Get Laser Minimum Power
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "illumination.sources.laser.minpower"}, "id": 6}'
params: []
notes: Read-only but dynamic; lens type/position may affect it.
- id: get_laser_maxpower
label: Get Laser Maximum Power
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "illumination.sources.laser.maxpower"}, "id": 5}'
params: []
notes: Read-only but dynamic; lens type/position may affect it.
- id: get_brightness
label: Get Image Brightness
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "image.brightness"}, "id": 7}'
params: []
- id: subscribe_property
label: Subscribe To Property Changes
kind: query
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": {"property": "{property}"}, "id": 6}'
params:
- name: property
type: any
description: Single property path (string) or array of property paths
notes: Notifications only on change; does not return current value - use property.get for that.
- id: unsubscribe_property
label: Stop Property Subscription
kind: query
command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": {"property": "{property}"}, "id": 8}'
params:
- name: property
type: any
description: Single property path (string) or array of property paths
- id: subscribe_signal
label: Subscribe To Signal
kind: query
command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": {"signal": "{signal}"}, "id": 10}'
params:
- name: signal
type: any
description: Signal name (e.g. modelupdated, image.processing.warp.gridchanged) or array of names
- id: unsubscribe_signal
label: Unsubscribe From Signal
kind: query
command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": {"signal": "{signal}"}, "id": 12}'
params:
- name: signal
type: any
description: Signal name or array of names
- id: introspect
label: Introspect API Objects
kind: query
command: '{"jsonrpc": "2.0", "method": "introspect", "params": {"object": "{object}", "recursive": {recursive}}, "id": 1}'
params:
- name: object
type: string
description: Object name in dot notation; empty/default introspects everything
- name: recursive
type: boolean
description: Default true; false lists only object names one level deep
notes: Params may also be positional array, e.g. ["foo", true]. Result restricted by authenticated access level. modelupdated signal fires when object structure changes.
- id: get_environment_controlblocks
label: Get Environment Sensor Readings
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'
notes: Returns dictionary of sensor name -> float value (e.g. temperatures, fan tacho speeds).
- id: get_alarm_info
label: Get Alarm Info
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getalarminfo"}'
params: []
notes: Returns array of {severity, timestamp, source, description, custommessage}.
- id: dmx_list_channels
label: List DMX Channels
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listchannels"}'
params: []
notes: Returns list of available channel names; more channels exposed in extended DMX mode.
- id: dmx_list_modes
label: List DMX Modes
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listmodes"}'
params: []
notes: Returns list of all modes.
- id: firmware_list_components
label: List Firmware Components
kind: query
command: '{"jsonrpc": "2.0", "method": "firmware.listcomponents"}'
params: []
notes: Returns names of all managed firmware components.
- id: firmware_list_component_version_status
label: List Firmware Component Versions And Status
kind: query
command: '{"jsonrpc": "2.0", "method": "firmware.listcomponentversionstatus"}'
params: []
notes: Returns name, available version, running version, status enum (Unknown/OK/Upgradable).
- id: get_laser_serial_number
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc": "2.0", "method": "illumination.laser.getserialnumber"}'
params: []
notes: Returns string.
Feedbacks
- id: system_state
type: enum
values: [boot, eco, standby, ready, conditioning, on, service, deconditioning, error]
notes: Read via property.get "system.state"; changes via property.changed notification.
- id: illumination_state
type: enum
values: ["On", "Off"]
- id: laser_power
type: float
notes: Percent; read via "illumination.sources.laser.power".
- id: laser_minpower
type: float
notes: Read-only, dynamic.
- id: laser_maxpower
type: float
notes: Read-only, dynamic.
- id: active_source
type: string
notes: e.g. "DisplayPort 1".
- id: available_sources
type: array
notes: From image.source.list; varies by model (examples: DVI 1, DVI 2, DisplayPort 1, DisplayPort 2, Dual DVI, Dual DisplayPort, Dual Head DVI, Dual Head DisplayPort, HDBaseT, HDMI, SDI).
- id: available_connectors
type: array
notes: From image.connector.list (examples: DVI 1, DVI 2, DisplayPort 1, DisplayPort 2, HDBaseT, HDMI, SDI).
- id: detected_signal
type: object
notes: From image.connector.[name].detectedsignal; fields include active (bool), name, vertical/horizontal total/resolution/sync width/front porch/back porch, vertical/horizontal frequency, pixel rate, scan, bits_per_component, color_space, signal_range (0-255/16-235), chroma_sampling (4:4:4/4:2:2/4:2:0), gamma_type (POWER/sRGB/REC_BT1886/SMPTE_ST2084), color_primaries, mastering_luminance, content_aspect_ratio, is_stereo, stereo_mode (None/Sequential/FramePacked/TopBottom/SideBySide). Disregard all but active when active is false.
- id: environment_temperatures
type: object
notes: Dictionary from environment.getcontrolblocks type=Sensor valuetype=Temperature; e.g. environment.laser.board0.bank0.temperature, environment.temperature.inlet, environment.temperature.outlet, environment.temperature.mainboard.
- id: fan_speeds
type: object
notes: Dictionary from environment.getcontrolblocks type=Sensor valuetype=Speed; e.g. environment.fan.ar1.tacho ... environment.fan.psu.tacho.
- id: alarm_state
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
- id: network_lan_state
type: enum
values: [CONNECTED, DISCONNECTED]
- id: network_lan_ip4config
type: object
notes: Fields Address, Mask, Gateway, NameServers (strings).
- id: optics_shutter_position
type: enum
values: ["Open", "Closed"]
- id: optics_zoom_position
type: integer
- id: optics_focus_position
type: integer
- id: optics_lensshift_horizontal_position
type: integer
- id: optics_lensshift_vertical_position
type: integer
- id: image_brightness
type: float
notes: -1..1.
- id: dmx_mode
type: string
Variables
- id: image.window.main.source
type: string
description: Source displayed in main window
- id: image.window.main.position
type: object
description: "Window position {x: int, y: int}"
- id: image.window.main.size
type: object
description: "Window size {width: int, height: int}"
- id: image.window.main.scalingmode
type: enum
values: [Fill, OneToOne, FillScreen, Stretch]
- id: image.brightness
type: float
min: -1
max: 1
step_size: 1
precision: 0.01
description: Normalized brightness/offset; 0 default.
- id: image.contrast
type: float
min: 0
max: 2
step_size: 1
precision: 0.01
description: Normalized contrast/gain; 1 default.
- id: image.gamma
type: float
min: 1
max: 3
step_size: 1
precision: 0.1
description: Default 2.2.
- id: image.saturation
type: float
min: 0
max: 2
step_size: 1
precision: 0.01
description: Normalized; 1 default.
- id: image.sharpness
type: integer
min: -2
max: 8
step_size: 1
precision: 1
description: Normalized.
- id: image.orientation
type: enum
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: illumination.sources.laser.power
type: float
description: Target power in percent (RW); min/max dynamic - read minpower/maxpower.
- id: image.processing.warp.enable
type: boolean
description: Enable/disable all warp functions
- id: image.processing.warp.file.enable
type: boolean
description: Enable/disable file warp
- id: image.processing.warp.file.selected
type: string
description: Currently selected warp file
- id: image.processing.blend.file.enable
type: boolean
- id: image.processing.blend.file.selected
type: array
description: Currently selected blend files ([string])
- id: image.processing.blacklevel.file.enable
type: boolean
- id: image.processing.blacklevel.file.selected
type: string
- id: optics.shutter.target
type: enum
values: ["Open", "Closed"]
- id: dmx.mode
type: string
- id: dmx.startchannel
type: integer
min: 1
max: 512
- id: dmx.shutdown
type: boolean
- id: system.standby.enable
type: boolean
description: Enable/disable standby state; check availability first.
- id: system.eco.enable
type: boolean
description: Enable/disable ECO state; check availability first.
Events
- id: property.changed
description: Unsolicited JSON-RPC notification when a subscribed property value changes. No id; no response must be returned.
payload_example: '{"jsonrpc": "2.0", "method": "property.changed", "params": {"property": [{"objectname.propertyname": 100}, {"otherobject.otherproperty": "bar"}]}}'
notes: Source change delivers two notifications (deselect then select), e.g. image.window.main.source "" then "DisplayPort 2".
- id: signal.callback
description: Unsolicited notification when a subscribed signal is emitted. Receives array of signal/argument-list pairs.
payload_example: '{"jsonrpc": "2.0", "method": "signal.callback", "params": {"signal": [{"objectname.signalname": {"arg1": 100, "arg2": "cat"}}]}}'
- id: modelupdated
description: Introspection signal triggered when objects are added or removed. Subscribe via signal.subscribe; callback carries introspect.objectchanged args {object: string, newobject: bool}.
payload_example: '{"jsonrpc": "2.0", "method": "signal.callback", "params": {"signal": [{"introspect.objectchanged": {"object": "motors.motor1", "newobject": true}}]}}'
- id: image.processing.warp.gridchanged
description: Signal name listed in a multi-signal subscribe example; fires on warp grid changes.
Macros
- id: warp_grid_setup
steps:
- 'curl -F file=@warp.xml http://{host}/api/image/processing/warp/file/transfer'
- '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.warp.file.selected", "value": "warp.xml"}}'
- '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.warp.file.enable", "value": true}}'
- '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.warp.enable", "value": true}}'
- id: blend_mask_setup
steps:
- 'curl -F file=@mask.png http://{host}/api/image/processing/blend/file/transfer'
- '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blend.file.selected", "value": "mask.png"}}'
- '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blend.file.enable", "value": true}}'
- id: blacklevel_mask_setup
steps:
- 'curl -F file=@blacklevel.png http://{host}/api/image/processing/blacklevel/file/transfer'
- '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blacklevel.file.selected", "value": "blacklevel.png"}}'
- '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blacklevel.file.enable", "value": true}}'
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no explicit safety warnings or interlock procedures.
# Operational best practices (not safety interlocks) from source: verify state standby/ready before power on, verify on before power off.
Notes
- JSON-RPC 2.0 over TCP (port 9090) or RS-232 serial (19200 8N1, no flow control); same command set on all connection types.
- Serial cable: 9-pin female to host, 9-pin male to projector; pin 2-2, 3-3, 5-5.
- All parameters passed by name; order does not matter.
- Wait for property.set confirmation before setting same property again — flooding the server reduces performance.
- Methods may omit params; extra params are ignored. Methods like system.poweron return result null (not an error).
- Power on/off are no-ops if projector already in target state or transitioning.
- Subscriptions notify only on change; use property.get for current value.
- API is dynamic: parts depend on peripherals (e.g. motorized zoom lens) and modes (DMX basic = 2 channels; extended exposes more). Introspect to discover exact per-unit API.
- File endpoints also support download via browser/curl (
curl -O -J ...); some endpoints require specifying the file name in the URL. - Warp file format identical to MCM500/400.
- Blend/black-level masks: PNG (up to 16 bit), JPEG, TIFF; grayscale only — color images accepted but only blue channel used. Mask size must match layer resolution: WUXGA 1920x1200, WQXGA 1280x800, 4K 1280x800, 4K Cinemascope 1280x540.
- ECO mode wake: Wake-on-LAN (MAC address), remote/keypad power button, or serial
:POWR1\r.
Provenance
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-08-18T18:12:54.107Z
last_checked_at: 2026-08-19T08:55:57.648Z
Verification Summary
verdict: verified
checked_at: 2026-08-19T08:55:57.648Z
matched_actions: 50
action_count: 50
confidence: medium
summary: "All 50 spec actions map to wire-level commands documented in the source (27 JSON-RPC methods + 3 HTTP file endpoints + serial wake command); transport params verbatim. (7 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "source is the generic Pulse API command catalog; model-specific command availability varies (lens-dependent, DMX mode-dependent) — introspect at runtime."
- "actual pass code value not stated in source (example \"code\": 98765 is illustrative only)"
- "source does not document its parameters."
- "source contains no explicit safety warnings or interlock procedures."
- "authentication pass code value/format not stated (example 98765 illustrative only)."
- "firmware version compatibility not stated in source."
- "HTTP port for file endpoints not explicitly stated in source (example URLs use default http port 80)."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0