Release Notes/2021.30000

From Derivative
Jump to navigation Jump to search

Experimental Builds[edit]

This branch is now Official as of Build 2022.24200

Experimental builds include new features still in development and testing, features are subject to change. For the stability and reliability required for performances and project deliveries, we recommend using the production ready Official Builds.

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

Download Here

Known Issues[edit]

All Builds[edit]

  • Some panel borders and buttons elements may not display correctly on hiDPI monitors.

macOS Specific[edit]

macOS Apple Silicon Build Specific[edit]


This branch is now Official, the follow section for build 2022.24200 decribes the changes from final Experimental build 2022.22650 to first Official 2022.24200 build.

Official Build 2022.24200 - May 24, 2022[edit]

New Features[edit]

  • Hap - Added support for new Hap HDR format. A 16-bit movie format that is just as fast to playback as other Hap formats. Slower to encode though.
  • Added support for 10-bit Window output (using environment variable TOUCH_10_BIT_COLOR=1).
  • Movie File Out TOP - Added support for encoding Hap R at a much faster speed.
  • GLSL MAT - All of the sTD* samplers are now wrapped in TD*() functions. These should be used instead of the samplers directly, for better compatibility with various GPUs.

New Python[edit]

  • Camera Class.dir - New member to get and set the direction of the camera as a vector.
  • TextCOMP Class.evalTextSize - Returned text height now includes word wrap and line breaks when the Text COMP 'Type' parameter is set to Multi Line.
  • TextCOMP Class.evalTextSize - Fixed missing dependency.
  • TextCOMP Class.textHeight - Fixed a bug where the value would not update properly on startup.
  • TOP Class.cudaMemory() method is working again.

New Palette[edit]

  • Palette:cameraViewport - Improvements to behavior and some bug fixes.
    • Added Zoom parameter to control the distance from the camera to the pivot point.
    • Adjusted how the auto-rotate speed is determined based on the mouse movement.
    • Fixed pan speed in orthographic mode so that it matches the current ortho width.
    • Fixed a bug with home not using the home angle from the parameter.
  • Palette:camSchnappr - Fixed a bug in autoblend where blue gamma was not adjusted. Also changed the default for Gamma to 2.0. Fix for near and far parameters being ignored by intrinsic calculation.
  • palette:firmata - Fix for disappearing empty pages.
  • Palette:kantanUVHelper - The shader now correctly deals with cases where there are not enough inputs.
  • Palette:particlesGpu - Complete overhaul
    • Removed geometry shaders, now using Compute Shaders.
    • Now compatible with macOS.
    • Numerous feature additions and new parameters for more control over forces and particle attributes.
    • Parameter added for controlling the absolute number of particles in the system. This effectively controls the resolution of the shader and can help in optization on less powerful GPUs.
    • Fixed for wrongly assigned resolution setting.
  • Palette:sopRender - Updated the viewer to use cameraViewport and the new zoom parameter. Switched ortho blend to a toggle parameter. Parent parameters Camera Z and Camera FOV are now bound to child Camera COMP parameters.
  • Palette:SVG - v0.1.4 - Removed a hack that was in place because of an issue in CEF (Chromium).
  • videoPlayer component - Deprecated and removed. Users should use the Palette:moviePlayer component instead.
  • Widgets - General improvements.
    • Improved handling of relative paths for file and folder selection widget.
      • New Relative paths menu.
      • Use project.paths toggle to allow customizing of how paths are collapsed and expanded relative to the project folder.
    • TextArea component now uses the Text COMP. Edit button was removed and a more complete edit mode menu replaces the edit toggle.
    • Fix to header component to make close button work.
    • Browser field widgets had render cursor turned off, now defaults to on.


  • Palette:webRTC, Palette:signalingServer, Palette:signalingClient - v1.0.1 - Various improvements for stable elease, changelog follows.
    • All COMPs - now support signaling messages validation with JSON Schema. More details at Palette:signalingServer#JSONSchema. WebRTC signaling message types also have matching schema files.
    • All COMPs - Minor improvements to logger. Fixing issues that could occur during initialization / parameters changes.
    • All COMPs - Improved wiki documentation.
    • All COMPs - Improved Reset strategies. Improved behavior means you should not need to pulse the Reset parameter as often.
    • All COMPs - Small tweaks and fixes.
    • signalingClient COMP - More aggressive reconnect strategy, should prevent the need to Reset.
    • signalingClient COMP - Fixing an issue that could occur when a connection between client and server would be lost / or rconnect.
    • webRTC COMP - Now supports an example for CHOP data sent over a dataChannel. More details at Palette:webRTC#dataChannls.
    • webRTC COMP - More aggressive subscribe strategy, should prevent the need to Reset.
    • webRTC COMP - Fixing an issue that could occur when a connection between signalingClient and signalingServer would be lost / or reconnect, negatively impacting the WebRTC COMP.
    • webRTC COMP - Improved performances of DAT data sent over dataChannels.
    • webRTC COMP - Tweaks to UI / panel layout layout to accomodate for multiple ongoing connections.

