GT L3 (Composition by gtoledo3)

Author: gtoledo3
License: (unknown)
Date: 2009.11.02
Compatibility: 10.5, 10.6
Required plugins:

This is the latest version of a Quartz Composer powered application, built with Quartz Builder, that I view as a visual synthesizer and an art piece, that draws groups of lines, quads, and textured points.

I posted the qtz source with my last version, but have made some significant changes between versions. I'll likely post source when it "settles down"; probably after another round of improvements I tentatively have planned. I'm putting this up as a test app to see if it explodes on other peoples computers (don't take that as a caution, there is nothing crazy going on with this).

It's working fine for me, on a couple of systems, though I haven't tested every new feature in SL yet (just most). If anyone can give it a spin, and let me know how it works, or if anyone has any suggestions, it would be greatly appreciated. I'm especially interested in stability and performance on various systems.


-Parameter control of application is available via Menu, GT L3, Parameters, which will make a Panel Inspector appear. "Esc" to quit.

-Reset Trackball- This resets the trackball interaction. This parameter is non-functional when "Main Mode" parameter is set to "Classic".

-Scroll- This is set to make the line system constantly scroll from left to right, when turned on. In this setting, doing a two fingered "Y-Scroll" will make lines spread. In the Scroll "Off" setting "X-Scroll" will move the line group horizontally.

-Scroll Speed- This parameter only applies when Scroll is on. I have set this up so that the line continues to draw when the Speed changes. I'm contemplating making that behavior selectable in future versions.

-Count and Max. Length.- This corresponds to the number of lines in the lines system, and the length of the Queue. The Queue will expand to whatever you have made the maximum size. (I have "backing down" the Queue working correctly in future versions with Line and Points, and mostly with Quads, but have a slight problem when changing Speed parameter while Queue refills right after I've trimmed points, that makes Quad thickness draw incorrectly almost_never, but it still does every so often, so I'm not introducing it until that is solved.)

-On/Off, Color, and Blend options for Points, Quads and Lines.

For each, there is also an "Auto" color option that chooses a color palette that can be shifted using the "Auto Color" slider.

-Line Style - This will make the Line Render draw along a straight path or a "zig-zag" path. This only changes the Line Render, not the Quads or Points.

-L Rotate - This shifts the line system from drawing like a tightly grouped bunch of lines, to a tubular pattern.

-L Shift- This is a manual version of what is achieved by Y-Scrolling, in that it sets relative distance of lines from one another. This works in conjunction with Y-Scroll.

-Zoom- This sets the Z translation.

-Main Mode(s)-

*Classic-Side scroller, no trackball.

*Trackball-Normal environment, trackball active.

*Ortho Trackball- Orthogonal environment, trackball active, Ortho parameters available towards bottom of Inspector.

*Field Of View Trackball- Field Of View environment, trackball active, parameter selectable at bottom of Inspector.

*Fun Mirror- Features a combo of "hard-coded" CI effects, made to simulate carnival funhouse mirror effects, and then some. Trackball active.

FX- Pushes a normal trackball mode through either internal qtz Image Filter FX, or a user selectable folder path. This can either bypass or make use of the "FunMirror" effects by using the "FunFX" Parameter.

-Fun*FX- controls whether the "FunMirror" effects get placed before the other internal effects, or user folder Image Filter effects, or not. There is a bypass, and then Mirror modes one and two.

-Bump Scale and Radius- correspond the the FunMirror effect, and any scenarios where it is called on.

-Amount, FX Boolean, FX Colors 1&2, X, Y, control many typical protocol parameters found in the stock Image Filter compositions in a condensed way. For instance FX Boolean can control the "Clean Edge" True/False functions found in some Image Filters, while also controlling overrideColor found in the Apple ASCII Art composition. The published Colors control most typically found Image Filter published parameters in Apple.

For example, some Apple compositions use "color" as a published value, some use a schema of "primary and secondary", while others are labelled slightly differently still. I've tried best to group these in a way that is transparent to the user, but which also allows full control of the filter, while not having tons "one shot" parameters. X/Y control some "wide throw" parameters in some compositions, in certain cases.

This app isn't about full featured control of external qtz's at all, but adding a basic level of integration, and ability to filter the image.

-FX Saturation, Brightness, Contrast, and Hue are also available as Image Filter parameters, and controllable, though placed towards the bottom of the Parameter controls.

-Point Image, Point Size, Line Width - Controls the texture Image of the point, the point size, and the width of the line render. The Quad thickness is fixed.

-Info- This will print whether the file is a valid Image Filter (it will read Invalid, if it isn't correct), the current file name, the current number file selected, and total file count. This is likely most useful with user Folders that may or may not contain qtz that are Image Filters. In the case that is chosen that isn't an Image Filter, this should fall back on an unfiltered version.

-FX Path/User FX Folder/Rescan/Folder Depth-

FX Path toggles between internal qtz effects, and a folder path that one can place in the "User FX Folder Field". Get a folder full of Image Filters, and drop the folder (folder path), into the User FX Folder path, and this will load up any thing that conforms to Image Filter protocol.

Rescan will be needed when loading a fresh folder, to refresh your file list. Folder Depth will control how many folders "deep" your scan will search. I've limited this to 2, which may seem lacking, but should be plenty in my personal experience; I hope it's a good half-way between allowing some extra organization in whatever folder one wants to "drop" in the app. Doing something like loading your whole computer into this, and using high Folder Depth wouldn't be great, even as is. Try to pre-prepare folders if possible.

This will not load image filters that are contingent on any 3rd party plugins (besides GL Tools, Structure Tools, and v002 Blurs).

-Dimmer- This is a selectable Dimmer that will appear to not dim at all when enabled. This can be used to fade to solid colors.

-Global Blur parameters- This uses GL Tools to grab an image of from the Color Buffer, and pass it through a v002 Zoom Blur. "Blur Freeze" simply toggles Read Pixels on or off (which results in a "stop frame" effect).

-Clear (and Clear Color)- Un-checking this will result in Feedback in the FunMirror and FX environments, and also in other environments. The method for making other environments Feedback may not work in Snow Leopard; this is untested.

-Audio parameters- Pretty Straightforward stuff. "Volume" is a multiplier on the input volume, and Audio Rise and Audio Fall are simply ways of writing "Increasing Scale" and "Decreasing Scale" and being able to fit it on an Inspector Panel. Audio mode interacts with the Y position of the line system, and automates L-Rotate.

I don't consider this to be a "sit back and enjoy" audio visualizer setting. This is more of a tool to lock in to music a bit more, while still actually "playing" the visual instrument in time to music (eg., changing viewpoints of the line system, changing textures, colors, other params, etcetera., on the beat).

The organization of the Parameter Panel has been honed in on after using this for awhile, and "playing it" on the fly. This is why, for example, the Quad, Line, Point on/off parameters are all lines up next to one another, instead of having all parameters that deal with Quads, and then all the Line parameters, and then all of the Point parameters. So, I've grouped parameters in a way that makes it a bit smoother to manipulate in real-time (for me).

Future Version plans:

-More texture images; possibly different textures on different lines, or image sequences.

-Emphasis on simulated drawing of landscapes, trees, vines, outer space scenes, as well as other generative elements.

-More control methods.

-Possible addition of particle systems, cube structure, OpenCL mesh, and?

-Possible support of non Image Filter qtz's, and adding some of my personal Image Filters to Apple sample code filters that are used in-app.

Change Log:

-1.1- Fixed FX Filter "info display" bug that made the FX info switch reverse and apply to wrong environment. Different default opening parameters, and HUD style parameter panel.

-1.2-Reverted to standard trackball for default opening environment/panel style parameter panel.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

cybero's picture
Re: GT L3 (Composition by gtoledo3)

I've just been getting busy trying out the new SL specific technologies and patches and am interested to see that you are purposing here for both 10.5 and 10.6, with a low reliance upon anything SL only.

Whatever, a really nice piece of work. I especially like the access to parameters .

leegrosbauer's picture
Re: GT L3 (Composition by gtoledo3)

Working good here, George. Audio On is impressively responsive. Sweet combination of visualizer, trackball and selectable FX. Nice!

Intel Core 2 Duo X7900, ATI RadeonHD2600, OS X 10.6.1.

leegrosbauer's picture
Re: GT L3 (Composition by gtoledo3)

You know ... it's super easy to use the mouse to apply abrupt, precise and tightly synchronized changes to the imagery as it reacts to music. The VJs amongst us ought to like this study a lot, imho. It can be made to dance to the beat very precisely.

cwright's picture
Re: GT L3 (Composition by gtoledo3)

Good timing, Lee -- smokris and I just spent Thursday through Saturday of last week doing impromptu VJ work with a monstrous composition for a number of electronic music artists in New Jersey for EM2009. smokris mainly controlled the compositions with a BCF2000 (midi controller), but I also used the mouse (trackpad, actually) to control other aspects (while patching together effects/transitions in the editor)

Definitely a good way to add good beat control :)

[our work was totally independent of GT's work here, but I wanted to chime in how elegant controls can be made to react]

leegrosbauer's picture
Re: GT L3 (Composition by gtoledo3)

Well, what ever you did here ... this puppy is golden! I'm having a tough time not gushing like a fool about it. Really sweet. Kudos!

leegrosbauer's picture
Re: GT L3 (Composition by gtoledo3)

Regarding Image Filters: protocol conformance can be achieved with any composition that doesn't have a renderer at root. Render In Image will create this prerequisite circumstance if it doesn't already exist by default. So, I'm curious if GT Lines 3 can display additional imagery, within a conforming composition, that isn't necessarily modifying the input image. For instance; a composition with a particle system with blend set to over accompanying a billboard which is receiving the input image. Seems like that secondary imagery ought to be achievable, but I haven't figured out how to make it appear. Is there currently a group of blending settings or something in this app that will allow that?

I'm reasonably handy with Image Filter configurations, so this app has my attention, for sure.

leegrosbauer's picture
Re: GT L3 (Composition by gtoledo3)

errr ... Ok. It appears perhaps that the input image passes through the User FX prior to passing through the Line/Point part? Is that correct? Sorry to be so inquisitive. Just trying to understand the filtering sequence so I can assemble effectively for it.

gtoledo3's picture
Re: GT L3 (Composition by gtoledo3)

Good question.

I've attached a folder with a test qtz.

Erase the folder path I have in the app, drop the "test" folder in, then switch over to "User File Path".

After a some seconds, your folder will load - you can probably hasten that by toggling the "Rescan" off and on, but scanning is left on by default. Go ahead and toggle your FX Select to "0" (not really necessary with a folder with only one qtz, but good form anyway).

So, the zip isn't meant to look "fancy", but just to show how it can be done. Let me know if it doesn't load with a blobby particle system (this makes me realize that I should have left in a switch that I made to have x/y protocol track to go round).

Here is the criteria that needs to happen for something to load;

-I'm testing if there is a _protocolOutput_Image, and if that image has width; if it does it loads (saving the next mentioned scenario).

-Majorly Important: don't use any aliases or symbolic links, including quotes or anything fancy or the filter will probably get declared invalid; I may change this, but there is good reason for my own usage scenarios.

In my next version, if the qtz doesn't "fit" that standard, and has render patches (or whatever) the file will get rendered using an alternate pipeline, so that whatever you throw in will at least render if it "can". I likely should have put that in this version, but I was irritated by a console debug warning I was getting (that doesn't impact performance in any way), so I took it out.

One quick note as well - fx select works in a rollover mode, so, if one has 10 qtz's in a folder, when you type "past" the amount of qtz's, the order of files will just loop.

test.zip278.48 KB

gtoledo3's picture
Re: GT L3 (Composition by gtoledo3)

It's totally fine, there are a ton of parameters on this, and the way that the FX mode interacts with the "Fun*FX" isn't extremely straightforward at first.

When you select the "Main Mode"/"FX", the signal route goes straight from the whole scene wrapped in a trackball and render in image, out to the app's (or your own) Image Filters, and winds up rendered to a Billboard, from the output of your Image Filter.

Before it the Line scene/system hits the Image Filters, it goes through a Kaleidoscope/Bump Filter combo that is controlled by the "Fun * FX" parameters, which by default, is in bypass. Selecting "Fun * FX" One or Two routes the image output of the L-system to the Kaleidoscope/Bump distortion combo (FunMirror, or whatever I wind up calling it). I wanted the option of being able to have warped funhouse mirror/mandala looking stuff going on before I hit whatever other Image Filter I want to load, so I added that at the expense of clarity of usage.

leegrosbauer's picture
Re: GT L3 (Composition by gtoledo3)

Everything is indeed working as it should. Blue blob over the primary imagery. Ok. Let me study your configuration. I'll find whatever difference there is between your test composition and mine, although it's not obvious to me at first inspection. Gotta be simple, however.

Thanks! This app is going to be fun! I'm right at home with this image filter stuff.

edit: I tried another one of my image filters that contained an overlay circumstance and it worked just fine without modification. And ... I found the issue with the first filter that I tried; I had an internal patch improperly layered out of correct sequence. Thanks for your patience. ;-)

