Close

Release Notes

Current Official Build 2023.11760 Download - May 03 2024 - Release Notes

See our Official Announcement for an overview of new features.

There are currently no new experimental builds. For the previous experimental builds leading to this Official release go to Experimental Release Notes.

Official Build - 2023.10000 Series

Known Issues and Backward Compatibility warnings below should be read carefully.

File Compatibility

⚠️ Project .toe files saved in 2023 Official builds can not be loaded back into previous versions of TouchDesigner such as 2022 or 2021 builds.

Known Issues

Please report all issues to the Bugs Forum, remember to include build number.

  • Body Track CHOP - Can sometimes crash if parameters are manipulated too quickly.


Build 2023.11760 - May 03, 2024

New Features

New Python

  • Matrix Class - Added new projectAndClip function to project a position argument only if the w component of clip space is positive.
  • TextCOMP Class - Fixed a potential crash when calling the setCursorPos function.

New Palette

  • TDAbleton - TDAbleton 2.5
    • Verified compatible with Ableton Live 12
    • Change "Master" track to "Main" track for Live 12+. BACKWARDS COMPATIBILITY for Live 12+: SongInfo['tracks']['# Master Track #'] will now be SongInfo['tracks']['# Main Track #'].
    • Fix bug when adding TDA_Master.
    • Address some crash problems in the console.
    • Clear SongInfo when not connected.
    • Fix Connected status in odd cases where listeners are added without Live connection.
    • Clean up timing callbacks after connecting.

Bug Fixes and Improvements

COMP

  • Blend COMP - Fixed a crash.
  • Container COMP - Fixed a panel layout crash.
  • Engine COMP - Fixed an issue which could cause some custom parameters to be lost or stop working when custom parameters were modified by the loaded component.
  • Engine COMP / TouchEngine - Fixed issue which could cause a crash in TouchEngine when custom parameter pages were modified by the loaded component.
  • Window COMP - Fixed an issue which could cause the wrong Operator to be used in Perform Mode after using 'Open as Perform Window' from a Window COMP parameter dialog.

TOP

CHOP

  • Audio Device In CHOP - Fixed Deltacast device list being empty when using Deltacast driver and fixed non-input devices being listed for some drivers.
  • Audio Device In CHOP / Audio Device Out CHOP - Fixed ASIO input/output for Float32LSB sample type which was causing issues with applications such as Voicemeeter / VB Matrix Audio and others using float sample types.
  • Audio File Out CHOP - Fixed compressed audio bit rate always being 128kbs rather than what is selected by the menu.
  • Audio Stream In CHOP - Change default for 'Sync Offset' parameter to 0.
  • Beat CHOP - Fixed 'Reset' to affect the current cook, and not skip on dropped frames.
  • CPlusPlus CHOP - Fixed a crash that could occur when unloading the CHOP then selecting parameter dialog.
  • OAK Device CHOP - Reduced CPU usage of device thread.
  • Rename CHOP / Select CHOP - Don't allow creation of blank channel names leading to crashes downstream.
  • Timer CHOP - Fixed a recent crash when dealing with parallel custom values and fixed unstable output when timer got to "done" when 'Locked to Timeline' and 'Active while Running' were selected.

DAT

  • OP Find DAT - Fixed custom parameter changes not updating the results.

SOP

  • Alembic SOP - Fixed a hang when copy and pasting the node.
  • Fillet SOP - Fixed a crash when filleting subgroups with cut primitives enabled.
  • Group SOP - Fixed crash when using 'Create Boundary Group'.
  • Group SOP - The default 'rangeend' parameter expression (used when Operation = Group by Range) was changed so that it correctly counts the number of points when 'Entity' not set to 'Primitives'.
  • Profile SOP - Fixed a NURBS evaluation crash.
  • Ray SOP - Fixed a crash when updating shared geometry in another network.
  • Trail SOP - Fixed an infinite cook loop on TouchDesigner start-up.

MAT

  • Line MAT - Fixed a crash when the 'Draw Points' parameter was enabled.
  • Phong MAT - Fixed a crash when using multi-texturing.
  • Phong MAT / PBR MAT - Fixed a recent change that caused multiple color buffer outputs to be incorrect for buffers 1+.

Misc

  • Privacy - Private .toe files specified on the wrong monitor now launch on first monitor as intended.
  • macOS - Fixed crash that can occur on macOS when using texture instancing when the number of textures is changing.
  • macOS - Fixed an issue which prevented TouchEngine TOP outputs working for some third-party hosts on macOS.
  • macOS - Fixed an issue which could prevent TouchDesigner launching on macOS while a third-party host was using TouchEngine.
  • Fixed panel layout issues when rewiring panel hierarchy or changing alphabetical order by editing the Panel COMP's name.
  • Fixed group changing of clone and similar parameters.
  • Fixed DAT table select offset when working on long cells.
  • Fixed last two environment variables being skipped in var functions. Addresses report of "Unusual Behavior with Environment Variables Starting with the Letter 'X'".
  • Tweak to extension initializations.
  • Improved scaling and positioning of Windows IME dialog relative to cursor position in DATs, textport, Text COMP, parameters, etc.

Backward Compatibility Changes

  • BACKWARD COMPATIBILITY ISSUE TDAbleton - Change "Master" track to "Main" track for Live 12+, therefore SongInfo['tracks']['# Master Track #'] will now be SongInfo['tracks']['# Main Track #'].


Build 2023.11600 - Mar 04, 2024

New Features

  • OpenVR CHOP - Added a 'Re-Center' pulse parameter to re-center the HMD.
  • S Curve CHOP - Added new 'Remap Length' parameter to adjust the length of the S Curve depending.

New Python

  • UI Class - Fixed an issue with viewFile() which caused some URLs to be improperly escaped on macOS.

New Palette

  • Palette:logger - v2.2.8 - Fixed an issue that could occur when initializing the file logger to a folder different than the default folder.

Bug Fixes and Improvements

COMP

  • TouchEngine - Add API to set/get a preferred TouchDesigner installation location and to get the installation actually used once configured.
  • Engine COMP / TouchEngine - Fixed an issue which prevented some errors from clearing when loading components.
  • Engine COMP - Fixed issue which caused scripts or expressions referencing the 'Reload' parameter to reference the 'Initialize' parameter instead.
  • Engine COMP - Fixed connected multi-input OPs (ie. Merge, Switch, etc) losing connections during reload.
  • Time COMP - Fixed some parameters displayed out of order on 'Extensions' and 'Common' page.

TOP

  • Movie File In TOP - Imrpovements
    • Fixed .dds files loading in upside down.
    • Added support for WebP images.
    • Fixed a new issue with Hap Q and Hap Q Alpha movies which were loaded in TouchDesginer using 10-bit RGB 2-bit A instead of RGBA 8-bit.
  • Movie File Out TOP - Allow 'Max Threads' to be controlled when outputting a single image and improved behavior of 'active_records' channels in the Info CHOP when recording images.
  • Orbbec TOP - Implemented undistort function from 1.9 SDK to improve point cloud distortion. Fixed a potential crash when connected to an Info CHOP.
  • RealSense TOP - The Intrinsic Camera Parameters have now been added to the Info DAT.
  • Video Device Out TOP - Fixed an issue where multiple AJA cards may not work at the same time.

CHOP

  • Import Select CHOP - Fixed reported cooking bugs when 'Use Parent Animation' is enabled.
  • OAK Select CHOP - Added ROI and spacial xyz coordinate channels for tracklets.
  • Timer CHOP - Support for driving the timer by using a CHOP or DAT when 'Time Control' is set to External Timecode.

