Release Notes/099/2019.30000 Experimental

From TouchDesigner Documentation
Jump to: navigation, search


Download Here for the latest build in this branch.

Build 2019.37020 - Jan 30, 2020[edit]

New Features[edit]

  • FBX COMP - Added 'Import Scale' parameter.
  • Nvidia Flow Emitter COMP - Added Collider to the 'Mode' menu which turns the emitter into a collision object.
  • Nvidia Flow Emitter COMP - 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.
  • Nvidia Flow TOP - Added input for compositing Flow render over the input, uses depth buffer if input is a Render TOP.
  • Shared Mem In COMP - Added 'Memory Type' parameter to choose between Global or Local.
  • CHOP to TOP - Added option to make a Square Texture.

New Palette[edit]

  • Widgets - Updated widget kit.
    • 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.

Bug Fixes and Improvements[edit]

  • Oculus Rift - Updated to SDK v1.43.0
  • Fixed startup crash that that was occuring on Intel GPUs with the newest drivers. (Often ones installed via Windows Update)
  • CPlusPlus TOP - Added example for using signalled producers in the CPUMemoryTOP example.
  • GLSL TOP - Vector parameter defaults should be (1,1,1,1) not * (1,0,0,0).
  • Cross TOP - BACKWARDS 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.
  • Video Device Out TOP / Video Device In TOP / Audio Device In CHOP - Improvements to handling SDI audio with AJA and Blackmagic devices.
  • Geometry COMP - Fixed layout when adding parameters to Instance 3 parameter page.
  • FBX COMP - Geometry nodes inside the FBX COMP are now set to pickable by default when imported.
  • Phong MAT - Fixed issue where Environment Maps wouldn't work correctly.
  • Sphere SOP - Removed the upper limit on polygon frequency.
  • 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.
  • 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.
  • SocketIO DAT - Fixed sending of multiple arguments.
  • Engine COMP - Fixed some memory leaks affecting input textures.
  • Engine COMP - Fixed error loading a .tox with a space in the filename.
  • 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.
  • 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.
  • Some fixes and improvments to parameter layouts.
  • Fixed some floating windows from opening too large to fit onscreen.
  • Crash avoidance during splash screen display when other popups arise.
  • 099 suffix removed in some places such as executable names. Simply 'TouchDesigner' and 'TouchPlayer' now.


  • BACKWARDS COMPATIBILITY WARNING - 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.
  • BACKWARDS COMPATIBILITY WARNING - 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 2019.36500 - Jan 17, 2020[edit]

