Skip to content

ARTERIA - The Making Of

ARTERIA is a long-form generative series released on fxhash in May 2022. Artèria means artery in Old Occitan, a Romance language spoken in the south of France.



ARTERIA is a long-form generative series released on fxhash in May 2022. It is the most complex and varied series I have created so far.

My goal was to experiment playing with an algorithm that can generate a huge variety then tame and modulate it with local rules.

Thanks to all the people who helped me on this project, especially, Julien Labat and Matthieu Segret. I was also very happy to get feedback and compliments from artists I admire like Rich Poole, Amy Goodchild, Shvemblr, Piter Pasma...
Finally, more and more of you are giving me feedback, sharing ideas and encouraging me on my Twitter, @camillerouxart. Thank you, it helps a lot!



As always, I started with a concept in mind and my traditional ugly sketch.
Here is the long thread where I've shared all the steps/fails/brainstorming I had for this project:

I think my inspiration came from some results generated on Midjourney by chance testing keywords like: "minimalist data visualization", "fractal logic diagram" or "japanese ink painting axidraw plotter".

These made me think about autonomous agents drawing a path and having children from time to time on their side. It's a quite common technique, for example used by KilledByAPixel in Chaospill or by flight404 in his Growth series and in its last Artblocks, Ancient Courses of Fictional Rivers.

At that time I had no idea if it would be beautiful or not. It was the good moment to start coding the basics and see how it looks.

Early Development

So, I started coding using p5.js. The basic rules are very simple. Each steps, each agent:

The children behave the same way, they are just smaller. I set a maximum recursion level. The smallest agents, called level 0, can't have children.

Here are my very first results:

Adding parameters to increase variety

One of my goal with ARTERIA was to have a huge variety (we also say entropy in generative art). To do that I started using more and more initial parameters. There are dozens of them in the final version. Some modify very small details, some other can change the whole result (colors, initial positions, agents count, size...) .

Here are some examples:

Parameters list

  • type: this can be set to random, top, bottom, left, right, point or 2 points. They define how the first agents are placed on the image at the beginning.
  • mode: are the agents drawing dots or lines
  • agentsCount: number of agents created at the beginning of the simulation
  • backgroundColor, color1, color2: they define the colors of the background, the default agent color, and the color sometime used on the smallest one.
  • color2Level: the level where color2 start to be used
  • angleDiviser: used to set the default angle between an agent and their children
  • angleRandomAmount: used to add random to the angle between an agent and their children
  • maxLevel: how many "level" of children we can have, also called recursion level
  • ttlMax, ttlMin: distance that biggest and smallest agents can travel before dying
  • sizeMax, sizeMin: size of the biggest and almost smallest agents
  • sizeLevel0: size of the smallest agents
  • sizePow: size distribution between different level of children
  • rotSense: the sense of rotation. I'm using rotation a lot to "unfold" the generated graph. It's needed to have a direction of rotation with the side of children birth.
  • outsideMarginLevel: the level where agents start to be able to go outside the margin
  • birthRateMax: the default distance biggest agents have to travel to have a new child
  • birthDistributionPow: define the birth rate distribution between levels
  • birthDistributionPowLevel0: birth rate distribution of the smallest level
  • birthDistributionReverseLevel0: is a Level1 is having children more and more or less and less frequently
  • zigzagLevel, zigzagType, zigzagSpeed, zigzagAngle: which levels of agents move doing zigzag, what type of zigzag (sine, sawtooth...), speed and angle.
  • ... and there is a lot more! You can watch the console logs in your browser if you want to see them all.

All these parameters are random. You should start to understand why the outputs generated by ARTERIA are so different from each other. The possibilities are endless.

And yet, that's not all. I also added local rules to modify the behavior of agents according to their position.

Example without local rules

Local Rules

Local Rules is a concept I love to use more and more. The idea is simple: change locally the rules/parameters of the simulation.

For this series, I did a lot of experiments. Finally, the most simple rules are the best. The more complex ones didn't work well and could appear messy.

So, in ARTERIA, in addition to the dozens of initial parameters, a combinaison of local rules can be added. Most of them have parameters that can also be set.

Here are the rules that can be added:

More over these rules can me added to specific zones:

Of course, multiple rules can be applied at the same time!

From algorithm to art

ARTERIA was a huge challenge. Each output is the result of a cascade of unpredictable events. A small change of an initial parameter can result in totally different outputs.


First at all, I'd spent a lot of time generating batch of outputs, tuning my generator, prevent uninteresting cases from happening... For exemple, in some cases the first agents can't die at the beginning of the simulation (godmode).


Also, I wanted these pieces to be beautiful from afar and up close. So I added a lot of details:

Big zoom to see how the picture is build


It's quite important for a long-form generative project to render the same output regardless of its size. To do that, I'm using an hidden reference canvas which always have the same size. It's the canvas I'm using as reference to know if an agent can move or not. That way, their behaviors are independent of the output size.

Left: final output - Right: hidden reference canvas


At that moment, magic happened! People started to see pareidolia. Very often, on my tweets, followers commented to say what they see.

Pareidolia is the tendency for perception to impose a meaningful interpretation on a nebulous stimulus, usually visual, so that one sees an object, pattern, or meaning where there is none.
Common examples are perceived images of animals, faces, or objects in cloud formations, seeing faces in inanimate objects, [...]

– Wikipedia

For example, here are some comments I had on different outputs I shared:

That was all I wanted, control the chaos enough to create meaning and emotion.

What do you see in this one? 😊


Immutable Collective News: issue #1

Immutable Collective News: issue #3