DAT

  • Execute DAT - Fixed onStart failing if other scripts had previously reinitialized External Toxes.
  • Folder DAT - Fixed an issue which caused python errors in callbacks to be lost sometimes.

SOP

  • Alembic SOP - Fixed issue with Cd attribute when used in 'Direct to GPU' mode.
  • Attribute SOP - Fixed broken parameter evaluation.
  • CPlusPlus SOP - Added variable isClosed to SOP_PrimitiveInfo to indicate if the primitive is closed or not.

Misc

  • Shared Memory - Fixed a crash which could occur in some circumstances using Shared Mem Out CHOP, Shared Mem Out TOP, or Shared Mem Out COMP.
  • Fixed an issue which caused a GPU resource leak in some circumstances when using TouchEngine, CUDA or other shared-textures
  • ParGroup - Fixed reported issue of .destroy() still returning ParGroup object. Also improved behavior when accessing Par/ParGroup from different threads.
  • Timecode - Fixed handling of different rates when evaluating a timecode parameter.
  • Fixed drag and drop crash with private components.
  • Fixed resizing of windows that were stuck at original aspect ratio.
  • Added new 'Troubleshooting' entry to the Help menu.

Operator Snippets


Build 2023.11510 - Feb 07, 2024

New Features

  • Bloom TOP - Reworked algorithm for better bloom characteristics with less artifacts, added new parameters for better control. Note: Previous bloom settings may have to be adjusted to get a similar effect.
    • Reorganized parameters into sections for preprocess, bloom radius, bloom controls, and output.
    • Bloom Gamma replaced by 'Bloom Threshold', 'Bloom S-Curve', and 'Bloom Fill' parameters, giving more control over bloom spread and falloff.
    • Bloom Alpha toggle parameter removed.
  • Parameter DAT - Added Sequential Parameter attributes: sequence, blockindex, basename, numblocks
  • Constant MAT - Added new 'Apply Point Color' parameter which uses the color point attribute to apply color to the geometry.
  • GLSL MAT - Added support for Specialization Constants.
  • Added new menu to Object Components to give better control of parent transforms.
  • DATs - Added YAML syntax highlighting for DATs, see Common page parameters.


New Python

  • App Class.applicationsFolder - A new python function to return the standard install location on the system, for example C:/Program Files on Windows.
  • Attributes Class - Fixed erroneous cook dependency loop on creating pointAttribs. Now doesn't recook the geo if the OP is already being cooked.
  • DAT Class - cell(), findCell(), cells(), findCells() have a new bool argument `val`. `val=True` returns list of just cell entries instead of list of cells.
  • OP Class - .pages .customPages now support indexing by name.
  • OP Class.curSeq - Returns the sequence of the currently evaluated parameter.
  • OP Class.unload() - Added new method to all OPs to unload their memory without having to disable their cooking via a parent COMP.
  • OP Class - parGroups(pattern) -> list - Returns a (possibly empty) list of Parameter Group objects that match the pattern.

For example:

       n.parGroups() #all
       n.parGroups('Color*')  #all begininng with Color

For singles it is still quicker to use: n.parGroup.Color or n.parGroup['Color']

  • Par Class.evalFile() - A new method to evaluate a parameter as a file path and return a tdu.FileInfo object. Uses the node's relative path behavior to expand the string to an absolute file path if applicable.
  • Sequence Class - Blockid parameters. If any block parameters have a base name of 'blockid' they will automatically be maintained with unique constant values - no other block in the sequence will be given the same value for blockid. When blocks are added, deleted, moved or copied, the blockid parameter value will remain unchanged. See Sequential Parameters#Referring_to_Another_Block. This allows accessing any block to be consistent, regardless of its final order. To access a block by this unique id use the Sequence.id() function. The .id(val) function will return the block whose blockid parameter matches the given value. For example:

v = n.seq.Segments.id(3).par.start

  • UI_Class.masterVolume - To control the volume of TouchDesigner outputs is now working on macOS.


New Palette

  • Palette:camSchnappr - Adjustments for new touchOSC control interface as well as a 'Live Updates' toggle to keep Auto Blend mask updating at all times.
    • touchOSC file contained as a vfs file can be saved out via OSC parameter page.
    • Fixed 'Autoblend' references not clearing when deleting them on camSchnappr parameters.
    • Modifier key to select and delete points on macOS changed to Cmd key.
  • Palette:gestureCapture - v8.0.5 - Cosmetic improvements to defaults, outputs more data.
  • Palette:lister - Fixed an issue where font face won't be found in certain situations.
  • Palette:logger - v2.2.7 - Swapping Debug and Info log levels in level par menu so that it makes more sense.
  • Palette:opBrowser - Make "Filter Roots Only" work to show children.
  • TDSynchro - v0.1.4 - Fixed expression reference error in the synchroCache component.
  • Widgets - v2.1.104
    • Fixed display issues with folder tab widget.
    • Removed erroneous parameters from field and reference widgets.


Bug Fixes and Improvements

COMP

  • Parameter COMP - When 'Allow Expansion' disabled, also disable drag/drop + menu choices.
  • Select COMP - Fixed an issue of not passing clickthrough events.
  • Text COMP - Fixed an editing bug where keyboard events were incorrectly passed along to the main TouchDesigner UI.
  • USD COMP - Fixed PBR material crash.

TOP

  • Bloom TOP - Fixed for crash when resolution is less than 8 pixels.
  • CHOP to TOP - Fixed an issue filling default values into RGBA textures.
  • Depth TOP - Fixed 'Depth Peel Layer' not getting the correct depth buffer.
  • Kinect Azure TOP / Orbbec TOP - Added check that only one Orbbec node type can be activated in a single project.
  • Leap Motion TOP / Leap Motion CHOP - Changed the default library folder to match the default SDK installation folder.
  • Movie File In TOP - Fixed input timecode so that it's rate-adjusted to the movie file rate.
  • Movie File In TOP - Fixed file_resx and file_resy info channels not updating when 'Upload Image' was turned off.
  • NDI In TOP - Fixed broken images at some resolutions on macOS.
  • Noise TOP - 'Derivative' toggle parameter will get disabled if the selected noise type doesn't support derivatives. For 2D derivatives, the z derivative value will now be 0 instead of 1.
  • Notch TOP - Fixed crash when using a Notch block that contained a Kinect Azure operator.
  • Orbbec TOP - Enabled Orbbec TOP on Mac OS (Apple Silicon only).
  • Point File In TOP - Fixed a bug where EXR images are loaded in upside down. Furthermore, the original dimensions of EXR images are preserved again like in previous releases.
  • Render Select TOP - Fixed crash that can occur when deleting this node in some cases.
  • Spectrum TOP - High resolution crash fixed.
  • Time Machine TOP - Now works better with Texture Reference operators such as the Select TOP and Null TOP.
  • Video Device In TOP - Fixed tearing issues on AJA devices using 'Sync To Input Frame'.

CHOP

  • Lag CHOP - Reset pulse now works in 'Lag per Sample' mode.
  • LTC Out CHOP - Rename parameter "High FPS Behaviour" to "High FPS Behavior".
  • Object CHOP - Assume a default pivot of (0,0,0) not (1,1,1) when specifying by CHOP channels.
  • OSC Out CHOP - Fixed 'Send Rate' parameter for Sample and Transpose data formats.
  • Pangolin CHOP - Fixed cases where TouchDesigner could cause Pangolin BEYOND to crash.
  • Trigger CHOP - Fixed issue where the ADSR envelope would be incomplete when minimum sustain length was non-zero, in non-timesliced mode.

SOP

