Unstable Mediums

Late at Tate: Disrupt happened at Tate Britain on 1st May. This event, curated by Tate Collectives London, focused on alternative ways of viewing items in Tate’s Collection. In addition to 3D printing and live music, new work of mine, commissioned by Tate Collectives London, was displayed on loop throughout the gallery.

Unstable Mediums

These short pieces, entitled Unstable Mediums, were a remix of two items in Tate’s collection, Ecstasy by Eric Gill and Eve by Sir Thomas Brock. In these remix pieces I wanted to turn the solid structures into malleable, fluid objects.

I was unfortunately in Toronto at the time of the event, but from the photos it seems like the pieces worked really well in the space:

Late at Tate: Disrupt

Photo copyright Diana Agunbiade-Kolawole

Late at Tate: Disrupt

Photo copyright Diana Agunbiade-Kolawole

Thanks again to Tate Collectives London for commissioning me to make the pieces. I had a lot of fun making them!

Pure Data Patching Circles at BOM

From 16th March to 27th April I ran a four part Pure Data Patching Circle at Birmingham Open Media. It was originally intended to be an informal gathering of Pure Data and “creative coding” enthusiasts but quickly it turned into a course in using Pure Data. Here’s some of what I learnt from running it.

Patching Circle #1

This was an almost exact replication of the beginner’s Pure Data workshops that I’ve done in the past at places such as GLI.TC/H 2012, Vivid Projects and Flip Festival. I first introduced some of the projects that I have done and then dove straight into things like installing the software on different platforms.

This part, in itself, had a couple of issues. The biggest problem is that Pure Data Extended, which is the most feature-complete version of Pure Data, is effectively dead. It hasn’t received an update in over two years and the developer seems to have abandoned any efforts to update it. Because of this I was a bit cautious in instructing people to install this software. However, after evaluating the situation, taking a chance on Pure Data Wxtended, which is still in use today despite its age, seemed a better option than downloading Pure Data Vanilla and manually compiling/installing all the necessary libraries. Maybe one day PD L2Ork will be cross platform (something which may be possible thanks to a graphical user interface (GUI) rewrite effort), and maybe the whole infrastructure of PD will become more mature. Until then, Pure Data Extended was suitable.

Following the installation the very basics were covered. I explained the difference between object boxes, GUI boxes, messages boxes etc, and how to change their properties. These are simple concepts but really important to using Pure Data. People that joined later in the patching circles still picked up a bit of this information, but spending a lot of time on it ensured they understood fully.

The workshop concluded how to use the amplitude of microphone input to control the scale of an object that had their webcam feed as a texture. Not a necessarily useful feature but a great way to introduce interactive visuals and the potential of Pure Data.

One thing I learnt from this first Patching Circle is that there isn’t a big enough community of creative coders in Birmingham and the surrounding area to support informal, peer led meetups. For that reason I devised a course plan for the following Patching Circles.

pdpc_1

Patching Circle #2

