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. |
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. |
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. |