DAT

  • File In DAT / File In CHOP / File In SOP - Fixed issue which prevented some file changes being detected.
    • Fixed issue which prevented external edits to files being detected sometimes.
  • Folder DAT and File OPs - Fixed a crash which could occur when opening projects if there was a filesystem error for an external folder or file.
  • Folder DAT - Numerous improvements
    • Fixed an issue which prevented folders being matched if the pattern didn't end in '/' or '*'.
    • Fixed an issue which matched all extensions if none were set.
    • Fixed wrong values for dates (when enabled) on macOS.
  • Media File Info DAT - Fixed crash that can occur when deleting if the node hasn't cooked and improved behavior when 'File Open Timeout' is 0.
  • TCP/IP DAT - Fixed a bug on macOS where callbacks could be triggered out of order.

MAT

  • Phong MAT - Fixed some issues when displacing vertices by the height map.


Misc

  • TouchEngine - Fixed an issue which caused older hosts to receive 0 as min & max values for numeric custom parameters which weren't clamped.
  • MIDI - Fixed random MIDI messages when unplugging then re-plugging in devices.
  • Custom Operators - Added access to the Windows HISNTANCE as part of the OP_NodeInfo class.
  • OpenCV - Fixed import cv2 not working on Intel macOS.
  • Python - Fixed an issue which caused a hang on quit on macOS after some external Python modules were imported.
  • Fixed nested panel sliders not being clickable in some panel layouts (eg kantanMapper drop menus not working).
  • Fixed issue entering unicode characters using the Windows IME.
  • Fixed a bug using '../' relative paths with the 'Relative to Tox File' path behavior.
  • Fixed file parameter tooltip so that it properly reflects the relative file path behavior.
  • Relative paths in bound file parameters are now evaluated using the base path of the bind master.
  • Custom parameters now use the relative file path behavior of their own node. Only the External .tox path uses the parent's path behavior.
  • Fixed custom menus not updating to selected value when names/labels are changed in same script.
  • Added ability to remove User Site Packages from Python Search Path.


Build 2023.11340 - Dec 18, 2023

New Features

  • MPCDI TOP - This new TOP lets you load calibration data stored in the MPCDI format. This can be used for projection and camera calibration data interchange between other applications. You can use the projection and cameraTransform python members of this operator in a Camera COMP to make use of the camera data contained in the configuration file. Please refer to MPCDI for a complete guide on TouchDesigners integration with the MPCDI Standard.
  • Audio Device In CHOP - For ASIO, added Resample option to the 'Rate Mode' parameter that will resample from the audio device's rate to the CHOP's rate.

New Python

  • MidioutCHOP Class.sendTimecode - A new method that sends a full MTC (MIDI Timecode) message to the device.
  • Page Class.appendFileSave() - Unlike appendFile() which brings up a load dialog, this brings up a save dialog.
  • SyncoutCHOP Class.timecode - A new member for the timecode representation of the last sent index.
  • Timecode Class - Added length and cycle keywords to tdu.Timecode() so you can do countdowns.

Palette and OP Snippets

  • Palette:audioAnalysis - v6.1.1 - Expose parameters for trend computations.
  • Palette:gestureCapture - v8.0.4 - Fixed error when there are 0 lines.
  • Palette:logger - v2.2.6 - Fixed a case where Logger COMP and other components depending on it would fail to initialize if TDLogs folder was missing.
  • Palette:opticalFlow - Fixed 'Inverse' parameters not working.
  • Palette:multiLevel and Palette:geoPanel - Fixed the click-drag interactions with multiLevel, and geoPanel's built-in multiLevel.
  • numerous new OP Snippets including 11 for new timecode features. We recommend to bring up Snippets and press Newest repeatedly to catch up on what you have missed.

Bug Fixes and Improvements

  • Updated Leap Motion SDK to 5.17.1
  • Updated Orbbec SDK to 1.8.3

COMP

  • Geometry COMP - Fixed instance texturing not working when texture index was given via a TOP.
  • GLSL COMP - Fixed crash when pixel shader is empty and added additional error messages for invalid shaders.
  • Nvidia Flow Emitter COMP - Fixed a crash that could occur.

TOP

  • GLSL TOP - Fixed cases where non-preprocessor directives that are used in the 'Preprocess Directive DAT would get included twice (Note: this parameter should only be used for preprocessor directives).
  • Leap Motion TOP / Leap Motion CHOP - Updated SDK to version 5.17.1
  • Movie File In TOP - Fixed .hdr files loading upside down.
  • Movie File Out TOP - Fixed corruption on left of image when exporting Apple ProRes using 10-bit pixel format.
  • Movie File Out TOP - Automatically create non-existent folders when saving out a file if it doesn't already exist.
  • Orbbec TOP / Kinect Azure TOP - Updated to Orbbec SDK to 1.8.3
  • Orbbec TOP - Improvements
    • Added support for Y8 IR formats.
    • Sensor format and FPS for the current image type are now displayed in the info text.
    • Fixed a crash when using the node without the Kinect Azure package installed.
    • Added warnings for unrecognized image formats.

CHOP

  • Audio File Out CHOP - Fixed this node always crashing.
  • Body Track CHOP - 3D positions are now scaled and flipped to better fit TouchDesigner coordinates.
  • MIDI Out CHOP - Added parameters for sending MIDI Timecode (MTC) as a stream of quarter frames.
  • Object CHOP - Fixed an infinite load loop on startup that would result in a hang.
  • Transform CHOP - Fixed a rotation error when output mode is set to Quaternion.

Misc

  • macOS - Fixed crash on launch on some older macOS versions.
  • macOS - Fixed point rendering not working correctly on macOS.
  • Timecode - Fixed a bug with rate always coming from timeline when evaluating a CHOP as a timecode parameter.
  • Fixed an issue which could cause a crash or unexpected behavior when some Unicode characters appeared in file paths.
  • Fixed tdu.Timecode crash when using an invalid keyword argument.
  • Fixed the bug loading the SimSun-ext b font. This large font would not fit in the max allocated texture, so it now lowers the quality slightly so it will fit the texture.
  • Added 'Move Block' and 'Copy Block' options when dragging sequential parameters on the parameter dialog. Also added 'Paste Block' in parameter menu.


Build 2023.11290 - Dec 05, 2023

Key Highlights

OAK-D AI Sensors

OAK-D cameras offer a range of high-resolution cameras with depth vision and on-chip machine learning. OAK-D can run computer vision tasks on-device and send the processed images or data to TouchDesigner on both Windows and macOS. For example, an OAK camera can compute human skeleton landmarks for a live RGB image and send both the landmarks and image to TouchDesigner. OAK is short for the OpenCV AI Kit, which originated through online crowd-funding. Luxonis has expanded the line of OAK hardware and also released several open-source libraries such as DepthAI that run on the OAK.

The aim of integrating TouchDesigner with OAK cameras is to facilitate novel interactions with the rest of the TouchDesigner environment while providing low-latency, high throughput performance with the OAK hardware. If you think a pure Python example that doesn't involve TouchDesigner is running faster than one which does, please let us know. For example, we aim for the frames-per-second of an OAK's RGB camera received in TouchDesigner to be at least as fast as what you would receive in pure Python with DepthAI and OpenCV.

Three new OAK-D operators work together to implement the OAK functionality: The OAK Device CHOP is the main interface to the camera devices. The OAK Select CHOP extracts channel and dictionary data from the camera results of a OAK Device CHOP. The OAK Select TOP extracts processed images from the camera. Each DepthAI model running on each camera will have one OAK Device CHOP plus one or more of the OAK Select OPs.


Machine Learning

