Release Notes/2020.20000

From TouchDesigner Documentation
Jump to: navigation, search

Current Build 2020.25380 - Jump to Release Notes - Download Here

See our Official Announcement for an overview of new features.

For experimental release notes see 2020.40000 Experimental

Official Build - 2020.20000 Series[edit]

New Features[edit]

Major New Additions[edit]

Point Cloud Support Point Clouds and general data with TOPs - Doing more work with the GPU.

  • Point File In TOP - .xyz, .obj, .exr, .FITS/.FIT, .pts, .ply files supported. It will create a square multi-RGBA buffer with pixel format 32-bit floats. Generally it can be set up as one pixel for each point, and the pixels that are unused contain NAN (a special value called Not-A-Number).
    • Supports converting shapes into point clouds when loading .obj files.
    • The operator's viewer defaults to opening in 'normalized split' mode.
    • The operator's pop-up info shows the number of points and channels.
    • An Info DAT attached shows the channel names in the file. The first 4 channels are put into RGBA (buffer 1), the next 4 channels are in buffer 2, etc
    • The number of points in the original source file is now displayed in the Info CHOP.
    • Can store and display header data in an attached Info DAT (currently supported in .FITS and .PLY files).
    • Point clouds that exceed the maximum size supported by the graphics card are now clamped with the output points sampled evenly from the total available points.
    • If the output resolution is smaller than the source texture, points are now evenly sampled from the source rather than cropping.
  • Point File Select TOP - This new TOP can select channels from a Point File In TOP, useful when multiple buffers exist.
  • TOP Viewer modes have been extended.
    • Added total number of pixels to TOP popup info dialog.
    • 'Normalized Split' displays each channel separately as a normalized grayscale image with min and max values overlaid.
    • 'View as Points' will visualize the data in a 3D Viewer like in SOPs, assuming the RGB channels contain XYZ point data.

Point Cloud Workflow

Better Support for .exr Files - See also OpenEXR.

  • Point File In TOP - .exr files are now loaded in RGBA order so that they match files loaded with the Movie File In TOP.
  • Movie File In TOP
    • Added support to load .exr files with arbitrarily named channels.
    • Added support for loading Pixel Aspect Ratio for .exr files.
  • Movie File Out TOP
    • Added parameters for saving more than 4 channels per frame (currently only supports EXR images), allowing you to save out point cloud files with an arbitrary number of channels.
    • Added parameters to give custom names to the RGBA channels in an .exr files.
    • Custom header data can now be written to files by attaching a Table DAT (currently only supports EXR sequences).
    • Added toggle to flag .exr files as containing point cloud data when saved so that they can be loaded directly into the Point File In TOP.
    • Added support for saving Pixel Aspect Ratio in .exr files.
  • Point File In TOP - .exr files will now open in the Point File In TOP when dragging and dropping into the network editor if they contain the 'loadAsPoints=true' header.

Processing Data in TOPs

  • CHOP to TOP - A new option has been added to wrap long channel data into multiple rows of pixels when the CHOP's channel length exceeds the GPU's maximum texture width.
  • CHOP to TOP - Enabled 'Custom Resolution' options to set specifc resolutions of the TOP and a separate option to make it a Square Texture.
  • Math TOP - Ranges can now be changed on individual color channels.
  • Function TOP - New TOP allowing mathematical functions to be done on pixels, similar to the Function CHOP.
  • Limit TOP - New TOP based on the Limit CHOP that can clamp, normalize and quantize images. Uses spacial (position) quantization.
    • Supports independent minimum and maximum functions.
    • Output is set to the middle of the normalize range when the input is a constant value.

Geometry Instancing with TOPs

  • Keep data on the GPU by going directly from TOPs to GPU instancing.
    • On the Geometry COMP you can provide it with a TOP and it will render an instance for every pixel in the TOP. For example, floating point red, green, blue channels can be assigned to the instances' X Y and Z positions.
    • In addition, you are no longer limited to one OP for specifying instancing data. The Instancing pages have been expanded so you can specify TOPs, CHOPs, SOPs, or DATs for every instance attribute interchangably. For example, position from a TOP and color from a CHOP.
    • New 'Active' parameter available for instancing to control on a per instance basis if each instance should be shown in the render.
    • Added support for up to 12 custom instancing attributes. This is found on the Instance 3 parameter page.
    • Viewer properly calculate bounds when instancing from TOPs.

Web Client and Server and SocketIO

  • Web Server DAT - New DAT which runs a web server in TouchDesigner, currently supports handling of HTTP/HTTPS requests and webSocket connections.
    • Error handling can be monitored with an Info CHOP with channels for server start failure and other problems.
    • URI is parsed and added to a dictionary stored under the 'pars' key in the request dictionary.
    • How client requests are handled is left up to the user via a 'Callbacks DAT'.
    • Includes onWebSocketReceivePing() and onWebSocketReceivePong() callbacks.
    • Added onWebSocketClose() callback.
  • Web Client DAT - New DAT that acts as a web client. This replaces the deprecated Web DAT.
    • Includes request() python method.
    • Info CHOP and Info DAT values for additional information and debugging.
  • SocketIO DAT - New DAT for extended socket.io functionality, separate from the older functionality of the WebSocket DAT.

Kinect Azure

  • Kinect Azure TOP / Kinect Azure Select TOP / Kinect Azure CHOP - The new Microsoft Kinect Azure is now supported in TouchDesigner via these 3 new operators. Please note that Microsoft is updating this new SDK at a fast pace. We will support future changes and additions as the SDK matures and improves. (Windows 10 only, see requirements)
    • Kinect Azure TOP - This is the primary operator used to configure all the settings for the Kinect Azure, as well as get data from one of its cameras (Depth, Color, IR, Player Index, or Point Cloud). Only one Kinect Azure TOP can be connected to each Kinect Azure device.
    • Kinect Azure Select TOP - This TOP references a Kinect Azure device through the Kinect Azure TOP (above) and retrieves additional images from the other camera streams.
    • Kinect Azure CHOP - This CHOP references a Kinect Azure device through the Kinect Azure TOP (above) and retrieves body tracking information, including bone positions and rotations, and IMU sensor data.
  • Kinect Azure TOP -
    • Parameters for color controls exposure, brightness, white balance, and more.
    • Option to use the CPU for body tracking (very slow).
    • Has the ability to capture both live and body-synced video streams at the same time.
    • Info CHOP will report frames and timestamps channels.
  • Kinect Azure CHOP -
    • Currently using version 0.9.5 of the body tracking library (changing often as Microsoft is still in beta).
    • Supports multiple body tracking devices per computer.
    • Parameter to control which GPU computes the body tracking. Also includes a function to get the physical GPU name (Nvidia GPU only).
    • Multi-threaded CPU support for body tracking (in cases where the Nvidia CUDA GPU tracking can't be used).
    • Includes support for hand, handtip, and thumb joint tracking.
    • Bone Confidence channels let you know the expected accuracy of the tracking.
    • Info CHOP will report frames and timestamps channels.

Ouster LIDAR Support

  • Ouster TOP - New operator for real-time point cloud capture from Ouster lidar sensors.
    • Currently using firmware v1.13
    • Direct support for the OS1 Ouster product line.
    • Additional sensor data like IMU, packet counts, matrices via Info CHOP and Info DAT.
    • Visual Panoramic and Scan Order capture formats selectable in 'Image Layout' parameter.
    • Flexible X, Y, Z, Range, Intensity and Noise plane mapping to RGBA GPU Image Channels
    • Time Sync Mode for supporting multiple devices in the same area (Internal OSC, Sync Pulse In, PTP 1588)
    • Auto startup features
    • Window Rejection mode
    • Positions and transforms are now given in TouchDesigner space (Y is up) rather than sensor space (Z is up).
  • Ouster Select TOP - New TOP to select additional channels from the Ouster scanner.

Devices

Audio over SDI - Proper SDI audio support for Blackmagic Design and AJA devices.

Lasers

  • Pangolin CHOP - New CHOP interfaces with Pangolin's Beyond laser show control software.
    • When Beyond is running, the Pangolin CHOP will send laser image frames to it.
    • Image frames are created from either a SOP input or CHOP input.
    • TouchDesigner Non-commercial will work with the demo version of Beyond. TouchDesigner Commercial or Pro is required to interface with licensed versions of Beyond.

RealSense

  • RealSense TOP - Updated to SDK 2.31.0 and the following additions
    • Added support for T265 cameras. NOTE: The driver is not stable yet when changing parameters, work in progress.
    • Added support for setting arbitrary options for the devices via a CHOP.
      • Complete list of RealSense Options
      • Names will be all lowercase, and omit the RS2_OPTION_ from the start. E.g RS2_OPTION_ENABLE_AUTO_EXPOSURE can be set with a channel named 'enable_auto_exposure'.

Binding

  • Bind CHOP - Use CHOP channels for binding with parameters.
    • Allows for multiple inputs (like old Override CHOP) or the bound parameter to update a channel's value.
    • Includes a 'Callbacks DAT' for querying where the change was initiated and then taking further actions via python script.
    • 'Channel Pickup' parameter doesn't change the value of that parameter until the input value crosses the current value.
  • Binding - Binding to DAT text or table cells is now supported.

Engine COMP The Engine COMP] runs a .tox file in a separate process using TouchEngine. *Work in progress*

  • Info DAT reports the path to the TouchEngine binary being used.
  • Runs TouchEngine from the in-use version of TouchDesigner. Users can still override this behavior by placing a link to a particular installation named "TouchEngine" next to the .tox they are loading.
  • Supports multiple GPUs by allowing GPU Affinity to be set for a .tox running in TouchEngine.
  • Added support for channel names for CHOP Ins and Outs.


