"\n" "

Evolvotron User Manual

\n" "\n" "

\n" " Evolvotron is interactive "generative art" software to evolve \n" " images/textures/patterns through an iterative process of random \n" " mutation and user-selection driven evolution. \n" "

\n" "

\n" " On starting the application, a grid of images is displayed. \n" " Resize or maximise the application if you like, but the more \n" " pixels have to be calculated, the slower it will be. \n" " (For the default 2D image mode, you will need a fast machine or patience. \n" " For the optional animation mode, you will need both.) \n" "

\n" "

\n" " Simply repeat the following until bored: \n" "

\n" "

\n" "

\n" " IMPORTANT: Initially you should select images with some sort of variation. \n" " If you select a uniform image, you may get stuck in a degenerate zone with \n" " little to mutate and therefore little chance of escape to more interesting \n" " images. You can always reset/restart from the "File" menu (the difference is \n" " that "reset" also resets the mutation parameters to their default values). \n" " Selecting one of the "warp" options from a context menu (right-click on \n" " an image) can also help by introducing an additional opportunity for \n" " mutation on subsequent spawns. \n" "

\n" "

\n" " Note that various spirals, grids and tiles, although complex looking, \n" " are actually implemented by a single function node and may leave you stuck too. \n" "

\n" "

Command Line Options

\n" "

\n" " The following are equivalent: \n" "

\n" "

\n" "

General Options

\n" "\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

Animation Options

\n" "\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

Power-user & Debug Options

\n" "\n" "

\n" " Note that the usual Qt/X11 options \n" " (for example, -geometry widthxheight option to set on-screen size in pixels) \n" " are processed and removed before evolvotron options are checked. \n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

Mouse Control

\n" "\n" "

Left-click

\n" "

\n" " A left-click on an image in the main window spawns the mutant offspring \n" " of that image to all the other (non-locked) displays in the grid. \n" "

\n" "

Right-click Context Menu

\n" "

\n" " Right clicking on an image gets you a few more options: \n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

Middle Mouse Button

\n" "

\n" " [NB This feature will probably only be of practical use to those with high-end machines]. \n" "

\n" "

\n" " You can use the middle mouse button to drag-adjust individual images. \n" " This is useful for "final composition" type tweaks, e.g centering an \n" " image's most interesting feature, or just for satisfying your curiosity \n" " about what's off the edge of the image. \n" "

\n" "

\n" " It also works on enlarged images, although it's virtually unusable without \n" " a bit of practice on smaller, faster ones (just boldly make the adjustment \n" " you want, release the button... and wait). \n" "

\n" "

\n" " Changes made can be rolled-back on the main Edit/Undo menu item, \n" " one drag-action at a time. \n" "

\n" "

\n" " An unmodified middle-mouse drag pans the image around following \n" " the mouse motion. \n" "

\n" "

\n" " A SHIFT-middle drag zooms the image in and out with scaling \n" " proportional to the distance from the centre of the image. Beware of \n" " generating huge zooms by clicking too near the centre of the image. \n" "

\n" "

\n" " An ALT-SHIFT-middle drag is similar but anisotropic: the scaling \n" " may be different in X and Y. Warning: this technique is very \n" " sensitive and can be quite tricky to use! In particular, \n" " if you initially click near the centre axes of the image the zoom factor \n" " can be HUGE, so the best way to start using this is to click about halfway \n" " on a diagonal between the image centre and a corner and gently move in and \n" " out radially. Dragging from one side of the image to the other flips it over \n" " (the degenerate case of infinite zoom at the centre is handled cleanly I think). \n" " If it all goes horribly wrong, undo and try again. \n" "

\n" "

\n" " A CTRL-middle drag rotates the image about its centre. \n" "

\n" "

\n" " A CTRL-ALT-middle drag shears the image (the best way to see what \n" " this does is to click in the corner of an image and move the mouse \n" " horizontally or vertically). \n" "

\n" "

Keyboard Control

\n" "\n" "

\n" " There are some keyboard shortcuts. \n" "

\n" "

Main Window

\n" "\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

Enlargement Windows

\n" "

\n" " The image display windows created by selecting "Enlarge" from a \n" " context menu also have a couple of keyboard operations: \n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

\n" "

Gui Elements

\n" "\n" "

Main Menu Bar

\n" "

\n" "

\n" "

\n" "

Status Bar

\n" "