The following features utilize machine learning models in their operation and are only supported on Windows OS. If you do not have the devices required to use them, you can save bandwidth and time by using the new Web Installer which does not include the models in the initial download, allowing you to select only the features you need.

  • Body Track CHOP - This new CHOP uses Nvidia Maxine AR SDK to perform body pose estimation on any video or camera input. It can track bounding boxes and 34 key points of one or more human bodies, with optional joint angles, in 2D or 3D.
  • ZED - Major overhaul including an SDK update and the addition of body tracking support in the ZED CHOP and a 'Neural' depth camera mode in the ZED TOP.
  • Orbbec - Body tracking in the Kinect Azure CHOP now also works with Orbbec Kinect-compatible-cameras (Femto Mega, Femto Bolt). Furthermore, general support for color/depth/pointcloud has been added for a wider range of Orbbec cameras via the Orbbec TOP.
  • Nvidia Upscaler TOP - This new TOP uses Nvidia Maxine Video Effects SDK to upscale the resolution of an input video. The Upscale mode is faster and offers a 'Strength' parameter. The Super Resolution mode is higher quality and doesn't offer a Strength parameter, but it does have an optional 'Artifact Reduction' toggle.


Timecode Tools

Numerous Timecode tools have been woven into TouchDesigner. A new Timecode CHOP can create and manage SMTPE timecode and a large selection of OPs in TouchDesigner that deal with time have been updated to be driven by timecode or include a timecode member so they can be managed effectively. For a full list of these operators, refer to the Timecode page.

  • Timecode CHOP - A new CHOP for managing Timecode with custom length parameters and extra countdown field to Info DAT.
    • See the Timecode Class which is the underlying python object to timecode everywhere.
    • Check out the new OP Snippets for this operator.
  • Timeline CHOP - Added a new parameter to drive timeline time with a timecode object.
  • LTC Out CHOP - Added a parameter to drive the LTC Out timecode with a Timecode Object/CHOP/DAT.
  • Timer CHOP - Added option in the 'Time Control' parameter to drive the Timer CHOP directly with timecode.
  • Timecode Class - A new class to access timecode features via python throughout TouchDesigner.
  • Many operators that can use timecode now have new .timecode members to access their timecode directly via python.


Apple ProRes

Full support for Apple ProRes in TouchDesigner on both Windows and macOS.

  • Movie File In TOP - Support for ProRes decoding. Uses hardware decoding on macOS when available.
  • Movie File Out TOP - Support for ProRes encoding. Uses hardware encoding on macOS. TouchDesigner's ProRes encoding has been certified by Apple for correct implementation of the format.
  • ProRes is equally supported across TouchDesigner, TouchPlayer and TouchEngine.


Laser Control

  • Laser Device CHOP - The Laser Device CHOP can send laser points to supported laser devices: EtherDream, Helios, and ShowNET. ShowNET support comes to TouchDesigner for the first time! The devices can be connected to a laser using an ILDA cable, except in the case of ShowNET when an onboard DAC is used. Applications of the Laser Device CHOP include displaying computer-generated shape animations or other special effects of a light show. The Laser Device CHOP replaces the deprecated EtherDream CHOP and Helios DAC CHOP.
  • Laser CHOP - Added look-up CHOP for vertex hold min/max angles and added 'Blank State Channel' for help with debugging.


New Operators

Hardware Device Operators
  • MoSys CHOP / MoSys TOP - The MoSys CHOP receives data from a MoSys camera tracking system. The channels can be used to control a virtual camera and to implement lens distortion via the MoSys TOP as part of a virtual production system.
  • Orbbec TOP - Support for color, depth, and point cloud capture has been added for a wide range of Orbbec cameras. Furthermore Kinect-compatible Orbbec camera such as the Femto Mega and Femto Bolt models also support Kinect body tracking through the Kinect Azure CHOP.
  • SICK TOP - This new TOP can be used to retrieve point cloud data from a SICK LIDAR sensor. Sensor results are packed into a floating point texture where each pixel represents one point of data and each color channel stores one field such as x, y or z position. The TOP utilizes the 'sick_scan_xd' SDK and supported sensors are listed on the project's GitHub page.
  • Audio Devices DAT / Video Devices DAT - Two new DATs which list all input and output audio/video devices. Callbacks are included to create actions when devices are added or removed.
Micellaneous Operators
  • Bloom TOP - The Bloom TOP creates an intensity gain and glow effect around brighter parts of the image. (refinements forthcoming)
  • GLSL COMP - The new GLSL COMP uses GLSL shaders to render an image in a panel directly to the screen. It is useful for rendering pixel accurate UIs as the resolution will automatically adapt to the DPI scaling of the screen it is displayed on.


Engine COMP Overhaul

  • Engine COMP - New features and improvements.
    • Enabled OP Viewer parameter on Common parameter page to show a selected viewer.
    • Added 'Asset Paths' parameter to make relative paths based on the Project .toe file or the External .tox file.
    • Added TouchEngine process parameters on the Advanced parameter page. This allows you to quit or launch the process independently from loading your component.
    • Added 'On Engine COMP Create' parameter which determines what happens when a .tox is loaded (also affects when a new Engine COMP is created through copy & paste).
    • Errors on the loaded component are now reported in the pop-up info text via middle-mouse button.
    • Added a new onError() callback to the Callback DAT.
    • Allow use of user selected operator colors (use color palette to set).
  • New Init Start parameter page modelled after Initialize Start on the Timer CHOP including a similar set of core control parameters.
    • Added “Ready when” parameter to specify when the transition to Ready state happens.
    • Added onInitialize() callback.
    • Added 'Go To Done' parameter and 'On Done' parameter to determine behavior. This include extras like an onDone() callback, a "done" channel, and "goToDone()" Python command similar to a Timer CHOP.
    • Added a 'Pre-Roll' parameter that will run the component for the specified amount of time before setting it to Initialized state.
  • Added a docked Info CHOP
    • More channels added in 'General' Info Type.
    • Added “Initialize Start” Info Type group of channels reporting on the Status of the Initialize Start features mentioned above.
    • Added 'TouchEngine Status' Info Type group of channels for process and component state to better understand the TouchEngine process lifetime.
    • Renamed Engine Perform to 'TouchEngine Perform'.
    • Added Info CHOP channels output_cook_abs_frame, engine_absolute_frame, engine_absolute_seconds, and initialize_fail.
  • Added a docked Info DAT
    • Added “engine_pid” to Info DAT for the process ID of the engine process.


Lightweight Web Installer for Windows

The best option for installing TouchDesigner on Windows is our new lightweight web installer. This installer packages the core elements of TouchDesigner into a significantly smaller download. During installation you can select the features of TouchDesigner you require and it will download them on-the-fly. If you don't have hardware like a Kinect Azure camera, ZED camera, or Nvidia GPU on your system, save time and bandwidth by skipping these items. With the addition of more devices, SDKs, and features using machine learning models, the full installer is now over 2.4GB and will continue to grow. The web installer is a great option for anyone working with a reliable internet connection. The download size is smaller, the installation goes more quickly, and TouchDesigner uses less space on your system. Only install what you need!

Add additional features after the initial installation by going to Settings > Add or Remove Programs and locating your TouchDesigner application. Then select Modify from the options menu and the Modify installation dialog will open allowing you to select the features you'd like to add.

We will always continue to maintain a full installer for those who need everything or need to install TouchDesigner on machines where there is no internet connection.

For info on how to use the web installer see Install_TouchDesigner#Dealing_with_Installer_Components_of_the_Web_Installer


More New Features

Python 3.11


Custom Sequential Parameters

Sequential Parameters are sets of parameters that can be dynamically repeated multiple times, grown and shrunk using the +/- buttons in the parameter dialog. We have revamped their naming and added support to custom parameters so users can now define their own blocks of sequential parameters. These can be defined directly with python or through the Component Editor Dialog.

