Archive for July, 2008


SpaceNavigator qcData Source Plugin

Allows the use of a 3DConnexion SpaceNavigator 3D controller as a data source in VDMX.
Don’t know if there are any other VDMX users out there who actually have one of these devices, so no idea if this is going to be of any use to anyone else. If you do have both, though, try dropping this into the VDMX plugins folder (the one actually named ‘plugins’, not the qcFX one).
It should then appear in the Plugin Manager list.



Konstructivist qcFX

Just knocked together a quick experimental qcFX, based on a soviet print-style advert I saw for a Billy Idol concert. I’m not a Billy Idol fan, but I did like the graphic effect, so I thought I’d try to create something similar as a video effect in QC. This is just something I put together really quickly, a ‘throwaway effect’ if you like, so it’s probably not particularly efficient. I don’t plan to spend much more time on it, so you’re welcome to take it and do with it what you will.

And, yes, I know it’s another picture of me….
I don’t do it because I’m vain- it’s because I’m lazy, and can’t be bothered to stick anything more interesting than my laptop’s iSight through the effect.
Sorry about that.

In the Widget


Virtual Patches Annoying Bug/Oversight

So; I’ve discovered a great new feature. I’ve also discovered a great new bug to go with it!

If you use a virtual patch in a QTZ, then save a ‘flattened’ version of the file, the virtual patch will be converted into a ‘real’ macro patch. So far, so good- you get a portable file that works fine for someone who doesn’t have your virtual patches installed on their system. The problem is, the macros automatically created this way are not correctly named. In fact, they’re all called ‘Macro Patch’. Which isn’t helpful when it comes to readability. I’ve submitted an Enhancement Request to the Apple Bug Tracker asking for the macros to be automatically named the same as the original virtual patch. Hopefully this will be incorporated into a future version of the program.

The problem isn’t by any means insurmountable- if you give the virtual patch a custom name, then that name is reflected in the macro that’s created when the flattened file is saved, so I’m not put off too much. I’m still a bit worried that since Macros can be a different size from patches, things may not line up as I’d like in my flattened QTZs, but that’s just me being excessively anal, I think. I can tidy that up before release, anyway.

In terms of working on your own stuff, I think virtual patches are probably a real time-saver, and I wish I’d discovered them earlier. At some point in the future, I’m planning to release a set of QTZs to be used as virtual patches, so that everyone can get the dubious benefit of being able to drop tb patches straight into their compositions.


Virtual Patches!

OK, you’ve probably all beed using these for ages, but for me it’s a bit of a revelation. I’d vaguely heard of Virtual Patches from the QC 3 release-notes, but I’d never really thought about using them until recently. Now I think they’re going to be verrrry useful.

Here’s the Apple documentation for them. The basic idea is that you can drop a QTZ into
/Library/Graphics/Quartz Composer Patches
(a folder that will be familiar to Kineme plug-in users) and they’ll show up as patches in the Patch Creator. Any published in or out ports of the QTZ will appear as in or out ports in the patch when you create it in a composition. You can also add a description for the patch by adding it to the meta info for the virtual patch QTZ using the Edit Information item in the Editor menu.

To test out the system, I created a comp with just a number splitter, with a range set from 0 to 1 (which I use all the time), published in and out ports, added a description, and saved it into the correct folder. After restarting QC, it appeared in the Patch Creator panel, complete with description.

This is going to be very useful in the future, I think!
The only potential downside is that you have to save a ‘flattened’ version of any QTZ incorporating virtual patches, for portability. There’s a very good chance that I’m going to regularly forget to do this…


ASCII/String Fun With JavaScript

Prompted by a request to investigate animated text effects for VDMX, I decided to dust off a few little techniques from my mispent early 20s as a Director/Lingo enthusiast. Notice the word ‘enthusiast’; I never got particularly good at it, though I narrowly-missed getting a job as a fulltime Lingo coder, back when CDRom was still a novel idea.

I digress though: what we have here is a collection of basic string and ASCII effects, wrapped up in a simple demo QTZ. I’m not going to say too much about about how they work, because the code in each JavaScript module is pretty well-commented. It’s pretty simple stuff really, but might look nice combined with some animation.

Here’s some sample code. This is for a simple scroller, that moves the text along to the left, wrapping characters back to the end of the string when they fall ‘off the beginning’ (as it were).

Shifts string left according to Offset value and
wraps characters.
With thanks to Memo

function (__string outputString) main (__string inputString, __number Offset)
	// Initialise vars
	var result = new Object();
	var outString = "";
	if(!_testMode) {
		// Get length of input string
		var chars = inputString.length;
		// Get step size so that Offset values from 0 > 1 cycle through
		// all characters in string once
		var step = Offset * chars;
		step = (step == chars) ? 0 : step;
		// Loop through string
		for (i = 0; i < chars; i++) {
			// Variable for index to read from inputString
			var charIndex = i + step;
			// Wrap string index
			charIndex = (charIndex > chars) ? charIndex - chars : charIndex;
			// Accumulate outString by reading from inputString at charIndex
			outString += inputString.charAt(charIndex);
	// Set output string
	result.outputString = outString;
	// Output
	return result;

Only the FX in the second half of the list use both input strings.
The Mix Range control only works for the String Randomise Range and 2-String Wipe Range effects.

QTZ tb JS-ASCII Demo 1.0.3 ‘in the widget’.

New version uploaded. There are lots more things that could be done with this basic technique, but I’m going to leave it for the moment, so I can concentrate on other things. This final (for now) version (1.0.3) fixes a bug with the previous upload, and adds structure output ports to all the JS patches, which could be piped into an Iterator, if you wanted to individually animate the characters.



Just discovered a rather nasty error in my Spacenavigator macro.
Basically, this was causing it to output -1, rather than 0 for all values, if a SpaceNavigator wasn’t plugged-in. Not good.
I forgot that the raw value from the SpaceNavigator HID patch outputs values in the 0 > 1 range (with 0.5 obviously being at the centre of the range), so it should be defaulting to sending out 0.5 to all outputs, if a SpaceNavigator isn’t detected.

Anyway, I’ve fixed the problem, and posted a new version in the widget. Apologies to anyone who might have downloaded and been confused by the old one.


Mathematical Expression Ternary Operator

This is cool! Toby is right, you CAN use the ternary operator in a Mathematical Expression patch. You can even use it to, for example, invert a boolean input. For example:

(Bool == true) ? false : true

works as a a boolean invert. The input and output aren’t recognised as boolean types, so you’ll get orange cables if you attach, say, a bool splitter to the input, and patch the output into the Enable input of a Billboard, for example. It’ll work fine though, and in fact, I often mix number and boolean types in my compositions.

toby*spark pointed out that for the particular case of a boolean invert, an even quicker way of doing it is to simply use


In this case, ‘Bool’ will be the input port name (you can use any name you like), and the patch will output true/1 when the input is false, and false/0 when the input is true. Very handy.


Error: Twitter did not respond. Please wait a few minutes and refresh this page.

July 2008
« Jun   Aug »


Blog Stats

  • 465,901 hits