Release Notes

From Derivative
Jump to navigation Jump to search

Current Build 2022.33910 - June 19 2023 - Download Here

See our Official Announcement for an overview of new features.

For Experimental builds, go to Experimental Release Notes.

Official Build - 2022.20000 Series[edit]

Known Issues[edit]

macOS Apple Silicon Build Specific[edit]


Build 2022.33910 - June 19, 2023[edit]

Note: This release is a hotfix for 2022.33600 (May 25 2022) which had an issue with Feedback TOPs crashing.

New Features[edit]

  • GLSL MAT - Added TDTrueCameraIndex().
  • GLSL MAT - Added TDScreenSpaceCoord(), which gives a 0-1 coordinate over the viewport.
  • NDI Out TOP - Added 'Low-Performance Behavior' parameter to control what this operator does when it's not able to send frames at the full desired FPS.
  • Video Stream In TOP - Added 'Disable Buffering' parameter, which enables the same functionally as the -fflags nobuffer option in FFmpeg/FFplay.

New Python[edit]

  • App Class - Added pythonExecutable member. (Added in 2022.33910)
  • TOP Class - sample() now supports z and w arguments for 3d and 2d array textures.
  • pbrMAT Class, phongMAT Class - Added outputShader() to allow a GLSL MAT to be created via a python call.
  • Preserve the PYTHONPATH environment variable when launching new TouchDesigner processes.
  • __delTD__ function automatically called when extensions are reinitialized. TD supplement to Python __del__ function.

New Palette[edit]

  • Palette:gal - Future-proofing. Adding warnings when there is an unconnected export on a parameter.
  • Palette:movieEngine - Initial release. The non-UI version of moviePlayer.
  • TDAbleton - v.2.1.0 - Now installs remote script into Ableton User Folder.

Bug Fixes and Improvements[edit]

  • NDI - Fixed a hang that can occur when when closing NDI with audio sources active.
  • Custom Operators - Fixed TOP example for Cuda not working correctly with 0 inputs.
  • Engine COMP / TouchEngine - Fixed a crash which could happen for some components if a component error occurred during loading.
  • Engine COMP / TouchEngine - Fixed unexpected behaviour which could occur after an instance crashed.
  • FBX COMP - Fixed transforms on meshes that have been merged with parent COMPs through the 'Merge Level' parameter. Also fixed a case where normals were flipped in some FBX files.
  • Panel COMPs / Window COMP - Enabled support for cursor constraints on macOS.
  • Feedback TOP - Fixed a crash that could occur with various uses of the Feedback TOP. (Added in 2022.33910)
  • Movie File In TOP - Fixed corrupt output when 'Loop Crossfade' was set.
  • Movie File In TOP - Fixed crash when loading 16-bit mono .tiff images.
  • Spectrum TOP - Fixed recently introduced crash.
  • Text TOP - Fixed a crash that can occur when oversized glyphs are rendered when 'Display Method' = Bitmap.
  • Texture 3D TOP - Fixed incorrect memory reporting for 2D Texture Arrays.
  • Video Device In TOP / Video Device Out TOP - Fixed a crash on Intel GPUs when using Automatic/Pinned memory.
  • Video Device Out TOP - Bug fixes
    • Fixed a crash that can occur when shutting down a Blackmagic Design device in some cases.
    • Fixed potential frame corruption that may have occurred on Blackmagic Design devices.
    • Fixed crash that can occur when turning on 'Synced Outputs' for Deltacast devices.
    • Improved performance when running at 4k@60hz for Deltacast devices.
    • Fixed 12-bit output not working correctly on AJA devices. (Added in 2022.33910)
    • Added error when Key+Fill is not supported by the card’s firmware on AJA devices. (Added in 2022.33910)
  • Web Render TOP - Fixed an issue which prevented some websites rendering correctly.
  • Kinect CHOP - Fixed occasional crash when switching to 'Skeleton' set to "Off".
  • Pangolin CHOP - Update to Beyond SDK v3.0.0 and fixed undercooking when reactivated.
  • Parameter CHOP - Fixed a bug where sample rate would not always update when global rate changed. (Added in 2022.33910)
  • Render Pick CHOP / Render Pick DAT - Fixed alpha value not being picked. (Added in 2022.33910)
  • Timer CHOP - Fixed a crash in TimerCHOP Class.goTo when setting the segment keyword to a value that exceeds the number of segments.
  • Art-Net DAT - Fixed duplicates devices appearing in the table.
  • Text DAT - Fixed a crash when redirecting stderr to a DAT.
  • WebSocket DAT - Fixed a bug where timeout would occur before connecting to the server, even if the server existed. Also added a new 'Connection Timeout' parameter to set the length of the timeout.
  • GLSL MAT - Fixed default shader having incorrect picking stub code.
  • Phong MAT / PBR MAT - Fixed screen space coordinates not working correctly in UI viewers.
  • Phong MAT - Fixed rim lights not working when shader is exported to GLSL MAT.
  • Privacy - Fixed crashing when a ParGroup Execute DAT was inside a private component.
  • Fixed an issue which caused wrong positions to be calculated for some monitor layouts, affecting window behaviour and the Monitors DAT
  • macOS - Fixed possible crash if display configuration changed during application launch.
  • Fixed Global OP shortcuts not registering properly on external .tox files.
  • Fixed a crash when some ASIO devices are present. (Added in 2022.33910)
  • Fixed a number of reported crashes.

