Canned Kandinsky

Canned Kandinsky (a.k.a. Project K++) was an exploration of computer-generated abstract art, featured in International PHP Magazine and on Slashdot.

Reload You can download a copy here.

Here is the FAQ from its release in 2004:

What are you trying to do here?

Project K++ (nee "Canned Kandinsky"), an exploration of computer-generated abstract visual art. Originally an attempt to simulate the work of Kandinsky through programmatic means, the project has evolved into an emulation of his work, extrapolating from his interest in ever more abstract representations into creating art through an abstract -- that is, mathematical -- medium: code.

The project will provide a framework for exploring heuristics derived from aesthetic principles. The goal of the project is to create progressively more humanly "pleasing" or "artistic" works. The side effect, which is in this case more important than the goal, is a deeper understanding of what the words "artistic" and "pleasing" mean. This project is unique in that it attempts to improve our understanding of these words in a more quantifiable way.

Why did you release this code in such an early stage of development?

This release (0.1a) is purely a proof-of-concept release. I am releasing it now to generate feedback on the ideas behind the project more than anything. Since the purpose of the project is to ultimately generate data about how and what people perceive to be art, I thought it was in keeping with the philosophy of the project to also see what people think of the project itself, the code itself, and even the images generated at this early stage of development. The wide variety of opinions, particularly on slashdot, have been fascinating.

C'mon, isn't this really just a bunch of random shapes?

Well, yes and no. I have already begun to make aesthetic decisions, like assigning a color palette to the shading and constraining how far the shapes can be flung. Also, the "randomSymphonic" class does something very common in Kandinsky's work - arranges either 3, 5 or 7 shapes in a vertical pattern. Usually, these look like brush strokes. It's a start.

So, already the beginnings of human aesthetics are poking their way in to the picture. I'll need to bear these in mind as a baseline when I start applying more advanced principles. The ultimate goal of this project is to apply and then test (via human feedback) a wide variety of aesthetic principles. Because it is web-native, the potential for getting a large sample size for human data on what "is and is not art" as well as mapping this data to precise heuristics makes this project interesting.

Couldn't this have been done in Action Script?

0.1a could have probably been done entirely in Action Script. However, Action Script lacks the flexibility of PHP for the more complex tasks involved with later releases. In particular, the strengthened object model of PHP 5 makes a language already rich in built in functions and useful packages all the more attractive. That it is web-ready makes it a good fit for the philosophy behind the project, which is one of gathering and using feedback constructively.

Where's the AI?

0.1a doesn't have much. The color scheme is determined using a colorTheme class that attempts to assign colors to shapes in a much more pleasing way than would be acheived with randomness. Clusters of objects generated by the randomSymphonic class are astep in the right direction for composition. Other than that, the majority of the "art" currently resides in the viewer's imagination.

What about Kandinsky?

He's a wonderful artist. The story of how he arrived at his art is equally wonderful. This site gives an introduction.

Why motion?

Realizing motion conflicted with the original intent to produce "Kandinsky-like" art helped me realize a new goal: to use the modern tools in a way that would not simulate as much as emulate and continue the work of abstract artists like Kandinsky.

How do I make this my screensaver?

My honest answer is, “I don’t know.” I hadn’t considered making the project into a screensaver. I’m sure it’s possible and my instincts tell me that php-gtk might be a nice way to go about it. Let me know if you end up making something like this.