gtoledo3's picture
Re: GT L3 (Composition by gtoledo3)

Thanks for the compliment. I really like this composition; it's probably my favorite of my own stuff so far. The amount of looks that can be done with this is really wide, and I'm looking forward to expanding it more.

The qtz has multiple causes! This composition is very influenced by the work that Michel Gondry did on the Chemical Brothers video "Star Guitar", and at the same time a question on the QC-mailing list about drawing groups of lines, and also from someone talking about how great "G-Force" was when it came out, except that it was such a known look, and how QC doesn't look too organic off the bat or seem capable of some of the Processing style line group stuff.

I agree about the idea of actually "playing" the qtz like it's an instrument, because the most wild, syncopated and locked in results can come from simply hiding your mouse cursor (I usually use Cursorcerer, or sometimes the QuartzBuilder built-in ability), and "playing" the qtz. with your trackpad like a percussion instrument or something (like scratching a record?), and also changing other values at the correct moments. I would have loved to have seen the cwright/smokris performance; I didn't know it was going to be such an epic thing. I'm really curious what kind of stuff was done.

leegrosbauer's picture
Re: GT L3 (Composition by gtoledo3)

Well, I'll be prompt to attest that this particular application can be played, George. And very effectively at that! I'm sure hoping you'll be receptive to releasing the composition for study at some point, but I'd certainly understand if you didn't. Imagery response to mouse input gives impressive looking results. And the audio responsiveness is abnormally good as well. Toss in some additional controllers as you have discussed ... wow! What potential.