New Features[edit]

  • 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).
  • Kinect Azure CHOP added features and improvements. As the Microsoft Kinect Azure SDK is in beta and changing rapidly, we will continue to upgrade to the latest to offer the most up to date features.
    • Upgraded to version 0.9.5 of the body tracking library.
    • Added support for multiple body tracking devices on one computer.
    • Added parameter to control which GPU computes the body tracking and added a function to get the physical GPU name (Nvidia GPU only).
    • Added multi-threaded CPU support for body tracking (in cases where the Nvidia CUDA GPU tracking can't be used).
    • Corrected spelling of "naval" bone to "navel".
  • Shared Memory OPs - Now working on macOS.
  • Geometry COMP - Instance can now have a maximum of 12 Custom Attributes instances, up from 4 previously.
  • 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.
  • Point SOP - Added "Width (Line MAT)" parameter to control a point's width when rendered with a Line MAT material.
  • 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.
  • Video Device In TOP - Ximea cameras now report a temperature via the Info CHOP.
  • Perform DAT - Added callback for when performance log is triggered. Made it log on successive triggers while it is active.
  • Web Server DAT - Added onWebSocketReceivePing() and onWebSocketReceivePong() callbacks.
  • WebSocket DAT - Added onConnect() and onDisconnect() callbacks.
  • Math TOP - Added "Linear to sRGB" and "sRGB to Linear" options.
  • Notch TOP - BACKWARDS COMPATIBILITY - 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.
  • Ouster TOP - BACKWARDS COMPATIBILITY - Updated commands to work with protocol changes in the v1.13 firmware. Configuration will no longer work correctly on hardware with older firmware. By default, Ouster now sends lidar data to the IP address where the configuration commands came from. Requires Ouster v1.13 firmware.
  • Cube Map TOP - BACKWARDS COMPATIBILITY ISSUE - 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.
  • Add SOP - BACKWARDS COMPATIBILITY - Removed per point 'Use' toggles, now a single 'Add Points' toggle controls using of all defined points.
  • Expression CHOP - BACKWARD COMPATIBILITY - 'Number of Expressions' parameter removed, now based on size of sequence. Issue if this value is dynamically changed.
  • Line MAT - BACKWARDS COMPATIBILITY - 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 (NOTE: based on what the hardware supports).

New Palette[edit]

  • Palette:kantanMapper - Fixed a number of bugs.
    • Alpha on rectangle textures was not being used.
  • 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.
  • 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.
  • Widgets updated with numerous improvements and bug fixes from your feedback.
  • 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

New Python[edit]

  • TDJSON updated and bugs fixed.
    • Added a deserializer TDData function to TDJSON.
  • Par.cloneImmune - Protects values from master syncing.
  • Par Class help - Returns the description for the parameter.
  • KinectazureTOP Class.getRemapTransform(src, target) - Returns the transformation matrix to remap points between different devices spaces.
  • 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.isFileOpening returns true while the file header is still being read.
  • windowCOMP Class - setForeground(), add 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().
  • WebserverDAT Class - Added webSocketSendPing() and webSocketSendPong() methods.
  • 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.

Bug Fixes and Improvements[edit]

  • macOS - Minimum required version is now 10.12 macOS Sierra.
  • NDI - Upgraded to NDI 4.1
  • OpenColorIO TOP - Upgrade SDK to v1.1.1
  • RealSense - Upgraded to 2.31.0. The is reported to fix the memory leak (Windows only).
  • Blur TOP - Fixed issues with this node not giving correct blur for non-square images.
  • CHOP to TOP - Enabled 'Custom Resolution' options to specify specifc resolutions of the TOP.
  • Notch TOP - Fixed transform conversion of exposed transform parameters.
  • Kinect Azure TOP - Fixed a bug that caused the player index map to flicker with multiple players.
  • Kinect Azure TOP - Fixed a bug that showed the color camera instead of the IR camera.
  • Kinect Azure TOP - Fixed bugs when using multiple cameras in master/subordinate modes.
  • Point File In TOP - Changed channel loading priority for EXRs so that XYZ is loaded before RGB if no channel order is defined.
  • Point File In TOP - Added .fits (FITS) and .ply file support for macOS.
  • Movie File Out TOP - 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.
  • 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.
  • Limit TOP - Added support for independent minimum and maximum functions.
  • Limit TOP - Output is set to the middle of the normalize range when the input is a constant value.
  • 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.
  • 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.
  • Actor COMP - Fixed texture instancing crash.
  • Blend COMP - Fixed rotation blending not working in some cases when 3 or more inputs were connected.
  • Audio Oscillator CHOP - Fixed the Reset input only resetting based on the first channel.
  • Transform CHOP - Fixed backwards compatibility issue with output selection.
  • Transform CHOP - Fixed loading issue for files coming from older builds if the 'Invert' parameter was used.
  • Join CHOP - Fixed this node not giving correct results.
  • Timer CHOP - Fixed auto start when onInitialize() callback returns delayed initialize.
  • Timer CHOP - Force a ready pulse whenever start is re-pulsed.
  • Alembic SOP - Added 'FPS' parameter.
  • Folder DAT - Fixed case where relative path results were incorrect when the 'Root Folder' parameter had trailing slashes in it.
  • Sort DAT - Unique output optimized: 3000 rows from 2 sec to 10 msec.
  • Web Server DAT - Improved cook times for WebSockets.
  • 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.
  • Binding - Fixed recently broken binding to DAT cells.
  • Fixed drag-n-drop of multiple nodes not executing onCreate() scripts in reliable order.
  • Fixed 'Children Cook Times' not updating in the middle click pop-up info on COMPs.
  • Fixed slow memory leak when using ipar expressions.
  • Fixed crash when repeatedly deleting complex components.
  • 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.


  • BACKWARDS 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.
  • BACKWARDS 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.
  • BACKWARDS COMPATIBILITY ISSUE - 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.
  • BACKWARDS COMPATIBILITY - Add SOP - Now a single 'Add Points' toggle controls using of all defined points.
  • BACKWARDS COMPATIBILITY - Expression CHOP - 'Number of Expressions' parameter, could cause an issue if this value is dynamically changed.
  • BACKWARDS 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).
  • BACKWARDS 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.

