Utility classes

For an introduction, see the Datatypes overview.

AdvancedColorPicker

Advanced colour-picker control surface — exposes four named numeric properties (Red, Green, Blue, optional Alpha) on a target object as a single colour value the property panel renders with a colour wheel, RGBA sliders, and a hex readout. Used by components that need a richer picker than the simple System.Drawing.Color type. Wires colour changes through to the four underlying properties on Owner and raises ColorChangedCallBack for ad-hoc subscribers.

Property Type Access Description
Owner NamedModel get The component instance whose Red / Green / Blue / Alpha properties are bound to this picker. Set at construction.
RedProperty string get Name of the integer property on Owner that holds the red channel (0–255).
GreenProperty string get Name of the integer property on Owner that holds the green channel (0–255).
BlueProperty string get Name of the integer property on Owner that holds the blue channel (0–255).
AlphaProperty string get Name of the integer property on Owner that holds the alpha channel (0–255). Empty disables alpha — see ShowAlpha.
ColorString string get Space-separated "R G B A" readout (each 0–255). Refreshed automatically when the picker value changes; useful for logging or read-only display.
ColorState ColorState get/set Current picker value as a ColorState (RGB and alpha as 0..1 doubles plus hue / saturation / value derivatives). Two-way bound to the colour-wheel UI.
ShowAlpha bool get/set True when the picker exposes the alpha slider. Auto-set at construction from whether AlphaProperty was supplied.

AudioMeter

Audio level meter readout — used by operators that expose a live audio level (e.g. Sidechain Ducking, EBU R128) and by the Audio Mixer for VU display. Holds left/right channel peak levels in decibels, optional peak-hold values, clip warnings, and a pre-formatted display string. All values are populated by the engine — typically read-only from a script.

Property Type Access Description
LeftPeakDb float get/set Current peak level of the left channel, in decibels (dBFS). Updated each audio frame. 0 dB is full scale; negative values indicate the signal is below full scale.
RightPeakDb float get/set Current peak level of the right channel, in decibels (dBFS). Right-channel counterpart of LeftPeakDb.
MinLevel float get/set Lowest level the meter renders, in decibels. Anything below this is shown as silence. Set when the meter is constructed — typically -60 dB for broadcast meters, lower for full-scale dynamic-range views.
MaxLevel float get/set Highest level the meter renders, in decibels. Anything above this is shown as full scale. Set when the meter is constructed — typically 0 dB.
Text string get/set Pre-formatted display string for the meter (e.g. "-12.3 dB" or "+0.5 dB"). Updates automatically when PeakLevelDbAllChannels is set. Useful for showing a numeric readout next to a meter, or for logging the current level from a script.
PeakLevelLeftDb float get/set Peak-hold value for the left channel, in decibels. Sticky maximum — typically held for a short period after the peak is reached so the meter shows a "highest recent level" line. Reset by the meter logic; from a script, useful for "loudest recent peak" readouts.
PeakLevelRightDb float get/set Peak-hold value for the right channel, in decibels. Right-channel counterpart of PeakLevelLeftDb.
PeakLevelLeftDbWarn bool get/set True when the left-channel peak-hold has reached the warning (clip) threshold. Used to colour the meter red. From a script, read this to detect that the source has clipped recently — useful for automated alerts.
PeakLevelRightDbWarn bool get/set True when the right-channel peak-hold has reached the warning (clip) threshold. Right-channel counterpart of PeakLevelLeftDbWarn.
PeakLevelDbAllChannels float get/set Combined peak across both channels, in decibels. Setting this value also updates Text to a formatted string (e.g. "-12.3 dB", or "+0.5 dB" when above full scale). Useful as a single-number read for "current loudness" in scripts that don't need per-channel detail.

Command

A button-style action exposed by a component to the property panel and the Script Engine. Wraps a target object plus a MethodInfo reflection handle to the method to invoke; the property panel renders one labelled button per Command property and calls Execute() on click. From a script, call the named command via ExecuteCommand() / ExecuteCommandById(). Multiple related commands can be grouped horizontally via CommandGroup.

