tMII.jpeg (550 KB)

touchMixerII is a live visual performance tool made with TouchDesigner 088.


  • 2 Channel tox Bank and Mixer
    You can stock up to 256 tox components (TouchDesigner projects) in the bank and smoothly load it in realtime. Optimized implementation with procedural Python script and Replicator COMP.

  • Simple File System
    You can select your root folder which can have 8 subfolder inside it. Each subfolder will appear as a tab on the bank. A tab(folder) can contain 32 tox files. Sample root folder “tox” is inclueded in the zip.

  • Practical Audio Input
    is available for audio reactive composition. You can control incoming signal with a Band EQ and Parametric EQ.

  • Parameter Auto-Assign Function
    You can reserve up to 8 visual control parameters in each of your TouchDesigner project and the parameters will be automatically assigned to the control section.

  • Output Management
    You can define master resolution and each project will follow the resolution when you load it from the bank. Also basic tranform and scale are supported.

  • Selected Visual Effects
    Simple but useful.

  • Selected Composite Operators
    Based on the “Blend” component in TouchDesigner’s Palette Browser. But much tidy and optimized.

  • Flexible MIDI Input
    You can activate/deactivate parameters dynamically. KORG nanoKONTROL2’s sample MIDI map file is included.

  • To use all these features, you have to follow some rule’s when you make your TD project. You can find the rule inside the template tox file. It’s simple.
1 Like

Awesome, thanks for sharing this.

I think I will use this for my reference for python in touch. i have found plenty of examples of audio driven toe files, but didn’t know how you gratefully move between them or manage a show. this is a tool I can use before I go and re invent the wheel for my self later.

Thanks so much for this.

I’ve been trying to figure out how I can adapt this to be a clip mixer rather than a TOX mixer…I assume I need a movieIn within the toxBankMaster, but I’m not quite sure how to populate the file param…Still getting to grips with Python…
Any hints?

Sorry, I wasn’t completely clear, I would like to be able to load both tox files and .mov files…

Make a tox component that loads your mov files. You could have one that looks in the dir for mov files and indexs them and use one of the sliders to choose witch one to play.

Right, but if I wanted to populate the whole bank with movies I would have to create a separate tox for each movie in right?

I looked for a “template” tox to replicate the structure, but I can’t seem to see what exactly makes the tox correctly formated for this app.

Thanks for checking out the component, rurik and isstuff,

Actually touchMixerII is only focused on mixing of tox. But as isstuff mentioned, the easiest way to use it with movie file is make a tox which loads/play your movie. However, as you already notice, if you want to use whole bank for movie file you need a separate tox for each file and it must be a bit pain to make the movie-playback tox for each file.

I’d recommend you to look into ‘MovieBin’ tox in Pallette Browser/Tools. I actually used almost similar technic to format tox file.

Very roughly, the key process to organise the tox file is…

  1. The python script creates a DAT table(/touchMixerII/toxLibrary/toxBankL/toxFileNamesOut) which contain every tox file’s name. It works as a Template Table for ‘toxReplicator’

  2. There is Execute DAT Inside the Master Operator(toxMaster) for the Replicator. This python script does the job for each tox file.

hope this helps.

This may be just saying the same thing but make a player that knows its tox file name and take the number on the end as the number of the mov out of the dir that it will read. Or make a master table of the tox file name and corresponding mov file paths.

I am courious how much logic chop and work with at tables I will do if I start writing some python. Why leave the code if you need it for 4 bits of logic, why not have it do the other 16 things. I guess if you can keep the python scripts to events and have chops run 60 times a second it may have speed benefits. I have built tools to manage shots and loading of assets into houdini in python and houdini digital assets so tox files, components and python shouldn’t be too strange.

This mixer looks really useful. Thanks for sharing. I’m trying this in build 25220 and getting errors with all the Replicator nodes.
ex: Error: Cannot find function named: replicate (/touchMixerII/composite/compModeSelectButton/replicator1_callbacks)

However, “replicate” is indeed defined in the callbacks DAT - it’s the only method in there. I tried creating a fresh Text DAT, pasting the script in there, and pointing the Replicator to the new Text DAT for callbacks. Still no good. Pretty confused. I’ll admit that I don’t know Python very well, but it looks decent:

[code]# me is this DAT.

comp is the replicator component which is cooking.

allops is a list of all replicants, created or existing.

newops is the subset that were just created.

template is table DAT specifying the replicator attributes.

master is the master operator.

def replicate(comp, allops, newops, template, master):

for c in newops:
	#c.display = True
	#c.render = True
	#c.par.display = 1
	#c.par.clone = comp.par.master
	#converted from old Script parameter:
	# 'me.curItem.par.paneldisplay = 1; '
	'c.par.display = 1


Maybe there is a complication with the auto-conversion for replicator callback scripts as alluded to here viewtopic.php?f=4&t=6588&p=25130
Any ideas?
touchMixerII.38.toe (65.5 KB)

Im having the same issue with same build. Anyone resolved this?

Often, I’ll right click on a DAT of python script and select ‘Run Script’ to force the errors to appear on the node themselves,and the textport.

In your case it says:

python >>>
File “/touchMixerII/fileConfiguration/ReloadButton/replicator1_callbacks”, line 20
'c.par.display = 1
SyntaxError: EOL while scanning string literal
python >>>

It’s missing a closing brace after the conversion.
It can be manually fixed, but we’ll patch the conversion as well.


Okay this is now properly loaded in build 25,780+
However if this older file was saved out in recent builds, the replicator callback may have to be manually edited to fix the extra newline.


i can’t find a way to solve the “error script inside”. When I try to import the folder tox no one appear.
I’m trying to use TouchmixerII with Touchdesigner build 31900.

Anyone solve the issue?

thanks :wink:

Same problem here - TouchMixer II.38 and 088.58140

I get errors in line 11 and 20 of the panelstatexecute script. The line is (minus square brackets) as follows
[ op(’…/…/blenderii/layer1/bankChanger’).allowCooking = 1 ] or = 0 in the case of line 24

I’m lost, but the effect is no TOX’s seem to load and this is after doing the force run script Rob described… just more errors :frowning:

complete script below:

def offToOn(panelvalue):
text = op(‘bg’)
text.par.fontcolorr = 0.9
text.par.fontcolorg = 0.91
text.par.fontcolorb = 0.95
me.parent().par.panelbgcolorr = 0.75
me.parent().par.panelbgcolorg = 0.507425
me.parent().par.panelbgcolorb = 0.2805

# set bankChanger's cook flag on
op('../../blenderii/layer1/bankChanger').allowCooking = 1

def onToOff(panelvalue):
text = op(‘bg’)
text.par.fontcolorr = 0.63
text.par.fontcolorg = 0.669999
text.par.fontcolorb = 0.75
me.parent().par.panelbgcolorr = 0.21
me.parent().par.panelbgcolorg = 0.223333
me.parent().par.panelbgcolorb = 0.25

# set bankChanger's cook flag off
op('../../blenderii/layer1/bankChanger').allowCooking = 0

I can’t even begin to mention the fixes… I think this file is no longer 100% 088 compat. There are still a few issues with this TouchMixer deal, but I have everything working - shoutout to kmoule for some tag team digging through the mess.

use this file to replace the current rev. when running, and upon selecting a bank (L or R) you have to click the folder of TOX you wish to access, then click away (the boxes for the tox load) then click away and back again to populate the boxes with TOX’s to play with. this is one-time after init.

touchMixerII.45.toe (273 KB)

Thank you , buddy! Should try this one out.