Lith printing is a darkroom technique in which an over-exposed print is developed in dilute lithographic developer, producing distinctive high-contrast images with pronounced grain, rich blacks and often warm, subtly coloured highlights. I’ve been drawn to the look of lith prints for many years, inspired by the gritty portraits of Anton Corbijn and the masterful printing work of Tim Rudman and Wolfgang Moersch.

It’s been a while since I made a lith print in the darkroom. On and off since then, I’ve played with various Photoshop recipes to reproduce the look, but never been really happy with the results. The best that Photoshop can do is to apply curves to approximate the contrast and colour of a lith print, and superimpose noise to add grain in the right part of the tonal range. I have thought for a while that a better approach would be to digitally simulate the lith development process, so that the distinctive features of a lith print arise naturally from the simulation rather than being added afterwards as separate visual effects. In particular, the aim should be to reproduce the local, self-reinforcing nature of infectious development, allowing grain, contrast, colour and edge effects to emerge from the interaction between neighbouring areas of the image.

I played around with these ideas way back in 2002, in a project with my undergraduate student Paul Whysall at the Department of Computer Science, University of Sheffield. The results of that project are now lost in the mists of time, but I recently thought about having another go with the help of OpenAI’s coding assistant, Codex. The results after a few evenings work are very promising.

The program was written in Processing, a Java-based environment for creative coding. I started by pointing ChatGPT at lots of literature on lith printing, including descriptions of the infectious development process. It outlined a strategy that I thought would work: using each pixel of an input image as the “seed” for a simulation in which developer activity, exhaustion and developed density are updated on a per-pixel basis.

This approach bears many similarities to cellular automata, such as Conway’s Game of Life, in which simple rules governing interactions between neighbouring cells give rise to complex and often unpredictable large-scale patterns. Here, however, each cell represents a small region of the photographic image, with its rate of development influenced by its initial exposure, the state of neighbouring cells and the changing activity of the developer. Once development begins locally, it increases the probability of further development nearby, creating the spreading clusters of density characteristic of infectious development.

I passed the outline plan to Codex and a basic version of the program came together in an hour or so. I then spent several evenings working with Codex to add new features: exposure control, putting more grain in the shadows and midtones than the highlights, a more realistic S-shaped tone curve, a control for the base paper density, and a system for storing and retrieving presets. I also got Codex to add a system for creating agitation artefacts (horizontal or vertical streaks). Once it was all working, I asked Codex to identify inefficiencies that could be eliminated to speed up the simulation. It did that too.

A nice feature of the program is that development proceeds in real time, and you have to “snatch the print from the developer” at the right point to get the effect you want. Just like real lith printing, there is a bit of waiting around followed by mild panic when you reach the stopping point. Unlike the chemical process though, it’s easy to re-start if you take development too far. I also provided a “nudge” button so that you can proceed one iteration at a time, when you are close to the completion point.

I’ve used the program for a few days now and have found that it’s capable of reproducing a wide range of lith printing effects, from very punchy images to smooth subdued tones. There is still room for improvement though. For example, at the moment it only has a basic control to vary the colour hue and saturation. I may well extend that in the future to include split-toning effects.

I must say that these new-fangled coding agents like Codex are very impressive. They are not a substitute for expertise: you still need a clear idea of what you are trying to achieve and enough software engineering knowledge to challenge the decisions they make on your behalf. Overall, though, using one has felt like a superpower, enabling me to produce a useful program in a few hours that would otherwise have required many days of work.

A few examples are shown below of lith simulations, made with the program from monochrome images in my back catalogue.