Property Type Access Description
Target IName get The component instance whose method this command invokes. Set at construction.
Name string get/set Display label for the command — shown on the button and used as the command name in the Script Engine. Defaults to the C# method name when not specified at construction.
CanExecute bool get/set Whether the command is currently executable. Bound to the button's enabled state in the property panel and gates Execute(); components flip this to grey out a button that's not valid in the current state (e.g. StopCommand is disabled while the target is already stopped).
CommandThreadStartMode CommandThreadStartMode get/set How the command method runs when invoked: synchronously on the caller's thread (Normal), in a fire-and-forget background Task (OwnThread), or in a background Task awaited inline (OwnThreadAwait). Use a non-Normal mode when the command's body might block long enough to stall the UI thread.
ColorPreview ColorPreview get/set Optional ColorPreview to display inside the command button. Set this to show a color swatch alongside the button text.

CommandGroup

Groups 2–4 Command objects so the property system can render them as a single compact, horizontal button strip instead of stacking each command on its own row.

Property Type Access Description
Commands IReadOnlyList<Command> get The commands in this group, in display order (left to right).
ToolTips IReadOnlyList<string> get Tooltip texts, one per command (optional). If not set or if an entry is empty, the command name is used as fallback.
Count int get Number of commands in this group.
Command1 Command get First command in the group, or null if the group is empty. Convenience accessor for XAML binding.
Command2 Command get Second command in the group, or null if the group has fewer than 2 commands.
Command3 Command get Third command in the group, or null if the group has fewer than 3 commands.
Command4 Command get Fourth command in the group, or null if the group has fewer than 4 commands.

ComponentLog

Per-component log buffer — a bounded ring of recent FormattedMessage entries (info / warning / error) that the property panel renders below a component's normal property table. Components expose one as a property to surface short diagnostic messages without flooding the application log; consecutive duplicate lines are suppressed and the oldest entry is dropped when the buffer reaches its Capacity (default 10).

Property Type Access Description
LogCache ReadOnlyObservableCollection<FormattedMessage> get Log messages

DecklinkCaptureChannel

A single SDI / HDMI channel on a Blackmagic Decklink capture card, identified by its zero-based driver-side index and the human-readable label the driver assigns it. Used wherever a Decklink-related property (input source, output channel) needs to round-trip a stable channel identity across project saves.

Property Type Access Description
ChannelIndex int get Zero-based index assigned to this channel by the Decklink driver. The same physical port keeps the same index across application launches as long as the card population doesn't change.
ChannelName string get Human-readable label the Decklink driver reports for this channel (e.g. "DeckLink Quad HDMI Recorder (1)"). Useful for displaying the channel in a dropdown.

DynamicIntSlider

An integer slider whose min/max bounds can be changed at runtime. Use this instead of EditorSliderAttribute when the range is not known at compile time (e.g. frame count of a loaded file).

Property Type Access Description
Value int get/set Current slider value, automatically clamped to the MinValueMaxValue range on assignment.
MinValue int get/set Lower bound of the slider. Setting a higher value drags Value up to keep it within range.
MaxValue int get/set Upper bound of the slider. Setting a lower value drags Value down to keep it within range.

Property Type Access Description
HttpLinkString string get/set
LinkText string get/set
ToolTip string get/set

Font

Lightweight font handle — a single named font family (e.g. "Arial", "Inter") used by text-rendering components to refer to a font without embedding the full System.Drawing.FontFamily object. The rendering layer resolves the name against the host's installed fonts at render time.

Property Type Access Description
Name string get/set Font family name (e.g. "Arial", "Inter"). Resolved against the host's installed fonts at render time; an unknown name falls back to the system default.

FormattedMessage

A timestamped log line with a severity tag — the basic unit stored in a component's ComponentLog ring buffer and surfaced in the property panel's per-component log readout. Captures the message text, the moment it was created, and a FormattedMessageType hint that drives styling (e.g. red for error, yellow for warning).

Property Type Access Description
Message string get The log line's text content.
DateTime DateTime get Local time at which the message was created. Set automatically by the constructor; not user-supplied.

GainReductionMeterData

Read-out for a gain-reduction meter — used by dynamics-shaping operators (Compressor, Limiter, Sidechain Ducking) to expose the amount of gain the processor is currently subtracting from the signal. The property panel renders this as a downward-pointing meter; 0 dB is the resting position (no reduction), and the bar grows downward as the processor clamps harder.

Property Type Access Description
Value float get/set Current gain reduction in decibels — 0 dB means the processor isn't attenuating; more negative values mean more reduction. Updated each audio frame by the processing operator.
MinLevel float get Most negative value the meter renders, in decibels (e.g. -30 dB). Set at construction; defines the bottom of the visible range.
MaxLevel float get Resting / no-reduction level, in decibels — typically 0 dB. Set at construction; defines the top of the visible range.

