Digital Stamping with Python
In a new approach, I started placing rubber-stamp marks generatively with Python.

Jul 27th, 2020

Ever since I started exploring rubber-stamped paintings at the beginning of the year, I keep thinking of enhancing them digitally. Above all, I wanted to add augmented reality animations to go with the manually stamped pieces. Initially, I created several pieces manually that I connected into a looping sequence. It created a pleasant, serene atmosphere allowing the stamped clouds to move through the frame slowly.

Tokenized Segmented Cloudscape
Animation based on seven connected hand-stamped artworks
0:30, 1100 x 1100 px, MP4
Tokenized on SuperRare

However, the evolving and dissolving character of clouds was missing. The limited ability to scale towards larger-format cloudscapes was another reason to rethink this approach. It gets increasingly difficult to connect the more stamp marks you have.

Over the next months, I started thinking of ways to stamp with a Python script digitally. I could process videos with the Python script if I split them into individual frames. Once processed, I could reassemble the frames back into an animation sequence.

Creation of Stamp Set 01

First, I scanned a small amount of 20 rectangular stamps and tried to use them as mark templates. Via Python, I subsequently added variance in transparency, position, rotation and size of the placed marks to recreate a more manually stamped impression. However, I quickly abandoned this approach as the created image appeared too computer-generated. Several characters of manual stamp marks turned out very hard to recreate, such as the uneven distribution of ink, randomly misplaced marks, imperfections due to dried ink, and pressure-based mark deformations.

The first breakthrough came by substantially increasing the stamp base towards an entire set. I digitalized 300 stamp marks to build stamp set 01. Based on these manual marks, the script instantly became organic as it included the typical characters of manual stamps. However, I noticed heavy repetition in the stamp placement in areas with little to no contrast. 

Preliminary test outputs showcasing significant repetition issue

Introduction of Rules and Randomness

To limit repetition, I implemented safe zones, preventing the same stamp from being placed twice in the surrounding areas. Next, I enforced a variable placement of marks within the stamp set which means that a stamp could not be repeated until the script placed the defined percentage of all available marks. This addition drastically limited the repetition even further.

The last aspect that still proved difficult was areas with no change within several image frames, such as a cloudless sky area that does not change for a few seconds. To appear manually stamped, the script needed to place all marks of each frame entirely differently. I was able to achieve this with the random placement and starting point of stamps, instead of processing an image top to bottom. Combined with the enforced use of marks, the same image can be processed through the script several times, resulting in a different output image.

Digitally Stamped
Animation of individual Python-processed video frames based on a scanned set of rubber-stamps.
1,200 x 1,200 px, 51 frames, 0:06, GIF, stamp set 01
Tokenized on SuperRare

Digitally Stamped is the first animation project realized with this Python script. It recreates the high-contrast animation of Mattia Cuttini’s logo created by Skygolpe. In recognition of Mattia’s stamping technique, I gifted him with the first tokenized animation.   

With this blog, I release the animation Post nubila Phoebus as the first cloud animation created with the stamp set 01. It recreates a timelapse video I recorded earlier this year and cut towards a loop. It is the first attempt to process cloud video frames with this script, and I think the script is ready to work on the next iterations.

Post Nubila Phoebus
Animation of individual Python-processed video frames based on a scanned set of rubber-stamps.
3,840 × 2,160 px, 341 frames, 0:30, MP4, stamp set 01
Tokenized on SuperRare