Summary
The Barco Flx N100 is a Pulse-series projector controlled via the Pulse JSON-RPC 2.0 API ("Pulse API"). The same command set is reachable over TCP/IP (port 9090) and RS-232 serial. This spec covers power control, source selection, illumination, image/picture settings, optics, warping/blending/black-level file management, environment monitoring, DMX, and firmware management.
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 # documented: JSON-RPC "authenticate" method with numeric secret passcode.
# Auth is OPTIONAL - only required to raise access level above normal end user.
# Credentials are device-specific; value not stated in source.
Traits
traits:
- powerable # inferred from system.poweron / system.poweroff commands
- queryable # inferred from property.get query commands and environment/signal queries
- routable # inferred from source-selection commands (image.window.main.source)
- levelable # inferred from brightness/contrast/gamma/laser-power level controls
Actions
# JSON-RPC 2.0 over TCP (port 9090) or RS-232. Each method = one action.
# "authenticate" is the auth handshake; the rest are control/query methods.
- id: authenticate
label: Authenticate
kind: action
command: '{"jsonrpc": "2.0", "method": "authenticate", "params": {"code": 98765}, "id": 1}'
params:
- name: code
type: integer
description: Secret access passcode (value shown 98765 is source example only)
notes: Optional for normal end-user access; required to raise access level.
- id: system_poweron
label: Power On
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweron"}'
params: []
notes: No-op if already on or transitioning. Verify system.state is standby/ready first.
- id: system_poweroff
label: Power Off
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweroff"}'
params: []
notes: No-op if already off or transitioning. Verify system.state is on first.
- id: property_set
label: Set Property
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "{property}", "value": {value}}, "id": {id}}'
params:
- name: property
type: string
description: Property path in dot notation (e.g. image.brightness)
- name: value
type: any
description: Value to set (type depends on property)
notes: Wait for confirmation before re-setting same property (avoids server flooding).
- id: property_get
label: Get Property
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "{property}"}, "id": {id}}'
params:
- name: property
type: string
description: Property path, or array of paths for multi-read
- id: property_subscribe
label: Subscribe To Property Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": {"property": "{property}"}, "id": {id}}'
params:
- name: property
type: string
description: Property path, or array of paths for multi-subscribe
- id: property_unsubscribe
label: Unsubscribe From Property Changes
kind: action
command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": {"property": "{property}"}, "id": {id}}'
params:
- name: property
type: string
description: Property path, or array of paths for multi-unsubscribe
- id: signal_subscribe
label: Subscribe To Signal
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": {"signal": "{signal}"}, "id": {id}}'
params:
- name: signal
type: string
description: Signal name, or array of names for multi-subscribe
- id: signal_unsubscribe
label: Unsubscribe From Signal
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": {"signal": "{signal}"}, "id": {id}}'
params:
- name: signal
type: string
description: Signal name, or array of names for multi-unsubscribe
- id: introspect
label: Introspect Object Metadata
kind: query
command: '{"jsonrpc": "2.0", "method": "introspect", "params": {"object": "{object}", "recursive": {recursive}}, "id": {id}}'
params:
- name: object
type: string
description: Object name to introspect (dot notation); empty = everything
- name: recursive
type: boolean
description: If false, only object names listed (one level). Default true.
- id: image_source_list
label: List Available Sources
kind: query
command: '{"jsonrpc": "2.0", "method": "image.source.list", "id": {id}}'
params: []
notes: Returns array of source name strings; contents vary by model.
- id: image_connector_list
label: List Connectors
kind: query
command: '{"jsonrpc": "2.0", "method": "image.connector.list", "id": {id}}'
params: []
notes: Returns array of physical connector name strings; varies by model.
- id: image_source_listconnectors
label: List Connectors For Source
kind: query
command: '{"jsonrpc": "2.0", "method": "image.source.{name}.listconnectors", "id": {id}}'
params:
- name: name
type: string
description: Source object name (source name lowercased, non-word chars removed, e.g. displayport1)
- id: ledctrl_blink
label: Blink LED
kind: action
command: '{"jsonrpc": "2.0", "method": "ledctrl.blink", "params": {"led": "{led}", "color": "{color}", "period": {period}}, "id": {id}}'
params:
- name: led
type: string
description: LED identifier (e.g. systemstatus)
- name: color
type: string
description: LED color (e.g. red)
- name: period
type: integer
description: Blink period
- id: environment_getcontrolblocks
label: Get Environment Sensor Data
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getcontrolblocks", "params": {"type": "{type}", "valuetype": "{valuetype}"}, "id": {id}}'
params:
- name: type
type: string
description: 'Sensor type enum: Sensor, Filter, Controller, Actuator, Alarm, GenericBlock'
- name: valuetype
type: string
description: 'Value type enum: 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 -> reading (e.g. temperatures, fan tachos).
- id: environment_getalarminfo
label: Get Alarm Info
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getalarminfo", "id": {id}}'
params: []
notes: Returns array of alarm records (severity, timestamp, source, description, custommessage).
- id: dmx_listchannels
label: List DMX Channels
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listchannels", "id": {id}}'
params: []
notes: Returns array of available channel names.
- id: dmx_listmodes
label: List DMX Modes
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listmodes", "id": {id}}'
params: []
notes: Returns array of all DMX modes.
- id: firmware_listcomponents
label: List Firmware Components
kind: query
command: '{"jsonrpc": "2.0", "method": "firmware.listcomponents", "id": {id}}'
params: []
notes: Returns array of managed firmware component names.
- id: firmware_listcomponentversionstatus
label: List Firmware Version Status
kind: query
command: '{"jsonrpc": "2.0", "method": "firmware.listcomponentversionstatus", "id": {id}}'
params: []
notes: 'Returns components with name, versions {available, running}, status enum (Unknown/OK/Upgradable).'
- id: firmware_schedulecomponentupgrade
label: Schedule Component Upgrade
kind: action
command: '{"jsonrpc": "2.0", "method": "firmware.schedulecomponentupgrade", "id": {id}}'
params: []
notes: Forces a component upgrade at next reboot.
- id: illumination_clo_engage
label: Engage CLO
kind: action
command: '{"jsonrpc": "2.0", "method": "illumination.clo.engage", "id": {id}}'
params: []
notes: Engages Constant Light Output at the current light level.
- id: illumination_laser_getserialnumber
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc": "2.0", "method": "illumination.laser.getserialnumber", "id": {id}}'
params: []
notes: Returns laser serial number string.
- id: image_color_p7_custom_copypresettocustom
label: Copy Color Preset To Custom
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.copypresettocustom", "params": {"presetname": "{presetname}"}, "id": {id}}'
params:
- name: presetname
type: string
description: Name of preset to copy
- id: image_color_p7_custom_resetpreset
label: Reset Color Preset
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resetpreset", "params": {"presetname": "{presetname}"}, "id": {id}}'
params:
- name: presetname
type: string
description: Name of preset to reset to defaults
- id: image_color_p7_custom_resettonative
label: Reset Color To Native
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resettonative", "id": {id}}'
params: []
- id: image_color_rgbmode_nextrgbmode
label: Next RGB Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.rgbmode.nextrgbmode", "id": {id}}'
params: []
notes: Cycles to the next RGB mode.
- id: eco_wake_serial
label: ECO Mode Wake (Serial)
kind: action
command: ':POWR1\r'
params: []
notes: ASCII serial-only command to wake projector from ECO/power-save mode. Alternative wake methods are Wake-on-LAN (MAC address) or physical power button.
Feedbacks
- id: system_state
type: enum
property: system.state
values: [boot, eco, standby, ready, conditioning, on, service, deconditioning, error]
- id: illumination_state
type: enum
property: illumination.state
values: ["On", "Off"]
- id: illumination_laser_minpower
type: number
property: illumination.sources.laser.minpower
unit: percent
notes: Read-only minimum laser power; dynamic, may change with lens/position.
- id: illumination_laser_maxpower
type: number
property: illumination.sources.laser.maxpower
unit: percent
notes: Read-only maximum laser power; dynamic.
- id: network_lan_state
type: enum
property: network.device.lan.state
values: [CONNECTED, DISCONNECTED]
- id: network_lan_ip4config
type: object
property: network.device.lan.ip4config
notes: IPv4 config {Address, Mask, Gateway, NameServers}.
- id: environment_alarmstate
type: enum
property: environment.alarmstate
values: [Fatal, Error, Alert, Warning, Ok]
- id: connector_detectedsignal
type: object
property: image.connector.{name}.detectedsignal
notes: >-
Signal info for a connector (object name = connector name lowercased, non-word
chars removed, e.g. displayport1). Contains active, name, resolutions, timings,
color_space, chroma_sampling, gamma_type, etc. Disregard fields when active is false.
Variables
- id: illumination_laser_power
property: illumination.sources.laser.power
type: number
access: read_write
unit: percent
min: 0 # UNRESOLVED: source example shows min 0 but actual min comes from minpower property (dynamic)
max: 100 # UNRESOLVED: source example shows max 100 but actual max comes from maxpower property (dynamic)
- id: image_window_main_source
property: image.window.main.source
type: string
access: read_write
notes: Source name string (e.g. DisplayPort 1, HDMI). Query image.source.list for valid values.
- id: image_window_main_position
property: image.window.main.position
type: object
access: read_write
fields: [{name: x, type: int}, {name: y, type: int}]
- id: image_window_main_size
property: image.window.main.size
type: object
access: read_write
fields: [{name: width, type: int}, {name: height, type: int}]
- id: image_window_main_scalingmode
property: image.window.main.scalingmode
type: enum
access: read_write
values: [Fill, OneToOne, FillScreen, Stretch]
- id: image_brightness
property: image.brightness
type: float
access: read_write
min: -1
max: 1
step_size: 1
precision: 0.01
- id: image_contrast
property: image.contrast
type: float
access: read_write
min: 0
max: 2
step_size: 1
precision: 0.01
- id: image_gamma
property: image.gamma
type: float
access: read_write
min: 1
max: 3
step_size: 1
precision: 0.1
default: 2.2
- id: image_saturation
property: image.saturation
type: float
access: read_write
min: 0
max: 2
step_size: 1
precision: 0.01
- id: image_sharpness
property: image.sharpness
type: int
access: read_write
min: -2
max: 8
step_size: 1
precision: 1
- id: image_orientation
property: image.orientation
type: enum
access: read_write
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: image_processing_warp_enable
property: image.processing.warp.enable
type: boolean
access: read_write
notes: Globally enable/disable all warp functions.
- id: image_processing_warp_file_enable
property: image.processing.warp.file.enable
type: boolean
access: read_write
notes: Enable/disable file warp.
- id: image_processing_warp_file_selected
property: image.processing.warp.file.selected
type: string
access: read_write
notes: Currently selected warp grid file.
- id: image_processing_blend_file_enable
property: image.processing.blend.file.enable
type: boolean
access: read_write
- id: image_processing_blend_file_selected
property: image.processing.blend.file.selected
type: array
items: string
access: read_write
notes: Currently selected blend files.
- id: image_processing_blacklevel_file_enable
property: image.processing.blacklevel.file.enable
type: boolean
access: read_write
- id: image_processing_blacklevel_file_selected
property: image.processing.blacklevel.file.selected
type: string
access: read_write
notes: Currently selected black level file.
- id: dmx_mode
property: dmx.mode
type: string
access: read_write
notes: Current DMX mode (basic = 2 channels; extended exposes more).
- id: dmx_startchannel
property: dmx.startchannel
type: int
access: read_write
min: 1
max: 512
- id: dmx_shutdown
property: dmx.shutdown
type: boolean
access: read_write
- id: optics_shutter_position
property: optics.shutter.position
type: enum
access: read_write
values: [Open, Closed]
- id: optics_shutter_target
property: optics.shutter.target
type: enum
access: read_write
values: [Open, Closed]
- id: optics_zoom_position
property: optics.zoom.position
type: int
access: read_write
notes: May be unavailable if lens lacks motorized zoom.
- id: optics_focus_position
property: optics.focus.position
type: int
access: read_write
- id: optics_lensshift_horizontal_position
property: optics.lensshift.horizontal.position
type: int
access: read_write
- id: optics_lensshift_vertical_position
property: optics.lensshift.vertical.position
type: int
access: read_write
- id: system_standby_enable
property: system.standby.enable
type: boolean
access: read_write
notes: Enable/disable standby state; check availability first.
- id: system_eco_enable
property: system.eco.enable
type: boolean
access: read_write
notes: Enable/disable ECO state; check availability first.
Events
- id: property_changed
method: property.changed
direction: server_to_client
description: Unsolicited notification when a subscribed property value changes. params.property is an array of {propertyName: value} objects.
payload_example: '{"jsonrpc": "2.0", "method": "property.changed", "params": {"property": [{"image.brightness": 0.15}]}}'
notes: Notifications have no id; client must NOT respond. Source-select emits two events (deselect then select).
- id: signal_callback
method: signal.callback
direction: server_to_client
description: Unsolicited notification when a subscribed signal is emitted. params.signal is an array of {signalName: {args}} objects.
payload_example: '{"jsonrpc": "2.0", "method": "signal.callback", "params": {"signal": [{"introspect.objectchanged": {"object": "motors.motor1", "newobject": true}}]}}'
- id: modelupdated_signal
method: modelupdated
direction: server_to_client
description: Signal triggered when object structure changes (objects added/removed). Subscribe via signal.subscribe.
Macros
# UNRESOLVED: no explicit multi-step named sequences documented in source.
# (Warping/blending/black-level workflows are described procedurally in prose,
# not as discrete named macros.)
Safety
confirmation_required_for: []
interlocks:
- field: power_on_precondition
value: "Best practice: verify system.state is standby or ready before issuing system.poweron (no-op otherwise)."
source: programmers guide, Power on section
- field: power_off_precondition
value: "Best practice: verify system.state is on before issuing system.poweroff (no-op otherwise)."
source: programmers guide, Power off section
# UNRESOLVED: no formal interlock/error-recovery sequences or power-on sequencing
# requirements stated in source. Power/voltage/current specs not stated.
Notes
- API model: Pulse JSON-RPC 2.0. Parameters are passed by name; order does not matter. Responses echo the request
id. Errors follow JSON-RPC 2.0 error object format. Methods with no meaningful return yieldresult: null(not an error). - Object naming: dot notation, lowercase (JavaScript-like). Objects with multiple instances are indexed (e.g.
tempctrl.fans.mainfan,illumination.sources.laser). - Name-to-object translation: source/connector object names are derived by removing all non-word characters and lowercasing (e.g. "DisplayPort 1" →
displayport1). - Dynamic API: the documented surface is not guaranteed complete for a given unit/configuration. Motorized zoom absent if lens lacks it; DMX extended mode exposes additional channels. Run
introspectfor the authoritative API of a specific device. - Notifications: subscribing to a property does NOT return its current value — use
property.getfor that. Notifications fire only on actual value change. - property.set pacing: wait for confirmation before re-setting the same property; continuous re-setting floods the server and degrades performance.
- ECO wake: Wake-from-ECO over serial uses ASCII
:POWR1\r; alternatives are Wake-on-LAN (MAC address) or physical power button. - File transfers (HTTP): warp grids, blend masks, and black-level masks are uploaded/downloaded over HTTP at
http://<projector-ip>/api/<endpoint>. Warp:/api/image/processing/warp/file/transfer; blend:/api/image/processing/blend/file/transfer; black level:/api/image/processing/blacklevel/file/transfer. Blend/black-level masks accept PNG (up to 16-bit), JPEG, TIFF; grayscale only (color images use blue channel). Mask resolution must match projector resolution tier (WUXGA/WQXGA/4K/4K Cinemascope). - Warp file format: same as MCM500/400.
## Provenance
```yaml
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-07-29T18:25:43.142Z
last_checked_at: 2026-08-05T08:01:35.910Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-08-05T08:01:35.910Z
matched_actions: 28
action_count: 28
confidence: medium
summary: "All 28 spec actions matched literal JSON-RPC method names or the :POWR1 serial token verbatim in the source; transport params (port 9090, baud 19200, 8N1, no flow control) also verbatim. (9 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "firmware version compatibility not stated in source. API surface is dynamic and varies by projector configuration/peripherals (e.g. lens, DMX mode); full API must be obtained via introspection on the specific unit."
- "source example shows min 0 but actual min comes from minpower property (dynamic)"
- "source example shows max 100 but actual max comes from maxpower property (dynamic)"
- "no explicit multi-step named sequences documented in source."
- "no formal interlock/error-recovery sequences or power-on sequencing"
- "firmware version compatibility not stated in source."
- "authentication passcode/credential format is device-specific and not disclosed in source (example code 98765 is illustrative only)."
- "laser power absolute min/max are dynamic (depend on lens/position); source shows illustrative 0/100 bounds."
- "no error-recovery sequences or power/voltage/current specifications stated in source."
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0