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.

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.