Summary
Brompton Tessera LED processors support remote query and control via a RESTful, filesystem-like IP API over HTTP (port 80) and TCP/Telnet (port 23). The API provides read/write access to input selection, output brightness/colour, genlock, ShutterSync, hidden markers, test patterns, presets, processing (3D LUT, colour correct, colour replace, curves), and system monitoring. API software version documented: 3.5.2.
Transport
protocols:
- http
- tcp
addressing:
base_url: "http://{processor-ip}/api/"
port: null # UNRESOLVED: HTTP uses port 80 (stated) and TCP uses port 23 (stated) - two different ports
auth:
type: none # inferred: no auth procedure described for general API access; password only mentioned for reboot/shutdown
Traits
- powerable # inferred: system/actions/reboot and system/actions/shutdown
- queryable # inferred: extensive read endpoints for system state, input metadata, device statistics
- levelable # inferred: brightness (0-10000 Nits), colour temperature, gamma, gains, proc-amp controls
- routable # inferred: input/active/source/port-type and port-number select between DVI/HDMI/SDI
Actions
- id: system_reboot
label: System Reboot
kind: action
description: "Triggers processor reboot. If processor password is set, send password in body; otherwise send blank string."
command:
http:
method: PUT
path: "system/actions/reboot"
tcp:
method: set
path: "system/actions/reboot"
params:
- name: password
type: string
description: "Password if set, otherwise blank string"
- id: system_shutdown
label: System Shutdown
kind: action
description: "Triggers processor shutdown. If processor password is set, send password in body; otherwise send blank string."
command:
http:
method: PUT
path: "system/actions/shutdown"
tcp:
method: set
path: "system/actions/shutdown"
params:
- name: password
type: string
description: "Password if set, otherwise blank string"
- id: blackout_enable
label: Blackout Enable
kind: action
command:
http:
method: PUT
path: "override/blackout/enabled"
tcp:
method: set
path: "override/blackout/enabled"
params:
- name: enabled
type: boolean
description: "true to enable blackout"
- id: freeze_enable
label: Freeze Enable
kind: action
command:
http:
method: PUT
path: "override/freeze/enabled"
tcp:
method: set
path: "override/freeze/enabled"
params:
- name: enabled
type: boolean
- id: test_pattern_enable
label: Test Pattern Enable
kind: action
command:
http:
method: PUT
path: "override/test-pattern/enabled"
tcp:
method: set
path: "override/test-pattern/enabled"
params:
- name: enabled
type: boolean
- id: test_pattern_set_type
label: Set Test Pattern Type
kind: action
command:
http:
method: PUT
path: "override/test-pattern/type"
tcp:
method: set
path: "override/test-pattern/type"
params:
- name: type
type: enum
description: "Test pattern name or frame store user number (1-50)"
values:
- brompton
- red
- green
- blue
- cyan
- magenta
- yellow
- white
- black
- grid
- scrolling-grid
- checkerboard
- scrolling-checkerboard
- colour-bars
- scrolling-colour-bars
- gradient
- scrolling-gradient
- strobe
- smpte-bars
- scrolling-smpte-bars
- custom-colour
- custom
- forty-five-degree-grid
- scrolling-forty-five-degree-grid
- custom-gradient
- scrolling-custom-gradient
- id: capture_frame
label: Capture Frame to Frame Store
kind: action
command:
http:
method: PUT
path: "override/test-pattern/frame-store/capture-frame"
params:
- name: user_number
type: integer
description: "Frame store slot (1-50). Overwrites existing frame at this number."
min: 1
max: 50
- id: delete_frame
label: Delete Frame Store Frame
kind: action
command:
http:
method: PUT
path: "override/test-pattern/frame-store/delete-frame"
params:
- name: user_number
type: integer
description: "Frame store slot to delete (1-50)"
min: 1
max: 50
- id: preset_activate
label: Activate Preset
kind: action
command:
http:
method: PUT
path: "presets/active/number"
tcp:
method: set
path: "presets/active/number"
params:
- name: number
type: integer
description: "Preset number to activate (1-128)"
min: 1
max: 128
- id: request_failover
label: Request Failover
kind: action
description: "Send an empty string to activate processor redundancy."
command:
http:
method: PUT
path: "output/network/failover/actions/request-failover"
params:
- name: trigger
type: string
description: "Send empty string"
- id: enable_failover
label: Enable Failover Mode
kind: action
command:
http:
method: PUT
path: "output/network/failover/settings/enabled"
params:
- name: enabled
type: boolean
- id: enable_3d_lut
label: Enable 3D LUT
kind: action
command:
http:
method: PUT
path: "processing/3d-lut/enabled"
params:
- name: enabled
type: boolean
- id: enable_colour_correct
label: Enable 14-Way Colour Correct
kind: action
command:
http:
method: PUT
path: "processing/colour-correct/enabled"
params:
- name: enabled
type: boolean
- id: enable_colour_replace
label: Enable Colour Replace
kind: action
command:
http:
method: PUT
path: "processing/colour-replace/enabled"
params:
- name: enabled
type: boolean
- id: enable_curves
label: Enable Colour Curves
kind: action
command:
http:
method: PUT
path: "processing/curves/enabled"
params:
- name: enabled
type: boolean
- id: enable_scaler
label: Enable Scaler
kind: action
command:
http:
method: PUT
path: "processing/scaler/enabled"
params:
- name: enabled
type: boolean
- id: enable_dark_magic
label: Enable Dark Magic
kind: action
command:
http:
method: PUT
path: "output/global-colour/dark-magic/enabled"
params:
- name: enabled
type: boolean
- id: enable_overdrive
label: Enable Brightness Overdrive
kind: action
command:
http:
method: PUT
path: "output/global-colour/overdrive/enabled"
params:
- name: enabled
type: boolean
- id: enable_puretone
label: Enable PureTone
kind: action
command:
http:
method: PUT
path: "output/global-colour/puretone/enabled"
params:
- name: enabled
type: boolean
- id: enable_extended_bit_depth
label: Enable Extended Bit Depth
kind: action
command:
http:
method: PUT
path: "output/global-colour/extended-bit-depth/enabled"
params:
- name: enabled
type: boolean
- id: enable_hidden_markers
label: Enable Hidden Markers
kind: action
command:
http:
method: PUT
path: "output/network/hidden-markers/enabled"
params:
- name: enabled
type: boolean
- id: enable_frame_remapping
label: Enable Frame Remapping
kind: action
command:
http:
method: PUT
path: "output/network/frame-remapping/enabled"
params:
- name: enabled
type: boolean
- id: enable_osca_module_correction
label: Enable OSCA Module Correction
kind: action
command:
http:
method: PUT
path: "processing/osca/module-correction-enabled"
params:
- name: enabled
type: boolean
- id: enable_osca_seam_correction
label: Enable OSCA Seam Correction
kind: action
command:
http:
method: PUT
path: "processing/osca/seam-correction-enabled"
params:
- name: enabled
type: boolean
Feedbacks
- id: processor_type
type: enum
values: [m2, s4, s8, t1, t8, sx40]
path: "system/processor-type"
- id: processor_name
type: string
path: "system/processor-name"
- id: serial_number
type: string
path: "system/serial-number"
- id: software_version
type: string
description: "Current version in x.y.z format"
path: "system/software-version"
- id: uptime
type: string
description: "Time since boot in DDd HHh MMm SSs format"
path: "system/uptime"
- id: current_date_time
type: string
description: "Processor date/time in yyyy-MM-dd hh:mm:ss 24h format"
path: "system/current-date-time"
- id: project_name
type: string
path: "project/name"
- id: active_preset_name
type: string
path: "presets/active/name"
- id: preset_status
type: boolean
description: "Activation status of a specific preset"
path: "presets/items/{number}/status"
- id: associated_device_count
type: integer
description: "Number of devices currently controlled by the processor"
range: "0-2200"
path: "devices/statistics/associated-count"
- id: error_device_count
type: integer
description: "Number of online devices reporting an error state"
range: "0-2048"
path: "devices/statistics/error-count"
- id: online_device_count
type: integer
description: "Number of online devices detected"
range: "0-2048"
path: "devices/statistics/online-count"
- id: device_firmware
type: string
path: "devices/items/{serial}/firmware"
- id: device_type
type: string
path: "devices/items/{serial}/type"
- id: input_port_type
type: enum
values: [dvi, hdmi, sdi]
path: "input/active/source/port-type"
- id: input_port_number
type: integer
range: "1-2"
path: "input/active/source/port-number"
- id: input_refresh_rate
type: float
description: "Input refresh rate in Hz (per-port, per-type)"
range: "24-250"
path: "input/ports/{type}/{port-number}/meta-data/refresh-rate"
- id: input_resolution_height
type: integer
range: "32-4095"
path: "input/ports/{type}/{port-number}/meta-data/resolution/height"
- id: input_resolution_width
type: integer
range: "32-4096"
path: "input/ports/{type}/{port-number}/meta-data/resolution/width"
- id: hdmi_input_bit_depth
type: integer
range: "8-12"
path: "input/ports/hdmi/{port-number}/meta-data/bit-depth"
- id: hdmi_input_hdr_format
type: enum
values: [standard-dynamic-range, perceptual-quantiser, hybrid-log-gamma]
path: "input/ports/hdmi/{port-number}/meta-data/hdr/format"
- id: hdmi_input_sampling
type: enum
values: [rgb, ycbcr422, ycbcr444, ycbcr420]
path: "input/ports/hdmi/{port-number}/meta-data/sampling"
- id: output_brightness
type: integer
description: "Write -1 to reset to calculated common maximum. Units: Nits."
range: "-1 to 10000"
path: "output/global-colour/brightness"
- id: brightness_limit_enabled
type: boolean
path: "output/global-colour/brightness-limit/enabled"
- id: brightness_limit_value
type: integer
description: "Units: Nits"
range: "0-10000"
path: "output/global-colour/brightness-limit/value"
- id: cable_loop_state
type: string
description: "Format: <state> -> <trunk><port>. States: loopfound, no-loop-found, incorrect-loop-found, one-to-many-error"
path: "output/network/cable-redundancy/loops/{loop-number}/state"
- id: failover_is_active
type: boolean
path: "output/network/failover/state/is-active"
- id: failover_partner_present
type: boolean
path: "output/network/failover/state/is-partner-present"
- id: failover_partner_name
type: string
path: "output/network/failover/state/partner-name"
- id: failover_partner_serial
type: string
path: "output/network/failover/state/partner-serial"
- id: failover_role
type: enum
values: [primary, backup]
path: "output/network/failover/settings/role"
- id: temperature_ambient
type: float
description: "Celsius. Supported by SX40, S8."
range: "0-200"
path: "system/temperature/ambient"
- id: temperature_cpu
type: float
description: "Celsius. Supported by SX40, S8."
range: "0-200"
path: "system/temperature/cpu"
- id: temperature_fpga
type: float
description: "Celsius. Supported by SX40, S8, M2."
range: "0-200"
path: "system/temperature/fpga"
- id: fan_speed_case_one
type: float
description: "RPM"
range: "0-5000"
path: "system/fan/case/one/speed"
- id: fan_status_case_one
type: boolean
path: "system/fan/case/one/status"
- id: fan_speed_case_two
type: float
description: "RPM"
range: "0-5000"
path: "system/fan/case/two/speed"
- id: fan_status_case_two
type: boolean
path: "system/fan/case/two/status"
- id: fan_speed_fpga
type: float
description: "RPM. Supported only on SX40, S8."
range: "0-5000"
path: "system/fan/fpga/speed"
- id: fan_status_fpga
type: boolean
description: "Supported only on SX40, S8."
path: "system/fan/fpga/status"
Variables
- id: output_colour_temperature
path: "output/global-colour/colour-temperature"
type: integer
units: Kelvin
range: [2000, 11000]
- id: output_gamma
path: "output/global-colour/gamma"
type: float
range: [0.2, 4.0]
decimal_places: 2
- id: output_gain_blue
path: "output/global-colour/gains/blue"
type: float
units: Percentage
range: [0, 100]
decimal_places: 2
- id: output_gain_green
path: "output/global-colour/gains/green"
type: float
units: Percentage
range: [0, 100]
decimal_places: 2
- id: output_gain_intensity
path: "output/global-colour/gains/intensity"
type: float
units: Percentage
range: [0, 100]
decimal_places: 2
- id: output_gain_red
path: "output/global-colour/gains/red"
type: float
units: Percentage
range: [0, 100]
decimal_places: 2
- id: output_bit_depth
path: "output/network/bit-depth"
type: integer
units: Bits
range: [8, 12]
- id: output_frame_rate_multiplier
path: "output/network/frame-rate-multiplier"
type: integer
range: [1, 10]
description: "Set to 1 to disable frame rate multiplication"
- id: blackout_fade_time
path: "override/blackout/fade-time"
type: float
units: Seconds
range: [0.0, 10.0]
decimal_places: 1
- id: test_pattern_custom_colour_red
path: "override/test-pattern/custom-colour/red"
type: integer
range: [0, 4095]
- id: test_pattern_custom_colour_green
path: "override/test-pattern/custom-colour/green"
type: integer
range: [0, 4095]
- id: test_pattern_custom_colour_blue
path: "override/test-pattern/custom-colour/blue"
type: integer
range: [0, 4095]
- id: group_brightness
path: "groups/items/{number}/brightness"
type: integer
units: Nits
range: [0, 10000]
- id: group_colour_temperature
path: "groups/items/{number}/colour-temperature"
type: integer
units: Kelvin
range: [2000, 11000]
- id: group_gamma
path: "groups/items/{number}/gamma"
type: float
range: [0.2, 4.0]
decimal_places: 2
- id: group_gain_blue
path: "groups/items/{number}/gains/blue"
type: float
units: Percentage
range: [0, 100]
decimal_places: 2
- id: group_gain_green
path: "groups/items/{number}/gains/green"
type: float
units: Percentage
range: [0, 100]
decimal_places: 2
- id: group_gain_intensity
path: "groups/items/{number}/gains/intensity"
type: float
units: Percentage
range: [0, 100]
decimal_places: 2
- id: group_gain_red
path: "groups/items/{number}/gains/red"
type: float
units: Percentage
range: [0, 100]
decimal_places: 2
- id: group_name
path: "groups/items/{number}/name"
type: string
- id: genlock_source
path: "output/network/genlock/source"
type: enum
values: [internal, sdi, sdi-a, sdi-b, hdmi, dvi, ref-in, active-input]
- id: genlock_internal_rate
path: "output/network/genlock/internal-rate"
type: float
units: Hertz
range: [23.5, 251.0]
decimal_places: 4
- id: genlock_phase_offset_mode
path: "output/network/genlock/phase-offset/mode"
type: enum
values: [none, angle, fraction, absolute]
- id: genlock_phase_offset_angle
path: "output/network/genlock/phase-offset/angle"
type: float
units: Degrees
range: [-360, 360]
decimal_places: 6
- id: genlock_phase_offset_fraction
path: "output/network/genlock/phase-offset/fraction"
type: float
units: Percentage
range: [-100, 100]
decimal_places: 5
- id: shuttersync_mode
path: "output/network/shuttersync/mode"
type: enum
values: [none, speed, angle]
- id: shuttersync_shutter_angle
path: "output/network/shuttersync/angle-settings/shutter-angle"
type: float
units: Degrees
range: [1, 360]
decimal_places: 3
- id: shuttersync_shutter_speed
path: "output/network/shuttersync/speed-settings/shutter-speed"
type: float
range: [10, 250]
decimal_places: 3
- id: shuttersync_dark_time
path: "output/network/shuttersync/dark-time"
type: float
units: Milliseconds
range: [0, 100]
decimal_places: 3
- id: shuttersync_sensor_type
path: "output/network/shuttersync/sensor-type"
type: enum
values: [any, global-shutter, rolling-shutter]
- id: shuttersync_viewer
path: "output/network/shuttersync/viewer"
type: enum
values: [eye, camera]
- id: lut_3d_strength
path: "processing/3d-lut/strength"
type: float
units: Percentage
range: [0.0, 100.0]
decimal_places: 1
- id: colour_space_input
path: "input/ports/{type}/{port-number}/controls/colour-space/colour"
type: enum
values: [rec-2020, dci-p3, rec-709, aces-cg, custom]
description: "Applies to DVI, HDMI, and SDI input ports"
- id: colour_space_output_mode
path: "output/dynacal/{panel-type}/mode"
type: enum
values: [match-input, achievable, custom]
- id: input_colour_format_hdmi
path: "input/ports/hdmi/{port-number}/controls/hdmi-colour-format"
type: enum
values: [from-input, rgb, ycbcr]
- id: input_hdr_format_hdmi
path: "input/ports/hdmi/{port-number}/controls/hdr/format"
type: enum
values: [from-input, standard-dynamic-range, perceptual-quantiser, hybrid-log-gamma]
- id: input_hdr_format_sdi
path: "input/ports/sdi/{port-number}/controls/hdr/format"
type: enum
values: [from-input, standard-dynamic-range, perceptual-quantiser, hybrid-log-gamma]
- id: proc_amp_black_level
path: "input/ports/{type}/{port-number}/proc-amp/black-level"
type: integer
units: Percentage
range: [0, 200]
description: "100% is passthrough. Applies to DVI, HDMI, SDI."
- id: proc_amp_contrast
path: "input/ports/{type}/{port-number}/proc-amp/contrast"
type: integer
units: Percentage
range: [0, 200]
description: "100% is passthrough"
- id: proc_amp_hue
path: "input/ports/{type}/{port-number}/proc-amp/hue"
type: integer
units: Degrees
range: [-180, 180]
description: "0° is passthrough"
- id: proc_amp_saturation
path: "input/ports/{type}/{port-number}/proc-amp/saturation"
type: integer
units: Percentage
range: [0, 200]
description: "100% is passthrough"
- id: failover_on_button_press
path: "output/network/failover/settings/modes/on-button-press"
type: boolean
- id: failover_on_partner_fail
path: "output/network/failover/settings/modes/on-partner-fail"
type: boolean
- id: failover_on_partner_video_fail
path: "output/network/failover/settings/modes/on-partner-video-fail"
type: boolean
- id: failover_prefer_primary
path: "output/network/failover/settings/modes/prefer-primary"
type: boolean
- id: hidden_markers_mode
path: "output/network/hidden-markers/mode"
type: enum
values: [none, redspy, startracker, custom]
- id: hidden_markers_background_gain
path: "output/network/hidden-markers/background-gain"
type: integer
units: Percentage
range: [0, 100]
- id: frame_remapping_mode
path: "output/network/frame-remapping/frames/{frame}/mode"
type: enum
values: [colour, video]
- id: test_pattern_format
path: "override/test-pattern/format"
type: enum
values: [from-input, standard-dynamic-range, perceptual-quantiser, hybrid-log-gamma]
- id: colour_replace_method
path: "processing/colour-replace/method"
type: enum
values: [set-to-colour, transform-to-colour]
- id: colour_replace_strength
path: "processing/colour-replace/strength"
type: float
units: Percentage
range: [6.0, 100.0]
decimal_places: 1
Events
# UNRESOLVED: no unsolicited event/notification mechanism described in source
Macros
- id: set_input_source
label: Set Input Source
description: "Select input port type and number in a single request"
steps:
- set: "input/active/source/port-type"
value: "{port_type}"
- set: "input/active/source/port-number"
value: "{port_number}"
note: "Can be combined in one HTTP request via GET params or PUT JSON body"
- id: set_output_colour
label: Set Output Colour Profile
description: "Set brightness, colour temperature, and gains simultaneously"
steps:
- set: "output/global-colour"
value:
brightness: "{brightness}"
colour-temperature: "{colour_temperature}"
gains:
blue: "{blue_gain}"
green: "{green_gain}"
intensity: "{intensity_gain}"
red: "{red_gain}"
note: "Single PUT request with nested JSON body to output/global-colour"
Safety
confirmation_required_for:
- system_reboot
- system_shutdown
- capture_frame
- delete_frame
interlocks:
- description: "IP control must be enabled in the Live Control tile in the processor UI before any API access works"
- description: "Control device must be on the same network subnet as the processor management port"
# UNRESOLVED: full list of safety interlocks not documented in source
Notes
- The API is case-insensitive for all paths, tags, and commands across all protocols.
- Dynamic paths (e.g.
{serial},{number},{port-number}) depend on project configuration. - Multiple endpoints can be set in a single HTTP request using query parameters (
?set=1&key=value) or nested JSON in a PUT body. - HTTP GET with
?help=1query parameter returns endpoint metadata including access specifier, data type, and range. - HTTP GET with
?set=valuequery parameter allows write operations via GET (for clients that do not support PUT). - Byte array endpoints (3D LUT data, custom marker images) should be sent as binary data with appropriate Content-Type headers.
- The
listcommand shows a summary of available endpoints starting from any position in the API tree. - Polling large amounts of data multiple times per second may cause adverse performance issues.
- Default factory IP address of a Brompton processor is 192.168.0.50.
- Error responses return JSON with a
response-codefield (e.g.{"response-code":"Path not found"}). - TCP/Telnet interface is case- and whitespace-sensitive; delete/backspace may not work in terminal.
- Many temperature and fan endpoints are only supported on specific hardware models (SX40, S8, M2, T1, S4) as noted per endpoint.
Provenance
source_domains:
- dl.bromptontech.com
source_urls:
- https://dl.bromptontech.com/tessera/docs/TesseraIPControlAPI3_5_2_r2.pdf
retrieved_at: 2026-04-30T04:40:56.854Z
last_checked_at: 2026-06-02T22:04:43.236Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T22:04:43.236Z
matched_actions: 24
action_count: 24
confidence: medium
summary: "All 24 spec actions traced to source (dip-safe re-verify). (13 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "exact firmware version compatibility range not fully specified beyond \"as of version 3.1.0\""
- "password protection behavior described for reboot/shutdown but full auth mechanism not documented"
- "HTTP uses port 80 (stated) and TCP uses port 23 (stated) - two different ports"
- "no unsolicited event/notification mechanism described in source"
- "full list of safety interlocks not documented in source"
- "TCP port explicitly stated as 23 for Telnet; HTTP port explicitly stated as 80"
- "password protection mechanism for reboot/shutdown not fully detailed"
- "maximum concurrent connection limits not stated"
- "API response time / latency characteristics not stated"
- "firmware version range for full API compatibility — intro says \"as of version 3.1.0\", API version documented is 3.5.2"
- "binary command encoding for TCP protocol — only text-based \"set/get path value\" syntax documented"
- "many input port-specific endpoints (DVI proc-amp, HDMI HDR, SDI controls) share the same structure but are listed per port type — representative examples included"
- "StarTracker, RedSpy, ShutterSync hidden marker sub-endpoints are extensive but follow a consistent pattern"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0