TWID #3: Building a Tracker in TouchDesigner
Using tables in TouchDesigner to build a tracker like sequencer.
This week I was preparing a piece for an exhibition at Lighthouse Berlin as part of Vorspiel 2023 and CTM Festival.
It’s an 8 minute piece that will be shown on a 4k old screen, which is pretty awesome.
I like to use Ableton to sequence my work, especially in combination with music. But in this case, doing such a high resolution requires to render frame by frame. Which is problematic when you sequence externally.
So I had to build my own little sequencer. But not any sequencer.
I wanted to have a tracker.
What is a tracker
Back in the days of early computer music there was a type of sequencer that used tables to describe which notes are being played. This was due to technical limitations, but it also was a particular style of working which is getting popular again.
Software like Renoise and hardware like the Polyend Tracker the M8 Tracker or the Nerdseq are great tools that use that type of sequencing.
Building a Tracker in TouchDesigner
The obvious first thing you do is drop in a Table DAT and punch in some values. Then you take a Beat CHOP and use it as a trigger for a Count CHOP.
With an expression in the “limitmax” parameter you make it cycle through. op(‘table1‘).numRows - 1
To get the value from the table somewhere else (in a constant) use another expression.op(‘table 1‘)[int(op(‘count1‘)[0]), 0]
That’s pretty easy and already quite effective if you just want to get “hard” values.
But in my case I wanted to get values that are interpolated between, so that the animation is smooth.
Creating smooth curves from a table
First you convert the table to a CHOP with the Datto CHOP. Set the “output” parameter to “channel per column” and “first column is” to “values”.
Pipe it into a Resample CHOP, turn off “time slice” and increase the sample rate.
With the higher sample rate you can take the value into a Filter CHOP which is able to smooth it. Also turn off “time slice” and set the ‘filter with” to the “percentage” type.
There we have a curve where we can adjust the smoothness to our liking.
But I want an animated value, so I needed to do a few things.
Animation through a CHOP
To cycle through the curve you first need to extend it with the Extend CHOP. Then you can use an expression in the Shift CHOP to cycle through it.
op('extend1').numSamples * -op('beat1')['ramp']
To get the value you take the first sample of the CHOP and use it for example in a Constant CHOP.
op('shift1')[0][0]
This gives you a value from the table in a smooth curve.
I packaged those up into some reusable components and there I had my little tracker like sequencer that let me render my video in 4k and let me stretch time for iteration.
The interface does not look that pretty, but at least it works. Which is more important.
Conclusion
It was interesting to investigate how to use this kind of interface to render videos in a fixed sequence. However, the beauty of TouchDesigner is that it can do non linear stuff very well. But if you need it for an exhibition where a rendered video is required. This is perfectly fine.
Other things I did this week
Instagram Posts
Some drawing
That’s it for this week. Hope you like it.