Operator Snippets[edit]

  • New batch of 35 snippets for 17 operators.


Build 2022.32660 - Mar 27, 2023[edit]

New Python[edit]

Licenses Class - New members .isPro and .isNonCommercial to quickly determine license capabilities.

New Palette[edit]

  • TDAbleton - Fixed bug where moving a cuepoint will disconnect it from name change updates.
  • Palette:pointGenerator - Updated shape and volume functions with better random distribution and additional shapes.
  • Palette:projectorBlend - Defaults of 'Gamma' parameter changed to a usable value.
  • Palette:webRTCPanel - v1.0.2 - Updating internal Logger COMP of webRTCPanel COMP and webRTCPanelRcv COMP.
  • Palette:webRTC - v1.0.5 - Updating internal Logger COMP of WebRTC COMP, signalingClient and signalingServer.

Bug Fixes and Improvements[edit]

  • List COMP - Fixed callbacks intermittently not working.
  • GLSL TOP - Added support for GL_NV_compute_shader_derivatives extension.
  • Render TOP crashes and bugs fixed.
    • Fixed crash when 'Depth Only' is enabled.
    • Fixed hang when more than 16 cameras are used at once.
    • Is now only cleared once at the start of the render. It may have been cleared multiple times with multi-camera rendering previously.
  • Render Pass TOP - Now has its own allocated texture for Image Output.
  • Screen Grab TOP - macOS overhaul
    • Enabled 'Full Desktop' mode.
    • Fixed occasional crash when parameters or display layout changed.
    • Capture to (Extended) sRGB so output matches input on non-SRGB displays.
    • Fixed behavior of Active, Active Pulse, Source, Left, Right, Bottom, Top, and Limit FPS parameters
    • Correctly size screengrab output for TOP limits.
  • OpenVR / OpenVR CHOP - Fixed projection matrices when using the Vive Pro 2.
  • Pangolin CHOP - Fixed sample rate not updating with the rate set in the timeline.
  • Timer CHOP - Fixed crash when called from a script before initial cook.
  • On macOS fixed hang that can occur when zooming out of networks when the Line MAT is being used.
  • On macOS fixed ctrl+left-click option as a right-click (when set in Preferences).
  • Fixed floating network editor windows sometimes being always on top.
  • Fixed crash when working with 3 component data and CUDA.
  • Backup copies of external .tox files will now always be saved into CrashAutoSave.*.toe files when a crash occurs, even if the 'Save Backup of External' parameter is off in the component.
  • Fixed grey rectangle background artifacts sometimes displayed in Panel panes.

Operator Snippets[edit]

  • New batch of 50 snippets for 31 previously undocumented operators (thanks @nettoyeur).


Build 2022.32120 - Feb 09, 2023[edit]

New Features[edit]

  • Geo Text COMP - Added 'Sort by Depth' parameter to draw the text sorted by depth from the camera when using Specification DAT/CHOP.
  • Screen Grab TOP - Added 'Limit FPS' parameter will limit capturing of the screen to a certain FPS.
  • MQTT Client DAT - Added 'Verify Certificate' parameter which enables TLS (transport layer security) certificate verification against the server.