All sequential parameter sequences (both built-in and custom) now start with a new sequence parameter. The name of this sequence parameter defines the prefix of all the following parameters in that sequence block. The new naming format is: <sequence name><block index><parName>.

Every sequence now has a "sequence name" which is added as a prefix to every parameter that is part of the sequence. This is followed by a "block index", which is the index of the block (set of associated parameters) within the sequence.

For example, the name/value pars in a Constant CHOP used to be called name0/value0, name1/value1, etc. The new names are: const0name/const0value, const1name/const1value etc. Other notable examples are extensions (sequence name "ext") and internal operators (sequence name "iop") TouchDesigner will attempt to understand the old names as aliases, but there may be backwards compatibility issues in some cases.

  • TouchEngine and Engine COMP also fully support sequential parameters now.
    • TouchEngine - Added a the new sequence parameter type, added a function to change sequence block count.
    • TouchEngine - For hosts using older library versions, expose sequences as a series of regular parameters.
    • Engine COMP - Correctly display, edit and update parameter sequences, including changes to block count.


Working with External Files
  • New parameters on the Common page of all Components offer better control of managing external file locations and paths.
  • New parameter 'Relative File Path Behavior' allows you to use relative paths that are local to the Project (.toe file) or to the location of the External COMP (.tox file).
  • We invite you to read our article introducing some changes and new features.