I also followed the mailing list discussions and observed the examples you provided, btw. Very nice and I can appreciate the planar controls as implemented in this piece.

leegrosbauer's picture
Re: GT L3 (Composition by gtoledo3)

Say Chris, did anyone get any of your performance recorded, by any chance?

gtoledo3's picture
Re: GT L3 (Composition by gtoledo3)

I hesitated on knowing what to say about the comment on 10.5/10.6 cross compatibility, as I can't help but get long winded.

I've mined through all the patches in SL heavily, and feel like I know them pretty well at this point. There isn't a tremendous amount of things that I can do in SL that make it very worthwhile for me, if anything, and I end up wasting time when editing in it; weird things pop up constantly.

If I have something like this line drawing thing in an app setting, it seems just stupid to do it in OpenCL, limit cross compatibility (no OpenCL plugins for 10.5, are there?), and not only that, color is broken anyway if I tried to do this in OpenCL. Also, deploying OpenCL stuff cross system is extremely unpredictable, in my experience, especially with everyone screwing around with their system settings in QC now without knowing what they're doing (myself included in that occasionally, but I make a point of at least keeping track of what I've done.)

I'm also not impressed by the 3D engine. Even though using the Autodesk FBX SDK is a caveat to the Kineme3D in that if they break something, Kineme has to wait for them to fix it, overall, there is way more industry support in the FBX standard than Collada (I believe this to be the case).