New Palette[edit]

  • Palette:searchReplace - searchReplace result reporting improvements. Added a toggle to include "hidden" parameters which defaults to off.
  • Palette:popMenu - Fixed issue displaying wrong selected value in DAT output.
  • Palette:materialDesignIcons - Align modes default to Bounding Box for better alignment of icon.
  • Palette:multiTouch - v6.0.1 - Removed a missing export on the opacity parameter which caused an unnecessary warning.
  • Palette:sopRender - v13.1.3 - Small internal cleanup of some unused OPs laying around.
  • Palette:quadReproject - v0.1.5 - Added a Reset pulse parameter that internally re-triggers replication of quad configs after resetting to a clean state.
  • TDAbleton - Bug fixes and improvements
    • Fixed issue with clip trigger quantization being reset.
    • Changed clip trigger quantization menu to be string based.
    • Eliminated error when changing scene names.
    • Ableton COMPs inside package component now have 'Connect' par off by default.
  • Widgets - AutoUI - removed Verticalaspect parameter reference.

Bug Fixes and Improvements[edit]

  • NDI - Upgraded to NDI 5.5.2.
  • Engine COMP / TouchEngine - Bug fixes
    • Fixed an issue with time sliced CHOP samples getting lost after a discontinuity in independent clock mode.
    • Fixed an issue which could leave the Engine COMP with no error and no output if TouchEngine crashed.
    • Fixed an issue which could cause lost CHOP or DAT output when running in independent mode.
  • Actor COMP / Nvidia Flex Solver COMP - Static shapes optimized when updating collision shapes and transforms.
  • FBX COMP - Added texture asset's external file path to Info DAT table to assist with debugging failed texture imports.
  • Geometry COMP / TDRotateToVector() - Fixed issues when scales were applied when rotating to vector.
  • Composite TOP - Improve performance when many inputs are used.
  • GLSL TOP - Fixed texture reallocation that occurs with extra color buffers if they are used for mipmapped rendering elsewhere.
  • Movie File In TOP - Fixed crash when very large .png images (and other types) were opened.
  • Screen Grab TOP - Fixed delayed mode not working well with GPUs using fallback capture.
  • Screen Grab TOP - Fixed a potential crash on macOS if permission wasn't granted for TouchDesigner to use Screen Recording.
  • Web Render TOP - Fixed crash that can occur when restarting the web rendering process.
  • Delay CHOP - Fixed issue occuring when delay is exactly equal to maximum delay.
  • Mouse In CHOP - Fixed bug which caused no values to be generated on some macOS systems.
  • Timer CHOP - Fixed to alertSegment, alertDone callback arguments when cycling, or max cycles not used.
  • Timer CHOP - Fixed recursion error when onExitCallback used goTo().
  • TOP to CHOP - Fixed a bug when creating a single channel set when there were no valid pixels in the first row of the image.
  • Monitors DAT - Added 'gpu_name' column.
  • MQTT Client DAT - Improvements
    • Fixed connections to secure brokers ie. SSL
    • Automatically attempt to reconnect if connection to broker is lost or fails.
    • Trigger onConnect callback on client reconnect.
  • Multi Touch In DAT - Fixed a crash that could occur if clearing the table while touch events were still being registered.
  • Table DAT - Table DATs now default to using 'tsv' extension when saving or editing contents rather than using the Content Language.
  • Web Client DAT - Fixed DAT viewer crash when outputting bytes type data.
  • Web Client DAT - Fixed a case where redirect headers (eg. 302) were sometimes combined with their subsequent response headers.
  • WebSocket DAT - Possible fix for issues with establishing WebSocket connections outside the LAN.
  • Alembic SOP - Upgraded to Alembic 1.8.4, removed support and dependency for legacy HDF5 compression format.
  • Texture SOP - Camera aspect now works with floating point values.
  • Binding - cells/pars/channels to Parameter Menus now use tokens or integers as appropriate.
  • Syntax colors in DATs have been updated to match their earlier values before the switch from sRGB to linear color directives.
  • Reset button values to default when changing button type menu.
  • Fixed node name dependency so it does not depend on parameters.
  • Fixed crashes that can occur when switching panel views quickly.
  • Fixed crash that can occur when picking wireframe geometry in the Geometry Viewer.
  • Fixed a crash opening very large windows.
  • Fixed an issue showing * for a modified toe file on macOS after exiting Perform Mode.
  • Fixed spurious errors when using Page.appendPar()
  • Fixed a crash when entering invalid characters into the customize component window.
  • Fixed % operator not being an Optimized Expression in some cases (CHOP source particularly).
  • Hotfix for 2022.32120 which had an issue with evaluating paths in expressions.

