Download Project or Preview Online
What It Does
Löömen combines aspects of divination, evocation, and generative art. Named for loom, “a tool for weaving,” and lumen, “light,” it is an assemblage for experiments in chaomancy (χάομαντεία) and xenomancy (ξένομαντεία) with attractors.
As described by Clifford Pickover in his book Chaos in Wonderland: Visual Adventures in a Fractal World,1 the Latööcarfians are an intelligent and social species native to the Jovian moon, Ganymede. Their brains resemble eight-bit computers, and they communicate via intricate light patterns displayed on their heads. The Latööcarfians’ chief occupation is dreaming about chaotic mathematical patterns generated by a pair of formulæ. They have thus earned the epithet, “the dream-weavers of Ganyemede,” and each Latööcarfian’s class within their feudal society is determined by the beauty and symmetry of the patterns they dream.
The two equations are:
xt = sin(ytb) + c sin(xtb)
yt = sin(xta) + d sin(yta)
Where the input variables a, b, c, and d are within optimal ranges: a and b between −3.0 and +3.0; c and d between 0.5 and 1.5. Plotting these equations over many iterations will do one of three things:
- converge on a fixed point
- enter into a cycle
- exhibit chaos and gradually fill in some complicated region of the screen
The third result is what the technomancer hopes to encounter. A dream-image so produced may be read as a divinatory response to a query, or employed as an evocative device to summon the dreamer for assistance in matters under their dominion. Think of the Latööcarfians as alien machine færies (cf. machine elves), and Löömen as a kind of computational shewstone—like gazing into a crystal ball or black mirror.

Along with the four input variables already mentioned, there are several that determine how the dream-image appears within Löömen:
- x and y offsets — By default, Löömen plots all dream-images by matching the center of the image space to the center of the drawing screen. This works fine for the highly symmetrical dreams of the lords, but asymmetrical images dreamed by crofters and cotters may appear in a region of space not centered at position (0, 0). The
xOffset
andyOffset
variables allow you to plot those asymmetrical dream-images nearer the center of the screen by translating the image’s center. You can also use this in conjunction with thezoom
variable to magnify part of a dream-image. - zoom — Some dream-images are too large or small to fit properly within Scratch’s screen area. The
zoom
variable allows you to plot those at a different scale so you can better see them. - alpha — The subtle details of the dream-images are obtained by plotting millions of semi-transparent points that become more visible the more often they are hit. When using
zoom
to magnify a dream-image, fewer pixels are drawn to the screen (because more pixels’ positions lie outside the screen area), so it often helps to decrease the transparency of the plotter pen, which is accomplished by increasing thealpha
variable. The range is 0 (completely transparent) to 255 (completely opaque), and the default is 5. Values from 15 to 127 are usually good for magnified dream-images or those drawn with fewer than many millions of iterations. - maximum number of iterations — The dream-images are generated by iterating millions of times through the equations. 10 million is the default numbers of times, but you may override that during plotting.
Controls
From Löömen‘s main menu there are three ways to go, which, if this is your first time interacting with the project, I recommend taking in order:
- View a gallery of known Latööcarfian dream-images. You can use left and right arrow keys to navigate back and forth through the images, and the space key will return you to the main menu.
- Plot one of the known images from the catalog. You can also add or erase newly generated images from the catalog.
- Plot an unknown dream-image by generating new values for a, b, c, and d using four vertical sliders you may manually position or let the program move randomly.
The control panel sliders and buttons may be manipulated with a mouse or, if you have a touchscreen monitor, with your finger.
There are several keyboard controls available while the plotter is drawing:
- x specify new
xOffset
value (redraws image) - y specify new
yOffset
value (redraws image) - z specify new
zoom
value (redraws image) - a specify new
alpha
value (redraws image) - m specify new
maxIterations
value (redraws image) - left arrow change
xOffset
by −10 (i.e., pan left; redraws image) - rightarrow change
xOffset
by 10 (i.e., pan right; redraws image) - up arrow change
yOffset
by −10 (i.e., pan up; redraws image) - down arrow change
xOffset
by 10 (i.e., pan down; redraws image) - w change
zoom
by 10 (i.e., zoom in; redraws image) - s change
zoom
by −10 (i.e., zoom out; redraws image) - v show/hide plot variable values
- c show/hide
counter
value - t show/hide start and end timestamps
- l save current plot values to the catalog
- e erase an entry from the catalog
When Löömen finishes plotting the dream-image, the counter stops increasing and start and end timestamps are displayed. You may press the ‘l’ key to log the variable values that generated this image (so that you may draw the same image again later), or if you wish to save the image as a PNG file: type ‘c’ to hide the counter, ‘t’ to hide the timestamps, and right-click on the screen and select save picture of stage.
alpha
value of 255 (fully opaque), which requires only a few thousand iterations to produce a recognizable image. This also works well in conjunction with using the arrow and zoom keys to navigate the image space. Once you know you have what you want to see within the screen’s boundaries, you can type ‘a’ again to specify a lower alpha
value and then let Löömen iterate many millions of times to generate a more complex image.Physical Computing with Löömen
I originally developed Löömen in Processing, for the Emotiv EPOC electroencephalographic brain-computer interface. While wearing the EPOC, the sorcerer performs a ritual intended to establish telepathic contact with the Latööcarfians. At the ritual’s climax, the neuroheadset takes four measurements of the sorcerer’s psychophysical state, which are mapped to the four input variables.
For the Scratch version of Löömen, I replaced the neuroheadset with a GUI control panel having four vertical sliders whose positions map to the input variables. Using a PicoBoard, you could add four physical slide or rotary potentiometers, which you could divine the positions of using a stick plate or pendulum. Or, you could program Löömen to generate random values until you perform some gesture such as touching a magic object connected with Makey Makey.
How It Works
Much of this was already covered above. Löömen has eight sprites that communicate via broadcasting and receiving messages.
Plotter
— draws the dream-images, and moreGallery
— displays the gallerySliderA
–SliderD
— controls to set new input valuesBttnRndm
(Button Random) — control to randomize the four slidersBttnSbmt
(Button Submit) — control to submit input values corresponding to the current slider positions, toPlotter
The stage controls the main menu and responds to the selected option.
Make It Better
- Pickover’s book gives some formulæ for generating mutations (see Appendix A in Chaos in Wonderland). Edit the project to include allow for mutations to be generated.
- Having generated some range of dream images that are meaningful to you, modify Löömen (or make a separate project) so that you may divine from a random selection of one or more of those images rather than generating new ones.
- The
Plotter
sprite is bloated: it includes many scripts that are not directly involved in plotting dream-images. You could separate these out into one or more other sprites that handle tasks such as adding or removing records from the log lists, and update the plotter’s local variables with these values when it comes time to draw an image from the log, or update the log sprite’s local variables with those from the plotter when writing the current dream-image to the log.