Bug Fixes and Improvements[edit]

  • Scalable Display TOP - Upgraded to SDK v8.0
  • CodeMeter runtime kit updated to 7.40b - Use this runtime if running older versions of TouchDesigner at the same time as 2022 versions.
  • Actor COMP - In Bullet simulations fixed a collision shape bug when 'Update Collision Shape' and 'Infinite Mass' are both enabled.
  • Light COMP - Fixed 'Custom Projection Matrix' parameter not being enabled.
  • USD COMP - Now working on macOS again.
  • OP Viewer COMP - Turning off 'Interactive' now blocks all panel values from viewed panels. Furthermore, it now only affects the viewed panel and leaves the OP Viewer's own panel behaviours active.
  • Text COMP - New features and bug fixes.
    • Added support for font size, color, skew, tracking and stretch to the Specification Table.
    • Added support for a Specification CHOP, allowing styling control through CHOP channels.
    • Fixed a bug where word wrap could still be on after switching from multi line to single line mode.
    • Fixed a bug where the 'Text' parameter value was not updated when deleting text using 'Edit Mode' = Editable (Continuous Update).
    • Fixed a layout problem when a panel is toggled between visible and hidden.
    • Fixed a bug with editing text when formatting codes were enabled.
    • Fixed an issue where parameters that were based on panel size wouldn't update properly.
  • Text COMP / DAT Viewer - Fixed a bug with undoing text deletion after a redo.
  • Text COMP / Geo Text COMP - Line breaks at the end of a string now count as an extra line.
  • Engine COMP - Fixed a crash which could occur when deleting an Engine COMP.
  • Engine COMP - Fixed some outputs not updating after being replicated.
  • GLSL TOP, GLSL MAT - Unassigned uniform warnings are now working again.
  • Movie File In TOP - Fixed bug loading EXR files with partial data windows.
  • Movie File Out TOP - Fixed incorrect warning message when recording with some codecs.
  • Text TOP - Improved kerning for Bitmap fonts on Windows when using english text.
  • Audio Device In CHOP - Allow any rate up to and including 192KHz without modification. Previously the CHOP would set the sample rate to 44.1KHz when it was above 96KHz.
  • Audio VST CHOP - Plugin state crash workaround - Added 'Load Plugin State' parameter to allow for disabling of the feature with unstable plugins (notably Tyrell N6 VST).
  • Count CHOP - Fixed missing narrow/single sample pulses.
  • Leap Motion CHOP / Leap Motion TOP - On Windows - Leap DLLs are no longer included with the TouchDesigner installer. The new 'Library Folder' parameter should be set to the location of the correct DLL for the selected API. See Help for installation instructions.
  • Leap Motion CHOP / Leap Motion TOP - On macOS - Leap Motion is currently disabled. We plan to reintroduce this features in upcoming builds.
  • MIDI In CHOP - Option to 'Preserve Pulses' now exposed and fixed bugs causing erratic output.
  • OpenVR CHOP - Prevent TouchDesigner from closing on SteamVR shutdown.
  • OP Find DAT - Don't recook unnecessarily when child comment changes.
  • Fixed a bug that turned word wrap on in DATs when ui options were updated.
  • DATs now update word wrapping dynamically when zooming.
  • Reimplemented the max character limit on word wrap in DATs.
  • Panel option Align Grid Rows/Columns fills space better when children are set to Fill.
  • Fixed issue with panel layout in Palette and OP Snippets. Palette no longer lays out badly when toggling its display on/off.
  • Fixed incomplete panel layout issues when parent aligns children.
  • Fixed resizing floating windows to continuously resize (affects Parameter Dialogs, other floating node views when power off).
  • Fixed jumping panel.u values when dragging over open CHOP viewer.
  • Performance improvements when navigating networks with a large number of DAT viewers.
  • DAT viewers are now anchored to the mouse position when zooming with the middle mouse button.


Build 2022.22650 - Apr 27, 2022[edit]

2022 Official Release Candidate (RC1)

New Features[edit]

New Python[edit]

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

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

  • Project Class - Renamed members Project.saveOsName/Version to Project.saveOSName/Version
  • Script CHOP.clear will now set the CHOP to the global sample rate, not necessarily 60 frames per second.

New Palette[edit]

  • Palette:quadReproject - v0.1.2 - quadReproject is now relying on the new parGroup class in some places.
  • Palette:sopRender - Retrofit with cameraViewport component.
  • Palette:splitter - v0.1.3 - splitter was updated to use the Text COMP for UI elements.
  • Palette:SVG - v0.1.3 - SVG is now relying on the new parGroup class in some places. Performance improvements.