Build 2022.31030 - Dec 14, 2022[edit]

New Features[edit]

  • Table DAT - New features that let you conveniently create and/or fill rows and columns of a table. On the new Fill page, the Fill menu adds 3 options: Fill by Column, and Fill by Row, and Set Size and Contents.
    • Fill page to generate multiple rows/columns with specific headings using space-separated names or an expression, plus expressions to fill the cells.
    • Sequential parameters lets you generate multiple sets of new cols or rows.
    • new expressions me.subRow, me.subCol (for sub-section being filled). See popup menu on Cell Expression parameter.
    • new OP Snippets for this feature
  • Insert DAT - Similar new features to fill new columns/rows or replace existing columns/rows using expressions:
    • Replace existing columns/rows by toggling 'Replace if Duplicate Name'.
  • Web Server DAT - Added a 'Verify Client' toggle that when enabled will send out a certificate request to the connecting client for verification purposes.

New Python[edit]

  • Python on macOS: PYTHONPATH environment variable is respected for loading custom packages
  • .round() support added to * Par Class, PanelValue Class, Cell Class, and Channel Class for rounding floating point numbers to integers.
  • TOP Class - Fixed save() not working asynchronously for .exr files.
  • TDFunctions.parMenu is now available for use in custom menu pars' menuSource without needing import via tdu.ParMenu

New Palette[edit]

  • TDAbleton - 2.0.1 - Fixed a bug when renaming cue points in Live.
  • Palette:depthProjection - New component in PointClouds to project a depth image into a point cloud using the given camera intrinsics.
  • Palette:audioAnalysis - v6.0.3 - Active toggles on Kick, Snare and Rhythm were not working.
  • Palette:cameraViewport - v0.38.0 - Added options to draw axes and pivot.
  • Palette:particlesGpu - Reworked Particle Source parameter disable in case of input is supplied, also removed some unnecessary operators.
  • Palette:probe - v22.0.4 - Interactions with all data type viewers (CPU/GPU time/memory) working again. Switched to font that is on macOS, and cosmetic improvements.
  • Palette:signalingServer - v1.0.4 - New toggle to disable verification of clients certificate on the Web Server DAT is toggle off by default.
  • WebRTC - New Remote Panel Web Demo available. More details at the following link.
  • Widgets - v2.1.49 - Scale when too large feature fixed for a few widget types.