COMPs[edit]

  • Bullet Solver COMP - Rename onFrameStart, onFrameEnd, and onInit callback methods to whileRunningPreSimulate, whileRunningPostSimulate, and onInitialize respectively.
  • Camera COMP - Added 'Ortho Origin' parameter to control where the origin in for orthographic cameras. Useful when trying to render objects into a normalized space or pixel space for things such as LED fixtures and you want to address the render output with 0,0 being the bottom left.
  • FBX COMP - Improvements
    • Geometry nodes inside the FBX COMP are now set to pickable by default when imported.
    • Added File Version to info pop-up and fbx_file_version Info CHOP channels.
    • Added 'Import Scale' parameter.
  • Nvidia Flow Emitter COMP - New features and improvements.
    • Added Collider to the 'Mode' menu which turns the emitter into a collision object.
    • Added Shape SOP option to the 'Type' menu which allows use of polygon/mesh SOPs as the shape for the emitter. Specify the SOP in the 'Shape OP' parameter below.
    • Allow TOPs to be specified for the Color Ramp parameter instead of only CHOPs.
  • Replicator COMP - Added a new onRemoveReplicant() callback to destroy replicators.
  • Shared Mem In COMP - Added 'Memory Type' parameter to choose between Global or Local.

TOPs[edit]

  • Math TOP - Added "Linear to sRGB" and "sRGB to Linear" options.
  • NDI In TOP / NDI Out TOP - Upgraded NDI SDK and added support for transmitting 16-bit data.
  • Nvidia Flow TOP - New features and improvements
    • Added second input for a Depth TOP to setup a depth-composite of the Flow simulation render over the first input.
    • Separate Input into Color and Depth Inputs.
    • Add support for Volume Shadowing including a new toggle to automatically adjust emitter render parameters to show Volume Shadows.
    • Improve GPU Memory Usage Reporting.
  • Movie File In TOP - Added support for NotchLC codec.
  • Movie File In TOP - Can store and display EXR file's header data in an attached Info DAT.
  • Movie File Out TOP - Major improvements for hardware encoding, audio channel support, and custom header data.
    • Added support for Lossless H264 and H265 hardware encoding on Nvidia GPUs.
    • Can now record more than 8 audio channels on supported codecs.
    • Custom header data can now be written to EXR files.
  • TOPs - Now support saving .tiff files with 16-bit image depth using RMB "Save Image" and python TOP.save() method if the 'Pixel Format' is set to 16-bit float.
  • Movie File Out TOP - TIFF image formats can now be saved out at higher 16-bit pixel format.
  • Custom Operators - Added support for 16-bit fixed and 16-bit float data to and from TOPs.
  • Analyze TOP - Improvements
    • Added options to calculate RGBA independently for Minimum and Maximum operations.
    • Added Sum and Count Pixel operations.
    • Added support to exclude pixels with NaN values in the calculations.
    • Added support for defining a mask channel. Pixels that have a zero in the mask channel are excluded from calculations.
    • Changed the name of the 'Select' parameter to 'Analyze Channel'.

CHOPs[edit]

  • Audio File Out CHOP - A new CHOP for recording and saving multi-channel audio files.
  • Audio Movie CHOP - Added an option for switching audio tracks when movie files contain multiple tracks.
  • LTC In CHOP / LTC Out CHOP - Improved to support higher frame rates and more.
    • LTC CHOPs now work for higher frame rates.
    • LTC In will now adjust the frame value based on the value in the User 1 channel.
    • User field1 is now automatically used for frame rates over 30.
    • LTC In now has options for the number of 'Total Frames' and 'Total Seconds' and on/off parameters for frames, seconds, min channels.
  • Timeline CHOP - Added options for 'Second', 'Absolute Frame', and 'Absolute Second'.
  • Timer CHOP - Added a third Play Mode called 'External CHOP Index' to drive current position of the timer using a CHOP channel.
  • Keyboard In CHOP - Keys are now defined in a space or comma separated list rather than as neighbouring keys on the keyboard. Old files are automatically updated to the new system when they load (only works for constant parameters).
    • Added shift key support to the 'Modifier Key' parameter menu.
    • Added 'Panels' parameter so events are only triggered when the given panel has focus.
  • Mouse In CHOP - Added 'Panels' parameter so events are only triggered when the given panel has focus.
  • Object CHOP - Improvements
    • Reorganization of parameters and pages.
    • Added '4x4 Matrix', '3x3 Matrix', and 'Quaternion + Transform' to the 'Compute' menu.
    • Added "xord" and "rord" channels to Transform output.
    • Added "Swap Target/Reference" toggle parameter.
    • Added 'Include Order Channels' parameter to control outputting the 'xord' and 'rord' channels. Files from 2019.10000 branch and earlier will load up with the parameter off to maintain older behavior.
  • Transform CHOP - Overhaul of it's functionality. Now matches groups of channels based on prefix instead of channel order to create transforms.
    • Large update from previous 2019.30000 series experimentals. Reduced complexity.
    • Now accepts two inputs. Added 'Invert Input 0' and 'Invert Input 1' parameters. Also added some warnings when two inputs are not compatible or invalid inputs.
    • Added '4x4 Matrix', '3x3 Matrix', and 'Quaternion + Transform' output.
    • Now supports Vector sets and performs Matrix-Vector multiplication.
    • Added Vector/Position options for Input 1.
    • Added toggle parameters to control output.
    • Added Operation and Coefficient parameters for final output values.
    • Added 'Unmatched Channels' parameter.
    • Now accepts xord and rord channels as part of TRS channels.
    • Swapped the Input and Transform pages.
    • Renamed 'Invert' to 'Post Invert' on the output page.
    • Changed the 4 Invert toggles to a menu of Unary Operations.
  • Transform XYZ CHOP - New CHOP that will apply transforms to positions and vectors stored in CHOP channels.
  • Hold CHOP - Added 'Hold per Sample' parameter.
  • Pattern CHOP - Added 'Random Non-Repeating Integers' to the 'Type' menu which will randomly change values whenever the 'Randomize' pulse parameter is pressed.

SOPs[edit]

  • Alembic SOP - Added 'FPS' parameter.
  • Merge SOP - Added 'SOPs' parameter to accept multiple SOPs by reference.
  • Select SOP - Now allows multiple input ops to be specified in the 'SOP' parameter, acting like a Merge SOP.
  • Sphere SOP - Removed the upper limit on polygon frequency.
  • Particle SOP - Added 'Birth' pulse parameter to birth particles accurately. Works in conjunction with a new 'Birth Count' parameter which determines how many particles are created each time 'Spawn' is pulsed.
  • Point SOP - Added "Width (Line MAT)" parameter to control a point's width when rendered with a Line MAT material.
  • Raster SOP - New SOP that takes a TOP and converts it into a single-line SOP that can be used with the Laser CHOP.
  • Text SOP - Added 'Scale Font to BBox Height' parameter to scale the font's vertical size so it's based on the vertical bounding box of the font, rather than the typical way a font is sized.
  • Text SOP - Added 'Vertical Align' parameter with options: First Line, Top, Center, Bottom. The chosen field will be aligned to the x-axis.
  • Aligning SOPs to their X, Y, and Z axes: Rectangle SOP / Box SOP / Circle SOP / Grid SOP / Sphere SOP / Superquad SOP / Torus SOP / Tube SOP - Added 'Anchor' parameters to main SOP generators. The position stays stationary regardless of rotate and scale settings.

MATs[edit]

  • GLSL MAT - Added support for custom instancing attributes.
  • GLSL MAT - Added built-in TDAttenuateLight(int index, float lightDist); function.
  • Line MAT - New features
    • Added "Attribute Type" menu and "Instance Custom Attribute Index" parameter to use an instance's custom attributes in SOP and World spaces for Vectors.
    • Added "Pullback Caps" to the Caps page to pull the caps inward.

DATs[edit]

  • DATs - Execute DATs will now accept multiple OPs to monitor.
  • OP Execute DAT - Added new callback onCreate() which is called when the monitored operator is first detected.
  • Perform DAT - Added callback for when performance log is triggered. Made it log on successive triggers while it is active.
  • WebSocket DAT - Added onConnect() and onDisconnect() callbacks.