Build 2019.33840 - Nov 13, 2019[edit]

New Features[edit]

  • Limit TOP - New TOP based on the Limit CHOP that can clamp, normalize and quantize images. Uses spacial (position) quantization.
  • Kinect Azure TOP - Added parameters for available color controls exposure, brightness, white balance, etc. (Note: There appear to be SDK bugs with exposure and gain settings).
  • Kinect Azure TOP - Added option to use the CPU for body tracking (Note: very slow).
  • Kinect Azure CHOP - Added new hand, handtip and thumb joints now available via Microsoft's SDK update.
  • Kinect Azure CHOP - Added new parameter 'Bone Confidence' to enable bone confidence channels.
  • Kinect Azure TOP / Kinect Azure Select TOP - Added support to capture both live and body-synced video streams at the same time.
  • Audio Device In CHOP - Added support for audio capture from Blackmagic Design and AJA devices.
  • Video Device Out TOP - Added support for audio out using AJA devices.
  • Point File In TOP - Added 'Active' menu option to create a mask of which pixels are valid points. Active is now the default for the alpha channel.
  • 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 / Movie File Out TOP / Point File In TOP - Channel order is now saved in the .exr header so that channels can be reloaded in the same order they were saved. Uses a non-standard header attribute.
  • Movie File In TOP - Added support for loading Pixel Aspect Ratio for .exr files. See also OpenEXR.
  • Movie File Out TOP - Added support for saving Pixel Aspect Ratio in .exr files.
  • Movie File In TOP - Added support to load .exr files with arbitrarily named channels.
  • Movie File Out TOP - Added parameters to give custom names to the RGBA channels in an .exr files.
  • Web Server DAT - Parse parameters from URI and add them to a dictionary stored under the 'pars' key in the request dictionary.
  • Engine COMP - Added Info DAT support to get the path to the TouchEngine binary being used.
  • Line MAT - "pscale" attribute added for points.
  • OP Execute DAT - Added new callback onCreate() which is called when the monitored operator is first detected.

New Palette[edit]

  • Updated most palette components to improve parameter naming and organization, network cleanup, and Binding to top level parameters.

New Python[edit]

  • Movie File In TOP - Added python functions to access header data.
  • Movie File In TOP - Added python function that returns a tuple with the available channel names in the file.
  • 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.
  • Optimized Expressions - OP.fetch() is now optimized in some cases.

Bug Fixes and Improvements[edit]

  • Kinect Azure TOP - Added frames and timestamps to the Info CHOP channels.
  • Kinect Azure CHOP - Added frame and timestamp channels.
  • Movie File Out TOP - Renamed additional input parameters from inputred0 to inputr1, inputgreen1 to inputg2, etc.
  • Light COMP - Viewer now uses 'Best Fit' to display the projection area without distortion.
  • Line MAT - Fixed flashing "width" attribute issue.
  • Line MAT - Fixed unexpected changing of points after changing the 'Near' parameter in a Camera COMP.
  • Line MAT - Node's viewer now uses the fixed near and far distances and does not get affected by "Distance Near/Far" parameters in Camera COMP.
  • Point File In TOP - Large point files will now load in cropped rather than distorted when using Non-Commercial licenses with the resolution limitation.
  • Point File In TOP - Now defaults to opening in 'normalized split' mode.
  • Numerous improvements to Point Cloud features and handling in viewers, homing and display etc.
  • Web Server DAT - BACKWARDS COMPATIBILITY ISSUE Request['data'] will always come in as a python bytes object instead of a string.
  • Web Server DAT - Fixed some freezes that could occur and other numerous small issues sending data.
  • Web Client DAT - Added an 'Upload File' parameter for the HTTP PUT requests.


BACKWARDS COMPATIBILITY - Web Server DAT request['data'] will always come in as a python bytes object instead of a string.

BACKWARDS COMPATIBILITY - The 'uri' key in the request dictionary will now only contain the uri path.

Build 2019.33020 - Oct 18, 2019[edit]

