Close

Release Notes

Current Build 2022.28040 - Aug 29 2022 - Download Here

See our Official Announcement for an overview of new features.

There are no current experimental builds. Go to Experimental Release Notes for previous builds.

Official Build - 2022.20000 Series

Known Issues

Windows Specific

macOS Apple Silicon Build Specific


Build 2022.28040 - Aug 29, 2022

New Features

  • TDAbleton - Version 2.0 - Read the TDAbleton 2.0 announcement and see the 'New Palette' section below.
  • RenderStream - Added support for Disguise RenderStream. Requires Disguise version r22 or later.
    • RenderStream In CHOP - This node is the primary operator to control and configure a connection with RenderStream. Along with being the sync-point for when a frame starts rendering, it also brings in all of the control channels, and also takes a DAT with schema information to create controllable parameters within Disguise.
    • RenderStream In TOP - Receives image data sent over RenderStream.
    • RenderStream Out TOP - Sends image data out to RenderStream.
  • Text COMP / Geo Text COMP - New 'Vertical Align' option called 'Baseline' sets the baseline of the text to the bottom of the page. This will result in descenders dropping below the page.

New Palette

  • TDAbleton - Version 2.0 - Read the TDAbleton 2.0 announcement!
    • Inside the TDAbleton folder in the palette you will fine a new subfolder called "Live 11". This contains TDAbleton 2.0 and only works with Ableton Live 11+. To use TDAbleton with older versions of Live, please use the TDAbleton found inside the "Live 9 & 10" subfolder.
    • In the TouchDesigner Samples folder TDAbleton samples are now divided into Live 11 and Live 9 & 10 subfolders for use with their respective versions.
    • The abletonTrack component now includes features for working with clips in the Arrangement.
      • Info about those clips can be found in the standard CHOP channels (look for "aclip"), in the "clip status" DAT output, and in the new "arrangement clips" DAT output.
    • abletonSong component
      • Now has global clip launch quantization features.
      • Can handle cue points with the same name.
      • currentCuePointName output now also contains the current cue point index.
    • abletonRack components
      • Now work with up to 16 macros.
      • New parameters for triggering rack presets.
    • abletonValueListener component
      • Now allows LOM expression additions when following selection.
      • Has an Output String Value parameter to prevent overcooking when the string is not needed.
    • tdAbleton master component has more parameter options for suppressing popup dialogs.
    • The Ableton Console has a number of UX bug fixes.
  • Palette:cameraViewport - Bug fixes
    • Dolly speed is now properly updated while dragging the middle mouse button.
    • Fixed an issue with the transform not being saved properly.
    • Fixed an issue with the navigation menu incorrectly opening after a right-click movement.
    • Orthographic mode is now off by default.
  • palette:particlesGpu - various additions and bug fixes
    • Added input for a source color. With this particles created from a source geometry can be specified via a texture of the same dimensions.
    • Optical flow input added.
    • New 'Fade Out' hit behavior.
    • Camera now saves last position.
    • Component starts with leaf setup.
    • Continuous rotation reworked.
    • Bounding box display updates correctly when changing size.
    • Particle sizing reworked.

Bug Fixes and Improvements

  • NDI - Upgraded to NDI 5.5.
  • Upgraded to latest MoltenVK version which fixes numerous macOS bugs.
  • macOS - Fixed a lot of crashes/hangs that were happening due to a bug in MoltenVK.
  • macOS - Noise TOP - Fixed RGB Simplex noise not working on macOS.
  • macOS - Screen Grab TOP - Works on macOS again.
  • Ableton Link CHOP - Upgraded to v3.0.5
  • Bluefish444 - Upgraded to SDK version 6.5.1.22. This should add support for the new Optikos 3G cards.
  • Engine COMP - Fixed String and Pulse parameters not updating properly.
  • Text COMP / Field COMP - setKeyboardFocus() now also sets the focusselect panel value when called.
  • Text COMP - Fixed bug where Alt-tabbing back to TouchDesigner didn't properly restore the editing state.
  • Text COMP - Fixed an issue with the text not rendering after changing the 'Type' parameter.
  • Cube Map TOP - Fixed a case where the Cube Map TOP would create corrupted images on AMD.
  • Feedback TOP - Now works with Cube Map textures and fixed some crashes.
  • OP Viewer TOP - Fixed issue with not updating when nodes are moved around.
  • RGB Key TOP - Fixed clamping issue with Green and Blue Min/Max parameters.
  • BlackTrax CHOP - On reset also clear any beacon tracking data for those that are no longer tracked.
  • DMX In CHOP - sACN multicast mode now takes into account the local address parameter for IGMP packets.
  • Expression CHOP - Fixed loading of old files with multiple expressions.
  • MIDI In CHOP - Fixed Simplified MIDI failing to update unless 'Preserve Pulses' was on.
  • PosiStageNet CHOP - Added 'Local Address' parameter.
  • Trigger CHOP - Enabled 'Re-Trigger Delay' parameter when no input is connected.
  • Subdivide SOP - Fixed cases where the generated attributes would randomly become invalid data.
  • MIDI In DAT - Allow re-activation when the 'Active' parameter is an expression. (Example: MIDI Device Mapper 'In Messages')
  • Table DAT - Fixed a bug where some window UI would not work after hitting TAB to navigate table cells.
  • WebSocket DAT - Fixed crash when deleting operator as connection is established.
  • Phong MAT - Fixed color and center for the second Rim Light not working correctly.
  • Add a warning on nodes when parameters are expecting exports but they are missing.
  • Fixed cases where pulse expressions/binds refer directly to other pulse parameters. Allow them to all be called together on the same frame.
  • Fixed missing pulses when pulse parameters pulsed every frame.
  • Fixed a bug with Annotate COMP not receiving keyboard focus when created in a floating window.
  • Fixed parameter dialogs ever growing during resize if .showCustomOnly = True
  • Fixed parameter page selector showing wrong parameters in the case of Custom C++ operators.
  • Fixed a bug with popup windows closing immediately in perform mode.
  • Value ladder numbers should no longer switch to repeating decimals when making small increment adjustments.
  • Better error message when GPU memory runs out.
  • toeexpand option to output build information directly.

Example:

   !toeexpand -b untitled.toe
   version 099
   build 2021.12940
   time Wed Apr 28 15:14:10 2021
   osname Windows
   osversion 10


Build 2022.26590 - Jul 19, 2022

New Features

  • Geo Text COMP - Added option to Parse Escape Sequences so that '\n' and '\t' can be used in the value for line breaks and tabs.
  • Panel COMP - The 'TOP Smoothness' parameter now has new menu entry 'Use TOP Viewer Setting' which looks at the referenced TOP's setting and uses that for the panel.
  • Parameter COMP - New option 'Sync Page Selection' (default off). This allows different Parameter COMPs to reference the same node, each on its own page. This also solves issues of some dialogs showing no parameters when page scope was used.
  • CPlusPlus SOP - Added new 'winding' member to SOP_GeneralInfo, enabling the option of using more correct counter-clockwise polygon winding.