Interface[edit]

  • Geometry Viewer - Improvements
    • Geometry Viewer homes properly when first opened.
    • Re-worked the scroll acceleration so it's based on the distance to pivot rather than the last home values, this fixes issues when the scroll speed would get very slow.
    • Geometry viewer now saves the last home bounds to preserve the view when saving.
  • Parameter UI Improvements - Previously some parameters were a list of duplicates when multiple copies of that parameter might be used. Examples of this are the GLSL MAT's 'Uniform' parameters (8 copies), a Component's 'Extension' parameters (4 copies), a Constant CHOP's channel creation parameters (40 copies), etc. Now these parameters start out with just 1 copy of the parameter and you can Add or Remove parameters when needed. This has the following advantages:
    • Cleans up long lists of the same parameter that might not be used. For example, the GLSL MAT's Sampler pages would always have 8 Uniform parameters, even when not used. Now it starts with 1 and you can add the number you need.
    • Cleans up duplicate parameter pages on some OPs. For example, the GLSL MAT previous had 'Samplers 1' and 'Samplers 2' pages just to get 16 Uniform parameters. Duplicate pages are no longer needed so now there is only one 'Samplers' page where you can add the exact number of Uniform parameters required.
    • Removes the limit on the number of parameters available. For example, the Constant CHOP used to be limited to 40 channel parameters, the Point SOP used to be limited to 4 'Custom Attrib' parameters, these are no longer limited as you can create any number of parameters required (NOTE: some are limited by other factors such as limited GPU resources).


New Python[edit]

  • Python 3.7.2 is now the built-in version of python. Backward Compatibility warning, see below.
  • Header parameter type added which acts as a label and section divider. It is like parameter sections but you can give it a text string label.
  • Page Class - methods and members will now also work for built-in pages.
  • Page Class.appendHeader(name) - Appends a custom parameter that displays only the value, left justified, with no editing ability. Can be used in combination with Par.startSection and Par.enable.
  • Par Class.page member can now return a built-in page.
  • Par Class.subLabel member added.
  • Par Class.bindRange member added, when true then min, max, clampMin, clampMax, normMin, normMax, normVal values will be based on master bind parameter. (Custom Parameters only)
  • Par Class.cloneImmune - Protects values from master syncing.
  • Par Class.enableExpr to get or set an expression that controls the enable state for this parameter.
  • Par Class - Added collapser/collapsable boolean members, these are for collapsable parameters like those found on MATs for texture map's Texture Sampling Parameters.
  • Par Class help - Returns the description for the parameter.
  • Sequence Class - describes a set of sequential parameter blocks. These are parameters you can add/remove duplicates of, such as the Point SOP's 'Custom Attrib' parameter(s) or the GLSL TOP's 'Uniform Name' parameters.
  • TDJSON updated and bugs fixed.
    • All functions now work with built-in parameters.
    • Added a deserializer TDData function to TDJSON.
  • OP Class.pars(pattern) now supports legacy parameter names.
  • OP Class.pages() method returns a list of the operator's built-in pages.
  • TOP Class - New cudaMemory() method which allows the TOP's memory to be copied to CUDA memory on the GPU, for use with CUDA libraries in Python.
  • Added createFolders flag for .save() the functions in COMP, TOP, CHOP, SOP, and DAT classes.
  • KinectazureTOP Class.getRemapTransform(src, target) - Returns the transformation matrix to remap points between different devices spaces.
  • MoviefileinTOP Class - Added python functions to access header data.
  • MoviefileinTOP Class.isFileOpening returns true while the file header is still being read.
  • MoviefileinTOP Class.sourceChannels - lists the available channels in the file e.g. R, G, B, A for typical color images, but could be more for some formats like .exr files. Extra available channels can be accessed using the Point File In TOP and Point File Select TOP.
  • MoviefileinTOP Class - Added python function that returns a tuple with the available channel names in the file.
  • textTOP_Class / textSOP_Class - Improvements
    • Added numLines member and lines() method to inspect the text after it has been formatted by things such as word wrap.
    • Python objects returned from lines() method now have lineWidth member.
    • Added members to access more font metrics such as ascender, descender, capHeight, lineGap and xHeight.
  • SOP Class maximized .min .max .size members
  • Point Class.normP returns the normalized point within SOP bounding box. (This is equivalent to $BBX $BBY $BBZ in Tscript). Previously this was limited to a few specific SOP parameters.
  • WebserverDAT Class - Added webSocketSendPing() and webSocketSendPong() methods.
  • WebclientDAT Class.request() - Added authentication capabilities to .request() method via keywords.
  • WebclientDAT Class.request() - Added an uploadFile keyword that has the same functionality as the 'Upload File' parameter.
  • Custom Operators - OP_NodeInfo class now has a 'pluginPath' member.
  • WindowCOMP Class.setForeground() - Added code that will try to grab focus for this Window even if TouchDesigner isn't the current foreground app.
  • ArcBall_Class.setTransform() will now invert the incoming matrix if 'forCamera' mode is in use. This allows the same transform coming out of getTransform() to be passed back into setTransform().
  • Optimized Expressions - OP.fetch() is now optimized in some cases.


New Palette[edit]

  • Updated most palette components to improve parameter naming and organization, network cleanup, and Binding to top level parameters.
  • Added 'PointClouds' folder for working with point clouds
    • Added new pointGenerator, pointRender, pointTransform, and pointWeight components.
    • Added new pointMerge component takes two input TOPs and repacks them into a single output texture containing all of the pixels of the inputs.
    • Added new pointRepack component re-arranges the pixels in the input to fill a new texture of given dimensions. Extra input pixels are discarded, while extra output pixels are filled with zeroes.
  • Widgets - Updated widget kit.
    • New Text Editor Widget - found in core widgets
    • Slider / Knob optimization for cache mode - direct path to out for greater speed
    • New masterFolderTabWicons - A widget that supports using Unicode Hex strings for folder icons. Requires an icon font like the includes Material Design Icons font.
    • New masterTextEditor widget supports editing of text in a DAT.
    • Field text area widget has field component added to published operators.
    • Added new font auto-scaling based on a ratio parameter instead of a locked font size.
    • Font controls now have a 'Font Side Mode' and 'Font Ratio' parameter. To see it work activate it and scale up the size of the widget.
    • Support enable/disable of parameters using enableExpr - work in progress - it is possible parameters do not enable or disable properly.


SDK and API Updates[edit]

  • macOS - Minimum required version is now 10.12 macOS Sierra.
  • Python 3.7.2 is now the built-in version of python. Backward Compatibility warning, see below.
  • CUDA - Upgraded to CUDA 10.0.
  • NDI - Upgraded to NDI 4.1
  • Notch TOP - Upgraded to Notch SDK v0.9.23
  • Oculus Rift - Updated to SDK v1.43.0
  • OpenColorIO TOP - Upgrade SDK to v1.1.1
  • RealSense - Upgraded to 2.31.0. (Fixes the memory leak - Windows only).
  • ZED - Upgrade to SDK 2.8.3


Bug Fixes and Improvements[edit]

COMPs[edit]

  • Actor COMP - Fixed texture instancing crash.
  • Animation COMP - Fixed an issue where deleting all keyframes from a channel would break the channel by leaving an empty row in the keyframe table. Better handling of channels with zero segments.
  • Blend COMP - Fixed rotation blending not working in some cases when 3 or more inputs were connected.
  • Environment Light COMP - Fixed some seams that can occur at certain PBR roughness values.
  • Environment Light COMP - Remove ability to provide Pre-filtered Diffuse map for now, it uses up too many texture units. It will be computed from the source Environment Map instead.
  • Geometry COMP - Geometry components and applicable object components now display bounding box information in their info popups. This also works with geometry instancing.
  • Geometry COMP - Instances can now have a maximum of 12 Custom Attributes instances, up from 4 previously.
  • Light COMP - Viewer now uses 'Best Fit' to display the projection area without distortion.
  • Window COMP - Will now use the resolution and view mode (image or points) when connected to a TOP.
  • Window COMP - Fixed some Perform Mode window sizing issues on macOS.
  • Window COMP - Fixed some sizing issues for windows when using multiple monitors with different DPI setings.