New Features[edit]

  • 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 main 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.
  • RealSense TOP - Updated to SDK 2.29.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'.
  • 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 only work with the demo version of Beyond. TouchDesigner Commercial or Pro is required to interface with licensed versions of Beyond.
  • Ouster TOP - New operator for real-time point cloud capture from Ouster lidar sensors.
    • 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 fields from the Ouster scanner.
  • Point File In TOP - Added support for converting shapes into point clouds when loading .obj files.
  • Point File Select TOP - New TOP to select additional channels from a Point File In TOP
  • Movie File In TOP - Added support for NotchLC codec.
  • Movie File In TOP / Point File In TOP - Added support to store and display header data in an attached Info DAT (currently supported in FITS and PLY files).
  • Movie File Out TOP - Major improvements for hardware encoding, audio channel support, and custom header data.
    • 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 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 files by attaching a Table DAT (currently only supports EXR sequences).
  • Video Device In TOP - Added support for GPU Demosaicing for Ximea cameras.
  • Video Device Out TOP - AJA devices can now sync to SDI inputs for their reference inputs.
  • NDI In TOP / NDI Out TOP - Upgrade to NDI 4.0 and added support for transmitting 16-bit data.
  • Custom Operators - Added support for 16-bit fixed and 16-bit float data to and from TOPs.
  • TOPs - Now support saving .tiff files with 16-bit image depth using RMB "Save Image" and python method if the 'Pixel Format' is set to 16-bit float.
  • GLSL MAT - Added TD AttenuateLight(int index, float lightDist); function.
  • Audio File Out CHOP - A new CHOP for recording and saving multi-channel audio files.
  • Timer CHOP - Added a third Play Mode called 'External CHOP Index' to drive current position of the timer using a CHOP channel.
  • LTC In CHOP - Added total_seconds channel and toggle parameters for frames, seconds, min channels.
  • 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.
  • Geometry COMP - Improvements
    • Now can calculate bounds when instancing from TOPs.
    • New 'Active' parameter available for instancing to control on a per instance basis if each instance should be shown in the render.
  • Geometry COMP / GLSL MAT - Added support for custom instancing attributes. For Geometry COMP this is found on the Instance 3 page.
  • SocketIO DAT - Fixed issues with connecting to non-secure servers (ie. http).
  • Web Server DAT - Additions and improvements.
    • Change Stop/Start pulse to instead be an 'Active' toggle and 'Restart' pulse, making it easier to have a Web Server DAT start on launching of a .toe file.
    • Added error handling on server start failure and accompanying Info CHOP channels.
    • Added support for HTTPS
    • Added onWebSocketClose callback.

New Palette[edit]

  • Added 'PointClouds' folder and pointGenerator, pointRender, pointTransform, and pointWeight components.
  • Widgets updated to tdui.0.30.10.twwk.1.0.2
    • 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.

New Python[edit]

  • TDJSON - All functions now work with built-in parameters.
  • 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.
  • now supports legacy parameter names.
  • 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.
  • SOP Class maximized .min .max .size members
  • Custom Operators - OP_NodeInfo class now has a 'pluginPath' member.
  • Par.enableExpr to get or set an expression that controls the enable state for this parameter.

