Article - Generative Toolbelt


A lot of work was needed, but I now can say that I think it's really worth. I finally managed to split my working project in two pieces, opening my main graphics library to the public making it available to everyone on GitHub!

Here are the links:

Generative Toolbelt


In this article I explained how important is the "toolbelt" that each generative artist builds to create his sketches and artworks.

This Toolbelt is basically a big set of function to reduce as much as possible the natural friction between the creative process of drawing and the technical (but sometimes creative too) coding aspect of creating art procedurally.

The main goal of this library is to give to the coder/artist some tools to easily create shapes, lines, colors, and everything that it could be hard, long, or repetitive to code.

I think that the nature of this kind of libraries is pretty personal since everyone should build theirs utility functions based on their needs, but I still want to publish my own library and document it as much as possible to help out new programmers that try out generative art for the first time, or maybe even inspire experienced ones offering a different way to look and manage components of their artworks.

A brief tour

I decided to adopt a "modular" approach distributing generative-toolbelt. Each module works with similar shapes or structures, so you could require only the modules that are needed for that particular sketch, without having a bunch of functions loaded when only a few are actually used to create the artwork.

At the time being (first release of generative-toolbelt, version 0.1.1) the modules in the library are:

  • - Point.clj: Point, Vector, and Line structures with many utilities to edit them, calculate distances, calculating angles, mirroring, and conversions.
  • - Circle.clj: Circle and Ellipse structures and some functions to calculate points on their surfaces.
  • - Path.clj: Paths structures with conversion and smoothing functions through the Chaikin algorithm.
  • - Triangle.clj: Triangles structures with recursive triangle splitting and area triangulation functions.
  • - Utils.clj: Canvas operations, draw options setters, random function wrappers, and sequences operations.
  • - Color.clj: A draft of a Color structure to easily manage colors, still needs implementation.

    These modules should allow anyone to creates artworks with various degrees of complexity. Each one of my artworks currently in this website are made with these functions. The only exception is for the watercolor ones, but I'm planning to refactor those functions too to create another module in the future.

I'll keep this libraries up to date as I work on my personal artworks, so if you have any suggestion or problem with it please let me know it opening an issue on the GitHub page or reaching out to me in any other way you like!

This library thing took me a big chunk of my "free" time, so I couldn't spend enough time on the actual artworks to deliver a new series in this post. But, when this will be online I'll get back at drawing since I have many ideas that could create interesting pieces, so be sure to don't miss it!