Not logged in, Join Here! or Log In Below:  
News Articles Search    

Submitted by Kalev Tait, posted on March 22, 2002

Image Description, by Kalev Tait

I wrote this program quite recently. I was procrastinating while writing my resume (for GDC 2002), and was reading an article by Karl Sims, when Ash leaned over my shoulder and told me that I should do somthing like that. I denied that I could do it, but after a bit of convincing on his part I decided to give it a try. Suprisingly enough, I succeded. Its not quite as cool as what Karl Sims did, but its getting there.

Editor's Note: You can download this IOTD's demo here: (136k)

When you start it up you will see six images (each of which is proceduraly generated). Click on one and that is used as the 'parent' for the new generation and will appear in the top left corner. Each of its 'children' (the other images now displayed) will be some random mutation off of the 'parent'.

The picture included is what I got after about 50 generations of selecting for complexity and asthetics. I'm not including source code because I wrote this thing overnight, and the code is fugly. But I'll try to quickly explain the process that I'm using here.

Each picture is procedurally generated. For any x and y passed in it returns back a color. The color is generated from 3 floats (rounded off and confined to between 0 and 255), each of which is generated seperatly (this is why the colors tend to be fairly primary in nature, I'm going to change this in the next version I do). The generation process is done by a serries of nodes. Each node has pointers to a fixed number of other nodes (depending on the type of node it is). It gets floats from these 'child' nodes and generates a new float based on that to its parent node. I've been carefull with my deleting and copying of nodes, such that there are no memory leaks or multiple pointers to the same node. The most important node types are the end nodes (ones that have no 'child' nodes, including ones that return the x or y coordinate passed into them) and root nodes which are at the top of the set of nodes, and just return the number their child gives them (they're important because they never mutate).

The mutation happens as follows. First, there is a chance that a root node (and thus all of its children) will be cloned and stuck in one of the other color chanels. Then the mutator works its way down one of the node paths, stoping at random location, and replacing the node it finds with a new node. The new child nodes may be clones of the previous nodes children, or may just be new end nodes. Repeat this process several times.

If you have any questions or comments feel free to e-mail me at Also, please vist my demopage at

Image of the Day Gallery


Message Center / Reader Comments: ( To Participate in the Discussion, Join the Community )
Archive Notice: This thread is old and no longer active. It is here for reference purposes. This thread was created on an older version of the flipcode forums, before the site closed in 2005. Please keep that in mind as you view this thread, as many of the topics and opinions may be outdated.

March 22, 2002, 12:41 PM

first for once

Igor Kravtchenko

March 22, 2002, 01:17 PM

Hey the goal is not to be the first (or the second) but to write something constructive :)


March 22, 2002, 01:18 PM

That's pretty cool. I'm a fan of things done overnight that just have a general sense of 'oh, let's see what happens if...' - and I'm definitely thinking that there were a few of those times while you were making this. Good work!



March 22, 2002, 01:27 PM

Uhm, not first. damn.....what did I wanted to do?
Ah. Hey, great thing. Feels like walking trough the palace of thousend doors in never ending story.
Ok lucky you, it runs on my system ( w2k, gf3, athlon ). Often there are almost similar pictures, and you can't tell the evolution from your eye. So It could be good to adjust the grade of evolution to some minimun it must not underpass.

Hiro Protagonist

March 22, 2002, 01:33 PM

Why would you waste your time writing a message in the forum, simply for the sake of being first? Is there some sort of international consortium that is recording all of the first posters in forums? Will you win a prize? Is this your 5 minutes of fame? I just don't get it. It's totally useless, maybe kurt can start a first posters forum, he can wipe it clean at random times during the day and you guys can see who which one of you is the quickest. Maybe then you'll stay out of here!

Cool image, you should definately work in making the colors less primary, and maybe add some fractal image generation. It looks as if all of your images were created with either horizontal or vertical lines.

Good work!

Warren Marshall

March 22, 2002, 02:07 PM

It's nice to succeed at something in life, no matter how small or trivial. Congrats! I imagine it's all downhill from here ...


March 22, 2002, 02:13 PM

Damned cool! All I got was a ton of 'ugly', but it's still a cool bit of code :)


March 22, 2002, 02:30 PM

Maybe you should shut yo mouf an' let dem boys hev der fun...

Kurt Miller

March 22, 2002, 02:37 PM

I kind of like his first post thread idea. That crap certainly doesn't belong in this thread.

Jari Komppa

March 22, 2002, 03:36 PM

There is a problem with your logic though. Creating a place that promotes first post-behavior will only make people write those on other boards more often.

Like if you'd start a 'flame' forum the flames and flaming behavior would leak to other forums as well.

Kurt Miller

March 22, 2002, 03:43 PM

">>Like if you'd start a 'flame' forum the flames and flaming behavior would leak to other forums as well."

I was kidding. If I wasn't though, I think the more obvious flaw is that the 'first post' achievement wouldn't last very long, so naturally they'd prefer to do it in a thread that offers greater longevity.

Nate Miller

March 22, 2002, 04:03 PM

So how do we make this program actually come up with an image that is similar to the one above?


March 22, 2002, 04:29 PM

Heh, after fooling around with this program for like 20 minutes, I must conclude that there is NO WAY that iotd was generated by the same program I'm using right now -- I too get a whole "ton of ugly".

Great work though! My suggestion would be to somehow control "de-evolution" though. All too often you'll be building up a nice looking pattern and then suddenly you get this stream of giant neon blocks or lines across the screen and if you click them you'll eventually end up back at really uninteresting 2color backgrounds. Also I agree that there should be some kind of check to prevent similar slides from appearing. Otherwise you sometimes get an entire page of identical looking slides.


March 22, 2002, 04:43 PM

Looks very interesting. I love this kind of stuff as it reminds me alot of practical application to ALife. Like nameless said, it would be nice to see some evolution "correction" along the way, so you could remove bad ugly results :)

