horizon(te)s

zach lieberman
10 min readJul 9, 2022

I was approached in early spring about doing a collaboration for fxHash, a tezos based platform for long form generative work. If you are unfamiliar with long form generative work, the idea is that you write software and when people mint it as an NFT the artwork is created on the spot — using the their own personal information. It’s simple, but I like to think of it like one of those quarter toy dispensers at the super market, you don’t exactly what’s going to come out — you write software and the art is created when minted.

The question posed to me was who I would like to collaborate with. I immediately thought of and suggested Iskra Velitchkova (pointline_ on twitter) a generative artist I really admire. The folks at fxHash told me, “Sorry, we’ve asked Iskra 2 times and she’s said no!” but I suggested that they let me try to ask again, and remarkably she agreed!

If you are unfamiliar with Iskra’s work, I will paste some images here to give you a sense of her approach:

I find her images inscrutable and really not like any kind of generative work I am used to — they are dense but also incredibly luminous. I like that she makes images that almost feel broken or just on the edge of perception

For our collaboration project, we decided that we wanted to do something a little different. I think the original idea or intent was to have two artists team up and work on one thing — for example kinder(garden), monuments by Yazid and Zancan. In our original call, we focused on what we saw in the others work. I really enjoyed this exercise and originating from that, we thought, wouldn’t it be great if we confused people a little bit with this drop? For example, Zach doing things like Iskra, or Iskra doing things like Zach? It would be nice to mix things up.

We started down this route — I even did a variety of line oriented sketches since I typically work with gradients and Iskra uses dense layers of lines

The idea of confusing people slowly morphed into (I think) an elegant approach, having a conversation with the othercollaborators work. We decided to focus on three modes:

  • me as me
  • me as you
  • me as you as me

As well we picked a general theme, horizons, which is a through-line in both of our works. This allowed us the freedom to express with our own style but also have a chance to engage with and converse with each other. We had been calling the project “horizons” but learned there is another project with that name, so we settled on Horizon(te)s — a kind of homage to the mixing of styles and approaches in the project.

For me as me, I settled into my normal maximal style of glitchy / boxy distortions of color

and feel quite happy with how the final outputs come out. Some are very subtle, while others are really wild:

In particular I developed a new variation, which I call weaving, that has a textile quality

For me as you, I focused on the geometry behind Iskra’s work, especially evident in her fxHash work Uninhabitable. Here’s a really nice write up on that by Anna Wolf . She writes, “the delicate shapes of Uninhabitable appeared like a distant memory of beloved vibrant metropolitan places”

I decided to stick to a simple geometric form, the rectangle, and explore how I could organize arrangements with it. I wanted it to feel architectural, but not exactly like a cityscape. Something more ambiguous — where you could read the blocks as building blocks, or windows or even portals

One thing that I love about Iskra’s work is she also make things which are subtle, amost invisible. I had fun exploring how subtle I could go

For the final mode, me as you as me, I really struggled with this (and it was a great head trip, to sort of imagine how another artist would recreate your work). I gravitated to Iskra’s curtain work:

and I thought if I was her, responding my work, I’d make “curtains of light” — so for this mode, there’s almost curtains of color that mix and create new forms — all oriented along the horizon.

Again, one of my largest challenges was trying to understand subtlety — the kind of subtlety I see in Iskra’s work — I spent alot of time adjusting knobs. Most people think of coding to make art as simply typing lines and lines of code, but I found the real work was endless tweaking. Turning 0.8 into 0.81 and 0.82, and seeing what comes out. I can’t tell you how many variables have been adjusted, but it feels like all I’ve been doing for days now.

I should say that this variety of long form generative art is actually pretty stressful. In general I like to curate my outputs, and the idea that you are making software that just generates new things at will seems really foreign to me. Also I really like danger — I kind of want to make images that break, or are at the edge of breaking and the more unknown you add to the software, the more risk you have. In the fall, I was going to do an artblocks curated drop and I found that I couldn’t stop hitting refresh on the browser — and that the feeling of just not knowing what the output would be, that sense of giving up control honestly drove me a little crazy. I found myself like some kind of casino slot player starting at the screen, wondering what would come out next. I felt really not like myself. After pulling the drop, another artist, Rafaël Rozendaal, suggested treating this more like an experiment — and not putting so much pressure on it. The sentiment really resonated with me, and I’m happy to report that during this process, and I think especially because of the chance to work an artist whose work really speaks to me, this whole thing has felt really light, fun and airy. I sleep well at night and I am enjoying the experience of tweaking and seeing the different outputs.

Now that we’ve published, I’m excited (and honestly a little on edge) to see what comes out.

I hope you enjoy the work Iskra and I have made ✌️

Coda

After I wrote this medium post, we uploaded the code to fxHash and I got a message from Iskra that she got reports that one of the scenes (one of *my* scenes) was not working on windows. I had been testing quite a bit, but I didn’t use a windows machine and had tested roughly with an online service that kept disconnecting but seemed to work— I generally had a perhaps overconfident feeling things were working, but it was one of the those crazy moments that happens in software where something that could go wrong does. In 2012 I wrote a poem for the end of one my eyeo talks about things going wrong and it felt like one of these moments for sure.

There was a frantic call with the fxHash team, who were all super great, to postpone the drop and there was something like less than one minute of time to do that — we were all on a discord call and all my comments above about how chill everything was, throw them out the window. This was DRAMA.

I took the Friday to get a windows machine out of storage, and within an hour I had found the specific line of code

not how I expected my Friday to go
broken / fixed

In case it’s helpful, I found this guide pretty helpful for some better reasoning about debugging shaders. In general, with windows shaders because they are translated to hlsl there’s some really wild edge cases and gotchas. In addition, I found anydesk and ngrok really valuable tools for testing.

The other issue I looked at, which honestly wasn’t as much of a show stopper, is seeing differences slight between browsers in the shader.

This happens because of things like floating point precision — different shaders might represent floating point numbers with 16, 24, or 32 bits and as you start to use larger numbers in your deterministic “random” function, the results get further away from each other. I was able to brings things closer together by providing smaller inputs and generally trying to use smaller numbers where I could around random functions.

Another fix, that didn’t have a huge impact on my problems, but I mention it here since it’s seems like sort of hard fought wisdom, is truncating random floats in javascript. Different browsers handle precision differently and especially if you branch off a randomness, such as picking a mode or changing some properties, you may have difficulties if the numbers you are checking very slightly across browsers. This code (which comes via Tyler Hobbs) is helpful for truncating the precision on floats.

I decided the best way to test widnows would be to go to Microcenter and look at the project on all kinds of laptops. I pretended I was shopping — I would look at each machine carefully, kind of weight it, open and close it a few times and then test the code. I felt like I could have made an art exhibit there.

Finally, in addition to all the stress of debugging, this moment also made me see how much stress this project was causing at home — since I did get into a kind of crunch mode towards the end of this and although I wrote above how chill I felt it wasn’t exactly like that to folks around me. I don’t spend enough time thanking my awesome partner Molmol and our 12 yo River, so I want to conclude by saying how crucial they are to everything I do and thank them for their support and patience.

So, our drop is soon! I hope I don’t have to add anything elsee to this document :) Thanks to Iskra and the fxHash team, and see you Monday!

--

--