TOPs[edit]

  • Blur TOP - Fixed issues with this node not giving correct blur for non-square images.
  • CPlusPlus TOP - Added example for using signalled producers in the CPUMemoryTOP example.
  • Cross TOP - BACKWARD COMPATIBILITY WARNING - Order of the "Extend" menu has changed for the first two entries. This should only affect cases where this menu was being set by index via script or exports.
  • GLSL TOP - Vector parameter defaults should be (1,1,1,1) not * (1,0,0,0).
  • Movie File In TOP - Now correctly handles orientation metadata for .jpeg and .tiff images and .mov movies.
  • Movie File In TOP - .FITS files dragged into TouchDesigner will load into a Movie File In TOP.
  • Movie File In TOP / Movie File Out TOP / Point File In TOP - Channel order is now saved in the EXR file header so that channels can be reloaded in the same order they were saved. Uses a non-standard header attribute.
  • Movie File Out TOP - 'Add Frame' pulse now works for 'Image' output types.
  • NDI In TOP - Fixed high CPU usage when no connections found.
  • Notch TOP - Fixed transform conversion of exposed transform parameters.
  • Notch TOP - Added group names as section headers when generating the custom parameters of a Notch block.
  • Notch TOP - Fixed bug with GPU memory usage in the pop-up info. It was not including the GPU memory usage of the block itself.
  • Notch TOP - Fixed unicode in exposed string properties.
  • Notch TOP - Fixed reporting of gpu_memory_used.
  • Nvidia Flow TOP - Fixed typo in "Ignition Temp" parameter.
  • Point File In TOP - Supported files (.PTS, .XYZ, .PLY) dragged into TouchDesigner will load into a Point File In TOP.
  • Point File In TOP - Point clouds that exceed the maximum size supported by the graphics card are now clamped with the output points sampled evenly from the total available points.
  • Point File In TOP - If the output resolution is smaller than the source texture, points are now evenly sampled from the source rather than cropping.
  • Point File In TOP - The number of points in the original source file is now displayed in the Info CHOP.
  • Point File In TOP - 'Num Points' (Info CHOP, Python member, node MMB popup info) now shows the total number of valid points in the output texture, which could be less than the number of points loaded if the texture size has been reduced.
  • Point File In TOP - 'Num Loaded Points' in the Info CHOP and python class shows the number of points that were loaded from the file.
  • Text TOP - Position Units can now be changed when using a Table DAT to describe text positions.
  • Text SOP / Text TOP - Kerning renamed to 'Tracking' as that is the more correct term for that feature.
  • Text SOP - Fixed a bug with uninitialized vertex positions.
  • Video Device In TOP - Fixed slow performance when trying to connect to a camera.
  • Video Device In TOP - Fixed DirectShow device selection being off by one.

CHOPs[edit]

  • Audio Oscillator CHOP - Fixed the Reset input only resetting based on the first channel.
  • DMX In CHOP / DMX Out CHOP - Increased the baud rate for reading and writing through generic serial interfaces.
  • Join CHOP - Fixed this node not giving correct results.
  • Leap Motion CHOP - The sample rate is now set to match the global cook rate, this allows faster sampling if the project FPS is increased.
  • Object CHOP - Use default values when no Targent and Reference Op are provided.
  • Object CHOP - Fixed startup errors that are shown when loading up files from 2019.10000 or older builds.
  • OSC In CHOP - Renamed 'Strip Prefix Segments' to 'Strip Name Prefixes'. and fixed stripping name segments.
  • OSC In CHOP - Added 'Reset Values' parameter to reset channel values to 0 without removing the channels.
  • OSC In CHOP - Fixed memory leak.
  • OSC Out CHOP - Enable Send Events Every Cook parameter for Time Slice mode, allowing OSC data to only be sent only when values change.
  • Select CHOP - Optimized performance when using wildcards.
  • TOP to CHOP - Fixed case where the CHOP would sometimes be empty on first cook.
  • Timer CHOP - Now include timer_pulse even if segment is at least 1 frame long.
  • Timer CHOP - Fixed auto start when onInitialize() callback returns delayed initialize.
  • Timer CHOP - Force a ready pulse whenever start is re-pulsed.
  • Timer CHOP - When Starting, only Initialize if not already in that state.
  • Timer CHOP - No longer need to press 'Init' when changing callback scripts. Note: Script changes will now take place immediately.

MATs[edit]

  • GLSL MAT - Added more Matrix parameters that take single matrix input.
  • GLSL MAT, GLSL TOP - Fixed issue where 'vec3' modes for the 'Arrays' page were not working correctly.
  • Line MAT - Improvements
    • Added "Circle (Sprite)" type to points for better performance when using circles.
    • Renamed "Circle" and "Circle Texture" Point types to "Circle (Polygon)" and "Circle (Sprite)".
    • Fixed Points not rendering if they had normals (0,0,0).
    • Picking points should now work correctly.
    • Now has more accurate picking values when render picking.
    • Fixed flashing "width" attribute issue.
    • Fixed unexpected changing of points after changing the 'Near' parameter in a Camera COMP.
    • Node's viewer now uses the fixed near and far distances and does not get affected by "Distance Near/Far" parameters in Camera COMP.

DATs[edit]

  • CPlusPlus DAT - Fixed input op node string getting the copy of the cplusplus node string.
  • Error DAT - Improvements
    • Components now show errors from themselves as well as their their children.
    • "source" is now the first column of the table.
    • Removed the "Log" page and moved the parameters to the "Error" page.
  • Execute DAT - onCreate() callback now called earlier in the load process.
  • Folder DAT - Fixed case where relative path results were incorrect when the 'Root Folder' parameter had trailing slashes in it.
  • OSC In DAT - Blank lines no longer logged when non-scoped bundles are received. See below BACKWARD COMPATIBILITY
  • OSC Out DAT - Removed optional input table which didn't make sense in an Output operator context.
  • OP Find DAT - Fixed overcooking issue as well as optimizations in calling the default DAT callbacks.
  • Serial DAT / Serial CHOP - Windows version now includes list of all valid ports in menu, not simply COM1-COM8.
  • Sort DAT - Unique output optimized: 3000 rows from 2 sec to 10 msec.
  • Table DAT - Fixed issue where UTF16 files were being truncated when loading on macOS.
  • Text DAT - Fixed UTF16 encoded files not loading correctly on macOS.
  • Text DAT - Now correctly load UTF-16 big endian encoded files.
  • WebSocket DAT - Added 'Reset' pulse parameter.
  • Web DAT is deprecated.
  • Custom menu names now allow spaces, Font menus no longer introduce underscores.

Miscellaneous[edit]

  • Fixed startup crash that that was occuring on Intel GPUs with the newest drivers. (Often drivers are installed via Windows Update)
  • Shared Memory OPs - Now working on macOS.
  • Binding - Fixed bound OP parameters with relative paths such that they return the OP relative to the Master, not themselves.
  • Binding - Fixed CHOP pickup not working when driven from the destination.
  • MIDI Mapper Dialog - Fixed "Enable Logging" option not turning off and continuing to log and cook in Perform Mode.
  • Optimized Expressions - Better support for 64-bit integers.
  • Improved handling of menus that are too large for a dialog; For example, the Font parameter menu of a Text TOP when using a floating parameter dialog.
  • Fixed drag-n-drop of multiple nodes not executing onCreate() scripts in reliable order.
  • Fixed slow memory leak when using ipar expressions.
  • Fixed issue with TOP viewers opening at 400x300 all the time.
  • Fixed hanging when using Panel.width or Panel.height in some cases.
  • Panel alignment using 'Max per Line' now works with fill and stretch weights.
  • Fixed panel.inside value not activating when overlapped by a sibling.
  • Fixed cases where panel.inside is calculated incorrectly during dragging of native scaled windows on windows that are scaled to something other than 100%.
  • Custom header parameters now display parameter label, not parameter value.
  • Cloned components now preserve custom header parameter settings.
  • Fixed crash when pulsing clone on component with custom parameters.
  • Fixed startup errors and crash on .projects using external .tox references which triggered recompiling of extensions.
  • Binding now using optimized expressions when possible.
  • Removed shortcut for toggling all 'Viewers Always Active'. You can still access the setting in the Network Editors RMB-menu.
  • Homing/Framing by selection now includes nodes whose parents are selected and ignores nodes with their display flag turned off.
  • Fixed an issue when pasting one bind parameter to a tuple.
  • Fixed linking of tags when copying nodes.
  • Fixed an issue where whitespace after numbers in parameters would sometimes clear the field back to 0.
  • Fixed some floating windows from opening too large to fit onscreen.
  • Changed Add Group keyboard shortcut in the Geometry viewer's Select and Transform state to be Shift+G to match the network editor shortcut.
  • C++ Operators should decrement any python objects returned from getParPython() after use, otherwise a memory leak will occur. The documentation in the header file incorrectly stated otherwise, it has now been updated.
  • C++ samples now include the missing source files to the Xcode project for CPUMemoryTOP.
  • Fixed issue where some nodes would cook mulitple times per frame.
  • Startup crash avoidance during splash screen display when other popups arise.
  • toeexpand/toecollapse now tolerate forward or backward slashes.
  • 099 suffix removed in some places such as executable names. Simply 'TouchDesigner' and 'TouchPlayer' now.

Palette Improvements[edit]

  • Palette:kantanMapper - Fixed a number of bugs.
    • Alpha on rectangle textures was not being used.
  • Palette:arcBallCamera component improvements
    • The last transform is saved in the component and loaded when the file is reopened.
    • SaveTransform(dat=None, matrix=None) - Extension method allows for saving out transform states to DATs or matrices.
    • LoadTransform(dat=None, matrix=None) - Extension method allows for loading transform states into the arcBallCamera.
  • Palette:arcBallGeometry component improvements
    • The last transform is saved in the component and loaded when the file is reopened.
    • SaveTransform(dat=None, matrix=None) - Extension method allows for saving out transform states to DATs or matrices.
    • LoadTransform(dat=None, matrix=None) - Extension method allows for loading transform states into the arcBallGeometry.
  • Palette:lister - Version 1.8 with many improvements.
    • Now has 'Arrow Keys' parameter that allows selection control from the keyboard.
    • New parameter 'Input Table Has Headers' lets lister understand input table DAT much better
    • New Parameter 'Auto-Sync Input Table' feeds changes back to DAT (Available in 'Input Table Has Headers' mode only)
    • Parameter 'Raw Info' is now a list of ordered dicts (Available in 'Input Table Has Headers' mode only)
    • int and float sourceDataModes now force their data type when text is entered into lister cells
    • Column name now returned in info for cell callbacks
    • Config is now outside the lister (still works inside if you want to put it back and turn clone immune on)
    • Rearrange parameters more sensibly


