Skip to main content

2026.702.0-beta

This is the first beta release for Pulse's UI rework, feature additions, and performance improvements!

Migration has been written for the nodes and properties that have been changed or removed.

App

  • Added more descriptions to app settings
  • Changed InstanceJoinedClientEvent to occur when the new instance has loaded instead of when the new instance is detected
  • Changed OSCQuery node encoding to solve issues with parameters that have names that aren't alphanumeric
  • Changed OSCQuery node handling to ignore 404 responses
  • Fixed VRChat open state detection in certain cases
  • Fixed issues with avatar height data gathering
  • Fixed InstanceJoinedClientEvent and InstanceLeftClientEvent triggering client data updates when back-reading the current log file
  • Fixed AvatarPreChangeClientEvent not updating the avatar info to null
  • Fixed log reader sometimes reading duplicated lines
  • Improved the performance of the log reader
  • Fixed avatar prechange not setting Client to not being in an avatar
  • Fixed TemplatedVRChatParameter throwing an error when wildcard index doesn't exist
  • Fixed USWest not being recognised in instance data parsing
  • Fixed all buttons not changing theme dynamically
  • Re-added Knuckles controller grip click (thanks to @jetdog8808 on Discord for looking into this)

SDK

  • Changed ModuleNode<T> to IModuleNode<T>
    • This allows module nodes to use the new base nodes whilst also marking themselves as a module node
  • Added EditableText UI component
  • Updated required WindowsSdkPackageVersion to 10.0.26100.56
  • Changed Interpolation.DampContinuously to snap to the target when within an epsilon of 1e-4
  • InstanceType has been changed to have Public as the default value instead of Group. This is a breaking change and will mess up graphs that utilise it
  • KeybindPicker now correctly updates the bound Keybind when the value has changed instead of on focus lost
  • Added ability for Module.SendParameter() to send to all parameters that match a wildcard
    • This requires OSCQuery to be enabled, otherwise falls back to blindly sending the parameter, therefore can only be used if OSCQuery is available
  • Fixed Visual Line Complete not being correctly populated by default in ProgressClipVariable