As for "first post" crap. Is there some prize that I don't know about that is awarded to first posts? Or, is it just some immature lamer thing that is starting to creep into this once very professional message board? Regardless, I fail to understand the significance of saying "I posted first!! Wow, aren't I great", and how it applies to contructive post about someone's IOTD. If someone could please let me know why it is so important, or what prizes you get, I would be honored. And if there are no prizes, perhaps you would let me give you one by standing under my ass while I steam your head.


March 22, 2002, 04:46 PM

whole lotta squares is what i get. but really nice squares.. big.. with colors.. i love squares..


March 22, 2002, 05:21 PM

Unfortunately I couldn't get it to run as it needs a bunch of debug dlls which VS.NET doesn't come seem to come with and I can't be bothered to download at the moment... any chance of uploading a release version?

I did however try out your Squares In Bowl application on your web site which is very cool! I could watch that for hours...


March 22, 2002, 07:53 PM

I like that music generator idea a lot. What would be really cool is if you got genetic algorithm stuff to work on a continuous stream of generated music.

Kalani Thielen

March 22, 2002, 10:09 PM

I got some pretty neat pictures, check them out:


March 23, 2002, 04:04 AM

Good one :)



March 23, 2002, 10:43 AM

I'm very skeptical about the whole idea.
How many clicks it would take to create something like Leonardo Da Vinci's artwork?

The point is: evolution is powerful, but creativeness is 1000 times more powerful. Evolution created sophisticated living creatures, but it took Homo Sapiens to create the wheel. Think about it.



March 23, 2002, 11:35 AM

I don't think we can make computers be "creative" thus far, so evolution is the first step :)

The IOTD looks real nice, and I like the colors.


March 23, 2002, 01:43 PM

Good idea, very fun to play with

I noticed that when you keep clicking on the same square it seems to "de-evoluate" returns to a black square after a while, any explanations why?


March 24, 2002, 05:57 AM

Well, not as if I EVER posted a "I am first." and nothing else post, but as the most of us here a regular gamers, we like to make a game out of everything.


March 25, 2002, 03:57 AM


um....last? :)

Nice pictures...



March 26, 2002, 01:10 PM

Yea. Just what they said, a ton of ugly...

This thread contains 25 messages.
Hosting by Solid Eight Studios, maker of PhotoTangler Collage Maker.