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 MinValue–MaxValue 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. |
ExternalUrlLink
| 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. |