Bug Fixes and Improvements[edit]

  • TouchEngine - Numerous bug fixes and updates under the hood.
  • Engine COMP / TouchEngine - Fixed Execute DAT play-state changes being ignored.
  • Engine COMP - Additional improvements and bug fixes.
    • Fixed onInitialize() callback timing, added onReady() callback. See BACKWARD COMPATIBILITY section below.
    • Fixed lost $PYTHONPATH environment variable.
    • Fixed stuttering when using time-sliced CHOPs with auto-buffering.
  • FBX COMP - For some FBX files fixed capture attributes in meshes on TouchDesigner load when cache is not present.
  • Geo Text COMP - Fixed some issues with Render Pick CHOP, Render Pick DAT and this operator.
  • List COMP - Fixed conflict in drag/drop callbacks, now new drag/drop callbacks get priority over old internal callbacks if both exist.
  • Panel COMP - 'Floating Viewer Aspect' parameter removed, as its defined by 'Size from Window' and 'Fixed Aspect' parameters.
  • Text COMP / Geo Text COMP - Updates to color formatting.
    • Color values in formatting directives are now assumed to be linear rather sRGB.
    • Alpha values from formatting directives, parameters and the specification DAT/CHOP are now combined rather than replaced.
    • Alpha values in formatting directives are automatically pre-multiplied now for proper blending.
  • Text COMP - Fixed a crash when the node is deleted while editing.
  • Text COMP / Text TOP - Try to avoid cases where multiple fonts within the same family were listed with the same name.
  • Window COMP - Re-enabled 'Hardware Frame-Lock' support on Nvidia GPUs.
  • Edge TOP - Added 'Pre-multiply RGB By alpha' parameter.
  • GLSL TOP / Depth TOP - Fixed cases where 3D textures and Cube textures would not work properly on Nvidia Pascal series GPUs.
  • GLSL TOP - Fixed crash when switching from Texture Buffer to Uniform Array mode in the 'Arrays' page.
  • Kinect Azure TOP - Changed the token format used by the 'Sensor' menu to match other device nodes. Cameras will now match by index number when a matching serial number is not found.
  • Text TOP - Fixed some 'Stroke' text rendering issues.
  • Video Device In TOP - Fixed 10-bit input for [[DeltaCast] devices.
  • Video Stream In TOP - Fixed srt:// URLs not working on macOS.
  • Video Stream Out TOP - Better error messages when GPU encoding resources are exhausted.
  • Video Stream Out TOP - Avoid hang when RTMP receiver isn't processing packets properly.
  • Delay CHOP - Fixed temporary random output when delay parameter increased. Also fixed glitchy output that could sometimes occur.
  • TimerCHOP_Class - Numerous bug fixes and improvements.
    • Scrubbing with .goTo() no longer affects the running count values. See BACKWARD COMPATIBILITY section below.
    • Playing count timers and cumulative timers no longer jump during .goTo() scrubbing.
    • When goTo() results in restarting of the timers, the cumulative/playing/running counters are reset.
    • Fixed inaccurate .goTo(segment=x)
    • New members to access cumulative time: .cumulativeFrames .cumulativeSamples .cumulativeSeconds .cumulativeTimecode
    • New members to access playing time: .playingFrames .playingSamples .playingSeconds .playingTimecode
    • Methods renamed to plural to match output channels, and are all zero-based. Old callbacks will still work but new Timer CHOPs will have this updated naming. .masterFrames .runningFrames .playingFrames .cumulativeFrames and .masterSamples .runningSamples .playingSamples .cumulativeSamples
  • Sprinkle SOP - 'Surface Attributes' generate Color/Normals and other attributes from input.
  • Execute DAT - Crash fix.
  • Monitors DAT - 'Description' column now tries to give the monitor name, not the GPU name.
  • Monitors DAT - Added 'serial_number' column. See an implementation of it in the OP Snippets for the Window COMP.
  • Parameter Execute DAT - Fixed crash in some cases.
  • Text DAT - Python syntax highlighting now recognizes functions that start with underscores and colors built-in functions like __init__ as keywords.
  • XML DAT - Fixed cases where individual quotes were included in text elements. Example: John's job.
  • RenderStream - Save out the JSON for the schema for the project, so it can be read even when TouchDesigner is not running.
  • Animation Editor - Fixed shortcuts for spacebar, left/right arrow, copy/paste/delete.
  • Animation Editor - Fixed various odd behaviors with selection of keys and segments, general improvements.
  • Greatly improved saving/loading cloned components to disk.
  • Fixed inaccurate 'me' python symbol when tscript scripts executed between python scripts.
  • Fixed jittery behavior when dragging nodes to edge of editor.
  • Fixed OP Create Dialog behind floating network editors.
  • Fixed transform issues when rendering large numbers of geos.
  • Fixed extensions and other objects failing to be deleted when printed with debug() function.
  • Fixed momentary delay entering Geo COMPs with their display turned off yet containing several children.
  • Fixed memory leak involving promoted extensions.

Operator Snippets[edit]

Backward Compatibility[edit]

BACKWARD COMPATIBILITY ISSUE - Engine COMP - Fixed onInitialize() callback timing and added new onReady() callback. onInitialize() was erroneously being called when initialization completed. If you relied on this behavior, use the new onReady() callback instead. onInitialize() is now called when initialization begins.


Build 2022.29850 - Oct 31, 2022[edit]

This release is a hotfix for 2022.29530 which had a memory leak in the Render TOP. Thanks @matijaerceg

New Features[edit]

  • Particle SOP.createParticles(num) - A new python method which creates a specific number of particles without advancing the simulation. Returns the results as a list of points whose attributes (N, v, life, etc) can be directly modified. Existing points can also have their attributes modified.

New Palette[edit]

  • TDWidgetKit 2.1.48
    • Widgets - Removed debug statement from folder widget tab reorder.

Bug Fixes and Improvements[edit]

  • Render TOP - Fixed memory leak that can occur in some cases.
  • Render TOP - Fixed some multi-cam/multi-layer rendering not working on older GPUs.
  • Timer CHOP improvements
    • Preserve uninitialized state when loading, to allow onInitialize callback.
    • External channel now supports backward scrubbing.
    • Better behavior when jumping forward/backward using external channels.
  • Animation Editor - Fixed playhead snapping back when scrubbed in Animation Editor.
  • Parameter Dialog - The input editor now includes an index column to make referring to inputs by index easier. The input rows are now draggable to quickly set their order.
  • Wire rollover help now includes input index.
  • Fixed intermittent drag-n-drop failures from OP Browser.
  • Allow unselecting of the current node when a group of nodes is selected.
  • Do not change the state of cook/render/display flags for any Network Boxes/Comments included in a selection.
  • Fixed an issue with OP Snippets eating up memory.


Build 2022.29530 - Oct 19, 2022[edit]

New Features[edit]

  • Window COMP - Added new 'Single Monitor Exclusive' sizing option, which causes the window to try to enter an exclusive access mode on the specified screen, improving performance for perform mode.
  • Blob Track TOP -
    • Added onBlobTrack() callback that identifies current blobs, and onBlobStateChange() that identifies changes to blob states.
    • Added new state columns active, lost, revived, expired, and timer columns age, lost_time, expired_time to the Info DAT. keeps better track when temporarily lost, and blob info can persist after expired.
  • GLSL TOP - Added support for Vulkan 'Specialization Constants'.
  • Video Device In TOP - Added support for Sync Groups on AJA devices.
  • JSON DAT - now outputs tables more robustly handling more cases (see Snippets), and Added 'Transpose Table' parameter.


New Python[edit]

  • Page Class.appendXYZW(...) - Append a custom parameter type of 4 floats with x,y,z,w suffixes. This matches some built-in parameter types.
  • tdu Module - tdu.TableMenu(tableOP, names <col name or num>, labels <optional col name or num>, includeFirstRow=False)) allows DAT as menu source.
  • WebrtcDAT Class - Added new methods for querying connection states to avoid having to go through the DAT's table output.