Bug Fixes and Improvements[edit]

  • Updated font engine to Slug 6.2
  • AJA - Upgrade to SDK 16.2.0.9.
  • USD - Upgraded SDK to v22.03.
  • TouchEngine - Fixed outputs not updating in some circumstances.
  • Engine COMP - Fixed issue which caused wired connections to be lost after an Engine COMP was replicated and loading completed.
  • Geo Text COMP - Added support for a Specification CHOP.
  • Geo Text COMP - Added transform mode column to the Specification DAT to allow positioning relative to the last block or the text layout position. Also added append and local transform columns for further control.
  • Geo Text COMP - Fixed a problem navigating 3D text when there were empty lines in the specification DAT.
  • Geo Text COMP - Fixed an issue using custom font files.
  • Text COMP - Fixed bug with tabs not indenting at certain font size.
  • Text COMP - Fixed a bug that prevented bound values from updating properly after editing.
  • Text COMP - Fixed issue with the Text COMP automatically grabbing the focus when a key was pressed while the mouse was over it.
  • Text COMP - Numerical formatting can now be used for values in the specification DAT.
  • Text COMP / Text TOP / Text SOP - Renamed Smart Quotes parameter to 'Smart Punctuation' for consistency.
  • Panel Components - Added new 'Allow UI Shortcuts' parameter to let any panel pass shortcut keys to the network editor. Panels in network editor will have shortcuts passed up to the network editor and then to the application level. Panels in perform mode will pass shortcuts up to application level.
  • Movie File Out TOP - Fix some cases where NotchLC didn't encode properly.
  • Movie File Out TOP - Fixed 'Image Sequence' not outputting correctly.
  • Movie File Out TOP - Fixed R and B channels being swapped for YUV 4:4:4 outputs for H.264/H.265.
  • Render TOP - Blank the depth and image outputs when Render parameter is disabled.
  • Video Device In TOP - Added frames_skipped channel to the Info CHOP.
  • ZED TOP - Fixed R and B colors being reversed.
  • Join CHOP - Allow duplicate CHOP inputs again.
  • Timer CHOP - Fractional speed working again.
  • CHOP to DAT - Large performance optimization when working with long channels.
  • JSON DAT - Added Table option to 'Output Format' parameter and a 'Table Column Headers' parameter to specify columns names.
  • Custom Operators - SOP now works correctly for multiple texture coordinates when in non-VBO mode.
  • Expressions on Toggle parameters that are put into constant mode are properly saved and loaded now.
  • Fixed a font rendering bug that could cause double characters to draw or potential crashes.
  • Fixed bug where node viewers would activate when typing 'A' in a DAT viewer.
  • DATs no longer handle character input when alt is pressed.
  • Fixed bug with text not deleting properly from comment boxes.
  • Fixed losing binds when entering blank for numeric parameters.
  • Fixed bad binding to two-character strings. Example: tdu.Dependency("ab")
  • Fixed a bug when pasting text containing line breaks into the textport.
  • Fixed a problem with creating bookmarks in secondary panes.
  • Fixed a bug with DAT scrollbars extending outside of the node when zoomed out and small.
  • Dragging a group of nodes now snaps them as a single unit, so relative distances between nodes are preserved.
  • Updated Codemeter runtime to version 7.40a
  • Updated EULA

Backward Compatibility[edit]

  • BACKWARD COMPATIBILITY - Sync In CHOP / Sync Out CHOP - 'Timeout' parameter now has a units menu to select between samples, frames, seconds, or milliseconds.


Build 2022.21460 - Mar 30, 2022[edit]

New Features[edit]

New Python[edit]

  • Camera Class.blendCamera(targetCamera, blend) -> tdu.Camera() - New function to return a camera that is a blend between the current camera and the given target.
  • DAT Class.detectLanguage() - Will now throw an error if any positional arguments are given.
  • ListCOMP Class.displayAttribs[r,c] now provides the final displayed attribute in the cell.
  • tdu.validName(str) - Returns a version of the string suitable for an operator name. Converts illegal characters to underscores. Slashes are converted to underscores, to preserve forward slashes use validPath() instead.
    • Replaces tdu.legalName() which erroneously supported slashes.
    • Example: tdu.validName('a#bc def') # returns 'a_bc_def'
  • tdu.validPath(str) - Returns a version of the string suitable for an operator path, including slashes. Converts illegal characters to underscores.
    • Example: tdu.validPath('/a#bc d/ef') #returns '/a_bc_d/ef'

New Palette[edit]

  • WebRTC toolkit v.0.9.0 Alpha - Initial release of set of tools to get started with WebRTC in TouchDesigner.
    • Palette:signalingServer - The signalingServer COMP is a component that can be used to run a signaling server within TouchDesigner.
    • Palette:signalingClient - The signalingClient COMP is a component that can be used to connect to a signaling server within TouchDesigner as well as exchange messages with other clients through the signaling server it is connected with.
    • Palette:webRTC - The webRTC COMP is a component that can be used to initiate real-time communications (RTC) between TouchDesigner instances and TouchDesigner or WebRTC compatible devices such as most Web browser capable devices, including some IoT devices. It requires a signalingClient COMP connected to a supported signaling server.

Bug Fixes and Improvements[edit]

  • ZED - Upgrade to SDK 3.7.
  • Geo Text COMP - Added support for clipping the text to the layout box.
  • Geo Text COMP - Fixed crash when switching from specification mode back to text mode.
  • Text COMP - Font size is now clamped at zero when the padding is larger than the panel size so the text does not get flipped.
  • List COMP - Dragging from the off cell area now controlled by attribute, draggable member if set.
  • TOPs - Fixed 'Display Pixel Value' not working correctly for 2x2 TOPs.
  • Layout TOP - Now working correctly on AMD GPUs.
  • Movie File In TOP - Error behavior is more consistent now when a specified URL fails to download the file.
  • Movie File Out TOP - Disabled unique suffix when using Type = Image Sequence.
  • Syphon Spout In TOP / Syphon Spout Out TOP - Works on macOS again.
  • Audio VST CHOP - Upgraded to JUCE v6.1.6 and now working on macOS.
  • Change TOPs with transform parameters to be consistent in direction with the Transform TOP. Added a toggle parameter for 'legacy' behavior.
  • Maintain input and component inputs on an operator when loading or reloading from an external .tox file.
  • Fixed an issue creating custom layouts.
  • Fixed panel layout not responding to scripted changes in fill weights.
  • Fixed a crash when dragging and dropping.
  • Fixed alignment of graph labels in the CHOP viewer.
  • Fixed automatic horizontal scrolling in DATs and Text COMPs.
  • The minimum size of floating windows is now adjusted based on the monitor scaling.
  • Widgets - Fix to dropmenu Text COMP expression. New "X" icon mode for checkbox widget.
  • some new and updated OP Snippets. Click 'Newest' repeatedly in the Snippets window.
  • On the splash screen when starting TouchDesigner was/is a button TOUCH TIPS to give you a tip while-u-wait. Now you don't have to open it each time you start - it's persistent.


