Art Art Computing Free Software Generative Art Projects Satire

Surgical Strike Update

I’ve updated the 2008 remake of my 1996 artistic programming language “Surgical Strike” to compile on modern versions of GNU/Linux.

It makes things like this from stealth bombers and old computer company logos:


codeword blim
    manouver 0 18 0
    roll 0 18 0
// Main orders

load "f-117.dxf"
camouflage "MacOS.png"
roll 0 90 0
manouver 0.1 0 0
blim 22
Free Software Generative Art Glitch Art Projects

Glitcherature In Emacs 2

glitcherature-mode for Emacs has been updated to add new functions for applying multiple commands to words, sentences and paragraphs, randomly or in order. There are also new commands to sort characters, to copy structure from one text another and to render a falling rain effect.

You can get the code and instructions here:

Here’s an extreme example of what used to be Sherlock Holmes.

“T oSH anYo HeLMNa ms heINSH iSEYsHEwo, MaNIhaV  eSE-LDOmhEA Rd HImM eNti ONHe rUNDE. rI tWA StNortha
EeElt AYeSeSh  EecliPsE SAn dpr EdOMInaTE SThew holE OF hERSex ons Adt atT HPFRT
ICuNYLMot, iONAK iNt ol,oVEF or IreneADLERALl, emOt iaBLybNlAT He DONEDa HEW AL
aRIYwerE Abho,RRenttOHi  S ColDPreCi sEbuT adMi rv inGmacH NCet Min tewor
SHtaK, eIt the mostper fECt re aSonInGA Nd OBSER LfiNaF, INseHA tiThO NHl dEa
SSeENbuTas Al OVE rhEw, oUl dhaV ep laCe dhIMSEA NDAanEA lTp oSwiREAd, ENa
vERSp, Ok eOftheSoftER PAssiONS saVeWi tHaGib EN Gth Esv eErf rHEYMe. es mom
IREBlEthI NGS , forTHeObSEr VErE xC elL ENTfo rd RAwiS, UCh ntiLsIoo mIn nohiSti
VNSAndacTION sBUtfORThetraInEDrEAS on ERToadmittR oD uCIArUiST nsT ITgfA cOwDE,
liC ATEa NdfinE  LyAD jUst ED t eMpEr aME ntWA StoIntSGr ET dARacsin IV eIT
orRWhiCHMightTh.Rowad ouBTUp onAl  L HIsMe NTal rESUl SwouidI nT bSE noRtDI: sT
NSt iUmEntO  R acRAck i  No NEOfhIsO WnH IGhpoWe RLeNsE, AN DyE lTnoreEm Be tO
NEU RbM ngthA Na STR ongemOtIoNin an AtuREsuC hA ShisofDtbIh, eSA waSquus TI OnW
oeaNtOHI MaNdthaTW o Manwa. stHelate IrenEAdler yMy UaroUagendde rif teA

Art Art Computing Free Software Generative Art Glitch Art Projects

Glitcherature in Emacs

Glitcherature is glitch literature, glitch aesthetics applied to text. “Kathy Acker uploaded by Bryce Lynch“, as I said of Orphan Drift’s novel “Cyberpositive“.

I’ve converted my earlier glitcherature Python code experiments to a mode for the powerful and easily hackable Emacs text editor. You can get the code here:

Installing and enabling glitcherature-mode in Emacs allows you to glitch text by introducing OCR scanning errors, inserting random characters around words or lines, converting text to binary or 1337 and more. Additional functions are planned, and here’s an example of what you can do already:



—Introibo AD ALTARE DEI.

HALTED, HE PEERED down THE DARK winding stairs AND CALLED out coarsely:

—Come up, Kinch! Come up, you fearful jesuit!

Solemwly he came fo_ard awd mouw_d the rouwd guwre_t. He f__ _ut awd ble___ gravely thri_ the tower. the _urrouwdiwg lawd awd the _aki wg mouwtaiw _. Thew. ca_hiwg _ight of S_phew Dedalu_. he bewt toward_ him awd made r_id cro__e_ iw the _ r. gurgl iwg iw hi_ thr_t awd _hakiwg hi_ hed. Stephew _lu_. di_J

Buck Mulligan peeped an instant under the mirror and then covered the bowl smartly.

—Back to barracks! he said sternly.

He added in a preacher’s tone:
—For this, O dearly beloved, is the genuine Christine: body and soul and blood and ouns. Slow music, please. Shut your eyes, gents. One moment. A little trouble about those white corpuscles. Silence, all.