Pulse

  • Pulse's UI has been completely rewritten to allow for more features and performance improvements
  • Graph update performance has been improved up to 5x, with an average of 2.5x
    • The vast majority of users do not need to worry about performance, but a UPS display has been added in the bottom right to report if a graph seems like it's updating unusually slow
    • Nodes like FireWhileTrue are now accurate down to the maximum update delay of 10ms instead of being inconsistent below 100ms
    • Graphs are now on a central update thread instead of individual update tasks and now have more accurate timing
  • All Source nodes performances have been improved
  • All DisplayNode updates have been decoupled from the UI thread to reduce graph update time
  • The graph list has been remade
    • Graphs are now able to be disabled
    • You are now able to see if a graph is running
  • Graph elements can now snap to half increments of the grid
  • Fixed groups without nodes sometimes serialising causing excessive load times
  • Base nodes have been added for ease of use when making nodes for modules
    • For example, you can now use ValueSourceNode<T> which will automatically handle the setup for a continuous node
  • IContinuousNode has been made to replace UpdateNode<T>
    • This marks the node to be updated every graph update, but will only forward the value if the value has changed which is now handled by the graph
  • Multiple value input/output lists per node have been added
  • Flow input/output lists have been added
  • More user input types have been added
    • User inputs that are available are now: byte, sbyte, short, ushort, int, uint, long, ulong, float, double, decimal, string, bool, Enum, Keybind, DateTime, TimeSpan, Color, and ColorHSL
  • Where available value inputs can now have inline inputs for reducing the need for user input nodes
    • The types available for inlining are the same as user input types
  • Nodes can now have variants to reduce the need for submenus in the add node menu
    • For example, the Remap node now has 2 variants of Remap<T> and Remap<TFrom, TTo>, whereby the node creator window will automatically construct the correct node based on the amount of types a user enters
    • This is to address the need for nodes like Remap needing a user to type float, float in the creator window
  • Removed RichTextBox node
    • User inputs of type string are now able to be multiline
  • Removed IHasTextProperty and IHasKeybindProperty
    • Now that nodes can have inline inputs they are no longer needed as Direct/Indirect nodes can be merged
  • Pulse will now detect source/drive nodes based on certain conditions which allows module nodes to create custom sources
    • Docs on how the UI for a node is chosen is available here
  • Added graph comments
    • Instead of making small groups or using RichTextBox as a comment, comments are now available
    • Double-clicking the comment will allow you to edit the text
  • Variables
    • Double clicking the variable name now allows for renaming the variable
    • String variables are now exposed to the ChatBox timeline
  • All parameter sources now support wildcard matching.
    • ParameterSource now accepts wildcards and will return the value for the parameter that matches the wildcard that was updated most recently
    • WildcardParameterSource is now only needed for when you want to get the value of a wildcard
  • Added Sequence node
    • This allows you to define a sequence of flows to execute instead of having long flows
  • Added FlowMultiplex node
    • This allows you to choose which flow output to go down based on an index
  • Added FlowDemultiplex node
    • This allows you to choose which flow input to accept based on an index
  • Added Switch node
    • This is functionally equivilent to FlowMultiplex except instead of an index the flow output is matched against a value input removing the need for If chains
  • Added FlowDisplay node
    • This can be made by right clicking when dragging a flow output noodle and allows for visualising if a flow has reached that node
    • It also displays the flows per second
  • SendParameter and DriveParameter are now able to use wildcard matching and will send the value to any matched parameter on the current avatar
  • All value input names have been standardised, where needed, to include units
  • Moved some nodes in the add node menu to different submenus to better reflect their purpose
  • Added dolly control nodes
  • Added more Vector2/3 nodes
  • Added more Quaternion nodes
  • Fixed subtract node icon
  • Changed Random node to have Max input be inclusive for ints
  • Fixed graph copy/paste not copying variable references
  • Allow Dictionary<K, V> and List<T> to be in graph variables that are marked as persistent
  • Removed deprecated event nodes
    • Event nodes such as OnInstanceJoin are now no longer needed. Instead, use a FireOnTrue for when the user is in an instance
  • Refactored and added more regex nodes
    • Regex parsing is now more inline with how native C# regex parsing works
  • Refactored and added more file and path nodes
    • File and path handling in native C# is now all exposed to Pulse
  • Fixed QuaternionMultiply not defaulting to Identity when invalid inputs are provided
  • Fixed numeric textbox expressions not working correctly
  • Added variants of all nodes where needed
  • Added MultiMultiply node
  • Fixed last input slot not writing its current value when creating a user input node
  • Fixed DictionaryCreate and ListCreate input count value output not populating correctly
  • Improve Multiplex performance
  • Added ChangesPerSecond node
  • Added EqualsAny node
    • This allows you to match a value against multiple values, removing the need for Or chains
  • Fixed DampContinuously getting stuck as NaN
  • Added User-Agent header to HTTP nodes for receivers to identify if a request is coming from VRCOSC
  • Added toggle Random node to have it generate a random number that is different from the previous number
  • Added Velocity node to calculate the velocity of a number
  • SteamVRTriggerHaptic node now takes the duration in milliseconds instead of seconds
  • Added force reprocess tag to certain source nodes
    • All DateTime source outputs can now be connected to nodes after a delay and will return the correct time
    • Multiplex can now have its input count output connected to a For count input and have the multiplexed value be used inside On Iteration
  • Changed color nodes to be consistent
    • ColorHSL now handles the hue as a float of 0-1
    • Color has been added
  • Fixed ContinueOnElapsed not continuing if the time was 0 or below
  • Added EasingMode to Tween node
    • This removes the need for tweening between 0 and 1, adding an easing node, and then remapping 0-1 to the desired range
  • Fixed UserCameraSetGreenScreenBackground not defaulting the color input to the default greenscreen color
  • Fixed InstanceUnpack and AvatarUnpack returning IReadOnlyList instead of IEnumerable causing immutable errors
  • Changed HTTP node timeout to be in milliseconds instead of a TimeSpan

Modules

  • Updated all nodes to the new SDK
  • Changed Counter parameter handling to allow for wildcards
    • If you have VRCFury parameters that you cannot mark as global, write the parameter name with a * at the beginning
  • Fixed ClientInfo instance user count sometimes being incorrect
  • Fixed Twitch module crash when no access token is available