Release Notes
Current Official Build 2023.12000 Download - Sep 23 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.12000 - Sep 23, 2024
New Features
Direct Display Out TOP - This TOP uses new technology available in Vulkan which allows directly outputting the DisplayPort/HDMI ports on the GPU, without interacting with the Windows Desktop. This avoids the need for a Window COMP, avoids cases where other windows and the mouse cursor will go in front of the content window, and avoids a lot of the issues caused by the Windows Compositor, as described Perfect Playback. Up to 3 outputs can be controlled via Direct Display. An Nvidia GPU and Windows 11 Pro For Workstations or Windows 11 Enterprise version are required.
New Python
- Pane Class
.open
- A new method which returns True when pane is open, False when closed. - Pane Class - Panes are now dependable (can be used in expressions and will recalculate on changes).
- scalabledisplayTOP Class - Added
.calibWidth
and.calibApproxWidth
members (and matching Height counterparts). - Timecode Class - Added support for more comparison operations: <, <=, >, >=
- VFS Class - Fixed script update issue when the contents changed.
- videodeviceinTOP Class
.timecode
- Fixed incorrect fps value.
New Palette
- Palette:cppParsTemplateGen - 0.1.2 - Fixed namespace issue that was occurring with the latest CPlusPlus Custom OPs API.
- Palette:lister - 1.19.2 - First column in autocoldefine is now stretched. Also fixed a problem where dict entries can be repeated. Improved default look.
- Palette:searchReplace - 1.15.4 - Fixed occasional error when analyzing pars. Fixed the problem in Search/Replace dialog as well. Also fixed errors caused by changes to Par == (equality).
- Palette:treeLister - 1.11.0 - Added 'Selected Output', 'Save Sel. On Input Change', and 'Allow Empty Selection' options. Fixed problem in autocoldefine where extra columns had incorrect width. Improved default look.
- Widgets - v2.1.115
- Fixed top menu extension menu.
- Fixed drop menu font.
- Fixed field sub-widget horizontal / vertical layout references.
Bug Fixes and Improvements
- Updated to Flir/Teledyne Spinnaker SDK 4.0.0.116 - Video Device In TOP
- Updated to SDK 10.5 - Scalable Display TOP
COMP
- Slider COMP - Fixed updating for some cases of vertical sliders.
- Text COMP - Fixed Text COMP not getting key & character panel values. This was evident when trying to use <enter> key in the component privacy dialog's password field.
- USD COMP - Fixed display/render issues with certain .usd files.
TOP
- Cache TOP - Fixed regression that caused poor behavior when the 'Cache Size' was changing. Now the Cache Select TOP should behave properly when the cache isn't yet filled.
- Feedback TOP - Clamp 'Num Passes' to 1 avoid errors or artifacts.
- OpenColorIO TOP - Fixed CDL Transform crash when using inverse direction with slope values of 0, throws an error instead.
- OP Viewer TOP - Fixed cook dependency warnings when appending anything to OP Viewer TOP.
- Render TOP - Small tweak to 'Order Independent Transparency' to avoid z-fighting artifacts that can occur in some cases.
- Render TOP - Fixed rendering artifact that can occur when using 'Primitive' topology objects such as Sphere SOP set to 'Primitive'.
- Render Pass TOP - Display error if the source is in error due to multiple Render Pass TOPs using it.
- RenderStream In TOP - Fixed a crash that can occur when bringing in a texture.
- Scalable Display TOP - Upgraded to SDK 10.5.
- Added support for ol_ and pol_ extensions.
- Added new 'Reload' pulse parameter.
- Added menu to allow the resolution to be based on the calibration file.
- Fixed crash that can occur when changing from an invalid file path to a valid file.
- Video Device In TOP - Upgraded to Flir/Teledyne Spinnaker SDK 4.0.0.116. Flir camera names now include serial number in the dropdown menu.
CHOP
- Audio Device Out CHOP - A number of improvements
- Added new 'Cycle Channels in Output' parameter that allows disabling of the features which cycles through the channels to fill all outputs. When this toggle is off, Outputs with no channel available are simply left as zero.
- Fixed issue which prevented custom parameters using the 'Outputs' parameter as a menuSource from updating when using ASIO drivers.
- Fixed an issue which could cause crackles in audio output on macOS.
- Audio VST CHOP - Fixed cases where enabling the 'Regular Parameters' toggle could overwrite internal plugin parameter values. Also fixed a possible hang when closing TouchDesigner on macOS when an Audio VST CHOP was running.
- Inverse Kin CHOP - Fixed a crash when setting up 'Follow Curve'.
- MIDI In CHOP - Added smoothing to timecode values generated by stream of quarter frame messages.
DAT
- Folder DAT - Fixed issue which could cause some files to be missed by the Folder DAT.
- Parameter DAT - Fixed ParGroup matching when pattern matching contains wildcards.
- Parameter DAT - Fixed a case where the path output did not update on name changes.
- TCP/IP DAT - Fixed onClose callbacks not being triggered in client mode when the connection is closed on the server-side.
MAT
- Constant MAT - Fixed flickering that can occur when used with Instance Texturing and 3D textures.
- Phong MAT / PBR MAT - Fixed Instance Texturing being applied to all maps instead of just the one that was selected.
Misc
- VFS - Fixed hang when playing embedded audio from VFS sources.
- Performance Monitor - 'Draw List' included under Port Draw Time as it can be significant.
- macOS - Fixed issue which caused windows to briefly flash blank content when opened sometimes.
- macOS - Fixed crash on startup on older macOS versions.
- Fixed updating multiple selected OPs with single parm slider.
- Fixed the behavior of 'Fixed Aspect' = Vertical option in panels.
- Fixed a bug copying operators with custom parameters that had defaults set to bind expressions.
Operator Snippets
- Operator Snippets loaded for review are now unloaded when you close the snippets dialog. This will help avoid cases where snippets would continue to cook after using the Operator Snippets dialog.
- The following OP Snippets were fixed: Body Track CHOP, Web Server DAT
Build 2023.11880 - Jul 08, 2024
New Features
- AJA - Added support for 6G/12G formats for io4K Plus devices.
- SocketIO DAT - Switch to latest version of socket.io client API which supports connecting to v3/v4 servers. Note backward compatibility issue - connecting to v2 socket.io servers is no longer supported.
New Python
- COMP Class - The
.copy()
method works with undo again. - LayoutTOP Class - Fixed
.unload()
not working correctly. - Matrix Class - Fixed missing error check on some invalid inputs.
- Par Class / ParGroup Class -
.sequenceBlock
returns the SequenceBlock Class the object belongs to or None.
New Palette
- Palette:cameraViewport - 1.0.1 - Pivot and PivotUV properties are now saved so that the pivot point is restored on reload. Cloning is now turned on by default.
- Palette:popMenu - Added options for DPI scaling mode of popup window on Advanced parameter page.
- TDAbleton - Version 2.5.2 bug fixes for Live 11 & 12 compatibility.
- Fixed adding of max devices for Live 12.
- Fixed bad updating of LOMpars with main/master.
- Fixed an issue disconnecting clients in tda.py.
- Fixed issues with master/main track names.
- Changed samples folder to Live 11+.
- Widgets - v2.1.109
- Removed fraction scaling for dropmenu which was broken anyway. Now there is just 'Pixel' or 'Point' where Point is the default.
- Fix to fieldTextArea bind mapping.
- Folder widget minor fix
- Topmenu widget color cleanup
Bug Fixes and Improvements
- Updated Orbbec Kinect SDK to version 1.10.1 - Kinect Azure TOP
- Updated SDK to 1.10.8 - Orbbec TOP
COMP
- Camera COMP / Light COMP - Fixed bug introduced in 2023.11408 where 'Constrain To' parameter entry would not be loaded into new parameters that 'Constrain To' has been converted into ie. 'Parent Transform Source', 'Parent Object'.
- Geo Text COMP - Fixed blending problem when using a fallback font.
- Replicator COMP - Fixed parameter references/dependancies missing after 'Recreate All' pressed.
- Text COMP - Fixed a bug where the 'Text' parameter could be changed incorrectly in Select Only mode due to conflicting line ends.
TOP
- TOP - Fixed some cases where TOP memory isn't cleaned up when using
unload()
mthod or when cooking is disabled in the parent component. - GLSL TOP - Fixed input extend mode/filter not being used for the first input when Passes > 1.
- Kinect Azure TOP - Updated Orbbec Kinect SDK to version 1.10.1. Fixed crash when node is switched to inactive and an Info CHOP is connected or python methods are called.
- Layout TOP - Fixed crash that can occur with this node in some cases (Apple Silicon M3 crash in particular).
- Movie File In TOP - Fixed crash that can occur if the resolution is too large for the GPU.
- Orbbec TOP - Updated SDK to 1.10.8. Fixed lag when using the point cloud.
- Render Pass TOP - Can no longer have a different pixel format than the Render TOP it's downstream from.
- Text TOP - Fixed crash that can occur when using Bitmap font mode on Windows.
- Texture 3D TOP - Fixed Pre-Fill not working for old files that contained a Texture 3D TOP.
- Video Device In TOP / Video Device Out TOP - Added support for 6G/12G formats for AJA io4K Plus devices.
CHOP
- Audio Play CHOP - Information now available in Info DAT to properly represent file paths. Info DAT also includes current volume.
- Body Track CHOP - Fixed an issue where the valid channel would not return to zero (when no longer tracking) when using people tracking mode.
- OAK Device CHOP - Improved error message when Depth AI libraries are not installed.
- Transform CHOP - Added another 'Pre Operator' to the 'Transform' page.
DAT
- MQTT Client DAT - Fixed potential cook time spikes.
- Parameter Execute DAT - Fixed a crash occurring when the node is updated during its callback sequence.
SOP
- Clay SOP - Fixed incorrect results applying the vector warp method along a direction.
- Join SOP - Fixed a crash when joining a single vertex polygon.
- Particle SOP - Fixed a rare startup crash when scripting new particles.
MAT
- GLSL MAT - Added new #define TD_RENDER_TOP that will be set when the MAT is used in a Render TOP. Useful to avoid errors to do with the Image Outputs when the MAT is being rendered by a Render TOP.
- Phong MAT / PBR MAT - Fixed 'Texture Coord 0' not working when written to the first color buffer.
Misc
- Orthographic camera position is properly restored in 3D node viewers.
- Fixed a crash that can occur when sending broadcast UDP messages.
- Fixed network Annotations and Network Boxes randomly expanding to picked nodes outside the original boundary.
- Fixed undo for Annotate and Network Box auto-resize.
- Fixed an issue with panel value 'inside' not updating when dealing with overlapping windows.
- Fixed extensions reinitializing multiple times when panel layout occurred.
- Adding support for drag and drop of YAML files into the network.
- Fixed a number of cases where TouchDesigner might hang or crash on quitting.
- Fixed a crash when clicking buttons in the SOP modeler parameter dialog.
- Fixed component editor naming when dragging in built-in parameters with a combined type.
- macOS - Fixed cursor jumping in text field when moving between windows on macOS while editing.
- macOS - Fixed issue which could cause text cursors to move when the mouse moved to another window.
- macOS - Fixed issue which caused capital letters to get lost during text input in a few cases.
- Added pythonw.exe to TouchDesigner's shipped binaries.
Backward Compatibility Changes
BACKWARD COMPATIBILITY ISSUE SocketIO DAT - connecting to v2 socket.io servers is no longer supported.
Build 2023.11760 - May 03, 2024
New Features
- Video Device In TOP / Video Device Out TOP / AJA - Upgraded to SDK 17.0.0.12, added support for the Kona X device.
- CPlusPlus SOP - Added new attributes that the user can access - vertex color, vertex textures, and primitive color.
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
- Palette:kinectCalibration - Fixed 'Body Tracking Model' parameter on Kinect Azure TOP being not set.
- Palette:logger - v2.2.9 - Updated log level menu order.
- Palette:popMenu - Added "Include in Placement Dialog" parameter to avoid polluting that dialog. Default is Off.
- Palette:testGrid - v2.0.4 - Creates a grid of any resolution with a variety of adjustable graphical elements.
- 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
- Updated AJA SDK to version 17.0.0.12 - Video Device In TOP / Video Device Out TOP
- Updated NDI SDK to 6.0.0 - NDI In TOP / NDI Out TOP
- Updated OpenColorIO SDK to version 2.3.2 - OpenColorIO TOP
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
- Analyze TOP - Fixed cases where the width/height of the output would be collapsed down to 1 pixel incorrectly.
- Cache TOP - Fixed issues with using 'Replace Single' on a not yet filled Cache TOP resulting in incorrect indices being given when using Cache Select TOP.
- Chroma Key TOP - Fixed a hang that can sometimes occur.
- Movie File In TOP - Fixed an issue that can occur when loading 2 channel .exr files.
- Movie File Out TOP - Fixed an issue where container color primaries would be set to Rec2020 for UHD Apple ProRes content. Stay as Rec709 for now.
- Movie File Out TOP / Video Stream Out TOP - Fixed compressed audio bit rate always being 128kbs rather than what is selected by the menu.
- Nvidia Denoise TOP / Nvidia Background TOP / Nvidia Upscaler TOP / Face Track CHOP / Body Track CHOP - Fixed a potential crash on dual Nvidia GPU systems.
- OpenColorIO TOP - Upgrade to SDK v2.3.2, which will fix loading of v2.3 config files in TouchDesigner. Also added support for built-in configs.
- OP Viewer TOP - Fixed blank output when viewing a SOP or COMP. Also fixed recursive cook loop warnings.
- Ramp TOP - Fixed corruption and artifacts that can occur on AMD GPUs.
- Render Select TOP - Fixed loading up with incorrect 'Index' parameter value if the 'Mode' was set to 'Image Output'.
- Texture 3D TOP - Fixed filling the cache at the wrong rate when FPS is not 30.
- Video Device In TOP - Fixed a crash that can occur when the input video resolution increases.
- Vioso TOP - Added 'Offset' and 'Resolution' control parameters.
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
- Updated Orbbec SDK to version 1.9.4 - Orbbec TOP
- Updated OpenVR SDK to version 1.26.7 - OpenVR TOP/ OpenVR CHOP
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
toSOP_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
- New snippets for the Bloom TOP and Timer CHOP.
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 exampleC:/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 forblockid
. When blocks are added, deleted, moved or copied, theblockid
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 theSequence.id()
function. The.id(val)
function will return the block whoseblockid
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.
- Palette:particlesGpu - Source generator's sphere radius was improperly calculated.
- Palette:pointGenerator - Sphere radius was improperly calculated.
- Palette:quadReproject - v0.3.0 - Refactor for
quadReproject
COMP to internally rely on the newly introduced custom par sequences. - Palette:sceneChanger - v 1.0.8 - Added select to Resolution TOP to save memory.
- Palette:sickEngine - Fixed file path to sickCore component.
- 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
- RealSense CHOP - DEPRECATED: Skeleton tracking features no longer licensable by Cubemos.
- Upgrade to depthAI 2.24.0 - OAK-D
- Upgrade to ShowNET API v1.3 - Laser Device CHOP
COMP
- Engine COMP & TouchEngine - Fixed missing custom menu parameters.
- Fixed bad output when input textures are applied as color maps on MATs.
- FBX COMP - Fixed material deform crash.
- Nvidia Flex Solver COMP - Fixed crash from pulsing init/start in quick succession.
- 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
andfile_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
- Alembic SOP - Fixes to custom attribute importing.
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
andcameraTransform
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()
- UnlikeappendFile()
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
andcycle
keywords totdu.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
, andgeoPanel
's built-inmultiLevel
. - 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.
- Point File In TOP / Point File Select TOP - Fixed a bug loading Zero, One or Active values from 2022 projects.
- Screen Grab TOP - Fixed a memory leak on Intel GPUs.
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
, andinitialize_fail
.
- Added a docked Info DAT
- Added “
engine_pid
” to Info DAT for the process ID of the engine process.
- Added “
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
- Python upgraded to 3.11 - Runs 10-60% faster for everything, better error messages, more new and shiny!
- Full update details What’s New In Python 3.11 and What’s New In Python 3.10. (TouchDesigner's previous python version was 3.9.5)
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
- Video Stream Out TOP - Now works with Non-Commercial licenses.
- 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.
- Video Device Out TOP - On Deltacast devices we added support for 12-bit output and custom resolution output for HDMI/Displayport output.
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.
- OptiTrack In CHOP - Previously named the NatNet In CHOP, we renamed it for clarity.
- 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 be1234567890
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.
- BACKWARDS COMPATIBILITY ISSUE - The 'key' column will no longer return special characters such as
New Python
Python Version 3.11
- Python 3.11 - Runs 10-60% faster for everything!
- Create better error messages with
Exception.add_note()
. - PEP 678: Exceptions can be enriched with notes
- Full update details here: What’s New In Python 3.11
- Python 3.10 - New "
match
" statements. Similar to "switch
" in C++ and other languages. Full update details here: What’s New In Python 3.10
opex() Method Instead of op()
- OP Class / td Module - New
opex()
method that works identically toop()
, except it will raise an exception if it fails to find the node instead of returningNone
asop()
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 usingop()
, for example.
Reset Parameters via Python
- Par Class -
reset()
- ParGroup Class -
reset()
- Page Class -
resetPars()
- OP Class -
.resetPars(parNames='*', parGroupNames='*', pageNames='*', includeBuiltin=True, includeCustom=True)
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
- Component Editor Dialog - Added features for default parameter modes.
- TDJSON - Updated to work with default parameter modes.
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 atdu.Timecode
rather than a string. Also added a timecode getter that simply returnsmasterTimecode
, 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.
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()
- AddedexitCode
keyword argument, to manually specify an exit code on quitting.
- Sequence Class
.blocks
- This now returns a list of SequenceBlock Class not list of tuples of Pars.
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) orNone
.
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.
- SequenceBlock Class - For working with a block of parameters in a sequence.
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 atdu.Timecode
object rather than a string.
- Timecode Class
- 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.
- TOP Class -
- 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 ontdaMaster
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 usingcameraViewport
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 updatecameraViewport
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:debugControl - Version 1.4.0 - Added ability to print timestamp.
- Palette:depthProjection - Fixed the direction of the XY axes.
- Palette:kantanMapper - All wireframe materials use Topology mode now. Removed
tscript
from Window COMP parameter and fixing typo in page name ofKantanUVHelper
. - Palette:kinectPointcloud - v1.0.2 - Updated to use the latest
pointRender
andcameraViewport
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:pointRender - v1.2.2 - Updated to use the latest
cameraViewport
component.
- 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 wheretreeLister
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
andparentPath
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
- Upgrade to Nvidia Optical Flow to 4.0.11 - Optical Flow TOP
- Upgrade to Nvidia Video Effects to 0.7.2 - Nvidia Background TOP / Nvidia Denoise TOP / Nvidia Upscaler TOP
- Upgrade to Nvidia AR SDK to 0.8.2 - Face Track CHOP
- Upgrade to JUCE v7.0.2 - Audio VST CHOP]
- Upgrade to Kinect Body Tracking SDK to 1.1.2 Kinect Azure CHOP
- Upgrade to Ableton Link SDK v3.0.6 - Ableton Link CHOP
- Upgrade to Leap Motion SDK Windows v5.13.2 and MacOS v5.14.0 - Leap Motion TOP / Leap Motion TOP
- Upgrade to DepthAI 2.22.0 - OAK-D
- Upgrade to OpenCV 4.8.0.
- Upgrade to R3D SDK 8.4.0, used in the Movie File In TOP for decoding RED Camera codec in
.r3d
file format. - Upgrade to RealSense SDK 2.54.2 - RealSense TOP / RealSense CHOP
- Upgrade to Substance SDK v9.0.1, this enables the use of E.6 Materials - Substance TOP -> PBR MAT
- Upgraded to ZED SDK 4.0.7 - ZED TOP / ZED CHOP / ZED SOP
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.
- CHOP to TOP - Fixed 16-bit float formats not working.
- Movie File Out TOP - NotchLC - Fixed bug in NotchLC encoder that caused files to end up larger than expected.
- Video Device In TOP - Info DAT no longer includes output devices.
- 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
- Audio File In CHOP - Added support for driving the audio file index with a timecode reference.
- Audio VST CHOP - Added timestamp argument to
onReceiveMidi()
callback.- AudiovstCHOP Class
.send
/.sendExclusive
- Addedtimestamp
keyword argument.
- AudiovstCHOP Class
- 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.
- Next Segment / Prev Segment now updates
- 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.
- Audio Stream In CHOP - Added an 'Active' parameter.
- Body Track CHOP / Face Track CHOP - Fixed tracking issues when using a floating point input texture.
- 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
callbackdroppedOn()
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
- New snippets for Body Track CHOP, Timecode CHOP, Bloom TOP and numerous updates to other OPs.
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 be1234567890
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
' inextraAttrs
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 - Point File In TOP / Point File Select TOP - Field parameters are now stored as strings rather than indices.
- 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 nowParGroup
objects, notPar
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