He peered sideways up and gave a long slow whistle of call, then paused awhile in rapt attention, his even white teeth glistening here and there with gold points. 010000110110100001110010011110010111001101101111011100110111010001101111011011010110111101110011. Two strong shrill whistles answered through the calm.

—Thanks, old chap, he cried briskly. That will do nicely. Switch off the current, will you?
HE SKIPPED OFF the gunrest and looked GRAVELY at his watcher, gathering ABOUT HIS LEGS THE LOOSE FOLDS OF his gown. THE PLUMP shadowed face and SULLEN oval JOWL recalled A PRELATE, patron OF ARTS in the MIDDLE AGES. A PLEASANT SMILE broke quietly OVER his lips.

—The mockery of it! he said gaily. Your absurd name, an ancient C_ek

H£ p[]1nt£d h1s f1ng£r 1n fr1£ndly j£st /\nd w£nt []v£r t[] th£ p/\r/\p£t, l/\|_|gh1ng t[] h1ms£lf. St£ph£n D£d/\l|_|s st£pp£d |_|p, f[]ll[]w£d h1m w£/\r1ly h/\lfw/\y /\nd s/\t d[]wn []n th£ £dg£ []f th£ g|_|nr£st, w/\tch1ng h1m st1ll /\s h£ pr[]pp£d h1s m1rr[]r []n th£ p/\r/\p£t, d1pp£d th£ br|_|sh 1n th£ b[]wl /\nd l/\th£r£d ch££ks /\nd n£ck.

Bμck Mμll|g/-\n’s g/-\y v0|c€ w€nt 0n.
?::?: —My– ==name– ==is– ==absurd– ==too:– ==Malachi– ==Mulligan,– ==two– ==dactyls.– ==But– ==it– ==has– ==a– ==Hellenic– ==ring,– ==hasn’t– ==it?– ==Tripping– ==and– ==sunny– ==like– ==the– ==buck– ==himself.– ==We– ==must– ==go– ==to– ==Athens.– ==Will– ==you– ==come– ==if– ==I– ==can– ==get– ==the– ==aunt– ==to– ==fork– ==out– ==twenty– ==quid?

He laid the brush aside and, laughing with delight, cried:

—Will he come? The jejune jesuit!

CeaSInG, hE BeGAn TO SHaVe wItH cARE.

—Tell me, Mulligan, Stephen said quietly.

—Yes, my 1o\\//3?

—How long is Haines going to stay in this tower?


—God, `|sn’t he dreadful? he said )=ra~kly. A pon∂erous Saxon. He thinks you’re not a gentleman. God, these bloØdy E~glis)-(! Bursting with money and indigestion. Because he comes from Oxford. You know, Dedalus, you have the real Oxford manner. He can’t make you out. O, my name for you is the best: Kinch, the knife-blade.

He shaved warily over his chin.

—He WAS raving all night about A black PANTHER, Stephen SAID. Where IS his GUNCASE?

—A woful lunatic! Mulligan said. Were you in a funk?|=-=_|||-_—_-=_=||_=_===_-|_-_-|_|=||-__-|–_=|-||_=_=-=-==|-|=|-=|-||_-=-__=-

–=_||_-__-_-=|-=_=_=__||__—-_|_-_—=_==–|–=_-=–|=__-_|__|_-_-_||_==—_=-—I was, St3ph3n s@!d w!th 3n3rgy @nd gr()w!ng f3@r. Out here in the dark with a man I don’t know raving and moaning to himself about shooting a black panther. You saved men from drowning. I’m not a hero, however. If he stays on here I am off.…the.lather..on…his..razorblade…He…..hopped.down..from…..his.perch…and..began….to…….his….trouser.pockets..hastily.

—Scutter! he cried thickly.

H3 c@m3 ()v3r t() th3 g\/nr3st @nd, thr\/st!ng @ h@nd !nt() St3ph3n’s \/pp3r p()ck3t, s@!d:

—Lend us a loan of your noserag to wipe my razor.




He mounted to the parapet again and gazed out over Dublin bay, his fair oakpale hair stirring slightly.


—God! he said quietly. I$|\|’7 7|-|3 $3@ vv|-|@7 A16`/ (@11$ !7: @ 6®3`/ $vv337 44()7|-|3®? T|-|3 $|\|()76®33|\| $3@. T|-|3 $(®()7\/447!6|-|73|\|!|\|6 $3@. E|*! ()!|\|()|*@ |*()|\|7()|\|. A|-|, D3|)@1\/$, 7|-|3 G®33|<$! I 44\/$7 73@(|-| `/()\/. Y()\/ 44\/$7 ®3@|) 7|-|344 !|\| 7|-|3 ()®!6!|\|@1. T|-|@1@77@! T|-|@1@77@! S|-|3 !$ ()\/® 6®3@7 $vv337 44()7|-|3®. C()443 @|\||) 1()()|<.