HttpString

Wraps a single HTTP / HTTPS URL string. Used in component properties where a URL is the natural value (webhook endpoint, asset URL, remote config) so the property panel can render it with URL-aware validation and an "open in browser" affordance instead of treating it as a plain string. IsValidUrl() performs a cheap sanity check (non-empty and contains http); fuller validation is the consumer's responsibility.

Property Type Access Description
Url string get/set The wrapped URL string. Set freely; IsValidUrl() reports whether the current value is plausibly a URL.

JoystickControl

A 2D joystick data type for the property system. When a component exposes a property of this type, the property panel renders a circular joystick pad control. X and Y each range from -1.0 to +1.0 with (0, 0) at centre (rest position); the joystick snaps back to centre when the user releases the mouse and raises Released.

Property Type Access Description
X double get/set Horizontal axis value. -1.0 = full left, 0.0 = center, +1.0 = full right.
Y double get/set Vertical axis value. -1.0 = full down, 0.0 = center, +1.0 = full up.
IsActive bool get/set True while the user is actively dragging the joystick thumb.

LayerRenderInfo

Represents rendering information for a specific layer.

Property Type Access Description
LayerId Guid get/set Identifier for the layer.
LayerName string get/set Name of the layer.

MultilineText

Property Type Access Description
Text string get/set

NetBalancerTarget

Property Type Access Description
AutoStartDelay int get/set Seconds before Autostart fires Apply after the project starts. [default=0]. Useful when other components (RTMP/SRT targets, etc.) need a moment to open their sockets before traffic shaping kicks in — applying NetBalancer's throttles too early can cause spurious failures during connection setup. Range 0–300 s (up to 5 minutes). Clicking Apply manually before the delay elapses cancels the pending Autostart — no duplicate apply. Autostart fires at most ONCE per target lifetime — Stop+Play and Reset do not re-arm it; only reloading the project or recreating the target will fire Autostart again. While armed, AutostartStatus shows the live countdown.
AutoStartStatus string get Read-only status string shown while AutoStart is armed and counting down to its delayed Apply. Empty when AutoStart isn't pending. Transient — never persisted.
DownloadPriority NetBalancerPriority get/set Priority applied to Composer's download traffic. [default=Normal]. Use Limited for a bandwidth cap, Delayed to inject latency, Dropped for packet loss, Blocked to cut the link entirely. High/Normal/Low/Ignored are bare priority hints that take no numeric value. Selecting a priority unlocks only the relevant fields.
DownloadLimitKbps int get/set Download bandwidth cap in kilobytes per second (when DownloadPriority = Limited). Multiplied by 1000 internally to produce the bytes/sec value nbcmd expects.
DownloadDelayMs int get/set Download delay in milliseconds (when DownloadPriority = Delayed).
DownloadJitterMs int get/set Download delay jitter in milliseconds — ± random variation around DelayMs (when DownloadPriority = Delayed).
DownloadDropPercent int get/set Download packet drop rate as a percentage 0–100 (when DownloadPriority = Dropped). Divided by 100 internally to produce the 0.0–1.0 fraction nbcmd expects.
UploadPriority NetBalancerPriority get/set Priority applied to Composer's upload traffic. [default=Normal]. Independent from DownloadPriority — any combination is valid (e.g. Limited download with Dropped upload). Same value semantics as DownloadPriority.
UploadLimitKbps int get/set Upload bandwidth cap in kilobytes per second (when UploadPriority = Limited).
UploadDelayMs int get/set Upload delay in milliseconds (when UploadPriority = Delayed).
UploadJitterMs int get/set Upload delay jitter in milliseconds — ± random variation around DelayMs (when UploadPriority = Delayed).
UploadDropPercent int get/set Upload packet drop rate as a percentage 0–100 (when UploadPriority = Dropped).
PerConnectionLimits bool get/set When true, the bandwidth limit is applied per individual connection instead of being shared across all of Composer's connections. [default=false]. Only meaningful when at least one direction uses the Limited priority — otherwise the field is locked. Matches NetBalancer GUI's "Limit each connection separately" checkbox.
NetBalancerStatusNote PropertyNote get/set Inline notice shown when NetBalancer is not installed or unavailable on this platform. Hidden when nbcmd.exe is found. Carries a download link on Windows and a "Windows-only" message on Linux. Public set is required for the link button to be live. Sits at the top of the Action section so the warning appears directly above the (disabled) buttons.
Apply Command get Apply the current settings to NetBalancer for the running Composer exe. Runs nbcmd.exe settings priorities edit with the configured values. Disabled while NetBalancer is unavailable; outcome is logged to ComponentLog (Info on success, Error on failure). Hidden as a standalone row — only the ActionButtons CommandGroup row is visible.
Reset Command get Clear the download/upload throttle values back to defaults and revert NetBalancer for Composer to Normal / Normal.
ActionButtons CommandGroup get Horizontal button row containing Apply and Reset.
AutoToggle bool get/set Master on/off switch for the toggle cycle. [default=false]. When flipped ON, the throttle is applied immediately and then alternates between applied / reverted every Interval seconds. When flipped OFF, the cycle stops and NetBalancer reverts to Normal / Normal. Apply remains available while cycling — click it to push live property edits without waiting for the next cycle tick.
AutoToggleInterval int get/set Seconds the throttle stays in each phase of the toggle cycle. [default=30]. Same value is used for both the ON phase (throttle applied) and the OFF phase (reverted to Normal / Normal). Range 1–300 s (up to 5 minutes) — covers everything from rapid flicker tests to slow drop-in/drop-out simulations. Changing this value while a cycle is running resets the running timer to the new period.
AutoToggleStatus string get Read-only status string shown while the toggle cycle is running. Displays the current phase (Throttle ON / OFF) and the seconds remaining until the next transition. Empty when cycling is idle. Transient — never persisted to the .prj.
ComponentLog ComponentLog get Bounded log of the most recent settings successfully sent to NetBalancer. Each entry is a short summary of the per-direction priority + value (e.g. D:Limited 1000 KB/s U:Normal); timestamps and styling are handled by the ComponentLog renderer. The most recent entry doubles as the "what just happened" status indicator, replacing the previous LastResult string. Useful for spotting what just changed during a test session and for debugging when a test result doesn't match expectations.
Description MultilineText get Free-text description of what this target does. Set once at construction.
ExternalLink ExternalUrlLink get Online-documentation link rendered below the description in the About section. Initialised at construction.