Build 2022.20150 - Feb 28, 2022[edit]

New Features[edit]

  • macOS - Native Apple Silicon (arm64) support is now available for M1 Apple systems. See Apple Silicon build specific 'Known Issues' list above.
  • TDSynchro v.0.1.0 initial release - A group of components built to synchronize NDI and SDI streams across multiple computers. See Palette section below for details.
  • Timer CHOP Improvements
    • Sub Range parameters let you loop anywhere within the full time range
      • plus the callback onSubrangeStart() which lets you do whatever you need to do when the timer jumps back to the Sub Start time.
      • 'Sub End Action' parameter to control whether subrange ends or pauses at end of subrange.
    • When working with a segments table, new 'Segments End Time' menu parameter gives more control over total length.
    • To help you manage initializations that take several frames to complete, callCount is passed to the onInitialize() callback incrementing each time. Info CHOP now includes call_count channel.
    • 'segment' argument in callbacks now contains new members to avoid having to fish cells out of the segments table: 'segment.row' describes table columns defining the segment that override parameters, 'segment.custom' is a dictionary of custom columns/values, as well as calculated start/delay/lengths in various units. Plus a bunch of members of the cooked values, like segment.lengthSeconds.
    • Master Time - new measurement taking into account delay times, speed and play state and all types of segment modes. It's the time that cues and goTo() would use.
      • new channel output option "Master Time Count" outputs the overall elapsed time
      • new 'timecode_master' in Info DAT including timecodes for current master time, countdown timecode and timecode for total master length.
      • new python members .masterSeconds .masterFrame .masterSample .masterFraction which gets or sets the overall time position of the timer.
      • goTo() now works correctly with segments.
    • new channel output option 'Playing Timer Count' is the total number of seconds in the Play state, after Starting and is not affected by Speed, and keeps counting up when you jump to Cues, run .goTo() calls, Cycle or loop with Sub Range.
    • new channel output option 'Segment Length' outputs each segment length in specified units, or the entire length when segments are not used.
    • 'On Done' menu has a new option "Re-Start without Initializing".
    • Fixed manual 'Start' pulse sometimes being ignored.


  • GLSL TOP - New 'Auto Dispatch Size' parameter will automatically set the dispatch size based on the compute shader's local size and the output texture resolution. Ensures at least one thread per pixel will execute.
  • Movie File In TOP - Added support for loading RG (red green) compressed .dds files.
  • Video Device In TOP - Added frame_queue_length and last_dma_copy_time Info CHOP channels. Also added frame_timestamp and frame_hw_queue_length but enabled for Blackmagic devices only at this time.
  • Video Device In TOP - Upgraded Bluefish444 SDK to latest version, added support for their new Khronos line of cards.
    • Added support for 10-bit YUV capture with Bluefish444.
    • Added support for capturing VITC (video timecode) timecode data with Bluefish444.

New Python[edit]

  • OP Class.currentPage - Get or set the currently displayed parameter page. It can be set by setting it to another page or even a specific label. For example n.currentPage = 'Common'
  • Par Class.lastScriptChange - This is now cleared when the parameter is updated manually.
  • Python - 'packaging' and 'pyparsing' modules are now included in default installation.
  • Python - Fixed 'ctypes' modules not loading correctly.
  • Project.resetAudioOnDeviceChange member added which controls whether or not audio devices momentarily reset when devices are added or removed to the system.
  • tdu.PathInfo - Added .baseName to extract the main portion of a filename.

New Palette[edit]

  • TDSynchro v.0.1.0 release - The new TDSynchro folder in the Palette contains a suite of components for synchronizing NDI and SDI feeds over multiple computers. It consists of a set of components for the server side sending audio/video and sync out, and a set of components for the client side to receive, cache, and synchronize the content.
  • Palette:blendModes - UI improvements, including adapting to any panel size, fully-controlled from top-level pars, now uses the Text COMP.
  • palette:camera - CameraTransform property can now be used to get or set the current camera matrix.
  • Palette:camSchnappr - Fixed upside-down labels.
  • Palette:firmata - Reporting of digital pins can be enabled by port, for analog pins by pin.
  • Palette:gestureCapture - Improvements including ability to make simple freehand-drawn masks.
  • Palette:graphPlot - v10.0.3 Faster performance and more color controls. Updated to use the Geo Text COMP.
  • Palette:initializeStart - Streamlined with recent Timer CHOP improvements.
  • Palette:lister - Now uses Text COMP in config and About page for Help.

