One of the things that’s common to the vast majority of grimoires is that they claim antiquity, which is not something I really buy in to in most senses - I can understand some weight being put behind the idea that a practice has lasted because it worked, but the idea that “these sigils were definitely written down by King Solomon” really carries no particular weight to me.

As a mental anchor point though, it’s so culturally ingrained that it’s an excellent way to quickly and easily attribute importance to a thing, and thus an incredible tool in your arsenal to generate gravitas around things you want to focus on.


I was working on some code to generate magical sigils in the style of Crowley’s re-interpretations of the sigils in The Lesser Key of Solomon. By which I mean that he put them in circles with names of the angels and demons around them.

My implementation was using PyCairo, and I wrote the code to produce the “name circle” (optionally in the Malachim alphabet) around generated “*grams” starting with a pentagram. Now as a proof of concept this was probably a great place to start and I was able to generate some kinda weird stuff at least for visuals in my CampGND talk, but my next artefact is really supposed to be something to carve into my desk.

I say “supposed” because I created a servitor with the express intent of finding said sigil, which means that I have to complete the task now or the spell didn’t work. Yeah I’m not even going to get into that logic now but suffice to say I intend to complete the goal.

One of the things that was stopping me from working on the code was that I didn’t really enjoy it - fact of the matter is I don’t like writing Python for a number of reasons that you could probably call aesthetic, but the most important one being that it doesn’t really feel very occult. Yeah you heard me right, Python doesn’t feel occult enough. It feels like an anachronism when used for occult means.

You know what programming dialects feel like channeling the powers of the universe? Lisps.

Knights of the Lambda Calculus

Now before I embark on these “ideas of antiquity” I should probably clarify something very important out of the historical associations that exist along the timeline of Lisp, from MIT’s AI lab to Emacs Lisp: Richard Stallman is a relic of outdated ideas surrounding what kind of behaviours merit will excuse. Fuck that guy.

With that out of the way, Lisps and Schemes map somewhat more literally to ideas like lambda calculus at the birth of computer science and were considered the holy grail of programming languages back in the days of heavy iron. They were above and beyond what the priesthood manning the IBM mainframes were thinking about, and largely beyond the capacity of the computers of the time. Sometimes it feels like programming with algebraic precision.

That said, I first tried to rewrite in Racket. I’m now pretty sure that image.rkt is written for teaching in the DrRacket IDE, not summoning Satan or whatever. I also realised something about Lisps.

I switched back to an old heavyweight which I have come to the conclusion has totally ruined other lisps for me: Clojure.

And it’s like being in an old comfy pair of trousers. Powerful trousers with deep arcane powers, and a function that you probably want to use that does that one thing (whatever it is) for you.

My code now adequately separates out the data processing (i.e. the real magic, the sacred geometries) from the horrible impure side-effecty programming that is rendering shit to an image. Additionally, rather than using a completely underpowered image library I’ve used quil which is more geared towards 3D live-coding visualizations, so overpowered instead of under.

What next

I’ve already implemented the full featureset that I already had in significantly less time with significantly less code. Additionally because of my emacs setup it’s got all sorts of mad symbols for lambdas and partials which makes it look super arcane ;) I even aliased tau (2 * pi) to its greek letter heh. Next I want to do the following:

  1. Define the point joining pattern by passing a lambda or generator or some other callable to dictate which points get joined to which others. This should be a great way of finding some gnarly looking patterns
  2. Use the animation functionality of quil to create motion in the sigils
  3. Think some more about generation of non-gram patterns. Previously I’ve achieved this by pasting images of dickbutt in the center.