PropertyNote

Represents a property type that displays additional informational text, optionally with an icon and a hyperlink, to provide clarification or context for another property. Supports configurable visibility and layout margins.

Property Type Access Description
IsVisible bool get/set Controls whether the note is visible.
Icon IconType get/set Icon displayed alongside the note.
Text string get/set The informational text content of the note.
LinkUrl string get/set URL linked from the note.
LinkText string get/set Text displayed for the link.
MarginTop int get/set Top margin around the note.
MarginBottom int get/set Bottom margin around the note.

StringCollectionEnum

A "dynamic enum" — a single selected string drawn from a collection of allowed values that's populated at runtime rather than fixed at compile time. The property panel renders this as a dropdown bound to SourceCollection; useful when the available choices depend on runtime state (loaded fonts, attached devices, scenes in the project, etc.) and a true C# enum won't work because the values aren't known until the project is loaded.

Property Type Access Description
SelectedValue string get/set The currently selected string. Should be a member of SourceCollection; the property panel highlights this entry in the dropdown.
SourceCollection ObservableCollection<string> get/set The list of allowed values the dropdown offers. Updates live — adding or removing entries is reflected in the UI.

TimeCode

A frame-accurate timecode — hours / minutes / seconds / frames — used to express a position or duration that's tied to a project frame rate rather than wall-clock time. Round-trips to and from a "H:MM:SS:FFf" string via ToString() / Parse; convenience constructors create a TimeCode from milliseconds or FFmpeg AVRational time values for a given frame rate.

Property Type Access Description
Hours int get Hour component (0+).
Minutes int get Minute component (0–59).
Seconds int get Second component (0–59).
Frames int get Frame component within the current second; valid range depends on the project frame rate (0–23 at 24 fps, 0–59 at 60 fps, etc.).

TimeStamp

A presentation timestamp expressed as a count plus a time base — the FFmpeg-native way of representing time without floating-point drift. The actual time in seconds is Index × TimeBase.num / TimeBase.den; ToString() renders it as "hh:mm:ss:fff". Used wherever the engine needs to round-trip a precise position from libav into a component property without losing precision through a double.

Property Type Access Description
Index long get Tick count — multiply by TimeBase to get seconds.
TimeBase AVRational get FFmpeg time base (numerator / denominator) used to convert Index to seconds. A typical video time base is 1 / 90000.