New Python

  • GeotextCOMP Class.textHeight, textWidth - New function to return the width and height of the current text. Only available in Text mode and excludes transforms.
  • GeotextCOMP Class.evalTextSize - Returns the dimensions of the given string using the Geo Text COMPs current settings.
  • Monitors Class - subscript operator now supports full slicing.
  • Par Class.order/startSection - Fixed getting values for parameters auto-generated by operators such as: Notch, Substance, Audio VST, Script OPs etc.
  • ParGroup Class - subscript operator now supports full slicing.

For example: op('geo1').parGroup.t[:2] returns the tuple of parameters (tx, ty)

  • WebclientDAT Class.request - Fixed automatic conversion to string when passing bytes to the data keyword argument.

New Palette

  • Palette:sopRender - Replaced Zoom parameter with 'Distance' and 'Ortho Width'.
  • Palette:cameraViewport - Replaced Zoom parameter with 'Pivot Distance'.
  • Palette:cameraViewport - Transform is now saved to local storage.
  • Palette:TDVR - All devices are now inactive on start.
  • WebRTC component updates
  • Widgets - TDWidgetKit 2.1.40
    • Typo fix in the Header component's python callback.
    • TOP Smoothness set to linear and Mipmap turned off for all widget components.

Bug Fixes and Improvements

  • NDI - Upgraded to NDI 5.1.3.
  • TouchEngine - Fixed crash which could occur when using TouchEngine with a TouchDesigner 2022 installation.
  • Engine COMP / TouchEngine - Fixed crash which could occur when a DAT input or output was resized.
  • Engine COMP - Bug fixes
    • Fixed an issue which prevented changes to parameters being applied if the parameters were exports or expressions.
    • Fixed "initializing" Info CHOP channel reading 1 after unloading.
  • Geometry COMP - Fixed Instance custom attribute parameters beyond the first set not evaluating correctly when the node has custom parameters.
  • Geo Text COMP - Specification DAT bug fixes
    • Fixed 'Specification DAT' not rendering if the first row has blank for the 'text' column.
    • Info DAT now shows the height and width of each text block when in Specification DAT mode.
  • Text COMP - Bug fixes and improvements
    • Fixed an issue displaying text on load when the 'Text' parameter is blank.
    • Fixed a problem with the 'Text' parameter not updated after using the value ladder.
    • Added support for continuous editing mode when using value ladders.
  • Cache TOP - Allow Cache TOP replace pulse to be called multiple times per frame. This fixes problems reported with colour_lovers_picker.tox
  • GLSL TOP - Fixed sTDNoiseMap sampler2D being just 0 values.
  • GLSL TOP - Fixed crash that can occur when this node is bypassed.
  • Movie File In TOP - Fixed a crash and some issues with color channels.
    • Fixed 16-bit .tiff files loading with R and B swapped.
    • Load 2-channel .png files as Mono-Alpha correctly now.
    • Fixed crash that can occur when playing back NotchLC files.
  • Render TOP - Improved memory management.
    • Clear more memory when cooking is disabled on this node.
    • Fixed GPU memory leak that can occur when the node is in error.
  • SSAO TOP - Improvements
    • Added ability to work with multi-camera rendering.
    • Fixed crash when input was a non-antialiased Render TOP.
  • Bind CHOP - Fixed random glitches when using multiple inputs of different lengths.
  • MIDI In CHOP - Performance improvements
    • Quarter frame values now only updated when complete frame information received.
    • 'Simplified Output' is no longer timesliced, unless 'Preserve Pulse' is enabled. Should reduce cooking.
  • OSC In CHOP - Fixed corruption (increase) of 'Queue Target' parameter on file save.
  • Parameter CHOP - Added ParGroup Name to avoid use of obsolete Tuplet Name.
  • Object Merge SOP - Transform Object working again.
  • Point SOP - Fixed a crash when decreasing number of custom attributes.
  • Raster SOP - Fixed cooking bug when using 'Download Type' set to Next Frame.
  • Sprinkle SOP - Fixed strange behavior after bypassing the operator.
  • Render Pick DAT - Fixed hang when using the pick method.
  • Serial DAT - Write throughput performance doubled or more when sending several small messages.
  • Text DAT - Fixed a bug that could drop the first line if it was only one character.
  • WebRTC DAT - Callback DAT now defaults to Python formatting.
  • Phong MAT - When outputting normals to extra color buffers, if the buffer is fixed-point, the values will now be re-ranged to be in 0-1.
  • macOS - The minimum supported version of macOS is now 10.14 (Mojave).
  • macOS - Fixed crash when using middle-click info popup to measure GPU performance on macOS 10.14/10.15.
  • Text entry in DATs and the Textport is no longer blocked when the Alt key (Option on macOS) is held down.
  • Fixed preserving of COMP inputs when .tox files are reloaded on startup.
  • Performance improvements for cases when the Textport is updated continuously.
  • Expanding/collapsing all expression fields (+/-) snappy again.
  • Fixed Export Movie Dialog having incorrect default movie file path.
  • Fixed crash that can occur when minimizing the main window.

Backward Compatibility

  • BACKWARDS COMPATIBILITY - Custom Operators - Except for Custom SOPs, the winding for polygons/triangles returned from the input SOPs will now be counter-clockwise instead of clockwise was it was incorrectly before. SOPs will match the setting for the SOP_GeneralInfo::winding member, which allows for cleaner backwards compatibility for those nodes.


Build 2022.25370 - Jun 15, 2022

New Features

New Python

For example:
op('geo1') + '_123'
op('geo1') * 3

New Palette

  • Widgets - Fixed default path loss. Also BasicWidgets component now has display flag off.

New OP Snippets

20 new ones. Help -> OP Snippets and click Newest.

Bug Fixes and Improvements


  • Actor COMP - Fixed diagonal drifting of particles while using velocity feedback in Flex.
  • Engine COMP - Fixed issue which could cause outputs not to update sometimes if they cooked only in the first frame.
  • Engine COMP - Fixed delayed memory release if a DAT output was removed.
  • Geometry COMP - Instance Texturing now works on macOS (although with much fewer textures possible than on Windows).
  • Geo Text COMP - Fixed horizontal alignment when using appended lines in the 'Specification DAT'.
  • Geo Text COMP - Local transforms using the 'Specification CHOP' or 'Specification DAT' now pivot around the center of the text rather than the bottom left.
  • Light COMP - Fixed crashes that can occur when disabling cook flag on Light COMPs or the TOPs they reference.
  • Text COMP - Increased the height of the cursor and selection highlight.
  • Movie File In TOP - Handle loading .bmp files that have negative height in their header.
  • Notch TOP - Fixed reported block_render_time not updating unless MMB info is active.
  • Render TOP - Fixed hang that can occur when doing Depth Peeling.
  • Render Select TOP - Fixed 'Image Output' not returning the correct texture.
  • Syphon Spout In TOP - Fixed texture not working when used in a MAT that has mipmapping on.
  • Video Device In TOP - Fixed deinterlace feature not working.
  • Video Device In TOP - Fixed crashes that can occur with some camera inputs, virtual cameras in particular.
  • Video Device In TOP - Fixed some hangs that can occur when using Media Foundation library.
  • Video Device In TOP - Fixed some errors when converting YUV To RGB that were introduced in the 2022.20000 series.
  • Video Device In TOP - Improved playback smoothness when input framerate is higher than the TouchDesigner framerate.
  • Video Device Out TOP - Fixed large cook times when using pinned memory with Blackmagic devices.
  • Vioso TOP - Fixed issue with loading warp texture.
  • Blend CHOP - Fixed undercooking when using Quaternions.
  • Info CHOP - Scope parameter now works for other Info Types.
  • Leap Motion CHOP / Leap Motion TOP - Re-enabled on Intel Macs. Ultraleap has not made the Leap Motion SDK available for Apple Silicon so at this time we do not have a timeline for Leap Motion on macOS Apple Silicon builds.
  • Script CHOP - Callback DAT now defaults to Python syntax highlighting.
  • Timer CHOP - general improvements.
    • 'External Start Offset' / 'External Init Offset' parameters to control how the external CHOP channel input is applied for timing. Init Offset lets you initialize some time before the start time when using external control.
    • Limit onInitialize callbacks to one per frame, not one per timeslice sample.
    • Fixed crash when tied to timeline and changing column output values.
    • Segment objects now compare against non-numbers properly.