Also, even though it's just md2's, I still can have animated, though simple, characters with Kineme3D, and somehow Apple didn't/couldn't do something similar or better, even with their infamous "Ogre" taped footage. The shadow part of the lighting "seems" cool at first, but is generally broken. It's pretty much a Google Warehouse showcase, and to me, pointless. Granted, there are many architects/engineers/interior designers, etc that use Google Sketchup, and it's free, I'm still on the fence about it. They aren't marketing it like a tool for that, and the lack of character animation support kind of makes it lame to me, besides the immediate wow of loading a fully textured room. I'm about 100% sure Chris could have done that as well, had he thought it made sense (I'm not speaking for him on that, but I'm fairly sure the texture loading is really trivial).

Then, everyone poops themselves about the 2D fluid sim, but in Leopard, it's trivial to use Particle Tools for collision and particles, and then composite liquidized v002 particles on top of a 3D image, which I did plenty, and the collision at least works in 3dimensions, even if the "liquidization" layer has to be rendered 2D. Compare that to the OpenCL example with the wind/mist and the Prius. In that scenario, the particle collision gets composited to 2D, but the actual collision is only 2D, instead of 3D! So ... big whoop. I think the examples are pretty slick, and a like seeing that stuff get incorporated, so I get excited from that standpoint, but it's still "been there, done that", and it's maybe not even as good. I've never felt so split in opinion on something like this.

