r34.2 Change Log
Previous version: r34.1
Date: 10/09/2026, 12:56
Enum support
Values that the Python API used to declare as plain integers are now declared as the reflected enum they hold. This covers properties, method parameters and return values, and the class constants that name each value. About 500 members changed this way, and 164 enum classes are newly declared. They are listed at the end of this section.
Constants now hold enum members instead of integers:
- STRATEGY_MANUAL: Final[int] = 2
+ STRATEGY_MANUAL: Final[ClusterAssigner.SplitType] = ClusterAssigner.SplitType.Manual
Properties, parameters and return values name their enum:
- def getTag(self, tagType: int) -> Tag:
+ def getTag(self, tagType: TagType) -> Tag:
- def calStatus(self, idx: int) -> int:
+ def calStatus(self, idx: int) -> CalibrationStatus:
Each enum declares its values as members, for example CalibrationStatus.FineTuned. int(value) gives an enum’s integer value, fromInt builds one from an integer, and toString gives its name. The ordering comparisons (<, <=, >, >=) accept either an enum or an integer. Code that passes integers where an enum is now declared will be flagged by a type checker or editor; pass the enum member instead.
Enum classes added in r34.2
- AcesGenericCurve
- AcesGenericSpace
- AcesTransformInTypes
- AcesTransformOutTypes
- AffectLayers
- AxisDirection
- BPModel
- BundleAdjustFixedIntrinsics
- BundleAdjustTarget
- CalibMethod
- CalibModel
- CalibrationStatus
- CamEnabled
- CameraAutoMode
- CameraFocalLengthPreset
- CameraGraphScoreMode
- CameraLicenseMethod
- CameraSensorPreset
- CameraTypes_DrawBeams
- CameraTypes_Light
- CamParamMode
- CamPosModel
- CentroidMode
- ClusterAssigner.SplitType
- ColorFormat
- ColourConversionProfile
- ColourManager
- ConfidenceMode
- ContentDistributionTargetMode
- ContentMode
- CoordinateSpace
- CueAttrWidgetFocus
- CueMode
- CustomFpsType
- D3NetManager.MachineStatus.State.Severity
- D3NetManager.MachineStatus.State.StateCategory
- D3State.BitDepthOptions
- D3State.SpeedOption
- DeformAnchorMode
- DeformBehaviour
- DeformMode
- DeformTopologyMode
- DeinterlaceMethod
- Direction
- DisplayRefreshRate
- DisplayValueAs
- DistortionMode
- DmxChannelAttribute
- DmxDirectionality
- DmxDriverType
- DotShape
- DxPrimitiveType
- ExposureMode
- ExpressionVariableType
- ExtendedTextureFormat
- FeedNetworkOutputState
- FeedRect.RenderMode
- FieldSequence.ControlState
- FIFOState
- FixedMode
- FocusMode
- FocusPattern
- GenlockSyncState
- GPUVendor
- GridToleranceMethod
- GuiSystem.VisualiseMode
- HeadFunction
- IAmbientOcclusion_Type
- ImageType
- InputDragState
- InterlacedField.Index
- InterlacedField.PixelFormat
- IntersectionHandling
- LayerColourRule.Test
- LayerEdit
- LegacyDmxScreenFixtureType
- LensPosCompensation
- LineupCursorType
- LocalState.FeedOutputMode
- Machine.BitDepthOptions
- MachineCaptureCardVariant
- MachineRole
- MachineType
- Manipulator3DType
- MappedMediaLocation.MappingType
- MeshProjection.DebugViewType
- MetricSamplingMode
- MissingMediaDomain.Filter
- MovieWriter.MovieType
- MsaaMode
- MTCRate
- Network_CommsNodeStatus
- NetworkMode
- NetworkVideo_CompressionCodec
- NetworkVideo_TransportBitDepth
- NetworkVideo_TransportFormat
- NetworkVideo_TransportType
- NmosLoadType
- NMOSNodeItemType
- NotchProperty.Type
- ocio_OcioShaderPropertyTypes
- OcioColourSpace.MenuItems
- OcioColourSpace.Type
- OperatingMode
- OptiCalVisualisation
- OSCFeedbackMode
- OutlierMode
- OutputSyncState
- ParallelCaptureMode
- PlanarPointFilter
- PlayMode.PlayModeState
- PointCloudMode
- ProjectorCalibrationAlgorithm
- ProjectorOutlierAlgorithm
- ProjectorOutputMode
- PTPLockStates
- PTPProfile
- RecordingCategory
- RecordingModes
- RefineMethod
- ReleaseVersion.ReleaseStageCode
- RenderStream_WorkloadInstanceStatus
- RenderStreamSystem.RsAuthMode
- ReshapeAlgorithm
- SaveStatus
- ScaleFactorCalcMethod
- SearchOrder
- SFPType
- ShotRecorderAnimationAlignment
- SMPTEClockType
- SMPTEMode
- SockpuppetPropertyType
- SpaceLayer
- SpatialCalibrationScope
- SphericalFieldOfView
- StereoOption
- SystemSyncMode
- TagType
- TextureFormat
- TimeStep
- TrackerDistortionCompensationMethod
- TrackTransitionInfo.Mode
- TransferCharacteristics
- TransportManager.SendTransportCommandsMode
- TransportType
- UnderstudyConfigStatus
- UseAlignmentPoints
- UsePrincipalPointShift
- VFCDeviceModel
- VFCDeviceSplitMode
- VFCDeviceStatus
- VFCGeneration
- VFCLinkMode
- VFCModel
- VFCPortStatus
- VFCPortTimingMode
- VFCQuadDivision
- VFCSlotType
- VideoOutput
- VirtualCameraLensSource
- VisualisationSource
- WaveformMode
- WeightMode
- WhiteBalanceMode
More accepted argument types
Parameters and property setters now declare the other types the binding converts for them, so calls that already worked no longer read as type errors:
- A
Colourparameter also accepts aColor anHDRColour. - A
Vec2parameter also accepts aVecor anInt2, and aVecparameter also accepts aVec2. - A
Pathorstring_viewparameter also accepts astr.
- def __add__(self, c: Colour) -> Colour:
+ def __add__(self, c: Colour | Col | HDRColour) -> Colour:
About 500 parameters and setters changed this way. Their type is otherwise unchanged, so they are not listed below.
Other typing improvements
These changes describe the existing behaviour more precisely and need no change to code:
- Values that the binding converts to a Python value are typed
Anywhere they were typedReflectionValue, for exampleConnectedField.valueandRenderStreamModuleBase.getValue. - Setters that return the object they were called on are typed as returning
Self, so chained calls keep their type, for exampleMat.setTranslationandSimpleGraph.series. - Vector and quaternion division is declared with Python 3’s
__truediv__and__rtruediv__.
Added
Classes
FieldKeyComponents
class FieldKeyComponents(_BlipValue):
"""
Struct to represent a unique pair of layer and its field that is controlled by a Look
Look
class Look(SuperTrack):
"""
A Look is a self-contained, single section Track, containing one or more sequenced Layers. It serves as a template to be referenced other Tracks using Look Layers.
LookModule
class LookModule(Module):
"""
Look Module is responsible for Look playback. Multiple Look Modules can reference the same Look simultaneously,
LookModuleConfig
class LookModuleConfig(ModuleConfig):
"""
Configuration for a Look module.
LookPlayHead
class LookPlayHead(TrackPlayHead):
"""
Special playhead for playing a Look. Mainly used by the LookModule as internal playhead to playback selected Look.
Category: Transports
"""
_classInfo: 'ClassInfo'
__username__ = 'LookPlayHead'
LookProjection
class LookProjection(Projection):
"""
Custom projection for a Look module.
Category: Mappings
"""
_classInfo: 'ClassInfo'
__username__ = 'LookProjection'
def __init__(self) -> None:
"""
Default constructor for LookProjection
"""
...
LookSequencing
class LookSequencing(_BlipValue):
"""
Utility class that provides mapping-like functionality between Look’s layers fields and its personality.
MulticastConfig
class MulticastConfig(Resource):
"""
The multicast destinations a network feed head streams to: an address and port for the primary and
Class.variables
HashTable.elemType
elemType: Final[Type[Type1]] #: The type of the values the table holds
HashTable.keyType
keyType: Final[Type[str]] #: The type of the table's keys, which is always str
ClusterAssigner.COMPRESSION_CODEC_AV1
COMPRESSION_CODEC_AV1: Final[NetworkVideo_CompressionCodec] = NetworkVideo_CompressionCodec.AV1 #: Transport sending compressed video compressed with the AV1 codec
ClusterAssigner.COMPRESSION_CODEC_H265
COMPRESSION_CODEC_H265: Final[NetworkVideo_CompressionCodec] = NetworkVideo_CompressionCodec.H265 #: Transport sending compressed video compressed with the H.265 codec
NetworkFeedConfig.COMPRESSION_CODEC_AV1
COMPRESSION_CODEC_AV1: Final[NetworkVideo_CompressionCodec] = NetworkVideo_CompressionCodec.AV1 #: Transport type sending compressed video compressed with the AV1 codec
NetworkFeedConfig.COMPRESSION_CODEC_H265
COMPRESSION_CODEC_H265: Final[NetworkVideo_CompressionCodec] = NetworkVideo_CompressionCodec.H265 #: Transport type sending compressed video compressed with the H.265 codec
NetworkFeedConfig.TRANSPORT_BIT_DEPTH_10
TRANSPORT_BIT_DEPTH_10: Final[NetworkVideo_TransportBitDepth] = NetworkVideo_TransportBitDepth._10Bit #: Transport bit depth of 10 bits per colour component
NetworkFeedConfig.TRANSPORT_BIT_DEPTH_8
TRANSPORT_BIT_DEPTH_8: Final[NetworkVideo_TransportBitDepth] = NetworkVideo_TransportBitDepth._8Bit #: Transport bit depth of 8 bits per colour component
NetworkFeedConfig.TRANSPORT_FORMAT_RGB444
TRANSPORT_FORMAT_RGB444: Final[NetworkVideo_TransportFormat] = NetworkVideo_TransportFormat.RGB444 #: Transport format carrying full RGB 4:4:4 colour sampling
NetworkFeedConfig.TRANSPORT_FORMAT_YUV420
TRANSPORT_FORMAT_YUV420: Final[NetworkVideo_TransportFormat] = NetworkVideo_TransportFormat.YUV420 #: Transport format carrying YCbCr colour sampling with horizontally and vertically subsampled chroma
NetworkFeedConfig.TRANSPORT_FORMAT_YUV444
TRANSPORT_FORMAT_YUV444: Final[NetworkVideo_TransportFormat] = NetworkVideo_TransportFormat.YUV444 #: Transport format carrying YCbCr colour sampling with full resolution chroma
NetworkFeedConfig.TRANSPORT_TYPE_COMPRESSED
TRANSPORT_TYPE_COMPRESSED: Final[NetworkVideo_TransportType] = NetworkVideo_TransportType.Compressed #: Transport type sending compressed video over ST.2110-22
NetworkFeedConfig.TRANSPORT_TYPE_COMPRESSED_NDI
TRANSPORT_TYPE_COMPRESSED_NDI: Final[NetworkVideo_TransportType] = NetworkVideo_TransportType.CompressedNDI #: Transport type sending compressed video as an NDI stream
Class.properties
ClusterAssigner.codec
codec: int
ClusterAssigner.compressedBitrate
compressedBitrate: int
D3NetManager.multicastConfigs
multicastConfigs: List[MulticastConfig]
D3NetManager.outputMachines
outputMachines: List[Machine] # read-only
D3State.projectClockType
projectClockType: SMPTEClockType # read-only
FieldSequence.isConnected
isConnected: bool # read-only
FisheyeProjection.diagonalFov
diagonalFov: float
FisheyeProjection.fovRadiusRatio
fovRadiusRatio: float # read-only
FisheyeProjection.maxFov
maxFov: float # read-only
NetworkFeedConfig.codec
codec: NetworkVideo_CompressionCodec
NetworkFeedConfig.compressedBitrate
compressedBitrate: int
NetworkFeedConfig.multicastConfig
multicastConfig: MulticastConfig
PongModule.resetScore
resetScore: int
PrivateState.defaultLookLengthSec
defaultLookLengthSec: float
PrivateState.defaultTrackLengthSec
defaultTrackLengthSec: float
PrivateState.shiftFocusToTimelineOnJump
shiftFocusToTimelineOnJump: bool
ProxySettings.codec
codec: int
ProxySettings.compressedBitrate
compressedBitrate: int
ST2110Details.enableRedundancy
enableRedundancy: bool
ST2110Details.localAdapter
localAdapter: IPAddress
ST2110Details.redundantLocalAdapter
redundantLocalAdapter: IPAddress
ST2110Details.redundantMulticastDst
redundantMulticastDst: IPAddress
ST2110Details.redundantMulticastSrc
redundantMulticastSrc: IPAddress
ST2110Details.redundantPort
redundantPort: int
SockpuppetProperty.defaultResourceUid
defaultResourceUid: int
Class.methods
ContentSource.isArrowSource
@staticmethod
def isArrowSource(sequence: FieldSequence) -> bool:
ContentSource.isContentSource
@staticmethod
def isContentSource(sequence: FieldSequence) -> bool:
ContentSource.isTextureSource
@staticmethod
def isTextureSource(sequence: FieldSequence) -> bool:
D3NetManager.adoptMulticastConfigsFromHeads
def adoptMulticastConfigsFromHeads(self) -> None:
D3NetManager.licenseCapabilitiesForMachine
def licenseCapabilitiesForMachine(self, machine: Machine) -> optional[LicenseCapabilities]:
D3NetManager.removeMulticastConfig
def removeMulticastConfig(self, config: MulticastConfig) -> None:
D3NetManager.allMachinesConnected
@staticmethod
def allMachinesConnected(machines: List[Machine]) -> bool:
D3NetManager.anyMachineNeedsDisplaySettingsApplied
@staticmethod
def anyMachineNeedsDisplaySettingsApplied(machines: List[Machine]) -> bool:
D3NetManager.notifyIfAnyMachineNeedsDisplaySettingsApplied
@staticmethod
def notifyIfAnyMachineNeedsDisplaySettingsApplied(machines: List[Machine]) -> bool:
FieldSequence.evalString
def evalString(self, t: float, ttl: int) -> str:
FieldSequence.expressionControlled
def expressionControlled(self) -> bool:
FieldSequence.getControlState
def getControlState(self) -> FieldSequence.ControlState:
FieldSequence.isExposedOnLook
def isExposedOnLook(self) -> bool:
Layer.isExternallyControlled
def isExternallyControlled(self) -> bool:
Machine.notifyIfNeedsDisplaySettingsApplied
def notifyIfNeedsDisplaySettingsApplied(self) -> bool:
Machine.splitMatrixInputs
@staticmethod
def splitMatrixInputs(input: str) -> List[str]:
Machine.splitMatrixOutputs
@staticmethod
def splitMatrixOutputs(output: str) -> List[str]:
Module.removeDisconnectedSequences
def removeDisconnectedSequences(self) -> None:
NetworkFeedConfig.isValidTransportCombination
@staticmethod
def isValidTransportCombination(type: NetworkVideo_TransportType, format: NetworkVideo_TransportFormat, bitDepth: NetworkVideo_TransportBitDepth, codec: NetworkVideo_CompressionCodec) -> bool:
SetList.addTrack
def addTrack(self, track: Track) -> None:
SetList.isTrackValid
def isTrackValid(self, track: Track) -> bool:
SockpuppetProperty.getDefaultResource
def getDefaultResource(self) -> Resource:
SockpuppetProperty.setDefaultResource
def setDefaultResource(self, resource: Resource) -> Self:
SuperTrack.clear
def clear(self) -> None:
SuperTrack.getUnsupportedLayers
def getUnsupportedLayers(self, sl: SuperLayer) -> List[str]:
SuperTrack.moduleIsSupported
def moduleIsSupported(self, moduleType: type) -> bool:
Track.timeOfNoteContainingBeat
def timeOfNoteContainingBeat(self, iBeat: float) -> float:
Removed
Class.variables
ClusterAssigner.SPLIT_TYPE_MANUAL
SPLIT_TYPE_MANUAL: Final[int] = 2
ClusterAssigner.SPLIT_TYPE_TILES
SPLIT_TYPE_TILES: Final[int] = 0
ClusterAssigner.TRANSPORT_BIT_DEPTH_10
TRANSPORT_BIT_DEPTH_10: Final[int] = 1
ClusterAssigner.TRANSPORT_BIT_DEPTH_12
TRANSPORT_BIT_DEPTH_12: Final[int] = 2
ClusterAssigner.TRANSPORT_BIT_DEPTH_16
TRANSPORT_BIT_DEPTH_16: Final[int] = 3
ClusterAssigner.TRANSPORT_BIT_DEPTH_8
TRANSPORT_BIT_DEPTH_8: Final[int] = 0
ClusterAssigner.TRANSPORT_FORMAT_RGB444
TRANSPORT_FORMAT_RGB444: Final[int] = 0
ClusterAssigner.TRANSPORT_FORMAT_YUV420
TRANSPORT_FORMAT_YUV420: Final[int] = 2
ClusterAssigner.TRANSPORT_FORMAT_YUV422
TRANSPORT_FORMAT_YUV422: Final[int] = 1
ClusterAssigner.TRANSPORT_TYPE_COMPRESSED
TRANSPORT_TYPE_COMPRESSED: Final[int] = 2
ClusterAssigner.TRANSPORT_TYPE_LOCAL
TRANSPORT_TYPE_LOCAL: Final[int] = 3
ClusterAssigner.TRANSPORT_TYPE_NDI
TRANSPORT_TYPE_NDI: Final[int] = 0
ClusterAssigner.TRANSPORT_TYPE_UNCOMPRESSED
TRANSPORT_TYPE_UNCOMPRESSED: Final[int] = 1
D3NetManager.MachineStatus.State.Busy
Busy: Final[int] = 3
D3NetManager.MachineStatus.State.Connection
Connection: Final[int] = 0
D3NetManager.MachineStatus.State.Devices
Devices: Final[int] = 3
D3NetManager.MachineStatus.State.Error
Error: Final[int] = 2
D3NetManager.MachineStatus.State.Genlock
Genlock: Final[int] = 2
D3NetManager.MachineStatus.State.Offline
Offline: Final[int] = 4
D3NetManager.MachineStatus.State.Output
Output: Final[int] = 1
D3NetManager.MachineStatus.State.Ready
Ready: Final[int] = 0
D3NetManager.MachineStatus.State.Warning
Warning: Final[int] = 1
Class.methods
Machine.createNextMulticastInfo
def createNextMulticastInfo(self) -> None:
Machine.removeMulticastInfo
def removeMulticastInfo(self, index: int) -> None:
NetworkFeedConfig.isValidSt2110TransportCombination
@staticmethod
def isValidSt2110TransportCombination(type: TransportType, format: TransportFormat, bitDepth: TransportBitDepth) -> bool:
SuperTrack.timeOfNoteContainingBeat
def timeOfNoteContainingBeat(self, iBeat: float) -> float:
Moved
Classes
MachineStatus → D3NetManager.MachineStatus
class MachineStatus(_BlipValue):
"""
Category: D3Net
State → D3NetManager.MachineStatus.State
class State(_BlipValue):
"""
Category: D3Net
Modified
Class.methods
ClusterAssigner.isValidWorkloadTransportCombination
- @staticmethod
- def isValidWorkloadTransportCombination(type: TransportType, format: TransportFormat, bitDepth: TransportBitDepth, alphaEnabled: bool) -> bool:
+ @staticmethod
+ def isValidWorkloadTransportCombination(type: NetworkVideo_TransportType, format: NetworkVideo_TransportFormat, bitDepth: NetworkVideo_TransportBitDepth, alphaEnabled: bool, codec: NetworkVideo_CompressionCodec) -> bool:
DmxPatch.nChannels
- @staticmethod
- def nChannels(property: SockpuppetPropertyType) -> int:
+ @staticmethod
+ def nChannels(property: SockpuppetProperty) -> int:
FeedScene.exportRectsAsTable
- @staticmethod
- def exportRectsAsTable(rects: List[FeedRect], path: str) -> Table:
+ @staticmethod
+ def exportRectsAsTable(rects: List[Any], path: str) -> Table:
IPVideoInSystem.createOrUpdateVideoInFromSDP
- def createOrUpdateVideoInFromSDP(self, file: str, path: optional[str], overwrite: bool, updateNMOSConnectionAPI: bool, sender_id: optional[str], pers: PersistentIPVideoIn) -> str:
+ def createOrUpdateVideoInFromSDP(self, file: str, path: optional[str] | std_nullopt | str, overwrite: bool, arg3: bool, sender_id: optional[str] | std_nullopt | str, pers: PersistentIPVideoIn) -> str:
LayerStack.makeArrow
- def makeArrow(self, src: Layer, dest: Layer) -> None:
+ def makeArrow(self, src: Module, dest: Module) -> None:
LayerViewHelper.precompExtents
- @staticmethod
- def precompExtents(track: Track) -> List[PrecompExtent]:
+ @staticmethod
+ def precompExtents(track: SuperTrack) -> List[PrecompExtent]:
NetSys.getNetworkAdaptors
- @staticmethod
- def getNetworkAdaptors(excludeLoopback: bool, excludeLinkLocal: bool) -> List[netsys::NetworkAdaptor]:
+ @staticmethod
+ def getNetworkAdaptors(excludeLoopback: bool, excludeLinkLocal: bool) -> List[netsys_NetworkAdaptor]:
SuperTrack.makeArrow
- def makeArrow(self, src: Layer, dest: Layer) -> None:
+ def makeArrow(self, src: Module, dest: Module) -> None:
Class.properties
AxisAngle.angle
- angle: float
+ angle: Type2
AxisAngle.axis
- axis: Vec
+ axis: Type1
Class.variables
SockpuppetPersonality.__username__
- __username__ = 'SockpuppetPersonality'
+ __username__ = 'Personality'
SuperTrack.__username__
- __username__ = 'SuperTrack'
+ __username__ = 'Track / Look'