Generative Art Magick Projects

Crypto Sigils


A cryptographic hash function is a piece of computer code that take a piece of data and produce a (hopefully) unique short string representing it. This string will in no way resemble the input data, and you will not be able to guess the input data from it. The function always outputs the same string for the same data, and changing the data will change the output string.

For example I can use the SHA256 function on the UNIX command line to make a unique representation of my name:

# echo rob | sha256sum 
30d71981944699f23038164f4eb8189950b4dcf9b39ea2c1ecbda13aea8b7d4a  -

And if I do this again I get the same result:

# echo rob | sha256sum 
30d71981944699f23038164f4eb8189950b4dcf9b39ea2c1ecbda13aea8b7d4a  -

But if I add just one extra character I get different result:

# echo robM | sha256sum 
731a1886a0005b3504805845eeecfac3a0839a651d383f242242d0df2f568ec8  -

And importantly the amount of difference in the input has no effect on the amount of difference between the output strings:

# echo robN | sha256sum 
58bf3ee9cae6247705d1262c048cc71d28924f2cff04ada514f8240ce3555bec  -

So the outputs of cryptographic hash functions produce identities for data that can be used to uniquely refer to the data but do not disclose the content of the data.

Hash functions achieve this by feeding the data through a complex mathematical transformation. This is a mapping through mathematical space that maintains identity and difference while occulting content.

Much like a sigil.

It’s true that if one knows the word or words abstracted to make a sigil one can recognize their traces in the sigil. But these traces are a means to an end, they are a way of producing a striking and unique new identity to focus on and invest in.

More cryptographic hash strings are created every hour than sigils have been made in the entirity of human history. Billions of mappings through mathematical platonic space to establish, conceal and communicate identity. Their consensual reality and status as exports from the platonic realm of mathematical objects make them ideal magickal material.

A full 32-byte SHA256 hash is a lot to memorize, although doing so is a feat that could be ritually powerful. It may be enough to abstract it to its first few digits, as Git commits do. We don’t need to use the hexadecimal (base-16: 0123456789ABCDEF rather than base-10: 0123456789) digit strings that are the usual human readable output of hash functions. An HTML-style colour can be represented with three or six hexidecimal digits, for example blue is 0000FF or OOF. We can choose a unique colour using the first six digits of the hash.

For example:

echo this is my intent | sha256sum 
1b0fd74346abfe6858b12b8e3036649a63c09f2a049634dfe3c835f32422f58e  -

As an HTML colour this is #1b0fd7:

Hex Digest as Colour

We can also use pairs of digits as positions on a 16×16 grid, or more digits for a larger grid, or three groups of digits to produce a three dimensional path for 3D printing or importing into virtual reality.

Here’s a simple Python example:

import hashlib

digest = hashlib.sha256()
digest.update(" the spammish repetition")
digest_string = digest.hexdigest()
digest_numbers = [int(char, 16) for char in digest_string]
coords = [digest_numbers[i:i+2]
           for i in range(0, len(digest_numbers), 2)]
print "%!ps\nnewpath"
print "%i %i moveto" % tuple(coords[0])
for coord in coords[1:]:
    print "%s %s lineto" % tuple(coord)
print "0.25 setlinewidth\nstroke"

You can see the output of this program rendered at the top of this article. We can combine this with colour (or render the colours of the hash as a grid of coloured squares).

Another way of generating visual forms from hashes is using shape grammars, as used by libvisualid. Here’s “this is my intent” rendered by libvisualid:

this is my intent

Hashes can be attached to emails or tweets to place and circulate them in the world. Or they can be placed into the Bitcoin blockchain using a system such as, to be rehashed constantly as the Bitcoin blockchain is updated. Here’s the hash for a spell in the blockchain:


We can use a system similar to Bitcoin’s proof-of-work system to find auspicious hashes for data, those that start with a run of leading zeroes or some other number (or target string or bitmap encoded as a number).

More Python:

import hashlib
import binascii

target = "0000"
complement = -1
digest_numbers = ""