Bug Fixes and Improvements[edit]

  • OpenVR - Fixed issues with the HTC Vive devices not working. No longer reports the wrong Device/GPU is being used.
  • Annotate COMP - Fixed a crash setting the Viewer Opacity to 0 when viewing a CHOP.
  • Geo Text COMP Improvements
    • Specification DAT allows for individual strings to be positioned and styled independently in 3D. Each row represents a separate string, and the columns (that override parameters) can include tx, ty, tz, all rotate/scale channels (as per Transform Order), plus fontsize, fontcolor, tracking etc., plus all the layout box and alignment parameters. (font/bold/italic not supported as columns) column names must be the parameter name.
    • Auto-homing works in the viewer.
    • numerous OP Snippets added. click Newest in its UI.
    • now fully in sync with the specification DAT feature of the Text COMP
  • List COMP - Fixed bottom and horizontal text alignment.
  • List COMP / Text TOP - Fixed horizontal alignment for characters with large left/right bearings.
  • Panel COMPs now have a 'Justify Method' menu to justify children individually (new) or as a group (previous behavior).
  • Text COMP - Fixed a problem using the Panel drag-drop behavior in multiline mode.
  • Text COMP - Added new drag drop behavior to insert dropped text at the last cursor position.
  • Text COMP - Renamed fontskew and fontstretch parameters to skew and horzstretch.
  • Text COMP - Fixed crash when opening a value ladder.
  • Text COMP - new OP Snippets added. Click "Newest" in its UI.
  • TOPs - Fixed using 'Save As...' resulting in a very low quality jpeg.
  • Ramp TOP - Fixed crash when using Hermite interpolation.
  • Render TOP - The default material (when a MAT is not explicitly assigned to geometry) now has a small emissive added to help make it visible as light grey in an un-lit scene.
  • Audio VST CHOP - Fixed freezing when saving from within the plugin window.
  • Audio VST CHOP - Load plugin asynchronously.
  • Filter CHOP - Fixed reset pulse input for 'Filter per Sample' parameter is On.
  • MIDI Out CHOP - Fixed crash when sending invalid MIDI commands.
  • Shuffle CHOP - Cook time optimization.
  • Sync In CHOP - When 'Active' is Off, don't try to connect for maximum timeout period.
  • MQTT Client DAT - Upgraded SDK to v1.3.9 in macOS arm64 builds. Others not upgraded yet.
  • Script DAT .appendRows() and .appendCols() - See BACKWARD COMPATIBILITY below - Now inserts the values in correct order, when specifying a starting index. Previously the values where inserted in reverse order.
  • Line MAT - Working on macOS again now (in most cases).
  • Many generator SOP anchor parameter behaviors have been flipped to be more sane, old setting is now called 'Reverse Anchors'.
  • Animation Editor - Fixed issue with value entry fields not updating keys.
  • File > Import File... now loads all file types supported in TouchDesigner, bringing it inline with Drag-and-Drop support.
  • Fixed a problem calculating instanced geometry bounds when the geometry isn't centered on the origin.
  • macOS - Fixed the operator pop-up offset when clicking the "i" in the parameter dialog.
  • Using page scope on parameter dialogs will still result in consistent values for par.pageindex. Also a number of fixes to Par.pageindex updating.
  • 'Experimental' label added to splash screen and titlebar for easier identification of experimental builds.
  • Update to the Color Swatch for Nodes, Comments, Network Boxes, and Annotates. Old files will be transitioned to the new color palette on loading.
  • DAT Viewer improvements for syntax highlighting and language support. See New DAT Viewer
    • DAT language interface re-labelled to 'Parameter Language' and 'Contents Language' to better differentiate them.
    • Renamed the 'Node' option for DAT language to 'From Parameter Language'.
    • Added Execute Language to DAT Info popup to show which language scripts will be executed in.
    • Enabled auto-indenting again for DATs.
    • Improved how the home key in DATs handles indentations.
    • Fixed automatic horizontal DAT scrolling not accounting for the line number width.
    • Fixed clipping of DAT line numbers when the node is very small.
    • Fixed a problem writing formatting codes into DATs that used syntax coloring.
    • Added JSON syntax coloring for DATs.
    • Added Tscript syntax coloring for DATs.
    • DAT syntax colors are now defined in ui.colors.
    • Fixed issue with color codes appearing when clicking in the opening message box.
    • DAT language is now set based on the file extension when dragging text files into a network.
    • 'Auto Set DAT Language' will now set the language for hidden DATs, ignore Tscript nodes, and better handle clones and readmes.
    • Improvements to the default language for more DATs to properly support syntax highlighting.
    • Text DAT and Table DAT language now defaults to Plain Text when set to input and nothing is connected.
    • DATs now default to 100% zoom instead of Auto.
  • Textport improvements and fixes.
    • Fixed limit displaying very long DATs in the textport.
    • Textport font size now updates immediately when the preferred font size changes.
    • Fixed right-click history menu in the textport.

Backward Compatibility[edit]

  • BACKWARD COMPATIBILITY - Script DAT .appendRows() and .appendCols() - Now inserts the values in correct order, when specifying a starting index. Previously the values where inserted in reverse order.


Build 2021.39010 - Jan 17, 2022[edit]

New Features[edit]

  • DAT Viewer - DAT Viewers now support syntax highlighting for the TouchDesigner languages python, GLSL, JSON, XML.
    • The 'Language' parameter on the DATs' Common page has been expanded to include settings for which language in is the DAT.
    • SET LANGUAGE for your DATs - Under the Edit menu, Edit > Auto Set DAT Language will run through all DATs in your project scanning the contents of each DAT, auto-detecting the language and then setting the correct language.
    • Note - DATs have different language defaults now. For example, Execute type DATs default to python, JSON DAT defaults to JSON, DATs created with GLSL TOP/MAT default to GLSL, standard Text DATs default to plain text, etc.
  • The DAT Viewers also now have custom zoom settings in the RMB menu of the viewer so you can make constant the text size.
  • Timer CHOP - Added 'Sub Range' options to loop between a subsection of the full length.
  • Timer CHOP - Options to output timer, delay, running, cumulative in all time units simultaneously.