Backward Compatibility[edit]

BACKWARD COMPATIBILITY - Python 3.7.2 has 2 additional reserved keywords, 'async' and 'await'. Any scripts using these terms will need to be modified.

BACKWARD COMPATIBILITY - Palette:moviePlayer loaded from older builds uses the keyword 'async' as a variable name in some scripts, this should be changed to another variable name. (Unmodified moviePlayers may be replaced by the new version available in the Palette)

BACKWARD COMPATIBILITY - Palette:moviePlayer loaded from older builds will not allow drag and drop of nodes on the moviePlayer's node viewer. To fix this, delete the following operator from moviePlayer: moviePlayer/ui/zoomImage/panelexecFocus

BACKWARD COMPATIBILITY - Add SOP - Now a single 'Add Points' toggle controls using of all defined points.

BACKWARD COMPATIBILITY - Cross TOP - Order of the "Extend" menu has changed for the first two entries. This should only affect cases where this menu was being set by index via script or exports.

BACKWARD COMPATIBILITY - Cube Map TOP - Building a cubemap from 6 inputs on the Cube Map TOP was flipping many of the sides incorrectly. This has been fixed, but older files may have incorrect cubemaps now if they were working around the flipped behavior.

BACKWARD COMPATIBILITY - Expression CHOP - 'Number of Expressions' parameter, could cause an issue if this value is dynamically changed.

BACKWARD COMPATIBILITY - Function CHOP fixed an issue where tanh(x) was being calculated as tan(x).

BACKWARD COMPATIBILITY - Line MAT - Removed "num Point" in Points page. Replaced with "Num Points In Circle" which controls the number of points in a full circle for circles, round joints, and round caps (based on what the hardware supports).

BACKWARD COMPATIBILITY - Notch TOP - Changed 'Reload Block' to be an 'Active' parameter. When Active = Off, the block is unloaded allowing changes to be applied to the block (.dfxdll file) such as updating or re-saving the block.

BACKWARD COMPATIBILITY - OSC In DAT - Blank lines no longer logged when non-scoped bundles are received.

BACKWARD COMPATIBILITY - OSC In CHOP, OSC Out CHOP, Touch In CHOP, Touch Out CHOP, OSC In DAT, OSC Out DAT, Touch In DAT, Touch Out DAT, Stype CHOP - Removed support for UDT protocol.

BACKWARD COMPATIBILITY - Ouster TOP - Updated commands to work with protocol changes in the v1.13 firmware. Configuration will no longer work correctly on hardware with older firmware.


BACKWARD COMPATIBILITY - Rectangle SOP - Normals for the ZX orientation now point along the positive Y axis for consistency with other orientations and SOPs.

BACKWARD COMPATIBILITY - Transform CHOP was previously using rotate order as the output order even if the 'Custom Output Orders' was On.

BACKWARD COMPATIBILITY - Transform CHOP had Output Channels parameter removed, replaced by output toggles to customize the output channels.

BACKWARD COMPATIBILITY - Renamed vram_usage in Notch TOP's Info CHOP to block_gpu_memory_used.

BACKWARD COMPATIBILITY - ParMode, PaneType, and JustifyType are now Python style enums. They will work as usual except when accessing str(enumObject). To get the old result of str(enumObject), use enumObject.name.

BACKWARD COMPATIBILITY - Since the executable's names no longer container 099, scripts that launch the TouchDesigner099.exe or TouchPlayer099.exe need to be changed to TouchDesigner.exe or TouchPlayer.exe


Build 2020.25380 - Jul 23, 2020[edit]

New Features[edit]

  • Notch TOP - Added support for Exposable Array node in Notch Builder to expose arrays of transforms, either formatted as pos/rot/scale, mat4x4, or pos/quat/scale, and requiring 9, 16, and 10 channels respectively. The property comes in as a CHOP reference parameter and the format of the CHOP matches with the appropriate output of the Transform CHOP and Object CHOP outputs.
  • Video Device In TOP - Enable support for Blackmagic ATEME Mini and other Blackmagic Design devices that go through DirectShow rather than the Blackmagic SDK.

New Python[edit]

New Palette[edit]

Bug Fixes and Improvements[edit]

  • Custom Operators - Improvements and bug fixes.
    • Will no longer error when getInput*() is called on an input that is not connected.
    • cookOnStart boolean added to OP_CustomOPInfo. This will cause a Custom Operator to cook when the file starts, even if it's not used elsewhere. Useful for cases such as network or device output operators.
    • Fixed issue with Custom TOPs where the resolution parameters were ignored in the case where the TOP has no input and the Resolution was set to 'Use Input'. In this case it will now use the resolution parameters to set the resolution.
  • Composite TOP - Divide operation is now more mathematically correct.
  • CPlusPlus TOP - Fixed issues with the cudaArray memory if the input TOP became mipmapped after initial use.
  • Function TOP - Fixed sampling of the 2nd input often being incorrect.
  • Movie File In TOP - Fixed sequences of .tga files not working correctly.
  • Screen Grab TOP - Fixed resolution being incorrect in some cases.
  • Screen Grab TOP - Fixed a bug capturing a single frame using the fast DirectX 11 method.
  • Text TOP - Tweaked result from .textHeight member to be more accurate.
  • Video Device In TOP - Few tweaks to Media Foundation library behavior to avoid hangs.
  • Video Device In TOP - Upgrade to Allied Vision PvAPI SDK 1.28.
  • Audio NDI CHOP - Output two tracks of silence if no audio is present.
  • Pangolin CHOP - Fixed cooking problem when Pangolin CHOP not in the current network.
  • Script CHOP - Now saves/loads contents from toe file, see BACKWARD COMPATIBILITY notes below.
  • Select CHOP - Fixed recursion crash with Select CHOP selecting a Select CHOP.
  • Stype CHOP - Changed the Stype default values for pawidth and paheight to 10 instead of 0 so that the Stype TOP has a valid output by default.
  • Stype CHOP - Added a 'connected' channel and a new warning message to indicate when valid packets are being received.
  • OP Find DAT - Do callbacks regardless of whether node is used by other nodes.
  • Parameter Execute DAT - Fixed unresponsiveness after creation from opplace.
  • Text SOP - Fixed disappearing text bug.
  • Actor COMP - Fixed issues with collision shape not updating when 'Update Collision Shape' parameter is On.
  • Camera COMP - Changing display options in the viewer no longer causes parameters to be overwritten.
  • Camera COMP - Fixed crash when the last quad projection point is out of bounds.
  • Nvidia Flex Solver COMP - Fixed smoothing.
  • Light COMP - Fixed shadow maps not working when Phong MAT was outputting to extra color buffers in some cases.
  • List COMP - Now supports same set of fonts as Text TOP.
  • Binding optimization, only update bind values if parameter is in Bind mode.
  • Privacy - Allow dragging of components out of private components, if allowed by the private component.
  • Matrix Class - Fixed matrix being created with old data occasionally when built from a non-cooking OP.
  • During crashfile saving, avoid Execute DAT Pre and Post Saves.
  • Fixed soft-locking of nodes opplaced out of private components.
  • Fixed sequential parameters loading of more than 40 channels ie. Constant CHOP with more than 40 channels.
  • Fixed panel rollover/rollu/rollv updating during drags over other components.
  • Fixed erratic layout when dealing with uninitialized scroll bar areas.
  • Preserve docked nodes when reinitializing external components, changing operator types, replicantion etc.

Backward Compatibility[edit]

BACKWARD COMPATIBILITY - Script CHOP now saves/loads contents from toe file. Always clear channels at the beginning of your script if needed, otherwise it will now retain previous results.


Build 2020.24520 - Jun 17, 2020[edit]

New Features[edit]

  • Notch TOP - Notch TOP is now enabled for TouchDesigner/TouchPlayer Commercial and Educational licenses. A Commercial/Educational license will run up to 2 Notch TOPs at 1920x1080 resolution. For unlimited Notch TOPs at any resolution, use TouchDesigner/TouchPlayer Pro licenses.
  • Video Device In TOP - DirectShow support improved, should now support many more devices and allow their resolution to be set via Signal Format menu (previously resolution settings were only available when using Media Foundation). Enables use with the new Webcam Utility for DSLRs for example.

New Python[edit]

  • OP.tags now refresh expressions that access tags properly.
  • Panes.current now re-updates expressions on change.