while not digest_numbers.startswith(target):
    complement = complement + 1
    digest = hashlib.sha256()
    digest.update("this is my intent")
    digest_numbers = digest.hexdigest()
    print "%d %s" % (complement, digest_numbers)

print binascii.b2a_uu(str(complement))
print binascii.b2a_base64(str(complement))

And its output, which is the key to creating an auspicious hash of the input string:

0 eae2ffcee00aa95306e706dd4bc67ab6b9fd2ffe61b32dfe4177b76c0afd682d
1 84ba18490876919df8bbff194eeb861c6c44a27e9bfbd8db485ecf704e41fcbd
2 f53226b118fa492dc21cd4336d67b4c8ce4148e49e8e4b094baf3e5ecff688ba
74962 38d5f823e881857f031def1822a28546d29b40903959b1c9bf1f5a1bebd42d9e
74963 b906fd259413ac714de31b9acaf6f0e5268560221d07f557f0f491a081a2cd09
74964 00006dd9f148ca454d331179bd7c87b42d7ab734df7738e1ae90e25013f02a1d


%-S0Y-C0 and NzQ5NjQ= are different representations of the number 74964. They can be used to create sigils, or the number could be represented verbally using a mnemonic generator.

There’s more that can be done with cryptographic hashes and with cryptographic signing, which I haven’t covered in this article. But hopefully these examples can inspire further experimentation.

(All code licensed CC0.)

Art Art Computing Generative Art Projects

Facecoin In More Detail

Facecoin is Bitcoin with a different Proof Of Work system. I’ll try to
explain what this means here but I also recommend the following articles
about Bitcoin and its protocol:

Proof of Work

Whenever a computer in the bitcoin network wants to record transactions,
it must perform a simple but unguessable and time-consuming calculation
then send the results to other machines on the network to verify. It is
therefore computationally (and monetarily) expensive to record a
transaction if you are not actually performing one. This discourages
abuse of the Bitcoin network.

This calculation and its output are the “proof of work”, they prove that
the computer’s user has been willing to do some work and expend some
resources in order to prove their good faith:

In Bitcoin, an algorithm called SHA-256 is applied to the transaction’s
data. Give SHA-256 any data and it will output a string of characters
that cannot be used to recreate the original data but that will always
be the same for the same data. They are a kind of identity for data:

For example, on the UNIX command line:

$ echo annie | sha256sum
7eb9d8162722f815b8aeb728d4112d24c2a2ea821fc0af7286bddab0df79baa9 -

$ echo michael | sha256sum
bb472c3cc2b662a74956c8539fec9fe73f2b8a9f9124506aa0474698b3bac62d -

$ echo rob | sha256sum
30d71981944699f23038164f4eb8189950b4dcf9b39ea2c1ecbda13aea8b7d4a -

$ echo rob | sha256sum
30d71981944699f23038164f4eb8189950b4dcf9b39ea2c1ecbda13aea8b7d4a -

Bitcoin uses SHA-256 to repeatedly make such an identity string for the
transaction data and a number that it increases by one each try called
the “nonce”. Eventually, and there’s no way of predicting precisely when
but it should take about ten minutes, the output string will start with
several zeroes. When it does, Bitcoin uses that as the proof of work for
the transaction:

Machine Pareidolia

Pareidolia is when we mistakenly see faces in clouds, or electrical
sockets, or in photographs from space probes:

Machine pareidolia is when a face detection algorithm gives a false
positive, locating a face in an image when there isn’t one:

There’s been some nice art made using this:

Not every image can be mistaken for a face by a face detection
algorithm, in particular finding a face in a series of randomly
generated pixel images takes some time.

The amount of work required to do so will be greater than nothing, and
cannot be guessed precisely. We can therefore use machine pareidolia
with random images as proof of work.


Facecoin replaces Bitcoin’s search for leading zeros with a machine
pareidolia search for faces.

SHA-256 output is used as an 8×8 256-level greyscale pixel map, and a
face recognition algorithm is used to try to find one or more faces in
it. If no faces are found, the nonce is increased and another attempt to
find a face is made. This can take from one to several hundred tries.

When a face is found, the nonce and the face bounding rectangle are
recorded so the proof of work can be validated.


Bitcoin is a very interesting development in cyberculture. It’s a
repository for the hopes and fears of various ideologies, and a frontier
or dark space for the imagination and social or economic activity in a
90s Internet way. Its protocol is a communication model of existence,
identity, community and proof, with a CCRU-ish market worship at its
base. Because of all of this I think it’s worthy of and desperately
needs artistic investigation.

