SideCoach: Node.js and TouchDesigner

Project Overview

Public speaking and capturing an audiences attention about a topic you are passionate about is hard, especially for people who haven’t spent time in an improv or acting environment. Many times, when seeking funding or trying to inform an audience about a topic we get very rooted in what we have prepared to say and ignore the audience and the attitudes in the room. This can lead to an audience who is not only bored with what you are saying – but actively resents you being onstage talking at them.

A more engaging approach is to try to read your audience and understand what’s landing and what isn’t, then adjust your topic to the audience you are presenting for.

I worked with Boyd Branch on creating software to assist those wishing to learn public speaking skills and improv techniques so that they might engage their audience with their topic while presenting it. Boyd developed a system for teaching / coaching speakers and wanted to get it off of paper and into a digital technology.

He wanted a easy way for the audience to give real-time feedback while the speaker was talking to see what parts of the presentation needed the most work. This needed to be recorded and played back afterward so the speaker could recognize points of low interest. They could then work on better ways of presenting the material in those sections in order to keep the audience engaged.

The Design

The crucial part of this software is the audience feedback. We needed an easy way for participants to provide feedback without having them jump through hoops in order to do so. Some thoughts being knocked around were creating an app and asking them to download it, or re-purposing existing apps to suit our needs.

In the end I decided to create a web app / service which would handle receiving and recording the data from the user. More on that later.

The next critical element was aligning the recorded data with the video so that the speaker could see how they did. This was going to be done in TouchDesigner, where we could pull in the data and create a visual for it and overlay that onto a video.

The last element was being able to coach the speaker discreetly during the talk so that they might adjust for low interest in the moment. This was also going to be handled in TouchDesigner.

The web service was built on a Node.js and Express.js stack. I set up a small API that handled user data and streaming current interest. The service sent the average interest of the user to TouchDesigner so that the Coach could have access to the data and it could be recorded for alignment with the recorded talk.

The Web App used Materialize as a CSS framework, It is a pretty front end and didn’t take long to set up. The app is set up so that the audience user can see the clues that the coach gives to the speak in HUD and use it as a teaching moment.





Connecting TouchDesigner and Node.js

The connection between TouchDesigner and Node.js was done with a TCP socket. In node the code looks like this:

var net = require('net');

var client = new net.Socket();
client.connect(1337, 'localhost', function(){
 console.log('Connected to TD Server')
 console.log("An error has occured");
 console.log("Open TouchDesigner Server before starting.");
client.on('data', (data) => {
client.on('end', () => {
 console.log('disconnected from server');

In order to send data to TouchDesigner just use:


Then in TouchDesigner, use the tcpip DAT and set the port to what you set it to in Node.js. You should see new data appear whenever that write command is used.

Since this all happened in real-time, I could then just take the data and build a graphing visual and overlay that onto some the video being recorded. Now there was no need in syncing up the data.




Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s