Bug Fixes and Improvements[edit]

  • NDI - Upgrade to NDI 4.5
  • Kinect Azure TOP - Updated sensor sdk to version 1.4.0 and body tracking sdk to 1.0.1
    • Added a parameter to indicate the sensor orientation to improve body tracking results.
    • Fixed a bug with changing which GPU the body tracking was running on.
  • Level TOP - Fixed node not working correctly with RG textures.
  • Ouster Select TOP - Fixed a cooking bug when the parent Ouster node was not used directly.
  • Substance TOP - Added an automatic conversion from sRGB to linear colorspace (effecting basecolor).
  • Substance TOP - Added new parameter to invert the normal map coming from the sbsar file. Normal maps for DirectX vs openGL are inverted, so sbsar materials that were exported for DirectX application will often have the normal map inverted for TouchDesigner usage.
  • CPlusPlus TOP / Custom Operators - Add ability to vertically flip image coming in via CPU memory using TOP_GeneralInfo.memFirstPixel
  • MIDI In CHOP - When using simplified output, channels are now listed in the order they are created rather than sorted by number.
  • MIDI In CHOP - Added new parameter to sort automatically generated channels.
  • Movie File In TOP - Fixed BC7/BC6 .dds files not loading correctly.
  • NDI Out TOP - Fixed artifacts that occur usng 16-bit format and the input signal has pixels outside the 0-1 range.
  • NDI Out TOP - Fixed crash that can occur when using audio output.
  • Timer CHOP - Fixed onSegmentExit() calls during gotos in Parallel mode.
  • OP Find DAT - Fixed Incremental updates.
  • OP Find DAT - Fixed depth calculation when using nested wired operators.
  • SocketIO DAT - Fixed crash with emit() method.
  • XML DAT - Added support for single or double quotes.
  • Engine COMP - Numerous tweaks and improvements
    • Correctly report an error if parameter binding errors prevent loading.
    • Fixed issue which caused custom toggle parameters to be ignored in some circumstances.
    • Fixed issue which could cause Ins and Outs to be wrongly ordered.
    • Added support for parameter menus.
  • Fixed cases where Nvidia GPU isn't detected on AMD/Nvidia mixed laptops.
  • Fixed @group syntax in operator parameters.
  • Fixed crash with self-deleting nodes when saving.
  • Fixed crash with tag dependency on deleting nodes.
  • Fix disconnected inputs during undo/redu from COMP.copy method.
  • Old Installer features re-implemented /Extract: extract the installer to /DIR or if not specified parallel to itself. Optional /Extract-full will include all vsredistributables, universalCRTs and KBUpdates.


Build 2020.23680 - May 20, 2020[edit]

New Features[edit]

New Windows Installer

  • Greatly speeds up the install/uninstall procedure over the old installer.
  • Supports installation of multiple builds at the same time. Select which build to update 'over' when installing a new build.
  • Ability to add custom tag names to your builds such as TD Official or TD Experimental or Project XYZ for easy identification.
  • Lite Installer (~540MB) available if you do not need Kinect Azure support which is included in the Full Installer (~840MB), save time and space.
  • Read more about Installation options here.

Major Feature Addition

  • Video Stream In TOP - Added 'Hardware Decode' parameter which enables Nvidia's hardware encoders for decoding incoming video streams (requires Nvidia GPU, Windows only).
  • Video Stream Out TOP - Added new parameters to control 'Keyframe Interval' and 'Audio Bit Rate'.
  • Blob Track CHOP - This new CHOP tracks blobs in 2D point data and is useful for getting the position of moving objects in the field of a scan, with optimizations for handling occlusions. Input data should be x and y channels describing the 2D points in Cartesian coordinates. This is ideal for data from the output of devices like the Hokuyo CHOP and can also be used with Ouster scanners when looking at single slices. Have a look at its OP Snippets.
  • MIDI In CHOP - New 'Reset Channels' and 'Reset Values' parameters to clear the channels in the CHOP or clear their values. Akin to the OSC In CHOP.
  • Actor COMP - Added parameters 'Position Feedback TOP' and 'Velocity Feedback TOP' to override position and velocity data in Nvidia Flex simulations.
  • Field COMP - Added a 'Allow Multi-Line' parameter (default on) to control if input fields are constrained to single line or not.

New Palette[edit]

New Python[edit]

  • Project Class - Added windowOnTop, windowStartMode, windowDraw, windowStartWidth/Height/X/Y, performOnStart, and performWindowPath members.
  • Project Class - Added applyWindowSettings() method.
  • UI Class - Added windowHeight/Width and windowX/Y members.
  • UI Class - Added findEditDAT to retrieve node from system editing filepath.
  • Par.enableExpr now handles boolean expressions properly (Example: me.children, [1,2,3], etc)
  • ParCollection Class - Can now access parameters via subscript assignment operators. Example: op('base').par['MyFloat'] = 3.5 which is about 15x faster than using OP.pars.

Bug Fixes and Improvements[edit]

  • Actor COMP - Fixed usage of instancing parameters when used as a Flex Fluid Emitter.
  • Bullet Solver COMP - Fixed a memory leak.
  • Blur TOP - Fixed crash when 'Type' menu was set to a negative value.
  • Cache TOP - Fixed cases where 'Replace Index' wouldn't work on some input TOPs if attempted multiple times in the same frame.
  • Fit TOP - Fixed the 'Transform Order' parameter which wasn't working.
  • Kinect Azure TOP / Kinect Azure Select TOP - Changed the internal upload texture format for the depth and point cloud images to improve performance.
  • Movie File Out TOP - Better error messages when Nvidia Encoder fails to initialize.
  • Movie File Out TOP - Tweak for H.265 to fix failing to record on some Nvidia driver versions.
  • NDI In TOP - Fixed issue where interlaced content would jitter vertically.
  • Text TOP - On macOS when using the default 'Display Method = Automatic', use bitmap now as too many incompatibilities found with polygon fonts.
  • Video Stream In TOP - Fixed an issue which could cause the Video Stream Out TOP to stop working.
  • Video Stream Out TOP - Fixed RTMP output to YouTube not working if audio is not provided.
  • Web Render TOP - Now supports popups for shared textures & iosurfaces.
  • Web Render TOP - Fixed some crashes and now works properly with Global Resolution Multiplier.
  • Clip SOP - Fixed a bug interpolating point attributes when clipping open polygons.
  • DMX In CHOP - Start codes now default to 0.
  • MIDI Out CHOP sendControl() - Fixed normalization of values when CHOP controller format set to 14 bits.
  • MIDI Event DAT - New option '14 Bit Values' which logs 14 bit controller values.
  • Panel Execute DAT - Added oldValue argument to onValueChange callback.
  • Serial DAT - Fixed lost/delayed messages when frames dropped.
  • Added 'pending_messages' to communication DAT's info.
  • Added 'Delete Parameter' menu option and Par.destroy() for sequential parameters (Subsequent parameter values are shifted up).
  • XML DAT - Support space after tag name ie. <name />
  • XML DAT - Don't expand/escape contents within double quotes.
  • Palette:kantanMapper fixes
    • Fixed KantanMapper loading with some parameters of shapes being lost.
    • Added ability to drag TOPs directly onto shapes without having to do it via the Texture Parameter.
  • Fixed bad parent shortcut in Palette's SymbolPicker.
  • Fixed issue when trying to decode NotchLC codec while using Video Device Out TOP's GPU Direct feature.
  • Fixed CUDA conflict that would occur when using Nvidia Flex with other CUDA enhanced features such as hardware encoding or Kinect Azure.
  • Fixed crash when GLSL TOP deleted during Replicator update. (Widgets)
  • Fixed disappearing/flashing cursor that sometimes occured when using middle-mouse value ladder to adjust values.
  • Fixed recently missing createFolders option in COMP.save() method.
  • DAT Class - Fixed incorrect data being added to the start of strings when using the .text member on a DAT that had table data.
  • moviefileinTOP Class - .isOpening member should give better results now.
  • Fixed a number of panel Scrollbar issues
    • Fixed a shift contents upwards when horizontal scrollbar enabled.
    • Better handling of 'Auto On'
    • Fixed 'Thumb Fraction' when both on.
    • Fixed behavior when using 'Ignore Parent Alignment' options.
  • Fixed an issue when Verdana font was not installed on Windows system.
  • Fixed an issue with the Customer Startup File preference not loading the specified file.
  • Fixed a crash that could occer when editing DATs.
  • Fix for black textures in OP Create Dialog caused by invalid Global Resolution Multiplier preference. Now it is set to 1x if preferences are out of range.
  • New OP Snippets for Blob Track CHOP, Movie File Out TOP, Text TOP, Web Server DAT, Window COMP
  • Substantial updates to Python help documents.
  • EULA updated


Build 2020.22080 - Apr 10, 2020[edit]

New Features[edit]

Tools for Streaming

  • NDI Out TOP / NDI In TOP - The NDI TOPs are now available when using Non-Commercial licenses of TouchDesigner. This technology will enable anyone to send a TouchDesigner TOP with audio to streaming social services such as YouTube, Zoom, Slack, Skype and more. Check out this new Blog describing the workflow here: Broadcasting to Social Media from TouchDesigner
  • Video Stream Out TOP - Added RTMP support giving ability to stream out to services that ingest RTMP, such as Twitch, Mixer, YouTube, Facebook, and more.