For Example: if (segment != None) ...

  • Text DAT - Fixed a crash when hitting Ctrl+Delete or Ctrl+Backspace to delete the node while editing.
  • UDP In DAT - Fixed memory leak when using onReceive callback.
  • WebRTC DAT - Enable on Apple Silicon (arm64 builds).
  • WebSocket DAT - Fixed 'Bytes' column, receiving of fragmented messages, and the triggering of onConnect/onDisconnect callbacks when pulsing 'Reset' parameter.
  • Web Server DAT/WebSocket DAT - Fixed a crash when sending a frame at the same time as the connection is reset on the remote end.
  • Text SOP - Fixed crash in some cases when using a Font File.
  • Vertex SOP - Fixed integer custom attributes not working.
  • MAT - MAT nodes can no longer be bypassed by doing a bypass while they are group selected with another node type.
  • Constant MAT - Fixed crash when a TOP it was referencing is bypassed.
  • Performance monitor now includes unaccounted time *before* total time.
  • Exposed all installer options as command line parameters.
  • Fixed slow memory leak that can occur in some cases.
  • Fixed connecting non-components to multi-input components.
  • Fixed a bug setting the focus on popMenus.
  • Stopping the timeline in Execute DAT onStart() will now keep it stopped after launch.
  • Export Movie Dialog - Fixed file browser selection for the recorded movie's filename.
  • Fixed crash when using normalized TOP view on 3D textures.


Build 2022.24200 - May 24, 2022

We recommend updating your graphics drivers before using TouchDesigner 2022.

Release Highlights

Major Architectural Updates

Apple Silicon Support

Native Apple Silicon (arm64) support is now available for Apple M1 Macs. Download the installer labelled "Apple Silicon", the filename will include "arm64".

macOS systems that do not have Apple Silicon M1 chips should use the installer labelled "Intel".


Vulkan API

TouchDesigner's graphics API is now Vulkan, OpenGL has been completely removed. The port to Vulkan is part of our current efforts to modernize TouchDesigner's engine and enables the introduction of new features that are available through modern APIs such as Vulkan and Metal.

macOS uses MoltenVK, a portability project allowing Vulkan to be used on top of Apple's Metal framework ensuring we are developing with the latest API that Apple is focusing their resources on.

  • Vulkan can significantly reduce driver overhead compared to openGL.
  • Compute Shaders fully supported on all platforms including macOS now.
  • GLSL continues to be fully supported in TouchDesigner. Furthermore, our previous OpenGL engine limited macOS to GLSL 3.30, but the switch to Vulkan enables GLSL 4.60 in macOS which improves compatibility for TouchDesigner projects that need to run on both operating systems.

Future exciting features will be possible with TouchDesigner's new Vulkan architecture:

  • Many cross-vendor extensions coming to Vulkan, such as Vulkan Video, which will allow TouchDesigner to access the hardware video encoding/decoding of all GPUs with a single API in the future.
  • Some operations can be further threaded to improve performance, such as video input and outputs.
  • More operations within TouchDesigner can be done with compute shaders in the future. Some TOPs can be re-written using compute shaders for performance improvments. NotchLC codec encode/decode on macOS has already been added using compute shaders.
  • Vulkan's better support of HDR color space outputs is another feature we can look forward to in the future.


Working in the Network Editor

Network Comments, Boxes, and Annotations

  • Add Comments and Boxes to your networks to keep them organized and easy to understand. Leave notes, documentation or instructions to yourself and others.
    • From the Network Editor RMB menu, select 'Add Comment' or 'Add Network Box' to add one to your network.
    • Change color using the Color Swatch in the Network Editor (press c-key to display).
    • Right-click to open the parameters.
    • Comments and Network Boxes are referred to as 'Utility Nodes' and do not show up in OP Find, COMP Class.findChildren(), network list mode and other searches by default.
  • Annotate COMP - Fully customizable network tools can be created with the Annotate COMP.
    • Embed operator viewers and panels in the network editor background, control options for interaction and enclosing operators, and specify depth placement amongst network elements.
    • Comes pre-configured but can also be built from scratch as a custom tool by resetting parameters and deleting its contents.
    • Pre-configured Annotate COMP includes more settings for text, color, size, and OP Viewer in the background.

DAT Viewer Syntax Highlighting

  • DAT Viewers now support syntax highlighting for the TouchDesigner languages python, GLSL, JSON, XML.
    • The 'Language' parameter on DAT's Common page has been expanded to include settings for which language is in the DAT.
    • SET LANGUAGE for your DATs - Under the Edit menu, Edit > Auto Set DAT Language will run through DATs in your project scanning the contents of each DAT, auto-detecting the language and then setting the correct language.
    • Note - DATs have different language defaults now. For example, Execute type DATs default to python, JSON DAT defaults to JSON, DATs created with GLSL TOP/MAT default to GLSL, standard Text DATs default to plain text, etc.
  • The DAT Viewers also now have custom zoom settings in the RMB menu of the viewer.

Search and Replace

  • A new Search / Replace Dialog that also offers search & replace functionality either globally or per component. A massive time-saver to assist with refactoring, updating, or renaming anything in your large projects. The features of this dialog were modelled from an updated Palette component called Palette:searchReplace found in the Tools folder.


High DPI Panel Rendering

A complete overhaul of panel component rendering introduces panels that are no longer rendered with fixed sized textures. The change means panel contents are drawn directly to screen, enabling resolution independent rendering and crisp details in TouchDesigner UI and control panels at any zoom level.

  • TouchDesigner's UI now takes advantage of hiDPI and high resolution monitors. Text, borders, and lines are now drawn directly to screen taking advantage of all the pixels available, without the internal scaling that previously made the UI soft and fuzzy on hiDPI monitors.
  • Text COMP - A new component for rendering resolution independent text in panels, it uses the Slug Library and does everything on the GPU. Read more in 'New Operators' section below.
  • Built-in UI text rendering was also changed to use Slug Library and panel direct rendering, you will see this in parameter dialogs, nodes viewers and names, and built-in menus and pop-ups, etc.
  • DATs viewers have been updated to use this new rendering engine as well.
  • The rest of the user interface has been updated to use Text COMPs internally, bringing this to dialogs, the palette, main menus, and timeline.
  • Widgets - Upgraded all fields and labels to use new Text COMP.
  • NDI - Updated to NDI 5.0