Bug Fixes and Improvements[edit]

  • NDI - Upgrade to NDI 4.0.
  • Notch TOP - Upgrade to SDK v0.9.22
  • RealSense - Upgrade to RealSense SDK 2.29.0
  • ZED - Upgrade to SDK 2.8.3
  • CUDA - Moved back to CUDA 10.0 to match support with Kinect Azure and ZED requirements.
  • Point File In TOP - Improvements
    • Added column headers to the Info DAT and unavailable channels no longer appear in the assignment column.
    • Moved the channel selection parameters to the first page and the playback parameters to the second page.
    • Changed the channel selection parameters to drop-down menus and added options to fill a channel with ones or zeros.
    • Changed references of "fields" to "channels".
    • Resolution parameter boxes are disabled unless 'Custom Resolution' is selected.
  • Movie File In TOP - Now correctly handles orientation metadata for .jpeg and .tiff images and .mov movies.
  • Movie File Out TOP - 'Add Frame' pulse now works for 'Image' output types.
  • 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.
  • ZED TOP - Renabled in this release branch after upgrading to 2.8.3 SDK.
  • 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.
  • GLSL MAT - Added more Matrix parameters that take single matrix input.
  • Line MAT - Now has more accurate picking values when render picking.
  • Engine COMP - Now runs TouchEngine from the in-use version of TouchDesigner. This fixes the previous situation in which the last-installed version was always used. Users can still override this behavior by placing a link to a particular installation named "TouchEngine" next to the .tox they are loading.
  • Window COMP - Will now sync the resolution and view mode (image or points) when connected to a TOP.
  • Fixed issue with TOP viewers opening at 400x300 all the time.
  • Geometry COMP - Geometry Instancing with TOPs - Fixed crash when assigning a TOP to the Translate OP parameter.
  • Geometry COMP - Relax restriction on different Instance OPs having the same length when using 'Instance Count Mode = Manual'. Now the OPs just need to have at least enough entries for all instances, but they can have more as well.
  • FBX COMP - Added File Version to info pop-up and fbx_file_version Info CHOP channels.
  • Bullet Solver COMP - Rename onFrameStart, onFrameEnd, and onInit callback methods to whileRunningPreSimulate, whileRunningPostSimulate, and onInitialize respectively
  • 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.
  • Text SOP - Fixed a bug with uninitialized vertex positions.
  • Object CHOP / Transform CHOP - Some cleanup for better behavior of new features and loading old files.
  • 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.
  • CPlusPlus DAT - Fixed input op node string getting the copy of the cplusplus node string.
  • Execute DAT - onCreate() callback now called earlier in the load process.
  • OSC In DAT - Blank lines no longer logged when non-scoped bundles are received. See below BACKWARDS COMPATIBILITY
  • Web Client DAT - Improvements
    • Changed 'Asynchronous' parameter token name from async to asyncreq, since async is reserved by Python.
    • Added Info CHOP and Info DAT values for additional information and debugging.
    • Fixed query parameters in a URL breaking OAuth1.
  • Web Server DAT - Improvements
    • Fixed returning binary value in 'data' in the onHTTPResponse callback (eg. for returning images).
    • Fixed webSocketSendBinary so that it properly handles bytes and bytearray input.
  • 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.
  • Better file type support - dragging PTS, XYZ and PLY files into TouchDesigner will automatically create a Point File In TOP and FITS has been added to the dragdrop list of extensions for the Movie File In TOP.
  • Added total number of pixels to TOP popup info dialog.
  • 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 inside panel value not activating when overlapped by a sibling.
  • 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.
  • Reverted Buffer Select TOP back to Render Select TOP. Hey, it's experimental right?


BACKWARDS 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

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

Build 2019.30790 - Aug 27, 2019[edit]

New Features[edit]

  • Python 3.7.2 is now the built-in version of python. Backward Compatibility warning, see below.
  • Engine COMP - This component will run a .tox file in a separate process using TouchEngine. *Work in progress*
  • Instancing with TOPs - Keep data on the GPU.
    • 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.
  • Point Clouds and general data with TOPs - Working with more data types on the GPU.
    • Point File In TOP - .xyz, .obj, .exr, .FITS/.FIT, .pts, .ply files (Windows only). 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).
      • 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
    • Buffer Select TOP - Formally known as the Render Select TOP, this TOP is now more general-purpose and can also select buffers from a Point File In TOP if multiple buffers exist.
    • TOP Viewer modes have been extended.
      • '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.
  • Math TOP - Ranges can now be changed on individual color channels.
  • 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.
  • Function TOP - New TOP allowing mathematical functions to be done on pixels, similar to the Function CHOP.
  • CHOP to TOP - A new option to wrap long channel data into multiple rows of pixels when the channel's length exceeds the GPU's maximum texture width.
  • Movie File Out TOP - TIFF image formats can now be saved out at higher 16-bit pixel format.
  • Video Device In TOP / Video Device Out TOP - Upgraded to Blackmagic SDK version 11.
  • Video Device In TOP - Added support for bandwidth and camera bit depth controls for Ximea cameras.
  • Video Device In TOP - Added support for using the HDMI input from AJA io4K devices.
  • Video Device Out TOP - Added support for Fill + Key pairs for AJA devices.
  • Audio Movie CHOP - Added an option for switching audio tracks when movie files contain multiple tracks.
  • 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.
  • Transform CHOP - Overhauled and improved.
    • 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.
  • 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.
    • Added an option for LTC In to display the number of 'Total Frames'.
  • Timeline CHOP - Added options for 'Second', 'Absolute Frame', and 'Absolute Second'.
  • 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.
  • Web Server DAT - New DAT which runs a web server in TouchDesigner, currently supports handling of HTTP requests and webSocket connections. How client requests are handled is left up to the user via a 'Callbacks DAT'.
  • Web Client DAT - New DAT that acts as a web client. This replaces the deprecated Web DAT. Includes request() python method.
  • SocketIO DAT - New DAT for extended functionality, separate from the older functionality of the WebSocket DAT.
  • Raster SOP - New SOP that takes a TOP and converts it into a single-line SOP that can be used with the Laser CHOP.
  • 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.
  • Text SOP - Added 'Vertical Align' parameter with options: First Line, Top, Center, Bottom. The chosen field will be aligned to the x-axis.
  • 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.
  • Select SOP - Now allows multiple input ops to be specified in the 'SOP' parameter, acting like a Merge SOP.
  • Merge SOP - Added 'SOPs' parameter to accept multiple SOPs by reference.
  • Join CHOP - Added 'CHOPs' parameter to accept multiple CHOPs by reference.
  • DATs - Execute DATs will now accept multiple OPs to monitor.
  • Replicator COMP - Added a new onRemoveReplicant() callback to destroy replicators.

