Summary
The Blackmagic Design Ultimatte 12 is a real-time compositing / keying processor supporting blue/green screen removal with advanced matte, spill, flare, and lighting controls. This spec covers the text-based Ethernet control protocol (TCP port 9998), which supports reading and setting all device parameters, file management (load/save/delete/rename), GPI event list management, frame buffer assignment, and camera control. Models include Ultimatte 12, Ultimatte 12 8K, and Ultimatte 12 HD Mini (feature subsets apply).
Transport
protocols:
- tcp
addressing:
port: 9998
auth:
type: none # inferred: no auth procedure in source
Traits
- queryable # inferred: status resend supported by sending block header + blank line
- levelable # inferred: extensive numeric controls with defined ranges
Actions
# Command payloads are text blocks: a header in CAPS + colon, key:value lines,
# terminated by a blank line (double newline). Newlines shown as \n in templates.
# The trailing blank-line terminator (extra \n) is implied per protocol.
# File Operations
- id: file_load
label: Load File
kind: action
command: "FILE:\nLoad: {filename}\n"
params:
- name: filename
type: string
description: Name of setup file to load
- id: file_save
label: Save File
kind: action
command: "FILE:\nSave: {filename}\n"
params:
- name: filename
type: string
description: Name to save the setup file as
- id: file_delete
label: Delete File
kind: action
command: "FILE:\nDelete: {filename}\n"
params:
- name: filename
type: string
description: Name of setup file to delete
- id: file_rename
label: Rename File
kind: action
command: "FILE:\nRename: {filename}\nTo: {to}\n"
params:
- name: filename
type: string
description: Current filename
- name: to
type: string
description: New filename
# GPI Event List Operations
- id: gpi_insert_event
label: Insert GPI Event
kind: action
command: "GPI:\nID: {id}\nInsert: {filename}\nAt: {at}\n"
params:
- name: id
type: integer
description: GPI input number (1-5)
- name: filename
type: string
description: Setup file to insert
- name: at
type: integer
description: "Insertion index (-1 = end of list)"
- id: gpi_remove_event
label: Remove GPI Event
kind: action
command: "GPI:\nID: {id}\nRemove: {index}\n"
params:
- name: id
type: integer
description: GPI input number (1-5)
- name: index
type: integer
description: "Event index to remove (0 = delete all events)"
# Frame Buffer
- id: frame_buffer_assign
label: Assign Frame Buffer Image
kind: action
command: "FRAME BUFFER:\n{buffer}: {image_filename}\n"
params:
- name: buffer
type: string
description: "Frame buffer name (e.g. Background 1, Background 2, Layer 1, Layer 2, Garbage Matte, Holdout Matte)"
- name: image_filename
type: string
description: Pre-loaded image filename from Media Pool
# Action Controls (send "Yes" to execute; device replies "Yes" when complete)
- id: factory_defaults
label: Factory Defaults
kind: action
command: "CONTROL:\nFactory Defaults: Yes\n"
params: []
- id: user_defaults
label: User Defaults
kind: action
command: "CONTROL:\nUser Defaults: Yes\n"
params: []
- id: auto_screen_sample
label: Auto Screen Sample
kind: action
command: "CONTROL:\nAuto Screen Sample: Yes\n"
params: []
- id: screen_capture
label: Screen Capture
kind: action
command: "CONTROL:\nScreen Capture: Yes\n"
params: []
- id: noise_select
label: Noise Select
kind: action
command: "CONTROL:\nNoise Select: Yes\n"
params: []
- id: sample_wall
label: Sample Wall
kind: action
command: "CONTROL:\nSample Wall: Yes\n"
params: []
- id: sample_floor
label: Sample Floor
kind: action
command: "CONTROL:\nSample Floor: Yes\n"
params: []
- id: matte_reset
label: Matte Reset
kind: action
command: "CONTROL:\nMatte Reset: Yes\n"
params: []
- id: cleanup_reset
label: Cleanup Reset
kind: action
command: "CONTROL:\nCleanup Reset: Yes\n"
params: []
- id: gm_cleanup_reset
label: GM Cleanup Reset
kind: action
command: "CONTROL:\nGM Cleanup Reset: Yes\n"
params: []
- id: fg_color_reset
label: FG Color Reset
kind: action
command: "CONTROL:\nFG Color Reset: Yes\n"
params: []
- id: bg_color_reset
label: BG Color Reset
kind: action
command: "CONTROL:\nBG Color Reset: Yes\n"
params: []
- id: flare_reset
label: Flare Reset
kind: action
command: "CONTROL:\nFlare Reset: Yes\n"
params: []
- id: ambiance_reset
label: Ambiance Reset
kind: action
command: "CONTROL:\nAmbiance Reset: Yes\n"
params: []
- id: bg_test_signal_color_reset
label: BG Test Signal Color Reset
kind: action
command: "CONTROL:\nBG Test Signal Color Reset: Yes\n"
params: []
- id: ly_color_reset
label: LY Color Reset
kind: action
command: "CONTROL:\nLY Color Reset: Yes\n"
params: []
- id: ly_test_signal_color_reset
label: LY Test Signal Color Reset
kind: action
command: "CONTROL:\nLY Test Signal Color Reset: Yes\n"
params: []
- id: window_reset
label: Window Reset
kind: action
command: "CONTROL:\nWindow Reset: Yes\n"
params: []
- id: window_skew_reset
label: Window Skew Reset
kind: action
command: "CONTROL:\nWindow Skew Reset: Yes\n"
params: []
- id: gp_out_trigger
label: Trigger GPI Output
kind: action
command: "CONTROL:\nGP Out: Yes\n"
params: []
# Generic control set (covers all numeric, on/off, and enumerated controls)
- id: set_control
label: Set Control Value
kind: action
command: "{block}:\n{control}: {value}\n"
params:
- name: block
type: string
description: "Block header (e.g. CONTROL)"
- name: control
type: string
description: "Control name verbatim from Controls Reference (e.g. Matte Density)"
- name: value
type: string
description: "Value to set, or relative delta (e.g. +10 / -5). Boolean controls take On/Off; enums take the literal enum string."
# Camera Control (CAMERA CONTROL block - distinct block documented in its own section)
- id: set_camera_control
label: Set Camera Control
kind: action
command: "CAMERA CONTROL:\n{field}: {value}\n"
params:
- name: field
type: string
description: "Camera control field (CCU Camera Id, CEC Camera Id, Camera Control Mode)"
- name: value
type: string
description: "Value for the field (e.g. CCU Camera Id integer)"
- id: request_status
label: Request Status Resend
kind: action
command: "{block}:\n"
params:
- name: block
type: string
description: "Block header to request (e.g. CONTROL, IDENTITY, DEVICE)"
Feedbacks
# Status blocks received from device
- id: identity
type: block
description: "IDENTITY block: Model, Label, Unique ID"
- id: network_general
type: block
description: "NETWORK block: general network information"
# UNRESOLVED: field list for the general NETWORK block not shown in source
- id: network_interface
type: block
description: "NETWORK INTERFACE block: Name, Priority, MAC Address, IP config (DynamicIP, Current/Static Addresses, Gateway, DNS Servers)"
- id: version
type: block
description: "VERSION block: Product ID, Hardware Version, Software Version, Software Release"
- id: device
type: block
description: "DEVICE block: Video Format, Reference Source, input lock statuses (FG/BG/MONITOR/G MATTE/H MATTE/REF/BG MATTE/LAYER/LAYER MATTE In)"
- id: video_formats
type: block
description: "VIDEO FORMATS block: list of supported video formats"
- id: control_values
type: block
description: "CONTROL block: all current control parameter values"
- id: control_defaults
type: block
description: "CONTROL DEFAULT block: default control parameter values"
- id: current_file
type: block
description: "CURRENT FILE block: Name and Status of loaded file"
- id: file_list
type: block
description: "FILE LIST block: list of stored setup files"
- id: gpi_list
type: block
description: "GPI LIST block: GPI event list per input (ID, Index, files)"
- id: image_list
type: block
description: "IMAGE LIST block: stored image filenames, capacity, available space"
- id: frame_buffer
type: block
description: "FRAME BUFFER block: frame buffer assignments (Background 1/2, Layer 1/2, Garbage Matte, Holdout Matte), Background/Layer Mix, Background/Layer Transition Duration"
- id: camera_control
type: block
description: "CAMERA CONTROL block: CCU Camera Id, CEC Camera Id, Camera Control Mode"
- id: message
type: block
description: "MESSAGE block: returned in place of status block on certain file/GPI command outcomes"
# UNRESOLVED: MESSAGE block field format not documented in source
- id: ack
type: enum
values: [ACK]
description: Acknowledgement sent after each command; followed by status update block
Variables
# Numeric controls (range 0-10000 unless noted)
- id: matte_density
type: integer
min: 0
max: 10000
- id: black_gloss
type: integer
min: 0
max: 10000
- id: blue_density
type: integer
min: 0
max: 10000
- id: green_density
type: integer
min: 0
max: 10000
- id: red_density
type: integer
min: 0
max: 10000
- id: shadow_level
type: integer
min: 0
max: 10000
- id: shadow_threshold
type: integer
min: 0
max: 10000
- id: matte_correct_horizontal_size
type: integer
min: 0
max: 6
- id: matte_correct_vertical_size
type: integer
min: 0
max: 3
- id: cursor_x
type: integer
min: 0
max: 10000
- id: cursor_y
type: integer
min: 0
max: 10000
- id: cursor_2_x
type: integer
min: 0
max: 10000
- id: cursor_2_y
type: integer
min: 0
max: 10000
- id: veil_master
type: integer
min: 0
max: 10000
- id: veil_red
type: integer
min: 0
max: 10000
- id: veil_green
type: integer
min: 0
max: 10000
- id: veil_blue
type: integer
min: 0
max: 10000
- id: veil_correct_horizontal_size
type: integer
min: 0
max: 6
- id: veil_correct_vertical_size
type: integer
min: 0
max: 6 # device-dependent: 0-6 on Ultimatte 12 8K (protocol 2.0), 0-3 on Ultimatte 12 (version 1.2)
- id: wall_color_red
type: integer
min: 0
max: 10000
- id: wall_color_green
type: integer
min: 0
max: 10000
- id: wall_color_blue
type: integer
min: 0
max: 10000
- id: floor_color_red
type: integer
min: 0
max: 10000
- id: floor_color_green
type: integer
min: 0
max: 10000
- id: floor_color_blue
type: integer
min: 0
max: 10000
- id: cleanup_level
type: integer
min: 0
max: 10000
- id: cleanup_dark_recover
type: integer
min: 0
max: 10000
- id: cleanup_light_recover
type: integer
min: 0
max: 10000
- id: cleanup_strength
type: integer
min: 0
max: 10000
- id: gm_cleanup_level
type: integer
min: 0
max: 10000
- id: gm_cleanup_dark_recover
type: integer
min: 0
max: 10000
- id: gm_cleanup_light_recover
type: integer
min: 0
max: 10000
- id: gm_cleanup_strength
type: integer
min: 0
max: 10000
- id: correction_level
type: integer
min: 0
max: 10000
- id: noise_level
type: integer
min: 0
max: 10000
- id: black_balance
type: integer
min: 0
max: 10000
- id: gray_balance
type: integer
min: 0
max: 10000
- id: white_balance
type: integer
min: 0
max: 10000
- id: flare_level
type: integer
min: 0
max: 10000
- id: cool
type: integer
min: 0
max: 10000
- id: skin_tone
type: integer
min: 0
max: 10000
- id: light_warm
type: integer
min: 0
max: 10000
- id: dark_warm
type: integer
min: 0
max: 10000
- id: flare_correct_horizontal_size
type: integer
min: 0
max: 6
- id: flare_correct_vertical_size
type: integer
min: 0
max: 6 # device-dependent: 0-6 on Ultimatte 12 8K (protocol 2.0), 0-3 on Ultimatte 12 (version 1.2)
- id: ambiance_master
type: integer
min: 0
max: 10000
- id: ambiance_red
type: integer
min: 0
max: 10000
- id: ambiance_green
type: integer
min: 0
max: 10000
- id: ambiance_blue
type: integer
min: 0
max: 10000
- id: ambiance_strength
type: integer
min: 0
max: 10000
- id: direct_light_red
type: integer
min: 0
max: 10000
- id: direct_light_green
type: integer
min: 0
max: 10000
- id: direct_light_blue
type: integer
min: 0
max: 10000
- id: direct_light_mix
type: integer
min: 0
max: 10000
- id: vertical_blur
type: integer
min: 0
max: 10000
- id: fg_saturation_red
type: integer
min: 0
max: 10000
- id: fg_saturation_green
type: integer
min: 0
max: 10000
- id: fg_saturation_blue
type: integer
min: 0
max: 10000
- id: fg_saturation_master
type: integer
min: 0
max: 10000
- id: fg_contrast_red
type: integer
min: 0
max: 10000
- id: fg_contrast_green
type: integer
min: 0
max: 10000
- id: fg_contrast_blue
type: integer
min: 0
max: 10000
- id: fg_contrast_master
type: integer
min: 0
max: 10000
- id: fg_black_red
type: integer
min: 0
max: 10000
- id: fg_black_green
type: integer
min: 0
max: 10000
- id: fg_black_blue
type: integer
min: 0
max: 10000
- id: fg_black_master
type: integer
min: 0
max: 10000
- id: fg_white_red
type: integer
min: 0
max: 10000
- id: fg_white_green
type: integer
min: 0
max: 10000
- id: fg_white_blue
type: integer
min: 0
max: 10000
- id: fg_white_master
type: integer
min: 0
max: 10000
- id: fg_contrast_crossover
type: integer
min: 0
max: 10000
- id: fade_mix
type: integer
min: 0
max: 10000
- id: bg_saturation_red
type: integer
min: 0
max: 10000
- id: bg_saturation_green
type: integer
min: 0
max: 10000
- id: bg_saturation_blue
type: integer
min: 0
max: 10000
- id: bg_saturation_master
type: integer
min: 0
max: 10000
- id: bg_contrast_red
type: integer
min: 0
max: 10000
- id: bg_contrast_green
type: integer
min: 0
max: 10000
- id: bg_contrast_blue
type: integer
min: 0
max: 10000
- id: bg_contrast_master
type: integer
min: 0
max: 10000
- id: bg_black_red
type: integer
min: 0
max: 10000
- id: bg_black_green
type: integer
min: 0
max: 10000
- id: bg_black_blue
type: integer
min: 0
max: 10000
- id: bg_black_master
type: integer
min: 0
max: 10000
- id: bg_white_red
type: integer
min: 0
max: 10000
- id: bg_white_green
type: integer
min: 0
max: 10000
- id: bg_white_blue
type: integer
min: 0
max: 10000
- id: bg_white_master
type: integer
min: 0
max: 10000
- id: bg_contrast_crossover
type: integer
min: 0
max: 10000
- id: bg_filter
type: integer
min: 0
max: 10000
- id: test_signal_master
type: integer
min: 0
max: 10000
- id: test_signal_red
type: integer
min: 0
max: 10000
- id: test_signal_green
type: integer
min: 0
max: 10000
- id: test_signal_blue
type: integer
min: 0
max: 10000
- id: ly_saturation_red
type: integer
min: 0
max: 10000
- id: ly_saturation_green
type: integer
min: 0
max: 10000
- id: ly_saturation_blue
type: integer
min: 0
max: 10000
- id: ly_saturation_master
type: integer
min: 0
max: 10000
- id: ly_contrast_red
type: integer
min: 0
max: 10000
- id: ly_contrast_green
type: integer
min: 0
max: 10000
- id: ly_contrast_blue
type: integer
min: 0
max: 10000
- id: ly_contrast_master
type: integer
min: 0
max: 10000
- id: ly_black_red
type: integer
min: 0
max: 10000
- id: ly_black_green
type: integer
min: 0
max: 10000
- id: ly_black_blue
type: integer
min: 0
max: 10000
- id: ly_black_master
type: integer
min: 0
max: 10000
- id: ly_white_red
type: integer
min: 0
max: 10000
- id: ly_white_green
type: integer
min: 0
max: 10000
- id: ly_white_blue
type: integer
min: 0
max: 10000
- id: ly_white_master
type: integer
min: 0
max: 10000
- id: ly_contrast_crossover
type: integer
min: 0
max: 10000
- id: ly_filter
type: integer
min: 0
max: 10000
- id: ly_test_signal_master
type: integer
min: 0
max: 10000
- id: ly_test_signal_red
type: integer
min: 0
max: 10000
- id: ly_test_signal_green
type: integer
min: 0
max: 10000
- id: ly_test_signal_blue
type: integer
min: 0
max: 10000
- id: ly_fade_mix
type: integer
min: 0
max: 10000
- id: lighting_level_red
type: integer
min: 0
max: 10000
- id: lighting_level_green
type: integer
min: 0
max: 10000
- id: lighting_level_blue
type: integer
min: 0
max: 10000
- id: lighting_level_master
type: integer
min: 0
max: 10000
- id: lighting_minimum_level
type: integer
min: 0
max: 10000
- id: window_position_top
type: integer
min: 0
max: null # UNRESOLVED: max is video-format dependent
- id: window_position_bottom
type: integer
min: 0
max: null # UNRESOLVED: max is video-format dependent
- id: window_position_left
type: integer
min: 0
max: null # UNRESOLVED: max is video-format dependent
- id: window_position_right
type: integer
min: 0
max: null # UNRESOLVED: max is video-format dependent
- id: window_softness_top
type: integer
min: 0
max: 10000
- id: window_softness_bottom
type: integer
min: 0
max: 10000
- id: window_softness_left
type: integer
min: 0
max: 10000
- id: window_softness_right
type: integer
min: 0
max: 10000
- id: window_skew_top
type: integer
min: 0
max: 10000
- id: window_skew_bottom
type: integer
min: 0
max: 10000
- id: window_skew_left
type: integer
min: 0
max: 10000
- id: window_skew_right
type: integer
min: 0
max: 10000
- id: window_skew_offset_top
type: integer
min: 0
max: 10000
- id: window_skew_offset_bottom
type: integer
min: 0
max: 10000
- id: window_skew_offset_left
type: integer
min: 0
max: 10000
- id: window_skew_offset_right
type: integer
min: 0
max: 10000
- id: transition_rate
type: integer
min: 1
max: 120
- id: bm_process_horizontal
type: integer
min: 0
max: 3
- id: bm_process_vertical
type: integer
min: 0
max: 3
- id: bm_filter
type: integer
min: 0
max: 10000
- id: bm_input_level
type: integer
min: 0
max: 10000
- id: bm_input_offset
type: integer
min: 0
max: 10000
- id: gm_process_horizontal
type: integer
min: 0
max: 3
- id: gm_process_vertical
type: integer
min: 0
max: 3
- id: gm_filter
type: integer
min: 0
max: 10000
- id: gm_input_level
type: integer
min: 0
max: 10000
- id: gm_input_offset
type: integer
min: 0
max: 10000
- id: hm_process_horizontal
type: integer
min: 0
max: 3
- id: hm_process_vertical
type: integer
min: 0
max: 3
- id: hm_filter
type: integer
min: 0
max: 10000
- id: hm_input_level
type: integer
min: 0
max: 10000
- id: hm_input_offset
type: integer
min: 0
max: 10000
- id: lm_process_horizontal
type: integer
min: 0
max: 3
- id: lm_process_vertical
type: integer
min: 0
max: 3
- id: lm_filter
type: integer
min: 0
max: 10000
- id: lm_input_level
type: integer
min: 0
max: 10000
- id: lm_input_offset
type: integer
min: 0
max: 10000
- id: noise_cursor_x
type: integer
min: 0
max: 10000
- id: noise_cursor_y
type: integer
min: 0
max: 10000
- id: fg_input_frame_delay
type: integer
min: 0
max: 14
- id: fg_input_u_position
type: integer
min: 0
max: 10000
- id: fg_input_v_position
type: integer
min: 0
max: 10000
- id: fg_input_uv_position
type: integer
min: 0
max: 10000
- id: talent_highlight_level
type: integer
min: 0
max: 10000
- id: monitor_highlight_level
type: integer
min: 0
max: 10000
- id: matte_out_level
type: integer
min: 0
max: 10000
- id: output_offset
type: integer
min: -1500
max: 1500
- id: gp_out_delay
type: integer
min: 1
max: 120
- id: gp_1_input_delay
type: integer
min: 1
max: 120
- id: gp_2_input_delay
type: integer
min: 1
max: 120
- id: gp_3_input_delay
type: integer
min: 1
max: 120
- id: gp_4_input_delay
type: integer
min: 1
max: 120
- id: gp_5_input_delay
type: integer
min: 1
max: 120
# On/Off Controls
- id: matte_enable
type: boolean
- id: screen_correct
type: boolean
- id: gm_cleanup_enable
type: boolean
- id: noise_enable
type: boolean
- id: noise_cursor_enable
type: boolean
- id: fg_freeze
type: boolean
- id: fg_advanced_contrast_enable
type: boolean
- id: advanced_flare_enable
type: boolean
- id: hm_flare_enable
type: boolean
- id: ambiance_enable
type: boolean
- id: bg_gradient_enable
type: boolean
- id: bg_freeze
type: boolean
- id: bg_advanced_contrast_enable
type: boolean
- id: bg_test_signal_enable
type: boolean
- id: ly_input_enable
type: boolean
- id: ly_advanced_contrast_enable
type: boolean
- id: ly_freeze
type: boolean
- id: ly_test_signal_enable
type: boolean
- id: lighting_enable
type: boolean
- id: window_enable
type: boolean
- id: window_bm_enable
type: boolean
- id: window_gm_enable
type: boolean
- id: window_hm_enable
type: boolean
- id: window_lm_enable
type: boolean
- id: window_invert
type: boolean
- id: wall_cursor_position_enable
type: boolean
- id: floor_cursor_position_enable
type: boolean
- id: dual_cursor
type: boolean
- id: manual_color_enable
type: boolean
- id: custom_powerup
type: boolean
deprecated: true # source marks "Custom Powerup(deprecated)"
- id: bm_enable
type: boolean
- id: bm_invert
type: boolean
- id: bm_process_invert
type: boolean
- id: bm_freeze
type: boolean
- id: gm_enable
type: boolean
- id: gm_invert
type: boolean
- id: gm_process_invert
type: boolean
- id: gm_freeze
type: boolean
- id: hm_enable
type: boolean
- id: hm_invert
type: boolean
- id: hm_process_invert
type: boolean
- id: hm_freeze
type: boolean
- id: lm_invert
type: boolean
- id: lm_process_invert
type: boolean
- id: monitor_to_program
type: boolean
- id: monitor_to_talent
type: boolean
- id: fill_linear_mix_correction
type: boolean
- id: talent_mirror
type: boolean
- id: monitor_cascade
type: boolean
- id: matte_out_invert
type: boolean
- id: on_air_enable
type: boolean
- id: on_air_lockout
type: boolean
- id: matte_view_range
type: boolean
- id: matte_view_invert
type: boolean
- id: monitor_out_rgb
type: boolean
- id: monitor_out_red_only
type: boolean
- id: monitor_out_green_only
type: boolean
- id: monitor_out_blue_only
type: boolean
- id: gp_out_save
type: boolean
- id: quickload_1
type: boolean
- id: quickload_2
type: boolean
- id: quickload_3
type: boolean
- id: quickload_4
type: boolean
- id: quickload_5
type: boolean
- id: quicksave_1
type: boolean
- id: quicksave_2
type: boolean
- id: quicksave_3
type: boolean
- id: quicksave_4
type: boolean
- id: quicksave_5
type: boolean
- id: gp_1_input_enable
type: boolean
- id: gp_2_input_enable
type: boolean
- id: gp_3_input_enable
type: boolean
- id: gp_4_input_enable
type: boolean
- id: gp_5_input_enable
type: boolean
- id: gp_1_high_enable
type: boolean
- id: gp_2_high_enable
type: boolean
- id: gp_3_high_enable
type: boolean
- id: gp_4_high_enable
type: boolean
- id: gp_5_high_enable
type: boolean
- id: tally_active
type: boolean
access: read_only
# Enumerated Controls
- id: sdi_3g_level
type: enum
values: [A, B]
- id: color_space
type: enum
values: ["Rec.709", "Rec.2020"]
- id: filter_mode
type: enum
values: [Median, Average]
- id: filter_median
type: enum
values: ["0", "1", "2", "3", "4"]
- id: filter_average
type: enum
values: ["0", "1", "2", "3", "4"]
- id: ly_in_mix_mode
type: enum
values: [Realistic, Linear, Additive]
- id: backing_color
type: enum
values: [Red, Green, Blue]
- id: gp_out_level
type: enum
values: [High, Low]
- id: output_range
type: enum
values: [Normal, Full]
- id: monitor_out
type: enum
values: [Program, FG, BG, "Combined Matte", "Internal Matte", Fill, "Layer In", "Background Matte In", "Garbage Matte In", "Holdout Matte In", "Layer Matte In", "Processed LM", "Processed HM", "Processed GM", "Processed BM", "Screen Correction"]
- id: layer_order
type: enum
values: ["FG/Layer/BG Layer/BG", "Layer/FG/BG Layer/BG", "Layer/BG Layer/FG/BG", "BG Layer/Layer/FG/BG", "BG Layer/FG/Layer/BG", "FG/BG Layer/Layer/BG", "FG/BG Layer/BG", "BG Layer/FG/BG", "FG/Layer/BG", "Layer/FG/BG"]
- id: video_format
type: enum
values: ["Auto Detect", "525i59.94 NTSC 4:3", "625i50 PAL 4:3", "720p60", "720p59.94", "720p50", "1080i60", "1080i59.94", "1080i50", "1080p60", "1080p59.94", "1080p50", "1080p30", "1080p29.97", "1080p25", "1080p24", "1080p23.98", "1080PsF30", "1080PsF29.97", "1080PsF25", "1080PsF24", "1080PsF23.98", "2160p60", "2160p59.94", "2160p50", "2160p30", "2160p29.97", "2160p25", "2160p24", "2160p23.98", "4320p60", "4320p59.94", "4320p50", "4320p30", "4320p29.97", "4320p25", "4320p24", "4320p23.98"]
- id: input_source
type: enum
values: [SDI, IP2110]
- id: output_enable
type: enum
values: ["On", "Off"]
# Camera Control
- id: ccu_camera_id
type: integer
- id: cec_camera_id
type: integer
- id: camera_control_mode
type: string
Events
- id: initial_status
description: >-
Upon connection, the device sends a complete status update consisting of all
status blocks (IDENTITY, NETWORK, NETWORK INTERFACE, VERSION, DEVICE, VIDEO
FORMATS, CONTROL, CONTROL DEFAULT, CURRENT FILE, FILE LIST, GPI LIST, IMAGE
LIST, FRAME BUFFER, CAMERA CONTROL).
- id: status_change
description: >-
After initial connection, the device sends status blocks to all connected
clients whenever any control value changes, regardless of the change source
(front panel, network client, etc.). Blocks contain only the items that
changed.
- id: ack_response
description: >-
After receiving a valid command block (terminated by blank line), the device
responds with "ACK" followed by the relevant updated status block(s).
Macros
# UNRESOLVED: no multi-step macro sequences explicitly documented in source
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings, interlock procedures, or power-on sequencing
# requirements found in source.
Notes
- The protocol is text-based over TCP. Each command is a block: a header in CAPS followed by a colon, then key-value lines, terminated by a blank line (double newline).
- Relative adjustments are supported by prefixing the value with
+or-(e.g.Matte Density: +10). - Status updates are asynchronous and broadcast to all connected clients. Clients must watch for status updates rather than assuming a command succeeded.
- The
Tally Activecontrol is read-only. - GPI features (GPI LIST, GP input/output controls) are not available on Ultimatte 12 HD Mini.
- 4320p video formats are only available on Ultimatte 12 8K.
- PsF video formats are not supported on Ultimatte 12 HD Mini.
- Frame buffer image loading/removal must be done via Smart Remote 4 or Software Control; the Ethernet protocol only supports assigning already-loaded images.
- Default IP address is 192.168.10.220. All models except Ultimatte 12 HD Mini support DHCP.
- Ports 9996 (Software Control / Smart Remote 4) and 9977 (Ultimatte Setup) are also used by the device but their protocols are not documented in this source.
Veil Correct Vertical SizeandFlare Correct Vertical Sizeranges are device-dependent: 0-6 on Ultimatte 12 8K (protocol 2.0), 0-3 on Ultimatte 12 (version 1.2). Recorded here as max 6.- Loop outputs for 'garbage matte' and 'holdout matte' inputs are available on Ultimatte 12, not Ultimatte 12 8K.
Custom Powerupis marked deprecated in the source.
Provenance
source_domains:
- documents.blackmagicdesign.com
source_urls:
- "https://documents.blackmagicdesign.com/UserManuals/UltimatteManual.pdf?_v=1772697610000"
retrieved_at: 2026-07-24T18:50:09.756Z
last_checked_at: 2026-08-05T08:13:53.123Z
Verification Summary
verdict: verified
checked_at: 2026-08-05T08:13:53.123Z
matched_actions: 30
action_count: 30
confidence: medium
summary: "All 30 spec actions match source block syntax verbatim; transport port 9998 confirmed; all status blocks represented in Feedbacks. (13 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "exact firmware version compatibility range not stated"
- "ports 9996 and 9977 mentioned for other software but their control protocol is not documented here"
- "field list for the general NETWORK block not shown in source"
- "MESSAGE block field format not documented in source"
- "max is video-format dependent"
- "no multi-step macro sequences explicitly documented in source"
- "no safety warnings, interlock procedures, or power-on sequencing"
- "protocol version not stated — source references \"protocol 2.0\" and \"version 1.2\" in notes but does not state the current version"
- "error/block format for rejected commands not documented beyond ACK"
- "\"Message block\" mentioned as possible response to file/GPI commands but format not documented"
- "maximum number of simultaneous TCP connections not stated"
- "CAMERA CONTROL mode values not enumerated beyond \"idle\""
- "general NETWORK block field list not shown in source (only NETWORK INTERFACE block fields shown)"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0