Following feedback from the first Patching Circle I took a more structured approach to this Patching Circle. This was definitely the right approach as the topic, loading and using video, can be a difficult one to grasp and so needed a structured way to teach it. Loading videos is a surprisingly long-winded task. One point I emphasised is that in Pure Data nothing is assumed. For example, just because a [gemwin] has been created it doesn’t mean that it automatically renders its graphics. the [1( messages needs to be sent to it. Similarly, when working with video in Pure Data, even though a video is loaded it will not automatically play – that requires the [auto 1( message. Also, there is no direct function to loop a video. Instead a user would tell the [pix_film] object to go back to the first frame when it has finished playing all the frames. Yes, this is looping, but there is no simple [loop 1( message. Finally, being able to control the speed would require the user to manually advance frames and specify at what speed to advance to the next frame. This brings in the problem of knowing how many frames are in a video. A solution to this is shown below.

pdpc_2

We concluded the patching circle by learning how to add in custom controls using the [key] command. Having GUI boxes such as [tgl], [bng] etc allows a user to interface with the patch by using their mouse. However, in a live performance being quick to react is important and that’s where the limitations of the mouse are shown. Using [key] a user can map any key on their keyboard to anything in Pure Data. For example, k could trigger the [pix_kaleidoscope] effect and pressing the arrow keys could speed up or slow down video. Doing this is simple and requires just knowing which key is represented by which number.

With all this knowledge the participants learnt how to build a very simple video mixer.

pdpc_3

objects covered

[pix_film], [f]/[float], [key], [sel], [line], [pix_contrast], [pix_kaleidoscope] etc, [maxlib/scale], [tgl]

Patching Circle #3

Just like in typed programming languages, the appearance, layout and quality of Pure Data patches is just as important as whether it works. Similarly, learning how to reuse code makes patching more efficient and provides some future proofing. For the third patching circle I took a break from teaching interactivity to focus on creating interfaces, subpatches and abstractions.

The benefits of subpatches were quite easy to show. I gave the task to the participants to encapsulate all of the objects that they used to make a video player into one subpatch that they could easily reuse.

Moving on from this I asked them to build a single-button interface for it that would simply load a video and automatically play and loop it. Creating an interface for a patch is useful for two reasons: It allows you to easily navigate you patch and it can provide valuable feedback on what is happening. Unfortunately, using Graph-on-Parent and [canvas] objects to create interfaces is a somewhat tricky.

pdpc_a

The red box that shows what will be shown on the parent patch is not easily configurable. Yes, you can specify its dimensions and position, but being able to do it using resize handles would make this process a lot easier. The same applies to [canvas] objects. What we found is that even if an object is just a few pixels over the red line it will not show in the parent patch. Finally, and perhaps most annoyingly, the Z order of the objects cannot be changed. Instead, this is determined upon creation of the object, meaning if a user wants to have a [canvas] object behind their objects they either have to create it before everything else or cut and paste everything so that it’s restacked. Yes, quite annoying.

pdpc_4

Objects covered

[pd], [inlet], [outlet], [inlet~], [outlet~], comment, [$0]

Patching Circle #4

So far I had covered everthing that most regular VJ software can already do: play video files and add effects to them. Although not alone in this feature, Pure Data allows you to create complex patterns from its array of simple 3D shapes or your own models. By learning how to use [repeat] you can turn a simple [cube] object into an array of cubes that dance around. The last Patching Cirlce was perhaps the most difficult, even for myself, but I felt it shows best what Pure Data is capable of.

To explain how the [repeat] object works I showed the participants the Magnetophon video I made with Axel Debeul from databit.me in 2013

Despite their being an array of cubes on screen only one [cube] object is used. I [repeat]ed the [cube] a number of times, [translateXYZ]‘d it along the X axes and [rotateXYZ]‘d it then [repeat]ed it some more and [translateXYZ]‘d it along the Y axis. Doesn’t make sense? Perhaps this patch will help:

pdpc_5

What I had trouble explaining was how the [separator] object worked. My understanding is that it is similar to pushMatrix and popMatrix from Processing. Perhaps it is, and perhaps I still don’t fully understand how it works yet, but it didn’t work as I expected it to. Nonetheless, I gave the participants the task of recreating the stack of cubes and most of them succeeded. Even those that didn’t made some really interesting patterns.

Pure Data Patching Circle

Objects covered

[repeat], [draw (, [model], [multimodel], [separator]

Summary

Teaching a four-part course was an eye opener for me. It showed me that to really learn Pure Data you ned more than an introductory session. It also emphasised to me that face0to-face tuition is really beneficial to some people and probably would have helped me learn better in my early days of using Pure Data. Of course, if you want me to lead a beginner’s session or a more advance one just get in touch.

Glitch GIMP

On Wednesday 29th April I gave my Allowing Mistakes to Happen presentation at Libre Graphics Meeting in Toronto. I was quite anxious about this because the attendees are, typically, developers of software and/or graphic designers. Looking through the archives I found only a comparatively small amount of presentations from artists talking about their artwork and even fewer from those you might call experimental artists (glitch art, generative art etc).

My fears were put to rest somewhat once my presentation actually happened. Despite my computer crashing towards the end (glitch lol) it seems to have struck a chord with many of the attendees. It seemed that they liked that I was turning bugs and the bug hunting process into a form of art.

One such person that was inspired was Michael Natterer, aka Mitch, one of the developers for GIMP, the premier open source photo and image editing software. He showed me how by changing one option when compiling Cairo the contents of the image window would be glitched.

Glitch GIMP

Of course I was quite impressed by the prospect of having a full-featured editing program that could produce only glitch art, so quickly sought advice on compiling it for myself. Presented below are instructions for creating your own glitched GIMP.

Before we go on

This compilation process and the resulting binary file has only been tested on Ubuntu 15.04. I have no way of knowing if the same will work on Windows, Mac OSX or any other flavour of Linux. Also, this tutorial assumes that you have some knowledge of compiling software. If this is all daunting to you go do some research.

…and now we begin

To avoid conflicts we’re going to compile and install Glitch GIMP to its own directory, leaving the original GIMP unmodified.

First create build and installation directories.

mkdir build
mkdir install
mkdir install/share/
mkdir install/share/aclocal

In the build directory you’ll need to create a file which will hold our environment variables.

cd build
touch env.sh

These environment variables will tell the computer where to install GIMP. A word of caution, these environment variables are valid for the current session. In other words, if you close your terminal window you’ll have to load these in again. Fill you env.sh file with the following, changing the first line to point to your install directory.

PREFIX=/~
export PATH=$PREFIX/bin:$PATH
export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH
export XDG_DATA_DIRS=$PREFIX/share:$XDG_DATA_DIRS
export GIO_EXTRA_MODULES=/usr/lib/x86_64-linux-gnu/gio/modules
export ACLOCAL_FLAGS="-I $PREFIX/share/aclocal"
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH
export CPPFLAGS=-I$PREFIX/include
export LDFLAGS=-L$PREFIX/lib

Now fill your session with those variables.

. env.sh

Now we can begin compiling! You’ll have to install GIMP’s dependencies and an extra library.

sudo apt-get build-dep gimp
sudo apt-get install libexiv2-dev

Still in the build directory you’ll now have to clone parts necessary to compiling GIMP.

git clone git://git.gnome.org/babl
git clone git://git.gnome.org/gegl
git clone git://git.gnome.org/gexiv2
git clone git://git.gnome.org/gimp

And Cairo.

git clone git://git.cairographics.org/git/cairo

And now, compile and install babl and gegl:

./autogen.sh --prefix=/path/to/install/directory/
make -j4
make install

hint: if, like me, you have four processors you can run

make -j4

to speed up compiling.

In gexiv2 run:

./autogen.sh --prefix=/path/to/install/directory/
make -j4
make install

In the cairo directory run

./autogen.sh --prefix=/path/to/install/directory/ --enable-xlib-xcb=yes
make -j4
make install

(this is the compile option that causes the glitches 😉 )

And finally, compile and install GIMP

./autogen.sh --prefix=/path/to/install/directory/
make -j4
make install

In your install/bin directory you should now have a file called gimp-2.9. Run this and let the glitch begin.

Glitch GIMP

Glitch GIMP

Glitch GIMP

Glitch GIMP

One thing you will instantly notice is that you can’t directly export the glitch output to a file. This is for display only and, like true glitches, can’t be easily replicated or captured. The only way to do this is to take a screenshot, which is ideal for on-screen display but not so great if you want print quality output.

I’ve been told that I could produce some more reliable glitches by creating or hacking GEGL plugins. I haven’t delved into this yet but if anyone wants to assist please do get in touch.

Thanks

I never would have gained this knowledge had I not been able to attend Libre Graphics Meeting. As seen in the forum thread describing how I came across the databending in Audacity method, trying to ask developers how to creatively break your software can be a confusing task. However, being able to show the developers IRL what can be produced allowed the flow of information to be smoother and more productive than an e-mail exchange would have been.

Libre Graphics Meeting will be coming to London in 2016 and the aim is for it to be free for all to attend, and to cover travel costs of speakers, as it has done every year. If you want to help more stuff like this happen donate now.

BOM Fellows Talk

On Tuesday 14th April I gave a presentation about my work at Birmingham Open Media (BOM). You may not be aware, but in addition to all the things that I do I am also a Fellow at BOM. What this entails is that I will continue to develop a lot of my work whilst within the space and help to direct what will be happening in the space.

During April BOM had the Fellows Show, where most of the Fellows would showcase what they were doing. If you came in you would have seen Nikki Pugh Colony creatures, Pete Ashton‘s recent experiments with compression artifacts, and Jo Gane daguerreotypes amongst other work.

For my talk and showcase I focused on my recent work on copyright, remix culture and attribution. If you fancy hearing me use Vanilla Ice and Walter Benjamin in the same presentation look below. Please excuse the dancing.