macOS Hardware Decoding
  • Movie File In TOP and Video Stream In TOP now supports hardware decoding when available (this is depends on the Mac's hardware). To enable on the Movie File In TOP, turn on the 'Hardware Decode' parameter toggle on the Tune page.
    • Supported codecs vary by hardware, potentially works for Apple ProRes, H.264, HEVC (H.265), P-JPEG, VP9, AV1.
    • When possible it does direct-to-texture decode - image memory is always on the GPU.


Nvidia 40-series GPU Improved Support
  • The machine learning models for Nvidia operators using Maxine SDKs have been updated to include models for the 40-series Geforce and Professional A-series Ada generation GPUs.


COMP Features
  • Text COMP - Added new 'Drop Shadow' parameter to draw a drop shadow under the text.
  • Engine COMP and TouchEngine - Fully support sequential parameters now.
    • TouchEngine - Added a the new sequence parameter type, added a function to change sequence block count.
    • TouchEngine - For hosts using older library versions, expose sequences as a series of regular parameters.
    • Engine COMP - Correctly display, edit and update parameter sequences, including changes to block count.
TOP Features
  • Movie File Out TOP - Added a new 'Limit Length' parameter to automatically stop recording when the output reaches a set length.
  • Noise TOP - Added 'Derivative (slope)' toggle to get the gradient of the noise in the RGB channels. Only works in monochrome mode.
  • Render TOP - The 'Image Output' feature has been reworked. Multiple can now be created, with custom names, array sizes and formats. This is found on the new 'Image' page.
  • Spectrum TOP - Revamped the Spectrum TOP to use Vulkan via the VkFFT library, deprecating the CUDA and OpenCV usage. It results in much faster performance and cross platform support for both Windows and macOS.
  • Text COMP / Text TOP - New options for selecting fonts via a new 'Typeface' parameter instead of the previous 'Bold' and 'Italics' parameters.
CHOP Features
  • Audio Device In CHOP - Added 'Rate Mode' parameter for ASIO devices that can pull the sample rate from the device rather than manually override it.
  • Audio VST CHOP - Added support for custom bus layouts and new parameters for controlling the VST plugin's playhead.
  • Bind CHOP - New 'Exclusive Hold' parameter. Locks out remaining inputs for this period when change detected.
  • FreeD In CHOP - Added 'Camera ID' parameter to allow filtering of camera packets and receiving date from multiple cameras.
  • Leap Motion TOP / Leap Motion CHOP - Gemini v5 tracking is now supported on macOS Apple Silicon. Go to the Leap Motion CHOP help page to locate the downloads required and instructions for installation. The Gemini v5 SDK was also updated for Windows.
  • Pattern CHOP - Added a new 'Cyclic Ramp' ramp type.
  • Pulse CHOP improvements
    • Added a second input to specify custom pulse indices.
    • Multiple channels now supported.
    • Options to set minimum spacing values for pulses if they overlap.
    • Pulse height determined by the number of repeated indices.
    • Option to specify units for the pulse indices in samples, frames, or seconds.
    • Added 'Connect' option to Interpolate parameter menu which gives true linear interpolation.
  • Timer CHOP - Numerous improvements
    • Timer now doesn't cook when it is not running - The Active toggle is expanded to be a menu: Never / Always / While Running / While Playing. 'While Playing' only cooks if any timers are active and 'Play' is on. This now enables you to have many Timer CHOPs in your project without consuming significant compute time.
    • New 'Defer Parm Changes' parameter controls whether or not parameter changes take affect immediately or after the next init/start cycle. In the past, unlike most other operators in TouchDesigner where when a parameter changed it takes effect immediately, the Timer CHOP's Length, Cycle and other parameters didn't take effect until you Initialized. This was done to not disturb timers while they were running. Now it's a choice.
  • Transform CHOP - Added 'Xform Matrix/CHOP/DAT' parameter to apply a matrix transform directly.
  • Trigger CHOP - Added menu option 'Update once per Cycle' to update trigger shape parameters only once each cycle.
DAT Features
  • Insert DAT - You can now add rows and columns via a cell expression on each row or column. Also added a new 'Replace if Duplicate Name' toggle to replace existing column/row names if new ones have the same name. This is a new convenient way to splice new rows or columns in.
  • Keyboard In DAT - Overhaul to how characters are handled with the goal to improve international language support and offer a more consistent interface with keyboard input.
    • BACKWARDS COMPATIBILITY ISSUE - The 'key' column will no longer return special characters such as !@#$%^&*(). These will now be 1234567890 for better consistency with other shortcut workflows.
    • New optional 'web_codes' column, which matches the key code names that Chromium expects.
    • Reworked callback to take a namedtuple, add 'webCode' as a new value.


New Python

Python Version 3.11
opex() Method Instead of op()
  • OP Class / td Module - New opex() method that works identically to op(), except it will raise an exception if it fails to find the node instead of returning None as op() does. This is the new recommended way to get nodes in parameter expressions, as the error will be more useful than 'NoneType has no attribute 'par', that is often seen when using op(), for example.
Reset Parameters via Python

reset() -> bool - Resets the associated parameters to their default state, returns True if anything was changed.

       op('geo1').par.tx.reset()
       op('geo1').parGroup.t.reset()
       op('geo1').pages[0].resetPars()
       op('player').customPages['Setup'].resetPars()
       op('player').resetPars(includeBuiltin=False) # only reset custom
Default Parameters via Python
  • Par Class / ParGroup Class.defaultBindExpr .defaultExpr - Get or set the default bind expression on custom parameters.
       n.par.Float1.defaultBindExpr = 'me.par.Float2'
       n.par.Float1.defaultExpr = 'me.time.frame'
  • Par Class / ParGroup Class.defaultMode - For custom parameters get or set the default evaluation mode. Resetting the parameter sets it to .defaultExpr expression, so using the previous example n.par.Float1.defaultExpr = 'me.time.frame', then the expression would be set to me.time.frame.
       n.par.Float1.defaultMode = ParMode.EXPRESSION


General Python Additions and Improvements
  • App Class.systemFolder - A new member that contains the installation folder for TouchDesigner system files.
  • App Class.processId - A new member reporting the current process's ID.
  • App Class.tempFolder - New member which reports the temporary files location.
  • AudiofileinCHOP Class.timecode - Gets the timecode of the audio file read index.
  • ClockCHOP Class - Added a new .timecode member.
  • COMP Class.delTD() method is now properly called on extensions when operator is deleted.
  • DAT Class - row(), col(), rows(), cols() have a new bool argument `val`. `val=True` returns list of just cell entries instead of list of cells.
  • Dependency Class.setVal(val, setInfo=None) .setInfo(Keyword, Optional) - Optional information passed to the modified callback. Allows users to give more specific information when setting a value.
  • ListCOMP Class - Added .dropRow .dropCol members. The current row/col about to be dropped over.
  • MidiinCHOP Class.timecode - A new getter that grabs the timecode representation of the last set of quarter frame messages.
  • OakdeviceCHOP Class - Changed masterTimecode/runningTimecode to return a tdu.Timecode rather than a string. Also added a timecode getter that simply returns masterTimecode, similar to the Timer CHOP.
  • OakselectCHOP Class / OakselectTOP Class - Added a .timecode member that returns the referenced OAK Device CHOP's master timecode.
  • OP Class received a number of updates to work with the updated Sequential Parameters features.
    • OP Class.checkSequence() -> list - Returns a (possibly empty) list of any ParGroup objects with unmatched sequence flags.
    • OP Class.seq - A new member which allows accessing sequences by name.

For example:

       n.seq['Color']   # returns None if not found
       n.seq.Color      # raises exception if not found
  • OP Class.curBlock - The SequenceBlock of the currently evaluated parameter.

For example:

       me.curBlock.par.B  # use in parameter A of each block


  • Page Class.sort() - Allows Par and ParGroups as arguments (in addition to strings).
  • Page Class.appendMenu(size=1) - Now supports up to 4 menus in a single ParGroup.
  • Page Class / Cell Class - Comparisons to 'None' vs None now work properly.
  • PanelCOMP Class - Added .dropReady for the current state of the drop operation. True when the drop will be accepted.
  • PanelCOMP Class - BACKWARDS COMPATIBLITY ISSUE - Panel.interactMouse/interactTouch will respect 'Enable' parameter toggle.
  • Par Class - Custom parameter order attribute is now a float and no longer limited to integers.
  • Par_Class - .defaultMode .mode undoable when changed in script.
  • Project Class.quit() - Added exitCode keyword argument, to manually specify an exit code on quitting.

BACKWARD COMPATIBILITY sequence[3] sequence.blocks[6] etc now returns a block, whose elements are now ParGroup objects, not Par objects.

  • Sequence Class - New .par and .parGroup members which return a list (one from each block) or None.

For example:

       n.seq.Info.parGroup.T # entire list
       n.seq.Info.parGroup.T[3] # ParGroup from 4th block.
       n.seq.Info.parGroup['T'] # None if not found, else entire list
       n.seq.Info.par.Tx # entire list
       n.seq.Info.par.Tx[3] # ParGroup from 4th block.

Can be accessed via:

  • Sequence.blocks
  • Sequence[index]
  • Iterating through Sequence


Block members include .index .owner .sequence .par .parGroup

For example:

       for p in Block (iterating)
       len(Block)   (number of pars)
       Block[index] (each par)
  • Timecode Class improvements
    • Timecode Class.cycle - A new member for getting/setting whether the timecode will cycle once it reaches its max (default value: True)
    • Timecode Class.setLength - A method for setting a custom length.
    • Timecode Class.countdown - A member of the Timecode object that is the difference between the current timecode value and the length.
    • TimerCHOP Class.playingTimecode/.cumulativeTimecode - Has been changed to return a tdu.Timecode object rather than a string.
  • TOP Class improvements
    • TOP Class - cudaMemory() now supports a 'stream' keyword argument. Use this to make use of a cudaStream_t/CUstream stream to do the work on.
    • TOP Class - Added newestSliceWOffset member for use with Texture 3D TOP generated textures in Python.
    • TOP Class.pixelFormat - New member that returns the pixel format as a string.
  • scriptTOP Class - copyCUDAMemory() now supports a 'stream' keyword argument. Use this to make use of a cudaStream_t/CUstream stream to do the work on.
  • run function. The first argument can now be an optional function instead of a string. This can be easier to work with rather than constructing an executable line of code with embedded quotes.
       run( lambda: print('A') )
       run( lambda x: print(x), 'B' )
       run( print, 'C', 'D', 'E')
    • run(func) now accepts keywords. ie. run( myfunc, 'C', a=1, stop=True)
  • tdu_Module.match - BACKWARDS COMPATIBILITY ISSUE - Now supports space separated patterns and single ^ terms properly. tdu.match interprets spaces in the pattern argument as separators.

eg:

       tdu.match( "^foo", ["bar"] )    # ["bar"] 
       tdu.match( "* foo", ["bar"] )    # ["bar"]
  • TDJSON - BACKWARD COMPATIBILITY ISSUE Including 'eval' in extraAttrs argument list will now create a new "eval" entry in the JSON instead of replacing the value in "val".
  • Parameter members .expr, .bindExpr, .defaultExpr, .defaultBindExpr assigned to None in scripts will now be empty string instead of the string 'None'. BACKWARDS COMPATIBILITY ISSUE
  • When Python parameter expression is blank, return None, not empty string. BACKWARDS COMPATIBILITY ISSUE


New Palette

  • TDBitwig - TDBitwig is a set of TouchDesigner components that allow for communication between Bitwig Studio and TouchDesigner. For more information read our announcement here.
    • TDBitwig - About TDBitwig, a summary explanation and full list of the components available in the system.
    • TDBitwig User Guide - In-depth user guide covering installation usage and troubleshooting.
  • TDAbleton v2.3 - Added Change Global OP Shortcut feature to allow multiple instances, which allows you to connect to multiple Ableton Lives in one project.
    • v2.1.1 - Fixed defaults on the TDA package.
    • v2.2.0 - Currently playing arrangement clip info is now reflected in abletonTrack parameters
    • v2.2.0 - RunRemoteCode extension functions will no longer work when Listen Only is set on tdaMaster component. This can be overridden with an "overrideListenOnly=True" argument.
    • v2.2.0 - Added "Back To Arrangement" toggle on abletonSong - return tracks to arrangement control
  • Palette:cameraViewport - v0.39.0 - Added comments to help explain setup. Something to know: The latest version of cameraViewport is also always kept in the system component /sys, so if you are using cameraViewport from the palette or prior version of TouchDesigner, and you turn on its Clone parameter, it will always be up to date going forward. i.e. new builds of TouchDesigner will update cameraViewport automatically.
  • Palette:camSchnappr - Inverted UI interaction: ctrl+LMB will add points and ctrl+RMB will remove them. Interaction directly with the mouse (using no modifier keys) will control the camera now. Also upgraded P, Cd etc. identifiers in shaders.
  • Palette:kantanMapper - All wireframe materials use Topology mode now. Removed tscript from Window COMP parameter and fixing typo in page name of KantanUVHelper.
  • Palette:kinectPointcloud - v1.0.2 - Updated to use the latest pointRender and cameraViewport components.


  • Palette:logger - v2.2.5 - A new palette component wrapping around the Python Logging Library and interface to add additional Loggers easily in your TouchDesigner projects.
    • The logger COMP follows the propagation rules of the python library.
    • A Stream Handler was added to handle Textport log items. Therefore, when interacting with the logger COMP or the logger object directly, it will in most cases have an impact on both handlers (if used simultaneously). For example, when the setting changed is impacting the Logger object rather than an handler, such as the log level, or propagation. Status Bar is not using an handler.


  • Palette:particlesGpu
    • Life can be randomized or derived of an Effector input. Particles with alpha=0 will not be rendered.
    • New 'Lifemodifier' parameter to multiply remaining lifetime with effector value.
    • Fixed source interpolation disabled when source input provided.
    • Particles are not created from source points that have alpha 0.
    • Simulation now stays stopped when timeline is paused and viewer is tumbled.
    • New default compositing setting (Discard Alpha) and fixed source only creating particles if source alpha greater 0.
  • Palette:popMenu - Fixed issue where title width wasn't incorporated into menu window width. Other cosmetics. Menu updates size when pars change.
  • Palette:quadReproject - v0.1.7 - Added support for multiple lights in the 'Lights' parameter.
  • Palette:recorder - A new folder called TDVS for general video server components. The first component is the recorder component which wraps a Movie File Out TOP for easier recording and encoding of videos.
  • Palette:searchReplace - Now searches the evaluated value of parameters as well as val, expr, bindExpr.
  • Palette:sickEngine - A new component to wrap the SICK TOP in an Engine COMP for connecting to more than one sensor in the same project.
  • Palette:stoner - Fixed Grid Warp mode not properly adjusting Bezier surface weights.
  • palette:lister and palette:treeLister - Bug fixes and improvements
    • Fixed a bug where reordering rows in lister can mangle a sync'd input table if not all Table DAT cols are displayed in lister.
    • Added defaultAutoColDefine and exposed 'Word Wrap' parameter in config components.
    • Fixed bug where SetCellLookName function would override striping.
  • palette:treeLister - Further improvements
  • Optimized row selection and selection reporting. Exposed more inner members: IDObjDict, ObjIDDict, GetObjectFromID, GetIDFromObj (see Palette:treeLister for details).
  • Added 'Alphabetize Tree' parameter (default True) in case you don't want to alphabetize, which was forced in previous versions. Also fixes a bug where treeLister could sometimes sort twice when it only needs to sort once.
    • Added scrollbar controls to Tree parameter page.
    • Added 'Expand All' pulse button and ExpandAll function to expose all tree nodes.
    • Fixed bug where FromPathsSelectRows would miss the first row.
    • Fixed bug where input mode with wirePath and parentPath columns would fail.
    • Fixed error messages on initial load.


  • Palette:webBrowser - Improvements
    • Added multitouch input to utilize the newly added multitouch input support in the Web Render TOP.
    • Added a Crop page and parameters for an additional cropped output (new second TOP output called Output 1).
  • Palette:webRTC - Fixes and tweaks to the signaling components and webRTC components.
    • Internal loggers are all updated to the latest version of the Logger COMP.
  • TransitMap removed (before eventual replacement).


Bug Fixes and Improvements

SDK Updates


COMP Improvements

  • Container COMP - Fixed a problem with the positioning of popup windows when panel opacity is below one.
  • List COMP - Don't edit cells if modifier (shift/ctrl/alt/etc) keys are used. Also fixed an out-of-bounds issue calling rollover with (max_row, max_col) instead of (-1,-1).
  • Text COMP - Improvements and bug fixes
    • Fixed an issue where text members were out of date if the view hadn't been displayed yet.
    • onTextEditEnd() callback is now inside the Text Value Change undo block to allow additional events to be added to the undo step.
    • UI Events are now flushed before the OP Viewer TOP captures a panel viewer to ensure it is up to date with the latest cook which fixed a case where Text COMP data might be a frame behind.
  • Annotate COMP - New 'Utility' parameter access to utility flag (when On, hides from searches).
  • Camera Blend COMP - Fixed the Line MAT using incorrect aspect ratio values when rendering with a blended camera.
  • Engine COMP - .tox files now have the external tox settings disabled on load.
  • Slider COMP - Fixed default component to accept changes to u and v via script.
  • Text COMP - Added a new parameter to parse escape sequences like '\n' and '\t' when using the Specification DAT. Also fixed vertical alignment when using the Specification DAT.
  • Geo Text COMP - Fixed 'Font Color' not working.
  • Engine COMP - Fixed an issue which caused a Python error for old-style onInitialize() callbacks which don't return a value.
  • Text COMP - Fixed a bug when loading custom font files and added a warning message when the font fails to load.


TOP Improvements

  • TOP - Channel mask on the Common page now works correctly for Mono and Alpha Textures.
  • TOP - Pixel inspector tool now gives pixel-centered UV values.
  • GLSL TOP - Added 'TOPs' parameter to reference other inputs via parameter instead of a wired input.
  • Leap Motion TOP / Leap Motion CHOP - Added SDK version to the info popup, updated v5 Gemini SDK for both Windows and macOS
  • Lookup TOP - Dark/Light UV values will no longer be clamped at 0 on the low end.
  • Noise TOP - Fixed Simplex2D noise so that when the 'Derivative (Slope) parameter is toggled On, RGB channels get the XYZ noise derivatives.
  • Normal Map TOP - Fixed bug that could case NaN output values when using inputs textures with values greater than 1.
  • Nvidia Background TOP / Nvidia Denoise TOP / Nvidia Upscaler TOP - Fixed handling of 32-bit input textures. Note: output will still be 8 bit fixed.
  • Optical Flow TOP - Improvements
    • Adding new 'Pre-Shrink' parameter.
    • BACKWARD COMPATIBILITY ISSUE - 'Cost Output' values are now normalized to 0-1, instead of 0-255.


  • Point File In TOP / Point File Select TOP - Multiple changes that are backward compatibility issues
    • BACKWARD COMPATIBILITY ISSUE - Altered how the output texture size is determined based on the number of points. Might result in different texture sizes than previous versions.
    • BACKWARD COMPATIBILITY ISSUE - Field parameters are now stored as strings rather than indices.
  • Video Device In TOP - Improved AJA support to work with dual UHD inputs for Kona HDMI devices.
  • Video Stream In TOP - Added 'Active' parameter.
  • Web Render TOP - Added support for H264 playback and multitouch input and fixed a crash which could occur when loading a project.


CHOP Improvements

  • Info CHOP - Added "All" info type to display all info available.
  • Logic CHOP - 'Convert Input' menu indexing fixed.
  • Lookup CHOP - Added 'Extend Condition' menus with options for 'Use Input' and the standard extend options found elsewhere ie. (Hold, Cycle, etc).
  • Body Track CHOP - Static input images are now reprocessed when the parameters change.
  • DMX Out CHOP - Fixed bug with sACN/KiNET/ArtNet where only the first channel might be sent in Packet Per Channel mode.
  • Face Track CHOP - Face mesh is now included in the Config/Models folder and the 'Mesh' parameter now defaults to the included mesh file. Also made sure that static input images are reprocessed when the parameters change.
  • LTC Out CHOP - Added 'High FPS Behavior' menu with the options to cycle or duplicate frames for high frame rate scenarios.
  • Timer CHOP - Various improvements
    • Next Segment / Prev Segment now updates .masterSeconds properly.
    • Stop resetting .masterSeconds each cycle.
    • Fixed dropped pulse values.
  • Audio Device In CHOP - Added the option to select device by index rather than name for ASIO and CoreAudio.
  • Clock CHOP - Fixed 'Since Program Start' mode having incorrect start time.
  • Transform CHOP - Fixed Quaternion Lerp and Slerp input blend behavior.
  • Lag CHOP - Clamp 'Lag' and 'Overshoot' parameters to never be less than zero.
  • Timecode CHOP - Added 'Cycle' toggle.


DAT Improvements

  • MQTT Client DAT - Added topic argument to onPublish() callback.
  • OP Find DAT - 'Include Utility Off' no longer includes children of utility nodes.
  • UDP In DAT / TCP/IP DAT / Touch In DAT / Touch Out DAT / OSC In CHOP - Updated the way TCP and UDP sockets bind to ports. We now can issue more warnings depending on the status of the port and how the binding of the socket went, for example, if the port is already in use or not. Windows only.
  • Art-Net DAT - Removed local port parameter as it is redundant and can conflict with the receiving socket.
  • Folder DAT - Improved performance by optimizing filesystem check and fixed a crash which could occur loading a project.
    • This optimization also improves performance when a file changes in any File In operator.
  • Render Pick DAT - Now works without any DAT input connected, so the Python pick() method can be used without a dummy input.
  • Web Server DAT - Fixed onServerStop() callback not triggered when 'Restart' parameter is pulsed. Furthermore, an optimization to shut down the web server when its parent component cooking is disabled was added.
  • Parameter DAT - Added page name filtering and a toggle to output a column with the page that each parameter belongs to.

MAT Improvements

  • Line MAT - Now supports draw vectors for point primitives.
  • PBR MAT - Can take advantage of the upgrades to the Substance TOP SDK which supports the latest Substance Designer .sbsar materials.

SOP Improvements

  • SOP operators now support saving their contents in the following formats .dae, .3ds, .dxf, .obj (in addtion to .fbx).
  • Add SOP - Fixed bug that prevented the point sequence parameters from working.
  • Blend SOP - Fixed crash when blend weights reached 0.
  • Text SOP - Fixed crash in some cases when using a font file.
  • Point SOP - Fixed incorrect new attribute values in some cases when an attribute is deleted.
  • Texture SOP - BACKWARD COMPATIBILITY ISSUE - Fixed UV stretching and shearing of 'Face' type mapping. This changes the behavior of 'Face' type option.


Other Improvements
  • Search / Replace Dialog now searches the evaluated value of parameters as well as .val, .expr, and .bindExpr.
  • Improved accuracy of GPU timing calculations.
  • Fixed password dialog sometimes not opening on top of other windows.
  • Fixed floating network editors sometimes being always on top.
  • Fixed parameter dialog to not show default parameters in non-default mode (eg: './help' and 'repositioncomp' in containers)
  • Fixed Global OP shortcuts not registering properly on external .tox files.
  • Fixed spurious errors when using Page.appendPar()
  • TOP viewer pixel value picking (when viewer is active) now works correctly for 3D textures and Cube Map textures.
  • Added definitions for media keys on keyboards i.e. AudioVolumeUp, BrowserBack, etc
  • Added drag and drop support for FLAC audio files.
  • dragEnd callback droppedOn() now distinguishes between Par and ParGroup.
  • Custom Operators - Added 'cookCount' member to the OP_NodeInfo class.
  • Privacy - Improved support for nested private components. A private component's children now have access to their parents, even if those parents have their own privacy.
  • Network Utilities: Comments, Network Boxes, Annotates - Comments, Network Boxes and Annotates now have a 'Utility' parameter for turning on and off utility mode. Utility mode distinguished whether it's treated as a real node or a hidden node, a subtle difference.
  • Fixed incomplete panel layouts when parents employ children scaling.
  • .tox files are now saved with the external tox parameter turned off.
  • Fixed being able to use backspace or delete in input boxes are are not editable.
  • Improved the behavior of the value ladder on Remote Desktop/VNC/Synergy/Parsec etc.
  • Fixed dialog window (ie. colorpicker) sizes slowly getting larger when repeatedly opened.
  • Fixed a case where Unicode characters in a external file's filepath could cause a crash.
  • Stopped auto-connecting of component inputs or outputs when drag and dropping or pasting a component into the network editor.


Licensing
  • On Windows, TouchDesigner's License System Codes are now generated differently to reduce the chance of a system code change when applying Windows Updates. Old keys will work in this 2023.10k branch, however, new keys created in this 2023.10k branch will not work with older versions of TouchDesigner. We also have release an update to 2022.20k branch so any builds released after July 10, 2023 will also work with the new keys created in this 2023 version. In summary - If you want to use 2022 and 2023 versions with the same key, either a) create your key using 2022 builds, or b) use a 2022 build released after July 10, 2023.
  • Errors are now provided when Floating Cloud and Dongle licenses are expired for the current build.
  • Floating Cloud licenses won't be consumed anymore if a better Dongle license is present on the system. Furthermore, floating cloud or dongle licenses won't be used if a higher level local license is installed through the Key Manager Dialog.


Panel Layout Optimization
  • Lots of work was done to speed up internal panel layout code resulting in many control panels performing significantly faster. If you discover regressions or control panels that are still extremely slow, please contact us via the bugs forum.


Operator Snippets

Backward Compatibility

Change for keys on Windows systems

  • TouchDesigner's License System Codes are now generated differently to reduce the chance of a system code change when applying Windows Updates. Old keys will work in this 2023.10k branch, however, new keys created in this 2023.10k branch will not work with older versions of TouchDesigner.
  • We have released an update to 2022.20k branch so any builds released after July 10 2023 will also work with the new keys created in this 2023 version. In summary - If you want to use 2022 and 2023 versions with the same key, either a) create your key using 2022 builds, or b) use a 2022 build released after July 10 2023 (yet to be released).
  • If you need to use older versions of TouchDesigner alongside 2023 with the same key, create your key with the older version (ie. 2019, 2020, 2021, etc) and it work for all newer versions.


