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
InstanceJoinedClientEventto 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
InstanceJoinedClientEventandInstanceLeftClientEventtriggering client data updates when back-reading the current log file - Fixed
AvatarPreChangeClientEventnot 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
Clientto not being in an avatar - Fixed
TemplatedVRChatParameterthrowing an error when wildcard index doesn't exist - Fixed
USWestnot 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>toIModuleNode<T>- This allows module nodes to use the new base nodes whilst also marking themselves as a module node
- Added
EditableTextUI component - Updated required
WindowsSdkPackageVersionto10.0.26100.56 - Changed
Interpolation.DampContinuouslyto snap to the target when within an epsilon of1e-4 InstanceTypehas been changed to havePublicas the default value instead ofGroup. This is a breaking change and will mess up graphs that utilise itKeybindPickernow correctly updates the boundKeybindwhen 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 Completenot being correctly populated by default inProgressClipVariable
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
FireWhileTrueare 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
Sourcenodes performances have been improved - All
DisplayNodeupdates 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
- For example, you can now use
IContinuousNodehas been made to replaceUpdateNode<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, andColorHSL
- User inputs that are available are now:
- 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
Remapnode now has 2 variants ofRemap<T>andRemap<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
Remapneeding a user to typefloat, floatin the creator window
- For example, the
- Removed
RichTextBoxnode- User inputs of type
stringare now able to be multiline
- User inputs of type
- Removed
IHasTextPropertyandIHasKeybindProperty- 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
RichTextBoxas a comment, comments are now available - Double-clicking the comment will allow you to edit the text
- Instead of making small groups or using
- 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.
ParameterSourcenow accepts wildcards and will return the value for the parameter that matches the wildcard that was updated most recentlyWildcardParameterSourceis now only needed for when you want to get the value of a wildcard
- Added
Sequencenode- This allows you to define a sequence of flows to execute instead of having long flows
- Added
FlowMultiplexnode- This allows you to choose which flow output to go down based on an index
- Added
FlowDemultiplexnode- This allows you to choose which flow input to accept based on an index
- Added
Switchnode- This is functionally equivilent to
FlowMultiplexexcept instead of an index the flow output is matched against a value input removing the need forIfchains
- This is functionally equivilent to
- Added
FlowDisplaynode- 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
SendParameterandDriveParameterare 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
Randomnode to have Max input be inclusive for ints - Fixed graph copy/paste not copying variable references
- Allow
Dictionary<K, V>andList<T>to be in graph variables that are marked as persistent - Removed deprecated event nodes
- Event nodes such as
OnInstanceJoinare now no longer needed. Instead, use aFireOnTruefor when the user is in an instance
- Event nodes such as
- 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
QuaternionMultiplynot defaulting toIdentitywhen invalid inputs are provided - Fixed numeric textbox expressions not working correctly
- Added variants of all nodes where needed
- Added
MultiMultiplynode - Fixed last input slot not writing its current value when creating a user input node
- Fixed
DictionaryCreateandListCreateinput count value output not populating correctly - Improve
Multiplexperformance - Added
ChangesPerSecondnode - Added
EqualsAnynode- This allows you to match a value against multiple values, removing the need for
Orchains
- This allows you to match a value against multiple values, removing the need for
- Fixed
DampContinuouslygetting stuck asNaN - Added
User-Agentheader toHTTPnodes for receivers to identify if a request is coming from VRCOSC - Added toggle
Randomnode to have it generate a random number that is different from the previous number - Added
Velocitynode to calculate the velocity of a number SteamVRTriggerHapticnode now takes the duration in milliseconds instead of seconds- Added force reprocess tag to certain source nodes
- All
DateTimesource outputs can now be connected to nodes after a delay and will return the correct time Multiplexcan now have its input count output connected to aForcount input and have the multiplexed value be used insideOn Iteration
- All
- Changed color nodes to be consistent
- ColorHSL now handles the hue as a float of 0-1
- Color has been added
- Fixed
ContinueOnElapsednot continuing if the time was 0 or below - Added
EasingModetoTweennode- This removes the need for tweening between 0 and 1, adding an easing node, and then remapping 0-1 to the desired range
- Fixed
UserCameraSetGreenScreenBackgroundnot defaulting the color input to the default greenscreen color - Fixed
InstanceUnpackandAvatarUnpackreturningIReadOnlyListinstead ofIEnumerablecausing immutable errors - Changed HTTP node timeout to be in milliseconds instead of a TimeSpan
Modules
- Updated all nodes to the new SDK
- Changed
Counterparameter 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
- If you have VRCFury parameters that you cannot mark as global, write the parameter name with a
- Fixed ClientInfo instance user count sometimes being incorrect
- Fixed Twitch module crash when no access token is available