Basically, the only thing I miss when I'm in Leopard is the multisampling option for the Viewer.

I edit and work in 10.5 mostly, because it seems way quicker and more stable.

I have not, by any stretch, taken the OpenCL stuff to the level that it can be taken to, conceivably, yet there are enough things that I naturally tend to do (like use iterators with renderers), that are broken in really odd circumstance when using OpenCL, that I just don't like to put myself into a scenario where I'm halfway into something only to wind up frustrated, and spending usually at least an hour to figure out if it's something I'm doing wrong or if whatever it is really is broken. In every case, it hasn't been on me, at least so far.

More than being ultra interested in getting bitten with new broken patches constantly, I program qtz's more often with an awareness of old stuff that has broken in 10.6 as compared to 10.5. So in a way, I feel like less options are on the table now, in QC, if one wants people in either OS to enjoy.

That said, it can be taken so much further than it has been taken it's not even funny. In the big picture, QC is unbelievable in what it can do, and some bumps in implementation of a major new technology isn't so crazy. As a user, I may get frustrated by some of those speed bumps, but my hat goes off to the people that worked on QC4, because they bit off quite a bit. I would have liked to have seen less emphasis on new patches and GUI, and concentration on better performance (and by that, I don't mean over optimization that breaks stuff).

Again, people could be taking QC so much further, in so many ways. I really want to see more animation and also, gaming done, just as a pet wish that people start to go down that route more. I think it could be a wonderful thing for marketing divisions to use simple QC slideshow apps with some interactivity jazz up their presentations, or alongside their run of the mill proposal content, totally sidestepping Keynote stuff, and even things like branded movie player apps. I don't want to be a negative nelly by whining about a few things that are screwed up in QC right now. It's amazing in what it can do. My feelings are way more positive about the potential of QC than negative, obviously.

cybero's picture
Re: GT L3 (Composition by gtoledo3)


I hesitated on knowing what to say about the comment on 10.5/10.6 cross compatibility, as I can't help but get long winded

I just think cross compatibility is great if you can get it :-) .

Publishing to the widest possible audience is the best option, if it can be done, which it usually can.

Open CL dependent compositions should probably come with a health warning sticker •~

cybero's picture
Re: GT L3 (Composition by gtoledo3)

gtoledo3 wrote:
There isn't a tremendous amount of things that I can do in SL that make it very worthwhile for me, if anything, and I end up wasting time when editing in it; weird things pop up constantly.

I kind of agree with that, Leopard allows for a whole lot og things and the SL specific stuff is less compelling, although I do like the Interaction patches.

gtoledo3 wrote:
Also, deploying OpenCL stuff cross system is extremely unpredictable, in my experience, especially with everyone screwing around with their system settings in QC now without knowing what they're doing (myself included in that occasionally, but I make a point of at least keeping track of what I've done.)

I've also been finding that Open CL and SL is less reliable than Leopard and have pondered what to do with Open CL examples, give them a health warning sticker.

I get what you're saying about support for .dae, although I've been finding that it's interesting stuff to exploit. Really want to see GL Tools and 3D patches back without possible flake outs in SL

gtoledo3 wrote:
Then, everyone poops themselves about the 2D fluid sim, but in Leopard, it's trivial to use Particle Tools for collision and particles, and then composite liquidized v002 particles on top of a 3D image, which I did plenty

Like you go on to say compare and contrast. The 2D Fluid sim is pretty nifty though. Also often related to audio interactive related crashes

gtoledo3 wrote:
My feelings are way more positive about the potential of QC than negative, obviously.

Me too.

Main thing is though that you've produced a piece of work that is interesting & entertaining and it works on both 10.5 & 10.6.

I think 10.6.x is a work [still] in progress.

leegrosbauer's picture
Re: GT L3 (Composition by gtoledo3)

Enjoying the revisions. Looking forward to your proposed evolutions. Thanks for such an enjoyable interactive application.

smokris's picture
Re: GT L3 (Composition by gtoledo3)

leegrosbauer wrote:
Say Chris, did anyone get any of your performance recorded, by any chance?

Yep, almost all of it. It's now posted here:

leegrosbauer's picture
Re: GT L3 (Composition by gtoledo3)

Thanks, Steve. Vimeo's been notifying me (albeit a day or two late, usually) and I have indeed been watching them. Nice work!

gtoledo3's picture
Re: GT L3 (Composition by gtoledo3)

Thanks Lee!