New Palette[edit]

  • Palette:camSchnappr - Improvements
    • Added option to load pickable points via a point group.
    • Backlight Color and Dimmer is connected to projection output as well.
    • Fixed camera loosing position after re-opening.
    • Models are centered automatically in the Main Window.
  • Palette:lister - Fixed issue where there are two entries for textFormat in the AutoColDefine table.
  • Palette:lister - Fixed edge case bugs and cleaned up config defaults.
  • Palette:presets - Presets COMP support is dropped and has been removed from palette.
  • Palette:searchReplace - v1.12.3 - Added warnings for invalid par and op names, and better error handling when replacing text.
  • Palette:treeLister - Fixed edge case bugs and cleaned up config defaults.
  • Palette:webRTCPanel - v1.0.1 - Initial release: The webRTCPanel COMP is a component that can be used to share a TouchDesigner COMP's panel over a WebRTC connection with full panel interactivity support.
  • Palette:webRTCPanelRcv - v1.0.1 - Initial release: The webRTCPanelRcv COMP is a component that can be used to receive a TouchDesigner COMP's panel over a WebRTC connection with full panel interactivity support when shared from a webRTCPanel.
  • Palette:webRTC - v1.0.4 - Hotfix: The WebRTC COMP "pefect negotiation" pattern was improved. It should now be slightly more "perfect".
  • Palette:signalingServer - v1.0.3 - Hotfix: Change to Signaling API, now v1.0.1, to support the timeJoined dateTime property.
  • Palette:signalingClient - v1.0.3 - Hotfix: Fix to the Subscribe method that could sometimes fail to subscribe (or re-subscribe).
  • Widgets - Fix to AutoUI inclusion of Header widget.