Major Feature Addition

  • Nvidia Flex - Added support for Nvidia Flex which is a particle-based physics simulator that uses a unified particle representation for all object types. All bodies in a simulation (with the exception of static shapes/surfaces) are composed of particles. Their behavior in the simulation will be defined by the type of substance: rigid, soft, fluid, rope, cloth. Because all bodies in a Flex simulation are represented by particles, all substances can be simulated together seamlessly without the need for multiple solvers. Requires Nvidia GPU on Windows.
  • TouchDesigner's support for Nvidia Flex includes:
    • Nvidia Flex Solver COMP - A new solver component that runs the Nvidia Flex simluation.
    • Nvidia Flex TOP - A new TOP that can grab the simulation data from an Actor COMP and make it available in TOPs.
    • Actor COMP / Force COMP - Changes were made to these components so they work for Nvidia Flex and Bullet Solver COMPs.
    • Actor COMP - Added 'Triangle Collision Direction' and 'Update Collision Shape' parameters for static Flex shapes.

Device Support

  • Kinect Azure CHOP - Added support to output skeleton joint positions in 2D depth or color image space.
  • Laser CHOP - Added 'Frame Start Pulse' parameter which when enabled will insert a sample with all colors set to -1 at the beginning of the laser frame.

New Palette[edit]

  • TDAbleton - Major update to version 1.23
    • Auto-Installer - On the Utilities page, you will find settings for automatically installing TDAbleton. This copies all files and sets up the user folder in Ableton. Notes: You must run this install with Ableton Live closed. You still have to select the TouchDesigner Remote Script in Ableton Preferences the first time you run TDAbleton. If you just installed Live, you must run it once and close it before installing TDAbleton so that default preferences are set up.
    • Bindable Ableton Parameters - All the parameters for navigating the Live Object Model are now bindable. Bind them to or from any menu parameter and the proper navigation parameters will be set up in the bound menus. Example: /project1/Demo/parameterBinding in demo
    • Level Devices in Master and Send Tracks - Fixed bug where abletonLevel devices didn’t send properly from Master and Send tracks.
    • TDAbleton Master Max Device - Ableton now displays its IP address here for easier setup. There is now an on/off switch on the device to control master time transmission.
    • abletonValueListener upgrades - Now has outputs with Live Object Model info and value string text for parameters. Added Follow Selection parameter modes that track selected objects in Ableton Live UI. Added Select LOM Object pulse which will select the object pointed to by abletonValueListener in Live’s UI. Example of New Outputs: /project1/Demo/abletonValueListener2 in demo
    • abletonSong upgrades - Now has Tempo tap/nudge and Record Mode controls.
    • abletonMIDI and abletonMapper now work in chains - Added navigation parameters so that the associated Max devices work in device chains.
    • Utilities Parameter Page - Log parameters and Update Ableton Comps are now on the Utilities parameter page of the tdAbleton component. The Ableton Log itself will automatically update and can be cleared with a button in the viewer.
    • Bindable Ableton Macros - Similar to Bindable Ableton Parameters above, binding to Rack and Level macros will keep the parameter labels in sync. If you change a label of a par bound to a Rack or Level macro manually, your label will not be kept in sync.
    • Master Parameters Bound to Package - All TDAbleton master parameters are now available at the top level of the package via binding.
    • Connection Notification - Added popup to indicate when not connected. No longer starts with error marker if no Ableton Live is found.
    • Cook optimizations - Reduced number of nodes that are constantly cooking.
    • Bug Fixes - The autofix code for fixing duplicate names in Live are working in many cases where they preciously did not. Eliminated textport spam when TDAbleton is deleted and when Jump to Cue is invoked. abletonMIDI now shows device on/off state correctly.
  • Palette:firmata - Overhauled
    • Bottom-up rebuild of firmata component.
    • Saves configuration and uploads it to firmata.
    • Proper servo configuration.
    • Added sampling interval setting.
  • Palette:pointMerge - New component added to the PointClouds folder which packs the pixels of two input images into a single output image.
  • Palette:pointRepack - New component added to the PointClouds folder which can be used rearranges the pixels of the input image to fit into an output image of a given size.
  • Palette:pointTransform - Now has 'Post' page mimicking the Transform SOP's Post page.
  • Widgets - This version fixes some issues with widget caching for knobs and sliders, and fixes the parameter order for String Field sub-widget which was reversed.

New Python[edit]

  • COMP.save(password=None) / COMP.loadTox(password=None) methods now have optional password to encrypt/decrypt tox files to disk. Unlike Component privacy, this only applies to the disk file itself, not its operation once inside the network.
  • COMP Class.saveExternalTox(recurse=False, pasword=None) -> count - Saves out the contents of any COMP referencing an external .tox and returns the number of components saved. If password is supplied it is used to encrypt the resulting disk files.
  • kinectazureTOP Class - Added transformWorldToColorImage() and transformWorldToDepthImage() methods to convert 3D world space positions to 2D image space UVs.
  • MqttclientDAT Class.subscribe() - Added support for subscribing to multiple topics at once.
  • MqttclientDAT Class.unsubscribe() - Added support for unsubscribing to multiple topics at once.
  • Added changeParStyle to TDFunctions.

Bug Fixes and Improvements[edit]

  • Actor COMP - Fixed 'Update Collision Shape' so that collision shapes will be updated when instance scale parameters change.
  • Substance TOP - Upgraded to Substance SDK v7.2.9
  • Nvidia Flow TOP - Now include memory used by Flow in TOP's reported 'Total GPU Mem'.
  • Nvidia Flow TOP - Fixed an issue when multiple shapes were used for colliders/emitters.
  • Video Device Out TOP - Fix poor behavior when using Quad Link outputs with AJA devices.
  • Video Device Out TOP - Fixed AJA device crash.
  • Bind CHOP - When drag and dropping a channel from a Bind CHOP onto a parameter, the menu now uses bind instead of expression options.
  • Copy CHOP - Fixed some issues with stamping here and added copyIndex member.
  • MIDI In CHOP - 'Simplified Output' now uses its rate parameter correctly.
  • Mouse In CHOP - Fixed keystrokes interfering with x,y value channels.
  • Transform CHOP - Fixed 'Input Operation' loading up with incorrect value from files saved in the 2019.30000 series experimental builds.
  • Transform SOP - Added 'Post Transform Order' parameter.
  • Parameter Execute DAT - prev value for momentary parameters is now True or False, not 'on' or 'off'. Backward Compatibility as DATs that used to monitor previous values of custom momentary parameters need to be adjusted.
  • SocketIO DAT - Fixxed a crash when receiving events with no message.
  • WebclientDAT Class.request() - Changed data keyword so it will also accept a string.
  • Fixed Binding not triggering data changes to Parameter OPs.
  • Fixed network pane jumping when trying to enter an Engine COMP or private component.
  • Fixed some panel layout issues.
  • Fixed erratic dragging of panel edges.
  • Fixed crash when removing tags in custom UI.
  • Fixed possible crash when drawing windows on macOS.
  • Fixed crash when accessing new floating pane ratio.
  • Fixed soft shadow Softess tied to camera near-plane.
  • TOP viewers now use nearest pixel filtering when in Normalized Split mode.
  • Fixed Realtime flag in unser interface reporting incorrect state.
  • Fixed an issue where the rewind button would reset to frame 2, not 1.
  • Fixed some bugs related to pasting values onto parameters.
  • Improved a number of error messages to be more informative.

Backward Compatibility[edit]

BACKWARD COMPATIBILITY - Parameter Execute DAT prev value for momentary parameters is now True or False, not 'on' or 'off'. DATs that used to monitor previous values of custom momentary parameters need to be adjusted.


Build 2020.20625 - Mar 09, 2020[edit]

New Palette[edit]

  • Widgets improvements
    • Using the lister with a DAT for data storage has been greatly improved. Look at the example found in snippets for reference.
    • The reference for the external configuration component has been improved when dragging off the palette and will automatically create a new configuration component that is docked to the widget.

New Python[edit]

  • COMP.copy(includeDocked = True) new keyword to include any externally docked operators to the source component.
  • Par Class.order - Added support for built-in parameters.
  • DAT Class.save() - Fixed usage of append keyword.

