Generative Type Design

For graphic designers, the use of typefaces is crucial to create messages and add layers of content. The choice and use of font gives indications regarding the subject we are addressing. In this work, we present a computer system that designs fonts in a generative way. For this, three aspects were worked out: (i) the development of the structure of the typefaces generated and the codification of the different elements of the anatomy of the letter in different layers; (ii) the combination of layers of different typefaces; and (iii) the creation of fonts through the generation/ modification of the elements of these layers.

Figure 1

Video of the development process


The development of the structure of the glyphs

Our first goal was the generation of the typeface structure. For that, we decided to start by extracting existing fonts skeleton. Therefore, we make sure that the design of the glyphs follows the rules of traditional font design. We decided to use Zhang-Suen Thinning Algorithm [1] that aims to extract the structural lines of a binary image, so it is ideal for our case, the skeleton extraction.

Division of the skeleton into strokes

With the skeletons extracted, we needed to find a method that identified the different parts. After analyzing the generated skeletons, we noticed that when a point was part of three segments it divides different strokes of the skeleton. A stroke is composed of a list of points, but in general, they are more than two and a set of strokes compose a skeleton. We scanned all the points of the skeleton and when we found a border point we created a new stroke, and so on till the end. Figure 2 presents the process of skeleton extraction and division into parts of an ‘h’. The circles highlight the border points and a different colour was applied to differentiate the different parts detected.

Figure 2

The extraction of the skeleton of an ‘h’ and its posterior division into strokes


Skeletons recombination

Since we already had a system that generated skeletons, the next step was the combination of parts between different skeletons. For each glyph, we needed to assess which strokes of each skeleton could be associated with each other. To do that we determined the angular velocity and the central point for each of skeleton. Therefore, each stroke did not need to be totally equal to the other to be associated. To put it in context, angular velocity is a vector that represents the process of changing the orientation of a given line. The central point is an average of all points of the part in question.
The association process started with the ordering of the strokes of the first skeleton, from the longest to the shortest length. Then, each of these parts was compared with all the constituent parts of the second skeleton and so on. When the compared parts had a similar angular velocity and centre point, they were considered corresponding. In the end, we had, for a given character, several versions/skeletons for each stroke. Figure 3 presents generated skeletons by the recombination of different typefaces, each colour represents a different input typeface


Figure 3

Examples of generated skeletons by the recombination of different typefaces

Give body to the skeletons

The last part of the process was the development of the structure of the glyphs. The first step of this project, the extraction process, started with the exclusion of the pixels furthest from the centre of the shape. Therefore, when calculating the distance between each pixel of the extracted skeleton to the nearest pixel from the border, we determine the width of the original typeface. With this measure, we can replicate the glyph, or increase or decrease the weight proportionally. Then, using different shapes (e.g. circles, triangles, squares, or abstract shapes) repeatedly we fill the strokes of the final skeletons and generate typefaces using different colours and transparencies. The filling of each stroke is composed of the repetition of modules along the stroke line. For each generated typeface we could determine which typefaces we wanted as input and how many and the used colours and modules. Each chosen typeface had a colour and a shape associated. Figure 4 presents a series of generated m’s.

Figure 4

Examples of generated m’s



[1] Zhang, T. Y., and Suen, C. Y. 1984. A fast parallel algorithm for thinning digital patterns. Commun. ACM 27(3):236–239.



  • J. Parente, T. Martins, and J. Bicker, “Generative Type Design,” in Proceedings of the Ninth Typography Meeting (9ET), 2018.