File Compatibility

⚠️ Project .toe files saved in 2023 Official builds can not be loaded back into previous versions of TouchDesigner such as 2022 or 2021 builds..


Backward Compatibility Changes

We try to make upgrading to new TouchDesigner branches as painless as possible, but sometimes changes are made that are not compatible with the feature set in older builds. These are difficult decisions and we do not take them lightly, but we move forward with such changes when it is clear that they will benefit the TouchDesigner platform in the long term.

  • BACKWARD COMPATIBILITY ISSUE - tdu.match interprets spaces in the pattern argument as separators.
  • BACKWARD COMPATIBILITY ISSUE - The Keyboard In DAT's 'key' column will no longer return special characters such as !@#$%^&*(). These will now be 1234567890 for better consistency with other shortcut workflows.
  • BACKWARD COMPATIBILITY ISSUE - Parameter expressions assigned to None in scripts will now be empty string instead of the string 'None'.
  • BACKWARD COMPATIBILITY ISSUE - When Python parameter expression is blank, return None, not empty string.
  • BACKWARD COMPATIBILITY ISSUE - Panel.interactMouse()/.interactTouch() will respect a panel's 'Enable' parameter toggle.
  • BACKWARD COMPATIBILITY ISSUE- Optical Flow TOP - 'Cost Output' values are now normalized to 0-1, instead of 0-255.
  • BACKWARD COMPATIBILITY ISSUE - TDJSON - Including 'eval' in extraAttrs argument list will now create a new "eval" entry in the JSON instead of replacing the value in "val".
  • BACKWARD COMPATIBILITY ISSUE - Point File In TOP / Point File Select TOP - Altered how the output texture size is determined based on the number of points. Might result in different texture sizes than previous versions.
  • BACKWARD COMPATIBILITY ISSUE - Sequence Class.blocks - This now returns a list of SequenceBlock Class not list of tuples of Pars. sequence[3] sequence.blocks[6] etc now returns a block, whose elements are now ParGroup objects, not Par objects.
  • BACKWARD COMPATIBILITY ISSUE - Several built-in parameters have been renamed for consistency, starting with index 0, etc. Older files will load correctly and get updated when saved, but note that files saved in 2023.10k builds will cause issues if loaded into any previous builds.
  • BACKWARD COMPATIBILITY ISSUE - Texture SOP - Fixed UV stretching and shearing of 'Face' type mapping. This changes the behavior of 'Face' type option.
  • BACKWARD COMPATIBILITY ISSUE - Parameter order gets overridden when changing a Parameter's page member.


Experimental Builds 2023.10000 - Nov 15, 2023

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


Official Builds 2022.20000 and earlier - Oct 31, 2023

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