Artworks are proofs of aesthetic work, used as unique value identities
both in the market (art is used as an investment, signifier of status,
and symbolic resolution of lacks in free market ideology by oil
oligarchs and trust fund managers) and by organized crime (stolen art is
used as a medium of exchange by criminal gangs).

If Facecoin was widely adopted these two value identity systems would be
trivially but critically mapped onto each other by millions of machines
cranking out imaginary portraits across the network as part of a
financial network, and vice versa.

Art Art Computing Generative Art Politics Projects Satire


Facecoin, 2014, HTML5 and JavaScript.


Click here to run a visualization in your web browser.

Cryptocurrencies such as Bitcoin use a “proof of work” system to prevent abuse.

Artworks are proofs of aesthetic work.

Facecoin uses machine pareidolia as its proof of work. This is implemented by applying CCV’s JavaScript face detection algorithm to SHA-256 digests represented as greyscale pixel maps. An industrial-strength version would use OpenCV. Due to the limitations of face detection as implemented by these libraries, the digest pixel map is upscaled and blurred to produce images of the size and kind that they can find faces in.

The difficulty can be varied by altering the size and blur of the pixmap. Or by only allowing particular detected face bounds rectangles to be used a set number of times.

Art Art Computing Generative Art Projects Satire

Working on Facecoin


Facecoin is an aesthetics-based cryptocurrency. It uses a face recognition algorithm on the output of its cryptographic hashing represented as a bitmap as its proof of work. Animated demo to follow.

Art Computing Generative Art Projects

How paintr Works

paintr came to me very quickly just before my show in Belgrade in 2005. Originally intended as an artistic web service, it ended up as “art for the age of web services”. The original went offline when I switched web hosts a few years ago. Updating it from its php-and-blog 2005 version to a 2010s cloud-based node.js and tumblr version made sense conceptually.

paintr is a simple implementation of a naive model of how art is made. An artist is motivated by aesthetic concerns to find imagery to hang those concerns off of and thereby presents a work in a signature style. paintr finds a recent palette on, searches for the words that palette is tagged with on flickr, autotraces the image to simplify and abstract it, and then applies the palette to the results randomly.

This abstracts and unifies the image, obviously aestheticising and transforming it. The result is a kind of Stella-ish artistic ironisation of a verbal description of art. It’s also often fun to look at.

Art Computing Generative Art Projects

How draw-something Works

The version of draw-something on tumblr is a simple model of creative drawing. It’s meant to be a minimally defensible model of art, although probably a pre-postmodern art.

The program generates some random points (between 4 and 20, as these seemed like good numbers) and joins them in the order that they are generated as a polyline.

It finds the topmost point of the polyline and positions the pen a little way above it. Then it draws around the polyline, moving forward a little each time and being careful not to get too close to or too far away from it. As the program is simulating human drawing it drifts a little in direction each time. When the outline returns to be close enough to its original point, the drawing stops. The quality of the resulting line is a product of each of these factors.

This drawing model was informed by research into human hand movement but mostly it was derived from watching myself draw. This is a difficult thing to do, as drawing isn’t a very conscious activity. Eventually I would start drawing a line, stop myself, and try to think about what I’d been doing. This

The original inspiration for draw-something was Harold Cohen’s AARON, but draw-something’s output has never resembled AARON’s as both the task that the programs attempt and the way they approach it are different.

Art Computing Free Software Generative Art Projects

draw-something Rebooted


A new old version of draw-something is now online.

You can see it (and follow it on tumblr!) here:

draw-something started as a Prolog program called “Got To Start Somewhere”, which described both its algorithm and how I was feeling about art at the time. I quickly switched to Common Lisp, but once one of the earliest versions was working I created an ActionScript port to run online. This was made using a Free Software ActionScript compiler rather than Flash.

I wanted to show draw-something running for a talk Jim Andrews invited me to give, and I wanted an excercise in JavaScript, so I ported the ActionScript to node.js and to HTML5 canvas. Doing this and preparing for the talk inspired me to resurrect paintr as well.

It’s such an old version of draw-something that it has a couple of bugs that were later fixed. I fixed the most egregious one but there’s another that will crop up soon, finding it is left as an exercise for the audience. I also re-enabled the skeleton drawing code (the skeleton is the guide figure that draw-something draws around), using non-repro blue instead of the original bright red.

So welcome back draw-something online!