Here you’ll find a collection of various tutorials and examples of what my work with TouchDesigner has looked like. In the spirit of full disclosure, I’m constantly learning new techniques and approaches when it comes to programming with TouchDesigner, and programming in general. What does that mean? Well, it means that some of these resources are better than others. These materials also cover a wide berth of material, and don’t always remain in singular operator’s domain – I rarely only talk about TOPs or CHOPs because problem solving often involves how those different methods connect. In general, these tutorials are also mostly text based though there are an increasing number that are now video. On the page for any given video tutorial you should see a list of core concepts in the lecture / example so you have a sense of what you’re likely to hear me talk about.
Table of Contents
- How to Use this Resource
- Full Courses
- In Depth Examinations of Concepts
- Projects and Approach
How to Use this Resource
How to best use this page probably largely depends a lot on who you are. Are you brand new to TouchDesigner and looking for something that will help you from the ground up? Or are you someone who has been tinkering for a bit, and just needs some inspiration. Maybe you’re already feeling accomplished, but want a push in the right direction. What you bring with you might well help you decide where to start. It’s difficult for me to know exactly how to help, but here are some general ideas to get you started.
Brand New to TouchDesigner
If you’re brand new to the TouchDesigner environment, welcome!
There’s lots to cover, but don’t worry there’s plenty of time. First things first, it’s often useful to make sure that you’re up and running with all the tools you need. First you’ll want to make sure you’re using hardware that meets all of the minimum specs for Touch. Head over to the wiki and make sure you’re all set up with a machine that will work, and with a key to get started – non-commercial is just fine.
This is also a great time to make sure that you’ve got the latest drivers for your video card. While you’re at it, a good spruce up and some computer spring cleaning are always a great thing to do. Make sure you’ve got some dedicated space for your projects, as well as some assets to play around with.
At some point you’ll start working with other people, and for that github or bitbucket are great tools for working with git. What’s git you say? Take a look here to get a sense of what git is all about:
Now we’re ready to dive in. If this is your first time using Touch, I’d recommend starting with the Yale Workshop Videos. There are a lot of things covered in this series, but it should help you get up and running the fastest.
After you’ve done a quick overview, check out AME 394. This course was originally offered to undergraduates at ASU’s Arts Media and Engineering School to a class of students studying Digital Culture. In this class nearly every student was new to TouchDesigner. As such this course is a ground up start that gives you a basic sense of how to work in Touch. In hindsight there are a few things I’d do differently now, but it’s still a good starting place if you’re new to Touch. These tutorials come straight out of a class that was taught in person (I would also record the lectures the night before – that way I got to practice, and had a resource for students if we went too fast in class).
After AME 394, it’s worth reading though the Python in TouchDesigner tutorials. Thinking about how to use Python in Touch creates all new sorts of opportunities, and while it might feel a little boring at the git go, it’ll make a huge difference for you in the long run. You don’t have to do these all at once, but it will help to do them in order.
Next look at THP 494. This course was offered through the School of Film, Dance, and Theatre at ASU. Largely focused on new media forms for live performance, this series looks at the practicalities of making art for performance – and largely at making art with data or noise. These build on one another, but you don’t necessarily have to go in order (the exception being the ones that are a part of a series).
The world is your Oyster. From here you might start looking through the category of in depth concepts. These largely focus on a question or problem, and then look at a possible solution. There’s no right order for those, and they really come down to what’s interesting to you.
Your ToDo List
- Check your specs
- Make sure you’ve got a license key – Non-Commercial keys are free
- Update your drivers
- Join github or bitbucket
- Download a dedicated text editor
- Work your way through a class or two:
- AME 394
- Python in TouchDesigner
- THP 494
Knowing where to get started is always hard. If you’ve already been doing some tinkering in Touch, it probably doesn’t make a lot of sense to start with AME 394. Chances are that you already know a good bit of what you’ll find in there. You’re welcome to get started there, but it might feel too slow to get started. THP 494 might be just right though. This is a great place to do a little more fun exploring and get some ideas cooking.
Next you might want to look over using Python in Touch. You’ve probably done this a bit already, but looking more closely or giving yourself a Python intensive might be a great next step. Using python opens up a whole new area of opportunity, so if you’ve been hesitant to beef up on your Python this might be the time.
If you’re not using git yet, that’s okay… but it’s probably time to start. There are a growing number of examples up on the web, and to really dig in git is going to help a ton.
Let’s be honest, that all might be good and well… but you might just be looking to explore. That’s okay. If that’s where you are, head over to github and download the forum examples that are there: td_fb_forum_examples. Once you’ve downloaded and extracted the contents of this repository look at the example_explorer.toe. Here you’ll find over 100 tox files that you can browse through for various examples and inspiration. Not all of them contain read me files, but many do. Just about all of these come out of actual conversations on the Facebook help group, or from the TouchDesigner forums.
Or you might start looking through the category of in depth concepts. These largely focus on a question or problem, and then look at a possible solution. There’s no right order for those, and they really come down to what’s interesting to you.
Your ToDo List
- Work your way through a class or two:
- THP 494
- Python in TouchDesigner
Looking for the Right Direction
You’re a hard one. You don’t know what you need, but you know what you don’t. Hmmm. Well, first things first, start with the example explorer. Head over to github and download the forum examples that are there: td_fb_forum_examples. Once you’ve downloaded and extracted the contents of this repository look at the example_explorer.toe. Here you’ll find over 100 tox files that you can browse through for various examples and inspiration. Not all of them contain read me files, but many do. Just about all of these come out of actual conversations on the Facebook help group, or from the TouchDesigner forums.
If that doesn’t do it for you, you might look at the in depth categories.
Maybe you’re looking to level up by building whole applications. That’s great. You might start by looking at the long-form post about Building a Calibration UI. “But I don’t need to build a calibration UI….” okay, that’s good. Chances are, however, that there might be something in there that relates to what you’re after. Or not. Skim it and see if anything in there speaks to you. If you’re really coming up empty handed, use the contact me link at the top of the page. I’m usually pretty busy these days, but try to at least respond to emails within a week.
Your ToDo List
- Browse through the in depth concepts
Support materials for the courses I’ve taught at Arizona State University:
- Parameter Expressions
- Local Variables
- Interface Elements
- Open Viewer
- Radio Buttons
- Perform Mode & Open in Perform Mode
- Simple VJ Set-Up
- Audio Analysis
- Multi-Process Communication
- Image Selector – Container Method
- Image Selector – Instance Method
- Playing with Feedback
- Instancing – A Closer Look
- Make it with Data
- Data Experiments
- More about Modules, Local Variables, and Storage
- Generative Design | Noise & Shape
- Python Lists
- Python Dictionaries
- Replicators – Replicating Text TOPs
- Simple Instancing
- Texture Instancing
- The Table COMP
- Network Communication – Basics
- Interprocess Communication
- Touch OSC – A Case Study
- The Window COMP
- A Simple Live Performance Tool Set-Up
- The Select COMP
- Outputs for Large Displays
- Audio Part 1 – Building a Back End
- Audio Part 2 – Interface Building
- Audio Part 3 – Audio Analysis
- Audio Part 4 – Simple Metering
- Audio Part 5 – Oscilloscope
- Audio Part 6 – Topography 1
- Audio Part 7 – Topography 2
- Audio Reactive Particles
- Particles and the Animation COMP
- The Timer CHOP
- Learning how to Print
- What are Variables
- Writing Python References
- Data Structures
- An intro to Functions
- The Op Class
- For Loops
- For Loops in Dictionaries
Tools to Download from Github
- Virtual Reality & Emerging Technologies | John Hopkins University | 2016
- TouchDesigner Workshop Yale 2017
- Make Some Noise | TouchDesigner at Obscura Digital | 2017
- TD Summit 2019 – Modular Architectures
- TD Summit 2019 – External Python Libraries
- TD Summit 2019 – Packing up a Tox for Distribution
Miscellaneous Support Documents
In Depth Examinations of Concepts
- Choosing a Directory – How to use the UI class to select a directory for a folder DAT
- These are the DATs you’ve been looking for – Record Slider Values to a Table
- Evaluate DAT Magic – Evaluating Expressions in Tables
- Container Display – Expressions to Drive Container Display
- Replicators, Buttons, and Tables oh my! – Replicators for Interface Building
- Buttons for Interfaces – Buttons and Interfaces
- Vertical Sliders Please – Building Your First Vertical Slider
- 2D Sliders – Building Your First 2D Slider
- Execute DATs – Running Scripts with Panel Changes
- Custom Parameters and Cues – Wrangling state management
- Bindings – an intro to the Binding parameter mode
Real Time Rendering
- Advanced Instancing
- Advanced Instancing Control with the Animation COMP
- Advanced Instancing – Puzzle Pieces
- Cube Faces
- Shrink Instances
- Realtime DNA
- Level of Detail
- Rendering – Understanding Live Rendering
- Let’s Make this Table Data Move – Data as Animation Element
- Geometric Landscapes – Rendering Low Poly Landscapes
- Inspired by Rutt Etra – Z Displacement based on Luminosity
- Instant Instancing – Taking advantage of your GPU
- 3D solutions for a 2D world
- Animation Comp
- Multiple Windows
- Reuse that Component as a .tox – Building reusable elements
- Import from a System Folder – Looking at Folder Contents Inside of TouchDesigner
- Live Camera as a Mask
- The Feedback TOP
- Concepts for Projection Mapping
- Maintaining Perspective with Multiple Cameras
- presets and cue building
- presets and cue building – a beyond the basics checklist
- Presets – Methods of setting and retrieving presets
- Understanding Extensions
- Modules as Reference Expressions
- Getting More out of the CHOP Execute DAT
- Make a Copy of that Table
- Drop Scripts
- Understanding Referencing – The Basics of Building Connections
- Understanding Referencing Part II – More about Building Connections in your Networks
- Process Management
- Python Switch Statements
- Reusable Code Segmentation with Python
- Delay Scripts
- Start-up Configuration with Environment Variables
- Working with Python’s Subprocess Module
Working with Midi
Open Sound Control
- GL Port – Book of Shaders
- GL Port – Shadertoy GLSL 2D Tutorials
- Make Some Noise – Vertex Displacement
- Deferred Shading – Point Lights
- Deferred Shading – Cone Lights
Projects and Approach
You’re finally ready to do a big gig, or a medium gig, or just a gig. After months of practicing and playing you’re feeling good about your creative work, and you’ve got a solid idea for the artwork in your installation. There is, however, one major catch. You have to calibrate a bunch of a projectors… five. When you started working with TouchDesigner you were initially excited about the artwork and interactivity, but now suddenly you’re facing the reality that you need to build out some tools (or at least modify some existing ones), put together a UI, and think through how you’re going to organize a project that goes beyond just experimentation and exploration.
Revel in this moment; it’s the start of a whole new set of challenges and considerations, and it’s also the beginning of a move away from tinkering to considered building.
In seriousness, where is this coming from? Recently I had the opportunity to help a team at a University that was putting together an installation in South America. Unfortunately, I didn’t have the time to do the whole project but I did have enough bandwidth to help get a calibration interface and pipeline set up so their creative developer could focus on the artwork and user interaction elements. Building calibration interfaces isn’t sexy on the face of it, but when calibration is working well it takes a tremendous amount of pressure off the creative end of the project. It also allows us to define some fixed elements in the project, establish some modular elements, and define an architecture.
In late March of 2014 I got an email from the organizers of Proyecta in Peubla Mexico. Due to some unforeseen circumstances they were down an artist, and wondered if I’d be interested in collaborating on a new piece for their projection festival May 9th, 10th, and 11th. The site they had in mind is called the Mantarraya (Manta-ray). This large public park overlooks down-town Puebla, and is a rolling expanse 75 meters square of wooden decking that rise and roll in true surrealistic form. This rolling wooden landscape feels almost ocean like as you sit on the benches – the horizon and the deck creating a disorienting vision of a modernist vista. Interspersed throughout the deck are trees and large pillar lights that further accent the strangely haunting topography in front of you.
In approaching some of the many challenges of Wonder Dome one of the most pressing and intimidating was how to approach programming media playback for a show with a constant media presence. One of the challenges we had embraced as a team for this project was using Derivative’s TouchDesigner as our primary programming environment for show-control. TouchDesigner, like most programming environments, has very few limitations in terms of what you can make and do, but it also requires that you know what it is that you want to make and to do. Another challenge was the fact that while our team was full of bright and talented designers, I was the person with the broadest TouchDesigner experience. One of the hard conversations that Dan and I had during a planning meeting centered around our choices of programming environments and approaches for Wonder Dome. I told Dan that I was concerned that I would end up building an interface / patch that no one else knew how to use, fix, or program. This is one of the central challenges of a media designer – how to do you make sure that you’re building something that can be used / operated by another person. I wish there were an easy answer to this question, but sadly this is one situation that doesn’t have simple answers. The solution we came to was for me to do the programming and development – start to finish. For a larger implementation I think we could have developed an approach that would have divided some of the workload, but for this project there just wasn’t enough time for me to both teach the other designers how to use / program in TouchDesigner and to do the programming needed to ensure that we could run the show. Dan pointed out in his thesis paper on this project that our timeline shook out to just 26 days from when we started building the content of the show until we opened.
In the ever growing list of tools that I’m experimenting with Derivative’s TouchDesigner is a tool that time and again keeps coming up as something that’s worth learning, experimenting with, and developing competencies around it’s work flow. TD is a nodal environmental called a network. Inside of the network nodes can be directly connected by by exporting parameters.
In thinking about how to meet the objectives that I had for this piece, one of my central questions was how to make sure that I could move through three cued scenes – either with manual or automatic triggers. I knew that I had three different aesthetic environments that I wanted to move through. I explored several different options, and the one that ultimately made sense to me given my current level of proficiency (at this point I had only been programming in Touch for a total of three weeks) in TouchDesigner was to use a cross fading approach.
There are always large questions to answer when thinking about creating an interactive work: Who is it for? What does it look likes? What are you trying to communicate? How much instruction do you provide, how little instruction do you provide? And on and on. As I started to think about how this piece was going to work as an installation rather than as a performance apparatus, I started by thinking about what kind of data I could use to drive the visual elements of this work. One of the sensors that I knew I could easily incorporate into my current sculptural configuration was a an iPod Touch. The Touch has an on-board gyroscope and accelerometer. After a conversation with my adviser (Jake Pinholster) we decided that this would be a direction of exploration worth pulling apart, and from there I went back to TouchDesigner to start thinking about how I wanted to incorporate live data into the piece I was making.
One of the benefits of working with TouchDesigner is the ability to work in 3D. 3D objects are in the family of operators called SOPs – Surface Operators. One of the aesthetic directions that I wanted to explore was the feeling of looking into a long box. The world inside of this box would be characterized by examining artifacts as either particles or waves with a vaguely dual-slit kind of suggestion. With that as a starting point I headed into making the container for these worlds of particles and waves.
Creating a time based trigger in TouchDesigner can be accomplished a ton of ways, and this is just one of them