Bug Fixes and Improvements[edit]

  • Panel opacity was not behaving consistently across panels, the following improvement have been made
    • Table COMP - Now 'Opacity' parameter works correctly.
    • List COMP - Now follows parent opacity.
    • Panel Borders now work with 'Opacity' parameter.
    • Panel opacity now works on all panel elements (OP Viewers, scrollbars, etc).
  • Geo Text COMP - Fixed cases where instancing wouldn't appear in the node viewer.
  • Engine COMP - Fixed Engine COMP's file parameter works correctly with VFS and URL locations
  • Engine COMP - Custom file and folder parameters on the loaded component are now evaluated relative to the project, not the component. See Backward Compatibility below, this changes behavior if you have projects which use relative paths for custom file or folder parameters on an Engine COMP. This also enables VFS usage for custom file or folder parameters on the Engine COMP.
  • Engine COMP / TouchEngine - Fixed crash which could occur in low memory situations with large DAT inputs.
  • Text COMP - Fixed a bug with text position when only the top padding was updated.
  • Text COMP - Font alpha is now correctly premultiplied when using the Specification DAT.
  • GLSL MAT - Fixed crash that can occur when loading certain shaders.
  • GLSL TOP - Fixed crash that would occur if an atomic counter was declared in the shader before it was defined in the parameters.
  • GLSL TOP - Fixed uTDPass not being filled properly for compute shaders.
  • Notch TOP - Fixed updating of Exposable Array size when Num Transform changes.
  • Optical Flow TOP - Added 'Gain' parameter and improved the units output in the pixels. A value of 1 in red means the movement is from left edge of the image to the right edge of the image in 1 second. Works in non-realtime mode as as well.
  • Ouster TOP - Fixed a crash when running version 2.4 firmware.
  • Ramp TOP - Fixed extend left/right behavior.
  • Render TOP - Fixed time reported for GPU operations being incorrect.
  • Time Machine TOP - Fixed crash when input was 2D Texture Array or 3D Texture.
  • Video Device In TOP - Allow cameras named 'Blackmagic Design' to be used with AVFoundation on macOS. Other Blackmagic devices should still use the 'Blackmagic' Library mode. This is needed for the Blackmagic ATEM device, which doesn't support the SDK and instead is only used via webcam interfaces.
  • Video Device In TOP - Fixed hang/crash that can occur when changing cameras when using Media Foundation library.
  • Audio Device In CHOP / Audio Web Render CHOP - 'Active' toggle now completely stops cooking in these operators when switched to 'Off'.
  • Audio Oscillator CHOP - Fixed white noise from stopping when base frequency was left at 0.
  • Object CHOP - Sample rate now matches project fps.
  • OSC Out CHOP - When sending timeslice format, rate values are now sent to delineate timeslices to avoid a random number of channels appearing.
  • Pattern CHOP - Fixed 'Length' parameter disabling when input operators are deleted.
  • Speed CHOP - Fixed use of me.chanIndex in parameters.
  • Timer CHOP - Fixed cases of skipping callbacks when leaving a zero-length segment.
  • MQTT Client DAT - Fixed crash from publishing while DAT is inactive.
  • Render Pick DAT - Fixed a crash that can occur in some cases.
  • TCP/IP DAT - Fixed behavior of onConnect and onClose callbacks, they would trigger even if a connection was not established.
  • WebSocket DAT - Fixed connection issues when using ports other than 80 or 443.
  • Polypatch SOP - Fixed a crash that occurred in some cases.
  • Export Movie Dialog - Fixed checkbox state on first opening and fixed drag and drop issues with the 'TOP Video' and 'CHOP Audio' fields.
  • Fixed Privacy dialogs to show password text as hidden when unlocking.
  • Potential fix for hangs occurring in Nvidia 516.xx and newer drivers, particularly on laptops.
  • Small fix to entries in the Help menu on macOS.
  • Automatic turning on of parameters when Alt+[ or Alt+] shortcuts are used in addition to menu selections.
  • Alt+MMB and Alt+RMB network zooms again, instead of creating annotates which is now restricted to only Alt+LMB.
  • F10 shortcut now works properly on overlapping panels
  • Fixed exporting when switching between different CHOPs and the parameter wasn't in export mode.
  • Fixed panel layout order with similarly children names ie. ui1 vs ui1_1
  • Allow grabbing scrollbars when panel resize edges are used.
  • Fixed issue with OP Create dialog closing after pressing the tab key.
  • Fixed a crash loading https://github.com/theexperiential/nodeo
  • Fixed crash which could occur opening a very large window, such as a viewer for high resolution TOPs.
  • CrashAutoSave.toe files will now attempt to be saved when Vulkan device errors occur.

Operator Snippets[edit]

(click Newest button in Snippets)


Backward Compatibility[edit]

  • BACKWARD COMPATIBILITY ISSUE - TOX files with no file extensions will no longer load. Additionally, TOX files will always be saved out with an extension of .tox now.
  • BACKWARD COMPATIBILITY ISSUE- Engine COMP - Custom file and folder parameters on the loaded component are now evaluated relative to the project, not the component. This changes behavior if you have projects which use relative paths for custom file or folder parameters on an Engine COMP. This also enables VFS usage for custom file or folder parameters on the Engine COMP.


Build 2022.28040 - Aug 29, 2022[edit]