New Python[edit]

  • 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.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 member can now return a built-in page.
  • Par Class.subLabel member added.
  • 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.bindRange member added, when true then min, max, clampMin, clampMax, normMin, normMax, normVal values will be based on master bind parameter. (Custom Parameters only)
  • OP Class.pages() method returns a list of the operator's built-in pages.
  • Added createFolders flag for .save() the functions in COMP, TOP, CHOP, SOP, and DAT classes.
  • textTOP_Class / textSOP_Class - Added numLines member and lines() method to inspect the text after it has been formatted by things such as word wrap.
  • textSOP_Class / textTOP_Class - Python objects returned from lines() method now have lineWidth member.
  • textTOP_Class / textSOP_Class - Added members to access more font metrics such as ascender, descender, capHeight, lineGap and xHeight.

Bug Fixes and Improvements[edit]

  • Critical Bug Fix from 2019.30550 - Files loaded and then saved in 2019.30550 with Unicode strings (including Icons for Widgets) were corrupting those Unicode strings. This build fixes the issue, as well as attempts to recover the corrupted strings. Please check any unicode data you have in your file to ensure it loaded up properly, and re-save your file using this build.
  • Upgraded to CUDA 10.1
  • Geometry COMP - Geometry components and applicable object components now display bounding box information in their info popups. This also works with geometry instancing.
  • Notch TOP - Added group names as section headers when generating the custom parameters of a Notch block.
  • Analyze TOP - Added options to calculate RGBA independently for Minimum and Maximum operations.
  • Text TOP - Position Units can now be changed when using a Table DAT to describbe text positions.
  • Text SOP / Text TOP - Kerning renamed to 'Tracking' as that is the more correct term for that feature.
  • Select CHOP - Optimized performance when using wildcards.
  • Object CHOP - Use default values when no Targent and Reference Op are provided.
  • DMX In CHOP / DMX Out CHOP - Increased the baud rate for reading and writing through generic serial interfaces.
  • OSC In CHOP - Fixed stripping name segments.
  • OSC In CHOP - Renamed 'Strip Prefix Segments' to 'Strip Name Prefixes'.
  • OSC In CHOP - Added 'Reset Values' parameter to reset channel values to 0 without removing the channels.
  • OSC Out CHOP - Enable Send Events Every Cook parameter for Time Slice mode, allowing OSC data to only be sent only when values change.
  • Serial DAT / Serial CHOP - Windows version now includes list of all valid ports in menu, not simply COM1-COM8.
  • 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.
  • WebSocket DAT - Added 'Reset' pulse parameter.
  • Web DAT is deprecated.
  • Custom menu names now allow spaces, Font menus no longer introduce underscores.


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 - 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 - Function CHOP fixed an issue where tanh(x) was being calculated as tan(x).

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

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 built-in panel in TouchDesigner that contains a library of components and media that can be dragged-dropped into a TouchDesigner network.

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

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) 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 contains its own Network inside. There are twelve 3D Object Component and eight 2D Panel Component types. See also Network Path.

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

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.

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

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

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.

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.

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.

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.

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.

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.

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.

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.

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".

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.

Binding is a Parameter Mode that ties two or more parameters together, where changing the value of any one of the bound parameters changes value of all the bound parameters. The actual value is stored in one of bound parameters, called the bind master parameter.

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.

(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.

TOuch Environment file, the file type used by TouchDesigner to save your project.

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

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 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 Link.

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.