New Python[edit]

  • COMP.panel.scrollu .scrollv - Panel scrollbars can now be controlled via panel values.
  • DAT.detectLanguage(setLanguage=False) - Returns the language detected in the DAT's text.

New Palette[edit]

  • Palette:audioAnalysis - UI and speed overhaul.
  • Palette:moviePlayer - v39.3 - Now fully-driven by Timer CHOPs. UI conversion to use Text COMPs, performance improvements and bug fixes.
  • palette:searchReplace - Addition of many new features, paralleled in the new Search/Replace Dialog including:
    • OP Type and scriptable filters.
    • Search comments/utility nodes.
    • Include all searched operators in results.
  • Palette:multiMix - Fixed this component not working due to a Vulkan related bug.
  • Widgets - Many bug fixes and improvements
    • Updates after testing on MacOS 12.1 / Apple Silicon. Cleaned up some defaults.
    • ContextPath widget operator name changed to OperatorPath.
    • Gadgets folder with PathBar Gadget was added.
    • Fixed a wire connection issue in list widget.
    • Fixed an issue when updating the range of 'Bind Master' it wouldn't update the widget’s range.
  • Palette:gal - v36.0.0 - UI overhaul of legacy gadget library, now using Text COMPs, minor improvements & simplifications.

Bug Fixes and Improvements[edit]

  • Environment Light COMP - Avoid crash that occurs when dropping it into a new project.
  • Text COMP - Fixed cooking issue where the .textHeight member was not updated to use the current text.
  • Feedback TOP - Fixed crash on startup.
  • GLSL TOP - Fixed crash when loading RayTK.tox file.
  • Layout TOP - Fixed crash.
  • Video Device In TOP - Added 'rgb_input' channel to Info CHOP.
  • Audio Device Out CHOP - Fixed a crash on macOS.
  • Audio VST CHOP - Upgraded to JUCE v6.1.4
  • File Out CHOP - Fixed missing channel names comment when re-starting the file.
  • Parameter CHOP / Parameter DAT - Fixed loading up new 'Sort Method' parameter setting incorrectly with old files.
  • Timer CHOP bug fixes
    • Fixed goTo() behavior when jumping into a segment's delay section.
    • Cue now respects delay channels.
    • Now supports pattern matching in DAT info channels
  • Select SOP - Make a reference to the source geometry instead of a local copy when possible.
  • Phong MAT / PBR MAT - Output Shader now creates GLSL MATs with the language properly set to GLSL.
  • Fixed CPlusPlus directory missing from the Samples directory.
  • Fixed texture corruption on AMD/Apple GPUs in some cases.
  • Fixed crash that occurs when dropping particlesGpu into network on macOS, but this component still doesn't work
  • Added undo for python attribute binding.
  • Improvements to alignment, borders and backgrounds of UI elements as part of the hiDPI overhaul.
  • Set all components of a parameter when using the popup menu after dropping a parameter onto a node.
  • macOS - Fixed external editor launching when setting appropriate file extensions at the OS level. For example, setting .py file extensions to open with Sublime or VSCode in the OS means opening and external editor for DATs set to py language will open in the respective editor when not using Edit > Preferences > DATs explicit editor settings.


Build 2021.38110 - Dec 17, 2021[edit]

Release Highlights[edit]

Major Architectural Updates[edit]

Vulkan API

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

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

  • Vulkan can significantly reduce driver overhead compared to openGL.
  • Compute Shaders fully supported on all platforms including macOS now.

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

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

Python Version

  • Python - The version of Python in TouchDesigner has been updated to 3.9.5. The previous version was Python 3.7.2. To discover 'What's New' in Python since then, refer to the Python 3.8 and Python 3.9 documentation.


High DPI Panel Rendering[edit]

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

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

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

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

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


SDI and Video Pipeline Upgrades[edit]
  • Deltacast support has been added, TouchDesigner supports both Deltacast PCI-e video cards and the Deltacast FLEX product line.
  • 12-bit workflows are now supported
  • 10-bit workflows have been improved
  • OpenColorIO TOP - Upgrade to SDK 2.1.0 which provides a better renderer able to read the latest .ocio config standard format. This offers new features such as built-in LUT referencing (for the most common LUTs) which can avoid having to reference lots of external LUTs.


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

Custom Operator TOPs (CPlusPlus TOP)

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

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


ParGroups[edit]

(Work In Progress)

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

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