New Features[edit]

  • TDAbleton - Version 2.0 - Read the TDAbleton 2.0 announcement and see the 'New Palette' section below.
  • RenderStream - Added support for Disguise RenderStream. Requires Disguise version r22 or later.
    • RenderStream In CHOP - This node is the primary operator to control and configure a connection with RenderStream. Along with being the sync-point for when a frame starts rendering, it also brings in all of the control channels, and also takes a DAT with schema information to create controllable parameters within Disguise.
    • RenderStream In TOP - Receives image data sent over RenderStream.
    • RenderStream Out TOP - Sends image data out to RenderStream.
  • Optical Flow TOP - A new TOP which calculates optical flow in its input. The motion detected in x-direction is output in the red (R) channel, while the motion in y-direction is output in the green (G) channel. This operator only works with Nvidia GPUs.
  • Text COMP / Geo Text COMP - New 'Vertical Align' option called 'Baseline' sets the baseline of the text to the bottom of the page. This will result in descenders dropping below the page.

New Palette[edit]

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

Bug Fixes and Improvements[edit]

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

Example:

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


Build 2022.26590 - Jul 19, 2022[edit]

New Features[edit]

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

New Python[edit]

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

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

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

New Palette[edit]

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

Bug Fixes and Improvements[edit]

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

Backward Compatibility[edit]

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


Build 2022.25370 - Jun 15, 2022[edit]

New Features[edit]

New Python[edit]

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

New Palette[edit]

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

New OP Snippets[edit]

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

Bug Fixes and Improvements[edit]


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

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

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


Build 2022.24200 - May 24, 2022[edit]

We recommend updating your graphics drivers before using TouchDesigner 2022.

Release Highlights[edit]

Major Architectural Updates[edit]

Apple Silicon Support

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

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


Vulkan API

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

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

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

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

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


Working in the Network Editor[edit]

Network Comments, Boxes, and Annotations

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

DAT Viewer Syntax Highlighting

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

Search and Replace

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


High DPI Panel Rendering[edit]

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

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


SDI and Video Pipeline Upgrades[edit]

New Device Support

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

12-bit workflows are now supported

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

10-bit workflows have been improved

Improvements to Video In and Out

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

Color Correction

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

Hap Codec Improvements

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


Steinberg VST® (Virtual Studio Technology)[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.
  • JUCE v6.1.6


WebRTC[edit]


Python and ParGroups[edit]

Python

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

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

ParGroups

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

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


Custom OPs and Extending TouchDesigner[edit]

Custom Operators

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

Custom Operator TOPs (CPlusPlus TOP)

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

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


New Operators[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.
    • Specification DAT allows for individual strings to be positioned and styled independently through a table-spreadsheet format. Some additional attributes supported include font size, color, skew, tracking and stretch.
    • A Specification CHOP allows for similar styling control as the Specification DAT through CHOP channels instead.
    • Numerical formatting can be used for values in the specification DAT.
    • GPU based using the Slug Library.
  • Geo Text COMP - A new component that creates text geometry directly on the GPU using the Slug Library, similar to the 2D Text COMP.
    • Specification DAT allows for individual strings to be positioned and styled independently in 3D. Each row represents a separate string, and the columns (that override parameters) can include tx, ty, tz, all rotate/scale channels (as per Transform Order), plus fontsize, fontcolor, tracking etc., plus all the layout box and alignment parameters. (font/bold/italic not supported as columns)
    • A Specification CHOP allows for similar string manipulation as the Specification DAT but through a CHOP interface instead.
    • Supports clipping text to to a defined layout box.


SDKs Updated[edit]


New Features[edit]

Timer CHOP Improvements

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

Ouster Support

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

Interpolation and Mipmapping Controls

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

Pre-Multiply by Alpha Overhaul

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

Miscellaneous

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


New Operator Snippets[edit]

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

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


New Python[edit]

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

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

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

For example: n.currentPage = 'Common'

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

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

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

For example:

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


New Palette[edit]

TDAbleton Linking TouchDesigner and Ableton Live Together

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

TDSynchro Syncing SDI/NDI between machines

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

WebRTC Toolkit

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

Camera component which opens the door to an interactive render view

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

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

General Additions and Improvements

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


Bug Fixes and Improvements[edit]

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


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



Backward Compatibility[edit]

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


Experimental Builds 2022.20000 - Apr 27, 2022[edit]

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


Official Builds 2021.10000 and earlier - Feb 07, 2022[edit]

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