\n" " An area on the status bar shows how many compute "tasks" are \n" " outstanding (or "Ready" when there are none). When two task \n" " totals are reported, the first is for the main grid and the \n" " second for any enlargements being computed. \n" " Each "task" is the recomputation of an image at some resolution. \n" " Tasks are prioritised by their number of pixels (small image \n" " implies higher priority). This is why, if the main grid is still \n" " recomputing, recalculations of enlargements will appear to freeze \n" " after they have reached a certain resolution, at least until other \n" " lower resolution tasks have completed. \n" "

\n" "

\n" " The status bar also provides some control over the "autocool" \n" " mechanism which reduces mutation strength with time. \n" " See the advanced usage section below. \n" "

\n" "

Tips

\n" "

\n" "

\n" "

\n" "

Animation

\n" "

\n" " As of version 0.2.0 evolvotron contains some experimental support \n" " for generation of animations (although so far the results have been \n" " pretty disappointing IMHO, but it's still early days). \n" "

\n" "

\n" " NB THIS IS EVEN MORE COMPUTATIONALLY AND MEMORY INTENSIVE THAN \n" " THE STATIC IMAGE MODE. \n" "

\n" "

\n" " Simply supply a -f frames command line option and evolvotron will \n" " generate animated sequences with the specified number of frames. \n" " These will be displayed at the frame rate specified by the \n" " optional -s framerate option (default 8). So "evolvotron -s 24" \n" " will generate 3 second long animations. Animations reverse direction \n" " at each end to avoid a sudden jump. \n" "

\n" "

\n" " If you save an animation as PPM or PNG, multiple files will \n" " be saved with .fnnnnnn (where nnnnnn is the zero-filled frame \n" " number) inserted in each filename before the filetype qualifier. \n" "

\n" "

\n" " For example, if you enter foo.ppm as the filename to save, \n" " files foo.f000000.ppm, foo.f000001.ppm... will be saved. \n" " If you have the ImageMagick tools you can convert these to \n" " an animated GIF playing at approx. 8 frames per second with: \n" "

\n" "

\n" " convert -delay 12 foo.f??????.ppm foo.gif \n" "

\n" "

Advanced Usage

\n" "

\n" " Evolvotron's idea of an image is a function which converts \n" " XYZ co-ordinates to an RGB colour (however we can only display \n" " a 2D plane for now so the input Z is fixed to zero, or varied \n" " with time when animating). \n" "

\n" "

\n" " The image functions are constructed from trees of function nodes. \n" " (In the mathematical expression 1+(2*x) the "+" and the "*" would \n" " be function nodes.) Evolvotron's functions tend to correspond to \n" " geometric or colour-space operations or anything else which can be \n" " applied to a 3D vector. \n" "

\n" "

\n" " By mutating the structure of the function tree (adding random \n" " branches, for example) and the values of the constant embedded \n" " within it, the image can be changed. \n" "

\n" "

\n" " The mutation parameters are under control from the dialogs accessible \n" " via the Settings menu, and the "autocool" mechanism exposed in the \n" " status bar also has some influence. \n" "

\n" "

\n" " There are two kinds of mutation: perturbations to the magnitude of constants, \n" " and structural mutations which re-arrange the function tree of an image. \n" " Four types of structural mutations are currently implemented: \n" "

\n" "

\n" "

\n" " The probability (per function node) of these mutations is controlled \n" " from spinboxes on the "Mutation Parameters" dialog (expressed as \n" " chances-in-a-hundred), as is the size of perturbations to constants. \n" "

\n" "

\n" " It is useful to think of the perturbations to constant parameters as \n" " being a thermal effect (hence the "heat" and "cool" buttons), while \n" " structural alterations are more drastic and are caused by high energy \n" " gamma rays or something (hence "irradiate" and "shield" buttons to \n" " adjust the probability of structural mutations). \n" "

\n" "

\n" " So why would you want to change the mutation parameters from the initial \n" " defaults ? Basically, if you're getting too much variation in spawned images \n" " (this tends to happen after many generations of images, by which time the \n" " function trees have grown quite large and therefore are experiencing a lot \n" " of mutations) then cool and/or shield. \n" " If all the images look too similar, heat and/or irradiate. \n" "

\n" "

\n" " The "autocool" mechanism (enabled from the statusbar or mutation parameters \n" " dialog) automatically reduces the strength of mutations from the base \n" " values with successive generations. The cooling can be cancelled by \n" " disabling autocooling or pressing the "Reheat" button to zero the number \n" " of generations counted for cooling. The effect of the cooling is a compound \n" " halving of the mutation strength after some number of generations (this number \n" " is the "half-life" controllable from the mutation parameters dialog). \n" " Note that if autocooling is enabled then eventually, after a number of \n" " iterations more than many multiples of the half-life has passes, spawned \n" " images will differ very little from their parents (hence the need for "reheat"). \n" "

\n" "

\n" " There is also a dialog accessible from "Functions..." on the "Settings" menu. \n" " This allows control over the relative proportions in which functions occur. \n" " There is a tab showing the relative weighting of all functions (log-2 scale: each \n" " tick halves the probability of the function occurring), and additional tabs \n" " for various classifications of function for quicker access. \n" " The "Randomize" button on each tab assigns random weightings and helps \n" " increase the uniqueness of your session. \n" "

\n" "

\n" " The "Functions" dialog also has a "Dilution" tab which allows the average \n" " function-tree branching ratio to be controlled (by changing the proportion \n" " of trivial zero-branch functions added): note that using a high branching \n" " ratio results in very complex images which will take a long time to compute, \n" " while reducing the ratio results in simple, boring images. \n" "

\n" "

\n" " 3 types of function node are considered fundamental: constant nodes \n" " (which return a constant), identity nodes (which return their \n" " position argument) and transform nodes (which transform their position \n" " argument by random parameters). On the "Dilution" tab of the "Functions" \n" " dialog there are two slider controls to affect things related to these: \n" "

\n" "

\n" "

Other Executables

\n" "

\n" " This release also builds some other command-line driven (non-GUI, non-interactive) utilities. \n" " Consult the man pages for full details. \n" "

\n" "

\n" " evolvotron_render reads a XML function description from its standard input and renders it to the \n" " file specified. \n" "

\n" "

\n" " evolvotron_mutate reads an XML function description from its standard input and outputs a mutated version. \n" " A command line option allows the "genesis" situation of creating a random function description with no input. \n" "

\n" "

Examples

\n" "\n" "

\n" " Evolving and mutating on the command line: \n" "

\n" "

\n" " evolvotron_mutate -g | tee fn.xml | evolvotron_render /tmp/xxx.ppm ; display /tmp/xxx.ppm \n" "

\n" "

\n" " cat fn.xml | evolvotron_mutate | evolvotron_render -j -m 4 /tmp/xxx.ppm ; display /tmp/xxx.ppm \n" "

\n" "

\n" " Animating a function ani.xml saved from evolvotron in animation mode: \n" "

\n" "

\n" " cat ani.xml | evolvotron_render -f 100 -v -s 256 256 ani.ppm ; animate ani.f??????.ppm \n" "

\n" "

Future Developments

\n" "

\n" " Please check the TODO file first before you send me suggestions! \n" "

\n" "

\n" " Please don't ask me to port evolvotron to proprietary platforms. \n" " You are of course Free under the terms of the GPL to do so yourself, \n" " but please read \n" " http://www.fefe.de/nowindows/ \n" " first. \n" "

\n" "

Thanks

\n" "

\n" " To those who have contributed feedback, suggestions and patches: \n" "

\n" "

\n" "

\n" " And to the anonymous Linspire reviewer who perhaps came up with the best \n" " summary of evolvotron yet: "Fascinating. Utterly pointless, but fascinating." \n" "

\n" "

\n" " The friezegroups wouldn't have been possible without \n" " http://michaelshepperd.tripod.com/resources/groups.html \n" "

\n" "

\n" " Thanks to www.di.fm, www.somafm.com and Trance4Ever for music to code to. \n" "

\n" "

\n" " Thanks especially to a SIGGRAPH conference panel many years ago (likely \n" " including Karl Sims, the pioneer in this area) who first got me interested \n" " in this stuff. \n" "

\n" "

Why ?

\n" "

\n" " I have always admired those who have the skill to wield a pen or paintbrush \n" " and fill a sheet of paper or a canvas with some striking image from their \n" " imagination. Unfortunately I lack the patience to learn such skills, \n" " and probably the necessary manual dexterity and imagination too. \n" "

\n" "

\n" " Evolvotron, and several predecessors developed on and off over a decade \n" " since I first came across the idea, are an attempt to compensate for \n" " this using the skills I do have i.e some mathematical sensibility \n" " and the ability to write working code (well, sometimes). If you like \n" " an image it produces, then as far as I'm concerned that's as satisfying \n" " a result as if you liked something I'd drawn myself. \n" "

\n" "

\n" " Tim Day \n"