New Operators[edit]
  • Text COMP - The Text COMP is used to display text in panels for building user interfaces and control panels. It is a replacement for the Field COMP, completely replacing it and adding many new features not previously available.
    • Works for both static and editable text.
    • Modes for displaying strings and multiline text, float and integer numbers, password fields and more.
    • Text formatting options include support for Python syntax, Custom C++ Fmt and Custom Python F-String syntax.
    • Number formatting options for displaying timecode, scientific, percent, and currency values.
    • Supports inline formatting directives in the text for things like color, strikeouts, underlines, smallcaps, subscript, gradients, etc. For example, the code {#color(255, 0, 0);} will turn all text that follows on that line red.
    • Resolution independent text drawn directly to screen at the resolution required for the panel size, resulting in perfectly crisp text at all zoom levels.
    • GPU based using the Slug Library.
  • Geo Text COMP - A new component that creates text geometry directly on the GPU using the Slug Library, similar to the 2D Text COMP.
  • Stype Out CHOP- A new CHOP that outputs Stype formatted camera tracking data.
  • FreeD Out CHOP - A new CHOP that outputs FreeD formatted camera tracking data.
  • ParGroup Execute DAT - A new DAT similar to Parameter Execute DAT but organized around ParGroup objects.


SDKs Updated[edit]


New Features[edit]

Network Comments, Boxes, and Annotations

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

Ouster Support

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

Interpolation and Mipmapping Controls

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

Pre-Multiply by Alpha Overhaul

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

Miscellaneous

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

New Operator Snippets

Lots of new examples highlighting the new features in Experimental. Open Help > Operator Snippets and press the 'Newest' button. (Note: Web Client DAT example 5 hangs)


New Python[edit]

  • Camera.frameBounds() - Now returns a camera frame width that can be used for the Ortho Width parameter of an orthographic camera.
  • COMP Class.reload(path, password=None) - Reloads the component from the given file path. This will replace its children as well as top level parameters and update flags, node width/height, storage, comments and inputs (but keep original node x,y).
  • Connector Class.description - A description for this connection. Example: 'Color Image'
  • Dependency Class callbacks method
    • A modifiable list of functions. When the Dependency object is modified, it calls each function on the list.
    • The function is called with a single argument which is a dictionary containing the following:
      • 'dependency'- The Dependency that was modified.
      • 'prevVal' - The previous value if available.
      • 'callback' - This callback function, which can be removed the the Dependency callbacks if needed.
  • NetworkEditor.placeOPs method accepts opType for creating node. This argument can be either a string or a type. Example: ui.panes[0].placeOPs(opType='waveCHOP') or ui.panes[0].placeOPs(opType=waveCHOP)
  • ParGroup_Class - A python class for accessing the new ParGroup objects.
  • TDJSON - New setBuiltIns argument allows built-in parameter values to be set using this system.
  • tdu Class - Added tdu.forceCrash() to force a crash for debugging and crash recovery testing.
  • tdu.tryExcept(func1, func2 or value) -> result - A 1-line try-except syntax. Second parameter can be another callable function or a direct value.

Example:

tdu.tryExcept(lambda: 1/me.par.w, 0.0) # second argument is simply 0.0
tdu.tryExcept(lambda: 1/me.par.w, me.GetDefaultValue)   # Good:  me.GetDefaultValue not called until needed.
tdu.tryExcept(lambda: 1/me.par.w, me.GetDefaultValue()) # >> INCORRECT <<.  Always calls second function even if not needed.
  • UI Class.rolloverPanel returns the latest panel to get a rollover event. Takes into account click through, depth order, and other panel settings.
  • WebclientDAT Class.connections - List of current HTTP connection identifiers.
  • WebclientDAT Class.closeConnection(id) - Close the connection associated with the given identifier.
  • WebclientDAT Class.request - Added timeout keyword.
  • Added support to assign a list of OPs to a multi-OP parameter in python.
    • calling eval() on multi-op parameters will now return a single op if there is only 1 result, a list if there are more than 1, and none if there are no results.


New Palette[edit]

  • TDAbleton - Version 1.33. Components are now available individually in the palette. TDAbleton now supports both Live 11 and Live 10.
    • Parameter option to suppress disconnect error flag.
    • Utility parameter options to load Live sessions directly from TDA.
    • Better handling of duplicate parameter names.
    • BACKWARD COMPATIBILITY - cuePointNum in song callbacks now holds index into cuepoint table.
  • palette:materialDesignIcons - New component replacing symbolPicker.
  • palette:vstHost - New component that loads VST3 plugins into the new Audio VST CHOP and adds examples for MIDI keyboard in, a MIDI sequencer, and VST automation using the Bind CHOP.
  • palette:kantanUVHelper - Fixed an issue where kantanUVHelper could fill GPU Memory considerably.
  • palette:presets / Palette:particlesGpu - Fixed an issue where custom user presets wouldn't be recalled properly.
  • General updates and tweaks
    • palette:lister 1.11
      • Row data dicts now include sourceIndex key holding index into source data for lister
      • Sort/Filter/Select parameter page with new features for persistence and sort indicators
      • textFormat row in column define table: full f-string style formatting
      • Other new features: Word Wrap, Font File, sourceDataMode: sourceIndex
    • palette:treeLister incorporates new lister features
    • palette:searchReplace tons of new features, paralleled in the new Search/Replace Dialog
    • palette:operatorPath - The operatorPath Component is a full-featured UI element for navigating operator paths in TouchDesigner networks. It is similar to the path bar at the top of editor panes.
    • palette:popMenu - New features: shortcuts, title, scale

Bug Fixes and Improvements[edit]

  • Animation COMP - Preserve custom columns in keyframe DAT tables when editing keyframes.
  • Button COMP / Slider COMP - Updated to use Text COMP internally and include 'Label' and 'Value' parameters.
  • List COMP - Improvements
    • Fractional font sizes are now allowed. Font sizes are no longer rounded down to the nearest integer. See Backward Compatibility below.
    • Text offset now supports fractional floating point numbers.
    • No longer wraps around negative indices when accessing cell attributes.
    • str(ListCell) returns calculated text at that cell, or blank.
    • Fixed dragging onto list components when their viewer has been resized/stretched.
    • Fixed dropping to use python defined items.
    • Callback DAT is now docked on the outside of the OP by default.
    • Added support for custom fonts using Font File attribute.
  • OP Viewer COMP - New 'Interactive' parameter controls interaction with mouse and keyboard.
  • Panel COMP - The Drag-and-Drop callback onStartHoverGetAccept now contains information as to where the mouse entered the panel in its info dictionary. Key name coords.
  • Parameter COMP - 'Allow Expansion' parameter controls whether or not parameters can be expanded to reveal expression fields.
  • GLSL MAT - Point Sprites must now use TDPointCoord() instead of gl_PointCoord to obtain the texture coordinates for the sprite. See Backwards Compatibility section below.
  • Level TOP - Defaults changed so floating point input values are no longer clamped.
  • Luma Level TOP - Fixed alpha being effected by options other than 'Opacity'.
  • Ouster TOP - Fixed missing and skipped packet numbers incrementing incorrectly when using a partial azimuth window.
  • Switch TOP - When in Blend mode, will no longer cook 2 inputs if the switch value is an integer.
  • Text TOP
    • Added smart quotes support.
    • Added support for floating point positions offsets for non-bitmap fonts.
    • Stroke rendering now looks a bit better, but still not as good as Scalable mode.
  • Video Device In TOP - Reduce stalls that occur when the input signal format into Blackmagic devices changes.
  • ZED TOP - Now outputs a blank image when there is an error or no camera found.
  • Joystick CHOP - Added 'Active' toggle.
  • MIDI In CHOP - Much smoother timesliced channels especially when dealing with high frequency input.
  • MIDI Out CHOP - Fixed issue with random values being generated when number of channels changed.
  • Panel CHOP - Fixed crash when target panel deleted.
  • Select CHOP - New options to filter channel names by numeric suffix.
  • Sync In CHOP - Warning when project still in Realtime mode.
  • Sync Out CHOP - Include client Realtime status in info.
  • Timer CHOP - Fixed calling initialization when called from onSegmentExit callback.
  • Art-Net DAT - Fixed undercooking while polling and not visible in network.
  • Examine DAT - Fixed missing entries with matching values but different keys.
  • OP Execute DAT - Fixed onDelete() never being called.
  • Parameter Execute DAT - Fixed failing to monitor changes when a parameter default is changed.
  • Added drag-drop support for json file extensions
  • Fixed color picker dialog parameter UI when dealing with ranges other than 0-1.
  • Added wildcard dependency to ops function search so new nodes will trigger a recook.
  • Fixed issue with self parameter dependency (me.X depending on me.Y) not getting updated when parameter Y is updated during cook.
  • Allow binding to named object attributes. Expression format is 2 tuple: (object, attribute), example: (op('box1'), 'nodeY')
  • Allow binding to python None value, which return blank string or 0. Allows binding expressions to evaluate to None, without error when source not available.
  • Fixed Bind expressions involving 'me.curPar'
  • Fixed some issues with menu dropdown lists not updating correctly in custom parameters.
  • ctrl+c now interrupts Python scripts in macOS. Try it for hangs.
  • Refactoring panel layout for more efficiency and better performance.
  • Reconnecting audio devices better handled by Audio CHOPs.
  • Improvements to pop-up help performance and size for DATs.
  • toecollapse/toeexpand now support duplicate operator names in which only case changes.
  • Optimizations in cooking, data dependency improvements, updating parameter value optimizations, extension initialization improvements.


Backward Compatibility[edit]

  • BACKWARD COMPATIBILITY - wrnchAI CHOP - Has now been disabled due to the company no longer selling licenses.
  • BACKWARD COMPATIBILITY - Using floating point values in integer parameters (either through expressions or exports) will now round the value, instead of truncate it. This may cause different behavior for fractional values exported to menus or other integer parameters.
  • BACKWARD COMPATIBILITY List COMP - Fractional font sizes are now allowed. Font sizes are no longer rounded down to the nearest integer. Example: Exporting 4.9 to an integer parameter will now be considered a value of 5, not 4.
  • BACKWARD COMPATIBILITY - GLSL MAT - When working with Point Sprites, you must now use TDPointCoord() instead of gl_PointCoord to obtain the texture coordinates for the sprite.
  • BACKWARD COMPATIBILITY - PBR MAT - Removed 'Mult Alpha by Light Luminance' feature, as it didn't work with the more alpha-correct-behavior of the shader now.
  • BACKWARD COMPATIBILITY - GLSL MAT - shCoeffs is no longer part of the TDLight block, and is instead in a new buffer array named uTDEnvLightBuffers[].
  • BACKWARD COMPATIBILITY - The python object type for the Nvidia Flow Emitter COMP has been renamed to flowemitterCOMP from flowEmitterCOMP to be consistent with naming conventions.
  • BACKWARD COMPATIBILITY - Light COMP - Removed defunct 'Shadow Mapping Projection' view type from projection menu.
  • BACKWARD COMPATIBILITY - SVG TOP - Has been removed for now because the OpenGL feature it was based on does not exist in Vulkan. Please use Palette:webSvg to load SVG files in TouchDesigner.
  • BACKWARD COMPATIBILITY - The tscript command 'jpeg' has been removed. The 'quality' keyword in OP.save() can be used to control JPEG quality instead.
  • BACKWARD COMPATIBILITY - Script OPs that were accessing the script methods outside the onCook callback must now be locked.
    • For example, calling things like scriptCHOP.appendChan() from outside the scriptCHOP's onCook() method is no longer allowed, since it caused random behavior. Now if those methods must be called, lock the Script CHOP first. This goes for any of script OP methods that modify operator content.