SDI and Video Pipeline Upgrades

New Device Support

  • Deltacast support has been added, TouchDesigner supports both Deltacast PCI-e video cards and the Deltacast FLEX product line.
  • Bluefish444 SDK updated adding support for the new Khronos line of cards, 10-bit YUV capture and capturing VITC timecode data from Bluefish444 devices.

12-bit workflows are now supported

  • AJA devices can now capture at 12-bit RGB 4:4:4 and output 12-bit formats when the device supports it.
  • Blackmagic Design devices can now capture and output 12-bit formats.

10-bit workflows have been improved

Improvements to Video In and Out

  • Video Device In TOP
    • New transfer modes for Vulkan implementation found under the 'Transfer Mode' parameter.
    • New 'inputSignalFormat' member, which can be used to drive the 'Signal Format' menu on a Video Device Out TOP.
    • New 'signal_fps' Info CHOP channel for Blackmagic Design and AJA devices which reports the frame rate of the input signal.
    • New 'rgb_input' Info CHOP channel which reports when the input is RGB 4:4:4 instead of YUV 4:2:2.
    • New 'frames_skipped', 'frame_queue_length' and 'last_dma_copy_time' Info CHOP channels for debugging input signal performance.
    • Added new 'frame_timestamp' and 'frame_hw_queue_length' Info CHOP channels for Blackmagic devices.
    • Added a new 'Reset Stats' pulse parameter.
  • Video Device Out TOP
    • Added new 'Reference Source' parameter for selecting genlock reference source on Deltacast cards to sync the signal timing coming out of the cards to a house sync.
    • Added 'Reset Stats' pulse parameter.

Color Correction

  • OpenColorIO TOP - Upgrade to SDK 2.1.0 which provides a better renderer able to read the latest .ocio config standard format. This offers new features such as built-in LUT referencing (for the most common LUTs) which can avoid having to reference lots of external LUTs.

Hap Codec Improvements

  • Hap - Added support for new Hap HDR format. A 16-bit movie format that is just as fast to playback as other Hap formats. However, does take longer to encode which you can now do with the Movie File Out TOP.
  • Movie File Out TOP - Added support for encoding Hap R at a much faster speed than previously possible. Hap R uses 8-bit color depth and has higher image quality than both Hap and Hap Q . It can include alpha.


Steinberg VST® (Virtual Studio Technology)

VST is a proprietary standard for audio plug-ins that has made it possible for hundreds of third-party software programmers to create and sell virtual instruments files in popular digital audio workstations (DAWs), and now, TouchDesigner!

TouchDesigner now supports VST3 plugins via the Audio VST CHOP. Our implementation uses the JUCE framework for VST3 plugins.

  • Support for VST3 plugins
  • Any parameter of the VST plugin can be exposed as a TouchDesigner parameter.
  • The VST plugin's UI can be displayed in a floating window.
  • Filters (take input channels), Instruments (no inputs) and MIDI plugin types are supported.
  • Send MIDI Events to the VST plugin with the MIDI Event functions
  • Capture the MIDI events the VST plugin generates using Audio VST CHOP's callbacks DAT.
  • JUCE v6.1.6


WebRTC


Python and ParGroups

Python

  • Python - The version of Python in TouchDesigner has been updated to 3.9.5. The previous version was Python 3.7.2. To discover 'What's New' in Python since then, refer to the Python 3.8 and Python 3.9 documentation.
  • Par Class.lastScriptChange is a member which gives information about when a parameter was last modified by a script, helpful when troubleshooting parameter behavior.
  • tdu.tryExcept(func1, func2 or value) - Offers new try/except function which lets you make some powerful single line expressions.
  • Dependency Class now has a callbacks method for those of you leveraging dependencies in your projects.

For more details on the above additions see the Python section below.

ParGroups

A ParGroup is a group of related parameters offering a more natural way to work with the ParGroup as a whole instead of its individual parameters.

Often all parameters sharing the same line in a parameter dialog belong to the same ParGroup. For example, in the Transform TOP, Translate is a type of ParGroup, with two primary Par objects: tx, ty and a unit parameter. ParGroups with only single elements are also possible. For example, the Uniform Scale parameter of the Geometry COMP belongs to a ParGroup with only one parameter.


Custom OPs and Extending TouchDesigner

Custom Operators

  • Custom Operators now support calling Python callbacks from the C++ code.
  • Custom Operators can now use the CPython API to define a custom Python class for the node. This allows directly interacting with the C++ code via Python calls.
  • The provided headers for Custom Operators are now put into the 'TD' namespace. Existing plugins will continue to work, but if you upgrade to the latest header files you'll likely need to add using namespace TD; in your code to find all the definitions when recompiling your plugin.

Custom Operator TOPs (CPlusPlus TOP)

Due to large changes in the switch to Vulkan, all Custom Operator TOPs (but not other node families) will need to be upgraded to a newer API. The API is much cleaner to work with and more powerful. Upgrading should be quick for cases other than TOPs written using OpenGL mode, which have no upgrade path yet, until we add a Vulkan mode. The CPU and CUDA modes are much cleaner to work in now though. New features that are now supported include:

  • Support for downloading and creating many more pixel formats.
  • Can now create 3D, 2D Array and Cube textures in CPUMem mode.
  • Support for uploading to multiple color buffers, with different dimensions/resolutions/formats when in CPUMem mode.


