25 may 09: A new timing engine

By Tommy van der Vorst, developer (

Arguably the most important piece of code in TJShow is the timing code. A few years ago, when we made the first version of TJShow, things were simple: although you could play multiple tracks at the same time, the program didn't really do timing: it just asked each track whether it had to do something a couple of times per second. This, of course, had some limitations: when there were a lot of tracks that had to do something at the same time, things would get delayed. But overall, it worked pretty good; many tracks just don't do that much work and because of the simplicity, there wasn't much overhead.

In the next version, we introduced multiple timelines, which complicated things. We chose to make the whole engine 'multi-threaded'. This means that each track 'player' is assigned to its own 'thread', which is more or less like a small mini-program running inside TJShow. Threads are 'scheduled' by Windows and are treated equally. Thus, when one thread is doing a lot of work, the other ones still get a chance to do theirs. This also greatly increased reliability: when one thread crashes, it doesn't mean the whole show does. Also, threads can be distributed over multiple processors and cores, yielding better performance.

In 4.0, we're adding instances, and just as when we were adding timelines, we're reconsidering our engine architecture. Our multithreaded engine works great, but we're already hitting the limits; the total number of threads on a system is limited, and each thread takes up a lot of memory. Moreover, many tracks don't really need their own thread; especially cue-based tracks like the OSC and MIDI tracks have their threads sleeping most of the time, which really is a waste of memory.

So, why not have multiple not-so-demanding tracks share the same thread? That's exactly what the next version will do. Instead of assigning each track to its own thread, the completely new engine has a 'pool' of threads and a big queue of 'work to do'. Whenever a track has work to do, it queues the work, and one of the pool threads starts executing. The pool engine continuously checks its own performance, and creates new threads when it notices that timed work items are executed too late.

Long story short, the new engine is efficient just like traffic would be more efficient if everyone starts car-pooling. We still need to work out some of the kinks in the new engine (admitted, it is quite a complex, but elegant, piece of code!). When 4.0 is released, the only thing you'll probably notice is that your largest shows are even faster!

10 may 09: TJShow on Mac

Sometimes, people ask us whether TJShow will run on Mac. After all, the Macintosh is a great platform and is commonly used by artists and for media production. TJShow is currently only built and optimized for Windows. Because TJShow is programmed to give you the best performance, it has to work closely with the operating system; porting TJShow to Mac OS X is possible, but it would still take us pretty long to be able to give you the same experience as the Windows version gives you.

TJShow on Mac

Looking at the screenshot, you might wonder whether there's another way. Well, if you really want to use your Mac, it is possible to run the next version TJShow in a virtual machine. All you have to do is install the freely available VirtualBox software and install Windows XP with SP3 inside a virtual machine. Then you can install TJShow 4 and enter the seamless mode. This way, you can use most of TJShow's features, including DMX (we haven't tested USB device support though), OSC, scripting, etc. TJMedia (video compositing and audio) currently does not work, because DirectX does not function in VirtualBox. If you need audio or video support, you should use Boot Camp to install Windows in a dual-boot configuration on your Mac. We do not recommend running TJShow in a virtual machine on any platform for production use, but it is nice to know that it is possible!

09 may 09: connect your gadgets

By Tommy van der Vorst, developer (

Besides working on the TJShow product itself, we are also continuously playing with the software ourselves. Every now and then, this leads to the design and implementation of a great new function; it is also during these 'experiments' that we find out which parts of the software need some more work. This week, we tried hooking up the most wanted, shiny gadget there is right now: an iPhone.

The iPhone (and iPod Touch) is a wonderful device: it is small, has a multi-touch screen, connects with Wi-Fi, has an accelerometer, can produce sound, and runs a beautiful operating system. There are numerous apps available that you can download with a few clicks, and that will let you do things with your iPhone that you wouldn't have thought were possible.

So, the question was: can you connect your iPhone to TJShow? The answer is 'yes'. Since v4, TJShow supports the OSC protocol (if you don't know about OSC yet, just think of it as a newer MIDI). If you create an OSC-patch in TJShow, and install the OSCRemote-application (from Dutch guy Leo van der Veen), you can control the whole show from your iPhone. You could even take it a step further using the Mrmr-client, which is also freely available. The mrmr-software provides a method for 'auto discovery'. This means that you can set up a server, and visitors of your show can fire up the app and automatically get connected with your show.

I heard that a few museums here in Holland are actually using iPod Touches to guide visitors. I think we will be seeing mobile devices more and more in the future, to enable visitors to interact with shows. And, as we have just discovered and I just told you, TJShow is ready for that future.

05 may 09: eye-candy

By Tommy van der Vorst, developer (

Over the past few weeks, we've been working hard on the next version of TJShow. A lot of changes are 'under the hood' and while they make the program faster or more stable, those features generally make for sexy screenshots. Luckily, a lot of work has been done on TJShow's video compositing engine too. In the current version, you can play videos and do all sorts of fancy stuff with them: scale or rotate them, make them half-transparent, use color keying and even use them as buttons for a user interface.

But wait till you see the next version! TJShow is the first show-control solution that integrates show control with interactivity. Not only have we added a lot of new effects, but we've also made positioning elements on the screen a lot easier. And, perhaps the most important feature: we've added text field functionality. This means that you can ask visitors for their name, or let them enter their e-mail address, so you can send them a message. The text field function feeds the entered text to a variable in the show, so you could also hook it up to TJShow's great database plug-in, or use OSC to send the entered data to some other program. The already endless possibilities just got more endless...

User interfaces in TJShow

Also, notice the new show tree sidebar on the left. This will greatly help you organize your show!

17 feb 09: instances of timelines

By Tommy van der Vorst, developer (

Over the past few days, a new feature in TJShow has seen the light: instancing. With instancing, you can run multiple 'copies' (or instances, as we like to call them) of a single timeline at the same time. This means that you can now create a single timeline that (for example) shows a message on the screen, and use it many times from other timelines in your show. In previous versions of TJShow, this is only possible by duplicating the message timeline. With instances, you simple create a new 'version' of a 'template'-timeline, and set some parameters.

Timeline tree with instances

So, how exactly does this help show designers? The biggest benefit of instancing is that it allows you to re-use timelines. In the picture above, you see a (very much simplified) model of two traffic lights. If you look closer, you will see that the two traffic lights are instances of one and the same timeline ('Light'). Should we want to add another light (or maybe some kind of 'countdown' display, like the ones used in a trial on an intersection in 's-Hertogenbosch, The Netherlands), this is easy: we only have to change the Light-timeline, and both TrafficLight1 and TrafficLight2 will have the fourth light.

The implementation of this new 'instancing'-feature is nearly transparent. All things you used to do already also work in instances. You can even have multiple instances of a timeline running on different clients in a network (and even receive variable/input data from them). This also makes it easier to add new visitor terminals when needed: just add a new group and a new instance, and you're ready to go.

Of course, the instancing feature needs some more polishing, but it works great already, and it will certainly be present in the next major release of TJShow!

8 feb 09: new features in the upcoming version

By Tommy van der Vorst, developer (

Even while the newly released 3.0 version of TJShow is already proving itself as the Swiss army knife for show control, we've already started working towards the next version. While still far away, I would like to introduce a few big changes that we have in mind for the next version.

Effect media-masters in TJShow 4.0

In 3.0, you could already use some pretty advanced video effects, such as real-time blurring and keying. In the new version, we have extended these features with so-called 'effect masters'. With an effect master (which is just a media master with a specific effect assigned to it) you can enable an effect on a track or a group of tracks.

Another feature that was high on our list was to display the audio peaks in the timeline. Without these, timing audio to other events was a little difficult (and you could only really do it by playing the audio file, press 'insert' to create a cue at the right moment, and use that cue to time). In the new version, audio peaks are displayed. The analysis happens in the background, so it won't slow down the program (plus it will be really fast if you work on a multicore machine).

Audio analysis in TJShow 4.0

The third big feature is the addition of support for the OSC (OpenSound Control) protocol. OSC is a pretty simple but powerful protocol that you can use to send command messages over a network to other software or devices that support OSC. OSC was intitially designed to replace MIDI, but it can be used for a lot of applications. The new TJShow adds a new 'OSC' track to send OSC commands from your show (using variables as parameters for those messages) and OSC devices (so you can use OSC as input to your show). The input system can now also accept more data than just the simple 0-1 value in version 3.0. We think that OSC can be really useful when you want to use small, embedded controllers throughout your show (based on Linux, for example). We have a prototype running where a networked Linux-powered ARM device is controlling a few RGB leds over I2C, and it uses OSC to talk to TJShow.

OSC in TJShow OSC in TJShow 2

Overall, we're pretty excited about the new features coming up in the new version of TJShow. We will keep you up to date on the latest developments. Also, we would like you to know that we really appreciate your input and comments on the software. We like the TJShow development process to be open, so we actually produce software you like to use ;-)