Summary
Barco Bifrost Tp09 I is a Pulse-platform projector controllable via JSON-RPC 2.0 over TCP/IP (port 9090) or RS-232 serial. The API exposes power control, source selection, illumination (laser power), image picture settings, warp/blend/black-level file management, lens optics, DMX, environment monitoring, and firmware management. File uploads/downloads for warp grids and blend/black-level masks use HTTP endpoints.
Transport
protocols:
- tcp
- serial
- http
addressing:
port: 9090
base_url: "http://{projector_ip}/api" # HTTP file endpoints; projector IP not fixed
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: passcode # source documents 'authenticate' method with secret code param; optional for normal end-user access
notes: Authentication is only required for access levels above normal end user. Normal end-user access can skip authentication.
Traits
traits:
- powerable # inferred from system.poweron / system.poweroff commands
- queryable # inferred from property.get query methods and list methods
- routable # inferred from source selection commands (image.window.main.source)
- levelable # inferred from brightness/contrast/gamma/saturation/laser power controls
Actions
actions:
# ── System power ──
- id: system_poweron
label: Power On
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweron"}'
params: []
- id: system_poweroff
label: Power Off
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweroff"}'
params: []
# ── Authentication ──
- id: authenticate
label: Authenticate
kind: action
command: '{"jsonrpc":"2.0","method":"authenticate","params":{"code":{code}}}'
params:
- name: code
type: integer
description: Secret pass code
# ── Property methods ──
- id: property_set
label: Set Property
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"{property}","value":{value}}}'
params:
- name: property
type: string
description: Property path in dot notation (e.g. image.brightness)
- name: value
type: any
description: Value to set
- id: property_get
label: Get Property
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"{property}"}}'
params:
- name: property
type: string
description: Property path in dot notation
- id: property_get_multiple
label: Get Multiple Properties
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":["{property1}","{property2}"]}}'
params:
- name: property
type: array
description: Array of property paths in dot notation
- id: property_subscribe
label: Subscribe to Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":"{property}"}}'
params:
- name: property
type: string
description: Property path or array of property paths
- id: property_unsubscribe
label: Unsubscribe from Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":"{property}"}}'
params:
- name: property
type: string
description: Property path or array of property paths
# ── Signal methods ──
- id: signal_subscribe
label: Subscribe to Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":"{signal}"}}'
params:
- name: signal
type: string
description: Signal name or array of signal names
- id: signal_unsubscribe
label: Unsubscribe from Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":"{signal}"}}'
params:
- name: signal
type: string
description: Signal name or array of signal names
# ── Introspection ──
- id: introspect
label: Introspect Object
kind: query
command: '{"jsonrpc":"2.0","method":"introspect","params":{"object":"{object}","recursive":{recursive}}}'
params:
- name: object
type: string
description: Object name to introspect in dot notation; empty string introspects everything
- name: recursive
type: boolean
description: If false, only object names are listed (one level). Default true.
# ── Image source / connector methods ──
- id: image_source_list
label: List Available Sources
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.list"}'
params: []
- id: image_connector_list
label: List Available Connectors
kind: query
command: '{"jsonrpc":"2.0","method":"image.connector.list"}'
params: []
- id: image_source_listconnectors
label: List Connectors for Source
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.{source}.listconnectors"}'
params:
- name: source
type: string
description: "Source object name - derived from source name by removing non-word chars and lowercasing (e.g. 'DisplayPort 1' → 'displayport1')"
# ── Environment methods ──
- id: environment_getcontrolblocks
label: Get Environment Control Blocks
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"{type}","valuetype":"{valuetype}"}}'
params:
- name: type
type: string
description: "Block type - Sensor, Filter, Controller, Actuator, Alarm, GenericBlock"
- name: valuetype
type: string
description: "Value type - Temperature, Speed, Voltage, Current, Power, PWM, Humidity, Pressure, etc."
- id: environment_getalarminfo
label: Get Alarm Info
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getalarminfo"}'
params: []
# ── DMX methods ──
- id: dmx_listchannels
label: List DMX Channels
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listchannels"}'
params: []
- id: dmx_listmodes
label: List DMX Modes
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listmodes"}'
params: []
# ── Firmware methods ──
- id: firmware_listcomponents
label: List Firmware Components
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponents"}'
params: []
- id: firmware_listcomponentversionstatus
label: List Firmware Version Status
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponentversionstatus"}'
params: []
- id: firmware_schedulecomponentupgrade
label: Schedule Component Upgrade
kind: action
command: '{"jsonrpc":"2.0","method":"firmware.schedulecomponentupgrade"}'
params: []
# ── Illumination methods ──
- id: illumination_clo_engage
label: Engage CLO (Constant Light Output)
kind: action
command: '{"jsonrpc":"2.0","method":"illumination.clo.engage"}'
params: []
- id: illumination_laser_getserialnumber
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc":"2.0","method":"illumination.laser.getserialnumber"}'
params: []
# ── Color management methods ──
- 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}"}}'
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}"}}'
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"}'
params: []
- id: image_color_rgbmode_nextrgbmode
label: Cycle to Next RGB Mode
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.rgbmode.nextrgbmode"}'
params: []
# ── LED control ──
- id: ledctrl_blink
label: LED Blink
kind: action
command: '{"jsonrpc":"2.0","method":"ledctrl.blink","params":{"led":"{led}","color":"{color}","period":{period}}}'
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
# ── Serial-only ECO wake ──
- id: eco_wake_serial
label: ECO Mode Wake via Serial
kind: action
command: ':POWR1\r'
params: []
notes: ASCII command sent over RS-232 serial port only. Used to wake projector from ECO/power-save mode.
# ── HTTP file transfer endpoints ──
- id: http_upload_warp_grid
label: Upload Warp Grid File
kind: action
command: 'POST http://{projector_ip}/api/image/processing/warp/file/transfer (multipart form: file=@warpgrid.xml)'
params:
- name: projector_ip
type: string
description: Projector IP address
- name: file
type: file
description: Warp grid XML file
- id: http_download_warp_grid
label: Download Warp Grid File
kind: query
command: 'GET http://{projector_ip}/api/image/processing/warp/file/transfer'
params:
- name: projector_ip
type: string
description: Projector IP address
- id: http_upload_blend_mask
label: Upload Blend Mask File
kind: action
command: 'POST http://{projector_ip}/api/image/processing/blend/file/transfer (multipart form: file=@mask.png)'
params:
- name: projector_ip
type: string
description: Projector IP address
- name: file
type: file
description: Blend mask image (PNG/JPEG/TIFF, grayscale)
- id: http_upload_blacklevel_mask
label: Upload Black Level Mask File
kind: action
command: 'POST http://{projector_ip}/api/image/processing/blacklevel/file/transfer (multipart form: file=@blacklevel.png)'
params:
- name: projector_ip
type: string
description: Projector IP address
- name: file
type: file
description: Black level mask image (PNG/JPEG/TIFF, grayscale)
Feedbacks
feedbacks:
- id: system_state
type: enum
values: [boot, eco, standby, ready, conditioning, on, service, deconditioning, error]
description: Current projector operation state. Query via property.get on 'system.state'.
- id: illumination_state
type: enum
values: [On, Off]
description: Light source on/off state. Query via property.get on 'illumination.state'.
- id: environment_alarmstate
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
description: Overall alarm state. Query via property.get on 'environment.alarmstate'.
- id: optics_shutter_position
type: enum
values: [Open, Closed]
description: Shutter position. Query via property.get on 'optics.shutter.position'.
- id: network_device_lan_state
type: enum
values: [CONNECTED, DISCONNECTED]
description: LAN device connection state.
- id: active_source
type: string
description: Currently active source name. Query via property.get on 'image.window.main.source'.
- id: detected_signal
type: object
description: Signal information for a connector. Query via property.get on 'image.connector.{name}.detectedsignal'. Contains active, name, resolution, timing, color info.
- id: illumination_laser_power
type: float
description: Current laser power level in percent.
- id: illumination_laser_minpower
type: float
description: Minimum laser power level in percent.
- id: illumination_laser_maxpower
type: float
description: Maximum laser power level in percent.
- id: environment_temperatures
type: object
description: Dictionary of temperature sensor readings. Query via environment.getcontrolblocks with type=Sensor, valuetype=Temperature.
- id: environment_fan_speeds
type: object
description: Dictionary of fan speed readings. Query via environment.getcontrolblocks with type=Sensor, valuetype=Speed.
- id: firmware_component_status
type: object
description: Firmware component versions and upgrade status. Query via firmware.listcomponentversionstatus.
- id: alarm_info
type: array
description: Detailed alarm information. Query via environment.getalarminfo.
Variables
variables:
- id: image_window_main_source
property: image.window.main.source
type: string
access: read_write
description: Source displayed in main window
# UNRESOLVED: exact source list varies by projector model - use image.source.list to enumerate
- id: image_brightness
property: image.brightness
type: float
access: read_write
min: -1
max: 1
step_size: 1
precision: 0.01
description: Image brightness/offset. 0 is default, 1 is 100% offset.
- id: image_contrast
property: image.contrast
type: float
access: read_write
min: 0
max: 2
step_size: 1
precision: 0.01
description: Image contrast/gain. 1 is default.
- id: image_gamma
property: image.gamma
type: float
access: read_write
min: 1
max: 3
step_size: 1
precision: 0.1
description: Image gamma. Default is 2.2.
- id: image_saturation
property: image.saturation
type: float
access: read_write
min: 0
max: 2
step_size: 1
precision: 0.01
description: Image color saturation. 1 is default.
- id: image_sharpness
property: image.sharpness
type: integer
access: read_write
min: -2
max: 8
step_size: 1
precision: 1
description: Image sharpness. Normalized.
- id: image_window_main_scalingmode
property: image.window.main.scalingmode
type: enum
values: [Fill, OneToOne, FillScreen, Stretch]
access: read_write
description: Scaling mode applied to source
- id: image_orientation
property: image.orientation
type: enum
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
access: read_write
description: Projection orientation
- id: illumination_sources_laser_power
property: illumination.sources.laser.power
type: float
access: read_write
description: Target laser power in percent
- id: image_processing_warp_enable
property: image.processing.warp.enable
type: boolean
access: read_write
description: Enable/disable all warp functions
- id: image_processing_warp_file_enable
property: image.processing.warp.file.enable
type: boolean
access: read_write
description: Enable/disable file warp
- id: image_processing_warp_file_selected
property: image.processing.warp.file.selected
type: string
access: read_write
description: Currently selected warp file
- id: image_processing_blend_file_enable
property: image.processing.blend.file.enable
type: boolean
access: read_write
description: Enable/disable file blend
- id: image_processing_blend_file_selected
property: image.processing.blend.file.selected
type: array
access: read_write
description: Currently selected blend files
- id: image_processing_blacklevel_file_enable
property: image.processing.blacklevel.file.enable
type: boolean
access: read_write
description: Enable/disable black level correction
- id: image_processing_blacklevel_file_selected
property: image.processing.blacklevel.file.selected
type: string
access: read_write
description: Currently selected black level file
- id: dmx_mode
property: dmx.mode
type: string
access: read_write
description: Current DMX mode
- id: dmx_startchannel
property: dmx.startchannel
type: integer
access: read_write
min: 1
max: 512
description: DMX start channel
- id: dmx_shutdown
property: dmx.shutdown
type: boolean
access: read_write
description: DMX shutdown enabled or not
- id: system_standby_enable
property: system.standby.enable
type: boolean
access: read_write
description: Enable/disable standby state availability
- id: system_eco_enable
property: system.eco.enable
type: boolean
access: read_write
description: Enable/disable ECO state availability
- id: optics_zoom_position
property: optics.zoom.position
type: integer
access: read_write
description: Current zoom position
# UNRESOLVED: min/max range not stated in source
- id: optics_focus_position
property: optics.focus.position
type: integer
access: read_write
description: Current focus position
# UNRESOLVED: min/max range not stated in source
- id: optics_lensshift_horizontal_position
property: optics.lensshift.horizontal.position
type: integer
access: read_write
description: Current horizontal lens shift position
# UNRESOLVED: min/max range not stated in source
- id: optics_lensshift_vertical_position
property: optics.lensshift.vertical.position
type: integer
access: read_write
description: Current vertical lens shift position
# UNRESOLVED: min/max range not stated in source
- id: optics_shutter_target
property: optics.shutter.target
type: enum
values: [Open, Closed]
access: read_write
description: Shutter target position
- id: image_window_main_position
property: image.window.main.position
type: object
access: read_write
description: Window position (x int, y int)
- id: image_window_main_size
property: image.window.main.size
type: object
access: read_write
description: Window size (width int, height int)
- id: network_device_lan_ip4config
property: network.device.lan.ip4config
type: object
access: read_only
description: IPv4 config (Address, Mask, Gateway, NameServers)
Events
events:
- id: property_changed
description: Unsolicited notification sent when a subscribed property value changes. No response required from client.
payload: '{"jsonrpc":"2.0","method":"property.changed","params":{"property":[{"{property}":{value}}]}}'
- id: signal_callback
description: Unsolicited notification sent when a subscribed signal is emitted. No response required from client.
payload: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"{signal}":{"arg1":{val}}}]}}
- id: modelupdated
description: Signal triggered when the object structure changes (objects added or removed). Subscribe via signal.subscribe.
Macros
macros: []
# UNRESOLVED: no explicit multi-step sequences documented as named macros in source
Safety
confirmation_required_for: []
interlocks:
- description: "Verify projector state is standby or ready before issuing system.poweron. If already on or transitioning, nothing happens."
- description: "Verify projector state is on before issuing system.poweroff. If already off or transitioning, nothing happens."
# UNRESOLVED: no explicit safety warnings, interlock procedures, or power-on sequencing requirements stated beyond good-practice state verification notes.
Notes
- All JSON-RPC parameters are passed by name; parameter order does not matter.
- Best practice: wait for
property.setconfirmation before setting the same property again. Continuous setting without confirmation may flood the server and reduce performance. - Source selection generates two
property.changednotifications: first when the previous source is deselected (empty string value), then when the new source is selected. - Subscribing to a property does NOT return the current value — use
property.getfor that. Notifications are only sent on actual value changes. - Source object names are derived from source names by removing all non-word characters and converting to lowercase (e.g. "DisplayPort 1" → "displayport1"). Same applies to connector object names.
- Parts of the API are dynamic and depend on projector configuration (lens type, peripherals, DMX mode). Use introspection to discover the exact API surface for a specific device.
- Warp file format is the same as MCM500/400.
- Blend/black-level masks: grayscale only (8 or 16 bit). Color images accepted but only the blue channel is used. Supported formats: PNG (up to 16 bit), JPEG, TIFF. Mask resolution depends on projector resolution (WUXGA: 1920×1200, WQXGA/4K: 1280×800, 4K Cinemascope: 1280×540).
- ECO mode wake requires either Wake-on-LAN (MAC address), remote/keypad power button, or the serial command
:POWR1\r. - The
ledctrl.blinkmethod is documented only as an example in the API guide but is a valid method invocation.
Provenance
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-07-14T08:18:24.287Z
last_checked_at: 2026-07-21T21:18:12.247Z
Verification Summary
verdict: verified
checked_at: 2026-07-21T21:18:12.247Z
matched_actions: 33
action_count: 33
confidence: medium
summary: "All 33 spec actions matched verbatim; transport parameters verified in source; source command catalogue fully represented. (11 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "firmware version compatibility not stated in source"
- "exact model variant configuration (lens, illumination type) affects available API surface"
- "exact source list varies by projector model - use image.source.list to enumerate"
- "min/max range not stated in source"
- "no explicit multi-step sequences documented as named macros in source"
- "no explicit safety warnings, interlock procedures, or power-on sequencing requirements stated beyond good-practice state verification notes."
- "exact source/connector list varies by projector model — must be queried at runtime via image.source.list"
- "optics position ranges (zoom/focus/lensshift) not stated in source"
- "DMX mode names and extended channel counts not fully enumerated in source"
- "warp grid file format details beyond \"same as MCM500/400\" not provided"
- "authentication pass code value is example only (98765) — actual code is device-specific"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0