New Operators
  • Text COMP - The Text COMP is used to display text in panels for building user interfaces and control panels. It is a replacement for the Field COMP, completely replacing it and adding many new features not previously available.
    • Works for both static and editable text.
    • Modes for displaying strings and multiline text, float and integer numbers, password fields and more.
    • Text formatting options include support for Python syntax, Custom C++ Fmt and Custom Python F-String syntax.
    • Number formatting options for displaying timecode, scientific, percent, and currency values.
    • Supports inline formatting directives in the text for things like color, strikeouts, underlines, smallcaps, subscript, gradients, etc. For example, the code {#color(255, 0, 0);} will turn all text that follows on that line red.
    • Resolution independent text drawn directly to screen at the resolution required for the panel size, resulting in perfectly crisp text at all zoom levels.
    • Specification DAT allows for individual strings to be positioned and styled independently through a table-spreadsheet format. Some additional attributes supported include font size, color, skew, tracking and stretch.
    • A Specification CHOP allows for similar styling control as the Specification DAT through CHOP channels instead.
    • Numerical formatting can be used for values in the specification DAT.
    • GPU based using the Slug Library.
  • Geo Text COMP - A new component that creates text geometry directly on the GPU using the Slug Library, similar to the 2D Text COMP.
    • Specification DAT allows for individual strings to be positioned and styled independently in 3D. Each row represents a separate string, and the columns (that override parameters) can include tx, ty, tz, all rotate/scale channels (as per Transform Order), plus fontsize, fontcolor, tracking etc., plus all the layout box and alignment parameters. (font/bold/italic not supported as columns)
    • A Specification CHOP allows for similar string manipulation as the Specification DAT but through a CHOP interface instead.
    • Supports clipping text to to a defined layout box.


SDKs Updated


New Features

Timer CHOP Improvements

  • New 'Length Type' parameter offers an infinite running mode where a 'Length' does not need to be specified such as endless generative content.
  • Sub Range parameters let you loop anywhere within the full time range.
    • the callback onSubrangeStart() lets you do whatever you need to do when the timer jumps back to the Sub Start time.
    • 'Sub End Action' parameter to control whether subrange ends or pauses at end of subrange.
  • To help you manage initializations that take several frames to complete, callCount is passed to the onInitialize() callback incrementing each time. Info CHOP now includes a call_count channel.
  • 'segment' argument in callbacks now contains new members: 'segment.row' describes table columns defining the segment that override parameters, 'segment.custom' is a dictionary of custom columns/values, as well as calculated start/delay/lengths in various units. This avoids having to write tricky expressions to get cells out of the segments table.
  • Master Time - new measurement taking into account delay times, speed and play state and all types of segment modes. It's the time that cues and goTo() would use.
    • New python members .masterSeconds .masterFrame .masterSample .masterFraction which you can now use to get or set the overall time position of the timer.
    • New 'timecode_master' in Info DAT including timecodes for current master time, countdown timecode and timecode for total master length.
    • goTo() now works correctly with segments and is now equivalent to setting .masterSeconds etc.
  • New channel output option "Master Time Count" outputs the overall elapsed time
  • New channel output option 'Playing Timer Count' is the total number of seconds in the Play state, after Starting and is not affected by Speed, and keeps counting up when you jump to Cues, run .goTo() calls, Cycle or loop with Sub Range.
  • New channel output option 'Segment Length' outputs each segment length in specified units, or the entire length when segments are not used.
  • Options to output timer, delay, running, cumulative in all time units simultaneously.
  • 'On Done' menu has a new option "Re-Start without Initializing".
  • When working with a segments table, new 'Segments End Time' menu parameter gives more control over the total length.
  • Fixed manual 'Start' pulse sometimes being ignored.

Ouster Support

  • Ouster now requires firmware v2.x and with this TouchDesigner now supports all Ouster models.
    • Added option to not display incomplete frames.
    • Added support for signal multiplier. Requires firmware version 2.1 or greater.
    • Output now reverts to a default black texture when the active flag is disabled.

Interpolation and Mipmapping Controls

  • Panel COMPs - All Panel COMPs now have 'TOP Smoothness' parameter which controls background TOP's viewer smoothness settings. In previous builds of TouchDesigner, this was always 'Mipmap Pixels', so old files will load with that setting whereas the default for new Panel COMP's is 'Interpolate Pixels'.
  • Null TOP / Out TOP - And other all other TOPs can now select their 'Viewer Smoothness' and 'Fill Mode'. Previously this was not available on 'instance-style' TOPs ie. Nulls and Outs.
  • TOP preference - Default values for 'Viewer Smoothness' and 'Fill Mode' can now be controlled by a preference.

Pre-Multiply by Alpha Overhaul

  • The way TOPs and MATs deal with Pre-Multiplied Alpha has been overhauled. Now they will use Pre-Multiplied Alpha when generating colors, and the MATs assume incoming textures and colors are Pre-Multiplied Alpha.

Miscellaneous

  • FBX COMP - Added 'Texture Directory' parameter which is used as an additional search location for external texture files if they can't be found at the default location specified inside the FBX file.
  • Timer CHOP - Added a new menu 'Length Type' which specifies Fixed or Infinite length. When set to 'Infinite' length, time counts without limit. This is to enable Timer CHOP to drive for generative components that have no fixed length.
  • Added information about SDK version used by the operator. MMB on an operator or click "i" Info icon in the parameter dialog to view in the pop-up info.
  • New Search Dialog that also offers Search & Replace functionality. Available globally or per component. Massive time-saver and helps you gain insight in your large projects.
  • Component Editor Dialog now allows you to enter help text for custom parameters. See the help by alt-hovering over parameter name.


New Operator Snippets

Over 60 new OP Snippets have been added since the 2021 Official Builds. Cruise through them via Help -> OP Snippets and press the 'Newest' button. It's a great way to build your TouchDesigner skills. You can also reach them by right-clicking on operators in your network or items in the OP Create dialog. (Note: Web Client DAT example 5 hangs)

Also get tips while-u-wait on startup splash screen: Click on TOUCHTIPS of the splash image - 60+ TouchDesigner usage tips await you.


New Python

  • Python - 'packaging', 'pyparsing', 'jsonschema' modules are now included in default installation.
  • Python - Fixed 'ctypes' modules not loading correctly.
  • Camera Class.dir - A new member to get and set the direction of the camera as a vector.
  • Camera Class.frameBounds() - Now returns a camera frame width that can be used for the Ortho Width parameter of an orthographic camera.
  • Camera Class.blendCamera(targetCamera, blend) -> tdu.Camera() - New function to return a camera that is a blend between the current camera and the given target.
  • COMP Class.reload(path, password=None) - Reloads the component from the given file path. This will replace its children as well as top level parameters and update flags, node width/height, storage, comments and inputs (but keep original node x,y).
  • COMP.panel.scrollu .scrollv - Panel scrollbars can now be controlled via panel values.
  • Connector Class.description - A description for this connection. Example: 'Color Image'
  • DAT.detectLanguage(setLanguage=False) - Returns the language detected in the DAT's text.
  • Dependency Class callbacks method
    • A modifiable list of functions. When the Dependency object is modified, it calls each function on the list.
    • The function is called with a single argument which is a dictionary containing the following:
      • 'dependency'- The Dependency that was modified.
      • 'prevVal' - The previous value if available.
      • 'callback' - This callback function, which can be removed from the Dependency callbacks if needed.
  • ListCOMP Class.displayAttribs[r,c] now provides the final displayed attribute in the cell.
  • NetworkEditor.placeOPs method accepts opType for creating a node. This argument can be either a string or a type.

For example:
ui.panes[0].placeOPs(opType='waveCHOP') or ui.panes[0].placeOPs(opType=waveCHOP)

  • OP Class.currentPage - Get or set the currently displayed parameter page. It can be set by setting it to another page or even a specific label.

For example: n.currentPage = 'Common'

  • OP Class.setInputs(list) - Simplified way of setting all an operator's inputs at once, without dealing with connector details. Entries in the list can be None to disconnect specific inputs. An empty list disconnects all inputs.

For example:
op('geo1').setInputs( ops('box*') )
op('merge1').setInputs( [] ) # disconnect all

  • Par Class.lastScriptChange - A new member which gives information about when a parameter was last modified by a script, helpful when troubleshooting parameter behavior. This is now cleared when the parameter is updated manually.
  • ParGroup_Class - A python class for accessing the new ParGroup objects.
  • Project Class - Renamed members Project.saveOsName/Version to Project.saveOSName/Version
  • Project.resetAudioOnDeviceChange member added which controls whether or not audio devices momentarily reset when devices are added or removed to the system.
  • Script CHOP.clear will now set the CHOP to the global sample rate, not necessarily 60 frames per second.
  • TDJSON - New setBuiltIns argument allows built-in parameter values to be set using this system.
  • tdu.forceCrash() - This will force a crash for debugging and crash recovery testing.
  • tdu.PathInfo - Added 'baseName' to extract the main portion of a filename.
  • tdu.tryExcept(func1, func2 or value) -> result - A 1-line try-except syntax. Second parameter can be another callable function or a direct value.

For example:

tdu.tryExcept(lambda: 1/me.par.w, 0.0) # second argument is simply 0.0
tdu.tryExcept(lambda: 1/me.par.w, me.GetDefaultValue)   # Good:  me.GetDefaultValue not called until needed.
tdu.tryExcept(lambda: 1/me.par.w, me.GetDefaultValue()) # >> INCORRECT <<.  Always calls second function even if not needed.
  • tdu.validName(str) - Returns a version of the string suitable for an operator name. Converts illegal characters to underscores. Slashes are converted to underscores, to preserve forward slashes use validPath() instead.
    • Replaces tdu.legalName() which erroneously supported slashes.
    • Example: tdu.validName('a#bc def') # returns 'a_bc_def'
  • tdu.validPath(str) - Returns a version of the string suitable for an operator path, including slashes. Converts illegal characters to underscores.
    • For example: tdu.validPath('/a#bc d/ef') #returns '/a_bc_d/ef'
  • UI Class.rolloverPanel returns the latest panel to get a rollover event. Takes into account click through, depth order, and other panel settings.
  • WebclientDAT Class.connections - List of current HTTP connection identifiers.
  • WebclientDAT Class.closeConnection(id) - Close the connection associated with the given identifier.
  • WebclientDAT Class.request - Added timeout keyword.
  • Added support to assign a list of OPs to a multi-OP parameter in python.
    • calling eval() on multi-op parameters will now return a single op if there is only 1 result, a list if there are more than 1, and none if there are no results.


New Palette

TDAbleton Linking TouchDesigner and Ableton Live Together

  • TDAbleton - Version 1.33.4 Components are now available individually in the palette. TDAbleton now supports both Live 11 and Live 10.
    • UPDATE REQUIRED - You must update your TDAbleton to this version for use in TouchDesigner 2022 20k+
    • Parameter option to suppress disconnect error flag.
    • Utility parameter options to load Live sessions directly from TDA.
    • Better handling of duplicate parameter names.
    • BACKWARD COMPATIBILITY CHANGE - cuePointNum in song callbacks now holds index into cuepoint table.

TDSynchro Syncing SDI/NDI between machines

  • TDSynchro v.0.1.0 release - The new TDSynchro folder contains a group of components built to synchronize NDI and SDI streams across multiple computers. It consists of a set of components for the server side sending audio/video and sync out, and a set of components for the client side to receive, cache, and syncronize the content.

WebRTC Toolkit

  • WebRTC toolkit v1.0.1 - A set of tools to get started with WebRTC in TouchDesigner.
    • Palette:signalingServer - The signalingServer COMP is a component that can be used to run a signaling server within TouchDesigner.
    • Palette:signalingClient - The signalingClient COMP is a component that can be used to connect to a signaling server within TouchDesigner as well as exchange messages with other clients through the signaling server it is connected with.
    • Palette:webRTC - The webRTC COMP is a component that can be used to initiate real-time communications (RTC) between TouchDesigner instances and TouchDesigner or WebRTC compatible devices such as most Web browser capable devices, including some IoT devices. It requires a signalingClient COMP connected to a supported signaling server.
    • All COMPs support signaling messages validation with JSON Schema. More details at Palette:signalingServer#JSONSchema. WebRTC signaling message types also have matching schema files.
    • webRTC COMP - Includes an example for CHOP data sent over a dataChannel. More details at Palette:webRTC#dataChannels.

Camera component which opens the door to an interactive render view

The cameraViewport component has recieved a major overhaul, we encourage you to try it out in place of using other cameras.

  • Palette:cameraViewport - Many updates and improvements. This component should now be used in place of arcBallCamera.
    • Added camera model for display in the geometry pane.
    • Added Zoom parameter to control the distance from the camera to the pivot point.
    • Updated Auto-Rotate so it only rotates on one axis at a time and uses a fixed starting point to prevent drifting. Adjusted how the auto-rotate speed is determined based on the mouse movement.
    • New function to return a tdu.Camera object that is a blend between two cameraViewport components.
    • CameraTransform property can now be used to get or set the current camera matrix.
    • Added 2 preset positions with keyboard shortcuts and menu options.
    • 'n' shortcut key sets the camera to a front look instead of home.

General Additions and Improvements

  • Palette:feedbackEdge - 8.0.1: Standardization.
  • Palette:firmata - Reporting of digital pins can be enabled by port, for analog pins by pin.
  • Palette:gal - v36.0.0 - UI overhaul of legacy gadget library, now using Text COMPs, minor improvements & simplifications.
  • Palette:gestureCapture - 6.0.3 - Output more motion attributes on the output SOP. Improved examples including simple freehand draw.
  • Palette:kantanMapper - Freeshape automatically closes when switching tools.
  • palette:kantanUVHelper - Fixed an issue where kantanUVHelper could fill GPU Memory considerably.
  • palette:lister 1.11
    • Now uses Text COMP in config and About page for Help.
    • Row data dicts now include sourceIndex key holding index into source data for lister
    • Sort/Filter/Select parameter page with new features for persistence and sort indicators
    • textFormat row in column define table: full f-string style formatting
    • Other new features: Word Wrap, Font File, sourceDataMode: sourceIndex
  • palette:materialDesignIcons - New component replacing symbolPicker.
  • palette:moviePlayer - v39.3 - Now fully-driven by Timer CHOPs and internally is 50 nodes less and higher performance. UI conversion to use Text COMPs. Added audio device menus. Other internal and UI improvements.
  • Palette:multiMix - Fixed this component not working due to a Vulkan related bug.
  • Palette:multiTouch - Modernized internally.
  • Palette:opBrowser - v1.81 - Converted to Text COMP and updated to new treeLister internally.
  • palette:operatorPath - The operatorPath Component is a full-featured UI element for navigating operator paths in TouchDesigner networks. It is similar to the path bar at the top of editor panes.
  • Palette:particlesGpu - Complete overhaul replacing the old particlesGPU component.
    • Removed geometry shaders, now using Compute Shaders.
    • Now compatible with macOS.
    • Numerous feature additions and new parameters for more control over forces and particle attributes.
    • Parameter added for controlling the absolute number of particles in the system. This effectively controls the resolution of the shader and can help in optimization on less powerful GPUs.
    • Fixed for wrongly assigned resolution setting.
  • Palette:pointField - A new component that generates weight per-point based on surface proximity.
  • palette:popMenu - New features: shortcuts, title, scale
  • palette:presets / Palette:particlesGpu - Fixed an issue where custom user presets wouldn't be recalled properly.
  • General updates and tweaks
  • Palette:probe - Node boxes now labelled with the node name.
  • Palette:quadReproject - v0.1.2 - quadReproject is now relying on the new parGroup class in some places.
  • palette:searchReplace - Addition of many new features, paralleled in the new Search/Replace Dialog including:
    • OP Type and scriptable filters.
    • Search comments/utility nodes.
    • Include all searched operators in results.
  • Palette:sopRender - Updated the viewer to use cameraViewport component and its new zoom parameter. Switched ortho blend to a toggle parameter. Parent parameters Camera Z and Camera FOV are now bound to child Camera COMP parameters.
  • Palette:splitter - v0.1.3 - splitter was updated to use the Text COMP for UI elements.
  • Palette:SVG - webSvg COMP was renamed to SVG COMP.
  • Palette:SVG - v0.1.3 - SVG is now relying on the new parGroup class in some places. Performance improvements.
  • palette:treeLister - Incorporates new lister features and updated to use Text COMP in Config and About page for Help. Other small upgrades.
  • videoPlayer component - Deprecated and removed. Users should use the Palette:moviePlayer component instead.
  • palette:vstHost - New component that loads VST3 plugins into the new Audio VST CHOP and adds examples for MIDI keyboard in, a MIDI sequencer, and VST automation using the Bind CHOP.
  • Widgets - Many bug fixes and improvements
    • TDUI updated to 0.56, fixed update and export errors, versioning changed to Major/Minor/Hotfix.
    • Updates after testing on MacOS 12.1 / Apple Silicon. Cleaned up some defaults.
    • ContextPath widget operator name changed to OperatorPath.
    • Gadgets folder with PathBar Gadget was added.
    • Fixed a wire connection issue in the list widget.
    • Fixed an issue when updating the range of 'Bind Master' it wouldn't update the widget’s range.
    • TextArea component now uses the Text COMP. Edit button was removed and a more complete edit mode menu replaces the edit toggle.
    • Fix to the header component to make the close button work.
    • Improved handling of relative paths for file and folder selection widget.
      • New Relative paths menu.
      • Use project.paths toggle to allow customizing of how paths are collapsed and expanded relative to the project folder.


Bug Fixes and Improvements

  • Actor COMP - In Bullet simulations fixed a collision shape bug when 'Update Collision Shape' and 'Infinite Mass' are both enabled.
  • Animation COMP - Preserve custom columns in keyframe DAT tables when editing keyframes.
  • Button COMP / Slider COMP - Updated to use Text COMP internally and include 'Label' and 'Value' parameters.
  • List COMP - Improvements
    • Fractional font sizes are now allowed. Font sizes are no longer rounded down to the nearest integer. See Backward Compatibility below.
    • Text offset now supports fractional floating point numbers.
    • No longer wraps around negative indices when accessing cell attributes.
    • str(ListCell) returns calculated text at that cell, or blank.
    • Fixed dragging onto list components when their viewer has been resized/stretched.
    • Fixed dropping to use python defined items.
    • Callback DAT is now docked on the outside of the OP by default.
    • Added support for custom fonts using Font File attribute.
    • Dragging from the off cell area now controlled by attribute, draggable member if set.
  • OP Viewer COMP - New 'Interactive' parameter controls interaction with mouse and keyboard. Turning off 'Interactive' blocks all panel values from viewed panels. Furthermore, turning off 'Interactive' only affects the viewed panel and leaves the OP Viewer's own panel behaviours active.
  • Panel COMP - Improvements to all Panel-type Components.
    • The Drag-and-Drop callback onStartHoverGetAccept now contains information as to where the mouse entered the panel in its info dictionary. Key name coords.
    • Added a 'Justify Method' menu to justify children individually (new) or as a group (previous behavior).
    • Added a 'Allow UI Shortcuts' parameter to let any panel pass shortcut keys to the network editor. Panels in network editor will have shortcuts passed up to the network editor and then to the application level. Panels in perform mode will pass shortcuts up to application level.
  • Parameter COMP - 'Allow Expansion' parameter controls whether or not parameters can be expanded to reveal expression fields.
  • GLSL MAT - All of the sTD* samplers are now wrapped in TD*() functions. These should be used instead of the samplers directly, for better compatibility with various GPUs.
  • GLSL MAT - Point Sprites must now use TDPointCoord() instead of gl_PointCoord to obtain the texture coordinates for the sprite. See Backwards Compatibility section below.
  • GLSL TOP - New 'Auto Dispatch Size' parameter will automatically set the dispatch size based on the compute shader's local size and the output texture resolution. Ensures at least one thread per pixel will execute.
  • Level TOP - Defaults changed so floating point input values are no longer clamped.
  • Luma Level TOP - Fixed alpha being effected by options other than 'Opacity'.
  • Movie File In TOP - Added support for loading RG compressed .dds files.
  • Movie File In TOP - Error behavior is more consistent now when a specified URL fails to download the file.
  • Movie File Out TOP - Disabled unique suffix when using Type = Image Sequence.
  • Ouster TOP - Fixed missing and skipped packet numbers incrementing incorrectly when using a partial azimuth window.
  • Render TOP - The default material (when a MAT is not explicitly assigned to geometry) now has a small emissive added to help make it visible in an un-lit scene.
  • Switch TOP - When in Blend mode, will no longer cook 2 inputs if the switch value is an integer.
  • Text TOP
    • Added smart quotes support.
    • Added support for floating point positions offsets for non-bitmap fonts.
    • Stroke rendering now looks a bit better, but still not as good as Scalable mode.
    • Improved kerning for Bitmap fonts on Windows when using english text.
  • Video Device In TOP - Reduce stalls that occur when the input signal format into Blackmagic devices changes.
  • Web Render TOP - Updated to cef 100.0.24/Chromium 100.0.4896.127
  • ZED TOP - Now outputs a blank image when there is an error or no camera found.
  • Audio Device In CHOP - Allow any rate up to and including 192KHz without modification. Previously the CHOP would set the sample rate to 44.1KHz when it was above 96KHz.
  • Audio VST CHOP - We found some plugins are unstable and crash when attempting to load their plugin's state (notably Tyrell N6 VST), so we've added a 'Load Plugin State' parameter which disables the loading of a plugin's state to work around this for affected plugins.
  • Joystick CHOP - Added 'Active' toggle.
  • Leap Motion CHOP / Leap Motion TOP - On Windows - Leap DLLs are no longer included with the TouchDesigner installer. The new 'Library Folder' parameter should be set to the location of the correct DLL for the selected API. See Help for installation instructions.
    • On macOS - Leap Motion is currently disabled. We plan to reintroduce this features in upcoming builds.
  • MIDI In CHOP - Option to 'Preserve Pulses' now exposed and fixed bugs causing erratic output.
  • MIDI In CHOP - Much smoother timesliced channels especially when dealing with high frequency input.
  • MIDI Out CHOP - Fixed issue with random values being generated when number of channels changed.
  • OpenVR CHOP - Prevent TouchDesigner from closing on SteamVR shutdown.
  • Panel CHOP - Fixed crash when target panel deleted.
  • Select CHOP - New options to filter channel names by numeric suffix.
  • Sync In CHOP - Warning when project still in Realtime mode.
  • Sync Out CHOP - Include client real-time status in info.
  • Sync In CHOP / Sync Out CHOP - 'Timeout' parameter now has a units menu to select between samples, frames, seconds, or milliseconds. See Backward Compatibility section below.
  • Timer CHOP - Fixed calling initialization when called from onSegmentExit callback.


  • Art-Net DAT - Fixed undercooking while polling and not visible in a network.
  • CHOP to DAT - Large performance optimization when working with long channels.
  • Examine DAT - Fixed missing entries with matching values but different keys.
  • JSON DAT - Added Table option to 'Output Format' parameter and a 'Table Column Headers' parameter to specify column names.
  • OP Execute DAT - Fixed onDelete() never being called.
  • Parameter Execute DAT - Fixed failing to monitor changes when a parameter default is changed.
  • Script DAT .appendRows() / .appendCols() - See BACKWARD COMPATIBILITY below - Now inserts the values in correct order, when specifying a starting index. Previously the values where inserted in reverse order.
  • Change TOPs with transform parameters to be consistent in direction with the Transform TOP. Added a toggle parameter for 'legacy' behavior.
  • Maintain input and component inputs on an operator when loading or reloading from an external .tox file.
  • On the splash screen when starting TouchDesigner was/is a button TOUCH TIPS to give you a tip while-u-wait. Now you don't have to open it each time you start - it's persistent.
  • Many generator SOP anchor parameter behaviors have been flipped to be more sane, the old setting is now called 'Reverse Anchors'.
  • File > Import File... now loads all file types supported in TouchDesigner, bringing it inline with Drag-and-Drop support.
  • Added undo for python attribute binding.
  • Added drag-drop support for .json file extensions
  • Fixed color picker dialog parameter UI when dealing with ranges other than 0-1.
  • Added wildcard dependency to ops function search so new nodes will trigger a recook.
  • Fixed issue with self parameter dependency (me.X depending on me.Y) not getting updated when parameter Y is updated during cook.
  • Using page scope on parameter dialogs will still result in consistent values for par.pageindex. Also a number of fixes to Par.pageindex updating.
  • Allow binding to named object attributes. Expression format is 2 tuple: (object, attribute), example: (op('box1'), 'nodeY')
  • Allow binding to python None value, which return blank string or 0. Allows binding expressions to evaluate to None, without error when source not available.
  • Fixed Bind expressions involving 'me.curPar'
  • Expressions on Toggle parameters that are put into constant mode are properly saved and loaded now.
  • Fixed some issues with menu dropdown lists not updating correctly in custom parameters.
  • ctrl+c now interrupts Python scripts in macOS. Try it for hangs.
  • DATs no longer handle character input when alt is pressed.
  • Refactoring panel layout for more efficiency and better performance.
  • Reconnecting audio devices better handled by Audio CHOPs.
  • Improvements to pop-up help performance and size for DATs.
  • toecollapse/toeexpand now support duplicate operator names in which only case changes.
  • Optimizations in cooking, data dependency improvements, updating parameter value optimizations, extension initialization improvements.
  • Set all components of a parameter when using the popup menu after dropping a parameter onto a node.
  • macOS - Fixed external editor launching when setting appropriate file extensions at the OS level. For example, setting .py file extensions to open with Sublime or VSCode in the OS means opening and external editor for DATs set to py language will open in the respective editor when not using Edit > Preferences > DATs explicit editor settings.
  • DAT Viewer improvements for syntax highlighting and language support.
    • DAT language interface relabelled to 'Parameter Language' and 'Contents Language' to better differentiate them.
    • Renamed the 'Node' option for DAT language to 'From Parameter Language'.
    • Added Execute Language to DAT Info popup to show which language scripts will be executed in.
    • Enabled auto-indenting again for DATs.
    • Improved how the home key in DATs handles indentations.
    • Fixed automatic horizontal DAT scrolling not accounting for the line number width.
    • Fixed clipping of DAT line numbers when the node is very small.
    • Fixed a problem writing formatting codes into DATs that used syntax coloring.
    • Added JSON syntax coloring for DATs.
    • Added Tscript syntax coloring for DATs.
    • DAT syntax colors are now defined in ui.colors.
    • Fixed issue with color codes appearing when clicking in the opening message box.
    • DAT language is now set based on the file extension when dragging text files into a network.
    • 'Auto Set DAT Language' will now set the language for hidden DATs, ignore Tscript nodes, and better handle clones and readmes.
    • Improvements to the default language for more DATs to properly support syntax highlighting.
    • DAT language now defaults to plain text when set to input and nothing is connected.
    • DATs now default to 100% zoom instead of Auto.
  • Textport improvements and fixes.
    • Fixed limit displaying very long DATs in the textport.
    • Textport font size now updates immediately when the preferred font size changes.
    • Fixed right-click history menu in the Textport.



Backward Compatibility

  • BACKWARD COMPATIBILITY - wrnchAI CHOP - Has now been disabled due to the company no longer selling licenses.
  • BACKWARD COMPATIBILITY - Sync In CHOP / Sync Out CHOP - 'Timeout' parameter now has a units menu to select between samples, frames, seconds, or milliseconds.
  • BACKWARD COMPATIBILITY - GLSL MAT - shCoeffs is no longer part of the TDLight block, and is instead in a new buffer array named uTDEnvLightBuffers[].
  • BACKWARD COMPATIBILITY - GLSL MAT - When working with Point Sprites, you must now use TDPointCoord() instead of gl_PointCoord to obtain the texture coordinates for the sprite.
  • BACKWARD COMPATIBILITY - PBR MAT - Removed 'Mult Alpha by Light Luminance' feature, as it didn't work with the more alpha-correct-behavior of the shader now.
  • BACKWARD COMPATIBILITY - The python object type for the Nvidia Flow Emitter COMP has been renamed to flowemitterCOMP from flowEmitterCOMP to be consistent with naming conventions.
  • BACKWARD COMPATIBILITY - Light COMP - Removed defunct 'Shadow Mapping Projection' view type from projection menu.
  • BACKWARD COMPATIBILITY - List COMP - Fractional font sizes are now allowed. Font sizes are no longer rounded down to the nearest integer. Example: Exporting 4.9 to an integer parameter will now be considered a value of 5, not 4.
  • BACKWARD COMPATIBILITY - Shared Mem In TOP / Shared Mem Out TOP - These TOPs can only share memory with other TouchDesigner processes running 2022 builds, shared memory TOPs do not work between 2022 and 2021 or earlier builds. Shared memory CHOPs and COMPs do not have this restriction and work fine across all builds. Any custom code using the Shared Mem TOP header will need to be updated and recompiled against the new header file.
  • BACKWARD COMPATIBILITY - SVG TOP - Has been removed for now because the OpenGL feature it was based on does not exist in Vulkan. Please use Palette:webSvg to load SVG files in TouchDesigner.
  • BACKWARD COMPATIBILITY - Script DAT .appendRows() / .appendCols() - Now inserts the values in correct order, when specifying a starting index. Previously the values were inserted in reverse order.
  • BACKWARD COMPATIBILITY - Script OPs that were accessing the script methods outside the onCook callback must now be locked.
    • For example, calling things like scriptCHOP.appendChan() from outside the scriptCHOP's onCook() method is no longer allowed since it causes random behavior. Now if those methods must be called, lock the Script CHOP first. This goes for any of script OP methods that modify operator content.
  • BACKWARD COMPATIBILITY - Using floating point values in integer parameters (either through expressions or exports) will now round the value, instead of truncate it. This may cause different behavior for fractional values exported to menus or other integer parameters.
  • BACKWARD COMPATIBILITY - The tscript command 'jpeg' has been removed. The 'quality' keyword in OP.save() can be used to control JPEG quality instead.


Experimental Builds 2022.20000 - Apr 27, 2022

For experimental release notes in this branch refer to Experimental Release Notes


Official Builds 2021.10000 and earlier - Feb 07, 2022

For earlier Official Build release notes refer to Official 2021.10000 Release Notes