From TouchDesigner 088 Wiki


UQaMixer is a generative component mixer that was built from scratch during the workshop at MUTEK Montreal 2016 for the main room visuals at the MAC (Musée d'art contemporain de Montréal). It can run on one computer, but it also runs on multi-servers - 1+1 at MUTEK for example (it could have been just 1 if we had 7 outs on the machine). It drove 6 HD projectors in total, projecting onto 68 slightly-irregular white panels (movie coming soon).

This architecture was chosen for the purposes of the festival main room: mostly generative, mixing 2 components maximum at one time, plus up to 2 camera inputs from HDMI sources (other VJ or playback systems), mapping to 6 projectors.

Also, audio input was to be analyzed and presented to all generative components for their personal use (Xavier Tremblay adapted Matthew Ragan's original analysis network with a new UI). We need quick mapping from audio results to any slider/button, so that was added for this project.

The 24 generative components were made by students of Université du Québec à Montréal plus a few others who took the MUTEK workshop. Click Participants in the UI). Some participants VJ'd their visual during the festival evening performances.

You will need a decent PC or laptop to run this on. Just try it. A fast laptop does it in 18 msec.

Get the latest UQaMixer here and use a TouchDesigner 088 August 2016 or later.

Working the Mixer


This file assumes you are projecting out to 2 extra monitors. The MUTEK main room projections were 6x1 aspect, but it is smaller in this version – 3x1, which is closer to a 2-screen HD output per-computer.

There are 2 corner Pin TOPs (adjust in /project1) that place the split image onto the 2 projectors. You can preview the output to the 2 extra projectors by Clicking “Map” at the top left. The project is set up to adapt to 3 monitors total - main control screen + 2 projectors/monitors.

A and B Generative Components

For the purposes of the festival, in UQaMixer there are 2 layers A and B that you are mixing (left and right). There is also a secret third Matte layer that is used to matte A with B. More info below.

A and B are chosen at the bottom. Each brings up your special panel. Above it is the A and B image coming out of the selected component.

In the middle is where the MIDI controls are mapped. We were using a NanoKontrol at first, but later changed to a Novation LaunchControl XL, nicer and with a similar layout of 8 faders, 8+ knobs and 8+ buttons. In the .toe file it’s still called nano.

The left 4 controller sliders (mapped from the left 4 on the Novation), go to A. Slider 2 (Speed A), 3 (Density A) and 4 (Size A) go straight into every A generative component, which was a common standard we agreed upon for MUTEK. They get mapped to the 3 custom parameters on each of the 24 generative components: Speed, Density and Size.

A and B Post-Effects

Then the A and B image goes to the A and B FX panel. These panels have simple effects applied… Zap, Fuzz and Split. Split lets you choose how your image is placed on the two projectors: stretch across both projectors, left projector, right projector, duplicated on both, or mirrored on both, or overlapped.

The A and B effects get some MIDI controls too (or: Slider 1 (Level A), Knob 1 (Blur A) and Knob 2 (Saturate A)also on the nano panel 2 MIDI buttons are mapped to the Zap X and Zap Y buttons. (see MIDI Mapping below)

Blend A and B

The A and B FX images are then combined with the Blender at the center bottom. The cross-fade will give you the A or B or the blended A+B, so a first, keep that crossfade in the middle. Then select a Blend Mode below by first rolling over a blend type, seeing the preview above it, and then clicking. Note that most blend mode buttons behave differently when you click on the left half of the button vs the right half. Like A HardLight B is different than B HardLight A.

Mixing with A Matte B using a Matte Component

After A and B are blended, the image is mixed with the A Matte B image (controls to the right). First you select from the menu which content component you want to use as Matte (it comes from slot B actually). Then Matte Crossfade it in (the slider value 0 has no matte effect, 1 has full matte effect), then adjust the Matte Black level and Matte Contrast sliders.

( You can press Esc to go into /project1 to see how it's all routed! )

Overlay Audio Fx

After that, the Audio FX is mixed in – it’s a simple audio effect you will likely want to go in and make better.

Note that the audio by default is the default TouchDesigner audio loop. Go into /project1 and change it to your actual audio input if you have one.

Blend In Color Ramp

Then the color ramp and the video camera source is mixed in. The Mix-Ramp-Cam slider does a transition between all these. This is where the 2 color wheels on the right come in. The ramp is blended based on which Ramp Blend mode you pick. You see there are 8 choices.

Final Brightness, Contrast, Saturation

Finally at the bottom right, Brightness, Contrast and Saturation are applied to the output before send it to the 2 Corner Pins to the 2 projectors or outputs.

Blending in Two Video Inputs

The content component Video In takes the 2 cameras coming into the mixer – they are chosen via the + on the 2 video images on the left. In each of the Video In component of slot A or B, you can mix and correct the 2 video cameras.

Audio Analysis and Mapping to Sliders/Buttons

On the bottom left is the Audio Analysis UI. Click on a slider on your content component or on the main fader controls in the center. Then click the -> arrow on one of the Audio Analysis gadgets like on Low. That will map the Low audio-processed signal to that slider. To unmap, click the mapped slider and then click Un-Map. Only one things can be mapped from each source in Audio Analysis. You can map buttons and knobs too.

MIDI Mapping

The MIDI mapping is done like this:

  • Go to Dialogs -> MIDI Device Mapper. In Device ID 1 and/or 2, make sure that your MIDI device appears in the In Device menu and assign your MIDI device to ID 1 or 2. Out Device doesn’t matter. Also MIDI Map doesn’t matter as you are mapping raw.
  • Quit that dialog and then move a MIDI controller. The click on the slider, button or knob you want to assign to, keep your cursor over that gadget. Then press on the Keyboard Alt-m. Repeat for all your MIDI controllers/buttons that you want to assign.
  • The FX panel is also where the Level sliders are applied (mapped to the MIDI controller fader 1 and 5).

Customizing the Mixer

Click + at the top left to change the resolutions.

There are 2 extra synths that you can add new ideas into – My Synth 1 and My Synth 2. You go to /project1/SlotA/mySynth1 and mySynth2. To navigate, it’s easiest to use the layout buttons at the top labelled project1, slotA and slotB, and also gal if you need to add new gadgets, and you can add your own Layouts.

Or you can modify your or any other existing content component in slotA.

When you have finished editing the component in slotA, you right-click on it and select Save Component. It will prompt you to put it in a .tox defined by the parameter on the Common page.

After you have saved the component into a .tox, you need to go to slotB and select the same component, go to its Common page and press Re-Init. That will load a copy of the same modified component to B.

The file is designed so that when you are editing networks, it still shows the output on the projectors on the right monitor outs.

To change the set of components at the bottom, you can edit /project1/content and any new ones you add should be a copy of mySynth1.tox for simlicity.

As you know, the mixer is intended to be a mixer of generative visuals, so there are few post-fx.

I’ve added a simple movie player (the generative component Movies 1) where you can pick a folder and play movies from it at variable speed.

I took out Markus’s special 39-panel mapping that he produced on the final day as it’s very specific to the MUTEK projector/screen configuration. Actually the component for the left wall is at the bottom right of /project1, but unused… if you are interested.