Creating a Media Server

I am the lighting designer for a mega church. Being a church everything changes every week and things have a tendency to grow until they hit a wall. I have been using Touch Designer to generate real time content for screens on stage and pixel mapping to fixtures and it has been great. I have yet to come up with anything that can’t be achieved in Touch Designer.

I am using Touch Designer much like an extremely flexible media server and controlling it from a lighting console. Up until now I have been creating what I am calling generators (output only) and effects (modifies an input) as base components. Both take a chop in of parameters. I have all of my generators in a base and all of my effects in another base. Each have a switch driven by another chop in. I then have multiple copies of those top level generators and effects base with cloning turned on. I am using these copies to drive 2 video outputs and a bunch of pixel mapped fixtures.

Over time I have ended up with about 20 generators and 10 effects. I only use a handful of those in a weekend or show but they are all in the file. This is working fine but I am starting to worry that this won’t scale well.

For example I want to add 4 “layers” with way to composite the “layers” to each output. This will mean every generator will be duplicated 12 times.

I haven’t hit any hardware limits yet but I am assuming that ops that are not cooking are still consuming memory. It seems like I need to find a way to only load the generators and effects that are being used. Am I thinking about this in the right way? Is there a better way to do this?

I guess all of this is to ask is there a way to selectively load and unload components without adding/removing them?

@respectthecode great question - the answer is sadly more grey than you might hope. You can certainly use the disable flag on COMPs to release memory and cooking associated with the network inside, and you can flush your GPU memory with several tricks, but those typically have unintended consequences. Dynamic loading for components will almost always cause dropped frames while data is read from disk and moved into memory.

That said, building a preset system, or deck style playback tool with multiple layers and effects is certainly within reason and has been done lots of different ways. You might look at Keith’s project Luminiosity for some inspiration - GitHub - IntentDev/Luminosity: Front-end for TouchDesigner aimed at providing operators with an efficient interface to perform, control, and distribute realtime media while retaining the open-ended programmability of TouchDesigner.

Like all things Touch, the “right” approach often depends on what you’re looking to do / create.

How you organize your project will have a large impact on your actual needed number of operators. For example, if you think of your outputs as a continuous canvas - even if split across projectors, you can perform your compositing / layering operations in a single operator chain - provided that your transitions are synced. If you’re wanting to treat your transitions on an output by output basis, then breaking up your process as described might be a better direction to move.

My general rule of thumb is to see how far you can get with a particular design pattern before you have to change course. Can you say a little more about how you current plan / design your use of generators and effects? Sometimes just hearing more about your process can lend itself to more fruitful discussion about design.

Thanks for the response.

The 2 of the 3 outputs could probably be combined in some way. The first output is 4740x1080, the second is a standard 1920x1080 and the 3rd is used for pixel mapping and changes sizes based on the lighting plot. The first 2 outputs are running into a Green Hippo media server (over NDI) where I layer in other effects and then into a Barco E2 for blending before hitting the projectors. The 1920x1080 is used as an overlay on IMAG. Part of adding layers into Touch is to get to a point where could take Touch into the E2 directly. My current setup is sharing some of the control between the video outputs and pixel mapping and I am finding that I need more separation between video and pixels.

I had seen Luminosity before and after writing this last night that is where my head went. I am already storing each generator and effect in a tox. I could setup a system where I have slots that I can load generators or effects into. This would let me only have the generators and effects loaded that I need for a service.

I also started thinking about rendering the layers separate from the output chain and then selecting them in. I might even be able to render the layers at the 4740 size and then use a center cut of the layers in the 1920 output. There are a few cases where that wouldn’t work but I could probably work around that pretty easily.

My normal workflow is to build looks in Touch on Wednesday night while listening to the the band rehearse. Then Friday I program everything from the lighting console. So far everything I build in Touch has been extremely generic with 5-10 parameters for every generator that I control from the lighting console. Some of this is so that I can modify the look live and some of this is just making generators more reusable.

I tend to think about my maximum composition size and output map, then select things as necessary. Jarretts Scene Changer is a great place to start in terms of keeping things efficient when not in use, and I can’t say enough good things about TDmorph, a recently released preset system here on the forum. By publishing anything you might want parametric control over to custom parameters, and pushing those to a top level preset system, you should be able to get what you need. Since each parameter in TDmorph can have a unique transition time and curve, I’ve found a nice workaround for loading things that will stop cooking for a few frames by fading in a static piece of content on the front end of a preset cue, and then letting it hang after I’ve got a hold screen up while cooking starts/stops on other nodes. If you publish a toggle to your custom presets that is attached to a CHOP execute to bypass / unbypass your nodes, you should be able to load as much as you want within reason into your session.

More thoughts later - but wanted to make sure a link to TDMorph was in here for @respectthecode