Bug Fixes and Improvements[edit]

  • Fixed UI flashing issue on macOS when using floating windows in some cases.
  • Fixed frame rate slowdown when opening OP Snippets.
  • Geometry COMP - Fixed very long cook times introduced in 2019.30000/2020.20000 series builds.
  • Analyze TOP - Fixed macOS shader compiling bug when using the 'Average' operation.
  • Movie File In TOP - Fixed crash that occurs when playing back Hap files with 'High Performance Read' enabled.
  • Notch TOP - Fixed Notch block GPU mem usage not being cleared when active pararmeter disabled.
  • OpenColorIO TOP - Fixed CDL Transforms when there is no active Color Space transform.
  • Reorder TOP - Fixed parameter label typo.
  • Video Device Out TOP - Fixed issue where Fill/Key wouldn't work on higher framerate outputs.
  • Web Render TOP - Added a 'Reload Source' pulse to reload the original url/data specified.
  • Helios DAC CHOP - Updated to Helios SDK v7, fixed issue where connecting a USB device might disconnect the Helios device.
  • MIDI In CHOP - Fixed device and file parameter enable states.
  • Mouse In CHOP - Fixed mousewheel not updating while any field had focus.
  • OSC Out CHOP - Fixed crash that can occur when a 0 channel input is connected.
  • Transform CHOP - Fixed 3x3 matrix inputs not working.
  • TOP to CHOP - Fixed incorrect sampling in some cases.
  • File Out DAT - Added 'Close File after Write' parameter.
  • OSC In DAT - Fixed bug that broke 'Address Scope' functionality.
  • DAT Class.save() - Fixed usage of 'append' keyword.
  • Line MAT improvements
    • Fixed picking custom attributes not working.
    • Fixed 'Vectors' being scaled incorrectly.
    • Fixed issue where geometry could render with wrong transform if a Line MAT had all options 'Off'.
  • CUDA - Fixed up CudaTOP sample code a bit. Now links with the shared cudart, and compiles for more shader models.
  • Muliple MIDI devices of the same name are now handled properly. Please select adjusted names in the MIDI Device Mapper in this case.
  • Fixed issue where building a SOP with more than 16 attributes would cause a crash.
  • Fixed filename.Settings.json not working correctly in some cases.
  • Optimized pulse parameters that had binding or expressions that were not time-dependent.
  • Palette:stoner - Selecting a gridwarp point did not deselect previously selected point.
  • Palette:particlesGpu - Fixed preset, camera, and texture issues reported.


Experimental Builds 2019.30000 - Jan 30, 2020[edit]

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


Official Builds 2019.10000 and earlier - Nov 27, 2019[edit]

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

Each SOP has a list of Points. Each point has an XYZ 3D position value plus other optional attributes. Each polygon Primitive is defined by a vertex list, which is list of point numbers.

The Graphics Processing Unit. This is the high-speed, many-core processor of the graphics card/chip that takes geometry, images and data from the CPU and creates images and processed data.

An Operator Family that creates, composites and modifies images, and reads/writes images and movies to/from files and the network. TOPs run on the graphics card's GPU.

An Operator Family which operate on Channels (a series of numbers) which are used for animation, audio, mathematics, simulation, logic, UI construction, and many other applications.

The width and height of an image in pixels. Most TOPs, like the Movie File In TOP can set the image resolution. See Aspect Ratio for the width/height ratio of an image, taking into account non-square pixels.

(1) A Geometry Component can render its SOP geometry many times using CHOP samples, DAT rows, TOP pixels or SOP points, (2) An instance is an OP that doesn't actually have its own data, but rather just refers to an OP (or has an input) whose data it uses. This includes Null OPs, Select OPs and Switch OPs.

An Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a command Script, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.

(1) The TouchDesigner window is made of a menu bar at the top, a Timeline at the bottom, plus one of a choice of Layouts in the middle. A Layout is made on one or more Panes, each Pane can contain a Network Editor, Viewer, Panel, etc. See Pane and Bookmark. (2) Nodes in a network are arranged using Layout commands in the RMB menu.

To pulse a parameter is to send it a signal from a CHOP or python or a mouse click that causes a new action to occur immediately. A pulse via python is via the .pulse() function on a pulse-type parameter, such as Reset in a Speed CHOP. A pulse from a CHOP is typically a 0 to 1 to 0 signal in a channel.

Strictly refers to a window in Microsoft Windows. User-created windows are made with Panels inside Window Components, aside from the TouchDesigner editor window and its dialogs.

An Operator Family that reads, creates and modifies 3D polygons, curves, NURBS surfaces, spheres, meatballs and other 3D surface data.

Binding is a Parameter Mode that ties two or more values together, where changing the value of any one of the bound values changes all of them. The actual value is stored in one place, whichever value is at the top of the bind chain, called the bind master. Parameters can be bind references, bind masters, or both. Table cells and bindCHOP channels can be bind masters only.

An Operator Family that contains its own Network inside. There are twelve 3D Object Component and eight 2D Panel Component types. See also Network Path.

TouchDesigner Component file, the file type used to save a Component from TouchDesigner.

Any of the procedural data operators. OPs do all the work in TouchDesigner. They "cook" and output data to other OPs, which ultimately result in new images, data and audio being generated. See Node.

A CHOP outputs one or more channels, where a channel is simply a sequence of numbers, representing motion, audio, etc. Channels are passed between CHOPs in TouchDesigner networks. See also Export.

The term "Frame" is used (1) in the Timeline, (2) as a time-unit in CHOPs, (3) as a time-unit in TOPs, and (4) with movies images which are read and created with TOPs.

A Link.

The frame rate that TouchDesigner's Timeline uses. Equal to the Frames per Second value project.cookRate.

An Operator Family that associates a shader with a SOP or Geometry Object for rendering textured and lit objects.

A 3D viewport for viewing and manipulating 3D scenes or objects interactively. A geometry viewer can be found in Panes (alt+3 in any pane) or the Node Viewers of all Geometry Object components.

A 3D viewport for viewing and manipulating 3D scenes or objects interactively. A geometry viewer can be found in Panes (alt+3 in any pane) or the Node Viewers of all Geometry Object components.

An Operator Family that contains its own Network inside. There are twelve 3D Object Component and eight 2D Panel Component types. See also Network Path.

TouchDesigner's original built-in Command scripting language prior to Python.

A built-in panel in TouchDesigner that contains a library of components and media that can be dragged-dropped into a TouchDesigner network.

Unicode is fully supported in TouchDesigner. Unicode can be typed into parameters, DATs, Python scripts etc. Unicode encoded text files can be loaded into DATs. File paths can include any unicode character that is legal for a file path.

An Operator Family that associates a shader with a SOP or Geometry Object for rendering textured and lit objects.

Information associated with SOP geometry. Points and primitives (polygons, NURBS, etc.) can have any number of attributes - position (P) is standard, and optional are normals (N), texture coordinates (uv), color (Cd), etc.

Mode where the network editing window is not open, your performance interface window(s) is open and you are running your application as fast as possible. See Designer Mode.

To re-compute the output data of the Operators. An operator cooks when (1) its inputs change, (2) its Parameters change, (3) when the timeline moves forward in some cases, or (4) Scripting commands are run on the node. When the operator is a Gadget, it also cooks when a user interacts with it. When an operator cooks, it usually causes operators connected to its output to re-cook. When TouchDesigner draws the screen, it re-cooks all the necessary operators in all Networks, contributing to a frame's total "cook time".

A Time Slice is the time from the last cook frame to the current cook frame. In CHOPs it is the set of short channels that only contain the CHOP channels' samples between the last and the current cook frame.

A set of commands located in a Text DAT that are triggered to run under certain conditions. There are two scripting languages in TouchDesigner: Python and the original Tscript. Scripts and single-line commands can also be run in the Textport.

A polygon is a type of Primitive that is formed from a set of Vertices in 3D that are implicitly connected together to form a multi-edge shape.

A polygon is a type of Primitive that is formed from a set of Vertices in 3D that are implicitly connected together to form a multi-edge shape.

The generic thing that holds an Operator, and includes Flags (display, bypass, lock, render, immune) and its position/size in the network. Whether you "lay down an Operator" or "lay down an Node", you're doing the same thing.

TouchDesigner is a hierarchy of components. "root" is the top-most network in the hierarchy. The Path is simply /. A typical path is /project1/moviein1.

The operating system's holder of files and other folders (directories). It does not refer to operators within TouchDesigner. See Network Path.

A frame within the Animation component which holds a channel value, slope, acceleration and interpolation type, used to determine the values of the channel which are not keyframes.

OP Snippets is a set of numerous examples of TouchDesigner operators, which you access via the Help menu. These can be copied/pasted into your projects.

Lets you embed files inside a .tox or .toe file. Operators like the Movie File In TOP that read regular files can also read the embedded VFS files using a vfs: syntax.

Parameters in TouchDesigner are an operator's settings (numbers, menus, flags, strings, paths) which the user can alter. Parameters for any operator can be opened by right-clicking on the operator and selecting "Parameters..." A currently selected operator's parameters can be viewed in a Network Editor by pressing the keyboard shortcut 'p'.

Creates a new component for every line in a table. Unlike Clone, it automatically creates copies of a master component.

Any floating window that is not a Pane or Viewer.

The component types that are used to render 3D scenes: Geometry Component contain the 3D shapes to render, plus Camera, Light, Ambient Light, Null, Bone, Handle and other component types.

Unlike a Wire that connects nodes in the same Operator Family, a Link is the dashed lines between nodes that represent other data flowing between nodes, like CHOP Exports, node paths in parameters, and expressions in parameters referencing CHOP channels, DAT tables and other nodes.

A parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator.