A reflection on Frammenti

Frammenti #7

As I'm writing this, one week has passed since Frammenti went live. I spent most of the past 7 days acting like nothing has changed, internalizing, in the back of my mind, what all of this means.

Frammenti, for those who don't yet know, is my first project on Art Blocks, an NFT platform dedicated to Generative Art. It was "good enough" to be included in the official Curated Collection by Art Block's curation board.

Needless to say, I was beyond excited about this, and to be honest, I still am!

For a long time, my art and my practice used to be almost for my eyes only. I was sharing it only with a few, selected people. A happy, little, secret walled garden, in which I was sheltering from the world.

At the beginning of this year, I managed to tear down these walls, opening this oasis to all who want to stop by. And even if I'm still getting used to it (I need to often shut up that inner voice suggesting to panic and flee), tearing those walls is making that garden richer and healthier by the day. Not only it made me a better Artist, but also made me feel part of a vibrant, amazing community that shares my same passion for digital art.

As for most, impostor syndrome is very real. Having one of my works selected to live next to some of the generative artists I admire the most, is not only a great validation to shut up that voice, but makes me feel like I finally found my Ikigai!

Behind Frammenti

There are some recurring themes in my art: identity, sense of belonging, past, the joy of living, Memento Mori...
Frammenti is a reflection on life and identity, from the perspective of our past memories.

Memories define us. Made of countless fragments, they are an ever-changing snapshot of our past. Frammenti is a digital explosion of life, inspired by our most personal treasures.
Frammenti's description on Art Blocks

For starters, Frammenti is composed of 555 individual pieces generated by the same algorithm. Take a look at the outputs here.

If I need to roughly describe what Frammenti's algorithm does, I would say:

  1. Create a grid with r rows and c columns
  2. Create a regular shape with v vertices
  3. Pick two random vertices s, e
  4. Find m1, the midpoint between s and s - 1 (previous vertex)
  5. Do the same for m2, between e and e + 1 (next vertex)
  6. Shift slightly m1 and m2 toward one of their original vertices
  7. Connect m1 and m2 and split the shape in half
  8. Repeat n times steps 3 to 6 for every fragment
  9. Place the fragmented shape on the grid
  10. Repeat steps 2 to 9 until all grid is filled

Every fragment in the shapes symbolizes one memory. Combined, they symbolize our life.

Furthermore, Frammenti is animated. With time passing, each fragment starts agitating in its position. When the original shape becomes unstable, everything explodes. Fragments are released from the original shape's gravity and start roaming around.

If shapes represent our life, their explosion represents our death. Even if we no longer exist in one form, those memories will outlive us, gifted to all the people we have shared them with.

After a while, shapes get reunited and the whole process starts again infinitely. This process can also be sped up by clicking on the canvas.

Each generation (or mint, how's called in cryptoart), is unique and based on a hash. Feed the algorithm the same hash, and it will always give the same output. The hash is used as a seed for PRNG, and as well it determines 19 different features that influence the look of the output. I'll break down and analyze all of them later below.

The aftermath

I think that by now, it's no surprise that I'm an introvert, and to be honest, the week before the drop was a wild ride. I started seeing my name popping up everywhere: a discord channel named after me, my interview with Jeff from Art Blocks, being featured in all Art Blocks channels and their newsletter, the live mint audio chat scheduled right before the drop...
Add all the "what if XYZ goes wrong?" questions, the crypto market crashing two days before Frammenti going live, with ETH gas up to 1,500, and you get a pretty stressful week.

Thankfully, adrenaline and excitement kept me from feeling completely overwhelmed, and everything went well way beyond my expectations!

Frammenti sold out in ~74 hours.

If you collected one or more Frammenti, thank you!

The positive feedback has been incredible, I feel deeply grateful that my art was seen, appreciated, (and even collected!) by so many people. It brings me immense joy seeing this not-so-secret garden filling with new faces!

And now, what?

I don't know what the future will bring next. What I know is that there's something truly empowering knowing that I could live of making art for while. To me, focusing 100% on what one enjoys doing is the ultimate freedom. And I can't wait to share this freedom with the world!

 — Stefano

How to display Frammenti

Frammenti is meant to be enjoyed both as a static print or dynamic piece.

I created a little utility to export both images for prints or videos. You can find it here, just replace in the URL the token to load the respective mint. If you need any help using the tool, feel free to reach out!


Given that the artwork can adapt to any aspect ratio, I would suggest using a size with the same orientation as the grid:

  • Portrait when Rows are greater than Columns
  • Landscape when Columns are greater than Rows
  • Square when they're the same

Live view

To display Frammenti dynamically, the easiest thing to do is to load Art Block's live view in full screen. The piece will keep exploding and re-composing itself infinitely.

If that's not an option, you could export a video and play it in a loop.

A deep dive into traits

Let's take a look at the different traits that define Frammenti and their probabilities, combined with some of my favorite generations as examples. Click any image to see it live.

Disclaimer: my math & statistics skills are quite bad, these numbers might be way off. 😁


There are 6 color palettes in Frammenti, each one with 8 colors inside. Every palette had a 1/6 chance of being used. This means that for 555 generations there should be ~92 with each palette.

  • Terracotta: 86 (-6)
  • Arctica: 97 (+5)
  • Tropicana: 88 (-4)
  • Elemental: 102 (+10)
  • Honey: 76 (-16)
  • Feelings: 106 (+14)


For a total of 48 colors in 6 palettes, also here there's an equal chance for a color to be chosen as background. A probability of 1/8 in the palette and 1/48 overall.


Probably the trait influencing the most the final look. It chooses whether the fragments are filled with colors or not. There's a 25% that this doesn't happen.

  • Yes: 420 (Expected 416, +4)
  • No: 135 (Expected 139, -4)


The stroke-width gets calculated dynamically depending on the grid size and the Fragmentation & Entropy properties. If the traits Fill: Yes and Decay: None are present, there's a 50% chance of having no stroke at all.

  • None: 69 (Expected 69, 0)
  • Light: 77
  • Regular: 41
  • Bold: 330
  • Extra: 38


If Fill is set to Yes, this will be automatically set to Multicolor, and the stroke color will be black. Otherwise, for Fill: No there's a 50% chance that the stroke will be set to a fixed color. This color is chosen randomly from colors in the same palette that have enough contrast from the Background.

  • Multicolored: 496 (Expected 486, +10)
  • Fixed color: 59 (Expected 69, -10)

Rows, Columns & Shapes

Both can range from 1 to 5, with each number having a 1/5 chance of being chosen. Shapes represents the total number of shapes in the piece.


There's an additional 1/8 chance that Rows & Columns get set to the same value, creating a square. The total probability should be 32.5% for this to happen.

  • Yes: 164 (Expected 180, -16)
  • No: 391 (Expected 375, +16)


These determine the overall width of the grid. With a 1/3 chance, there were 185 expected for each of them

  • Narrow: 205 (+20)
  • Average: 174 (-11)
  • Wide: 176 (-9)


Same as width, but for the grid height.

  • Short: 211 (+26)
  • Average: 161 (-24)
  • Tall: 183 (-2)


This is influenced by the number of shapes in the output:

  • Macro — only 1 shape: 28 (Expected 25, +3)
  • Duo — 2 shapes: 29 (Expected 33, -4)
  • Trio — 3 shapes: 33 (Expected 33, 0)
  • Army — 25 shapes, the highest number: 36 (Expected 25, +11)
  • Group — anything else: 429 (Expected 439, -10)


The number of vertices of the shape used to originate all the shapes used in the grid. There's a 12.5% chance this is a circle, or 17.5% anything else.

  • Triangle: 102 (Expected 97, +5)
  • Square: 108 (Expected 97, +11)
  • Pentagon: 93 (Expected 97, -4)
  • Hexagon: 99 (Expected 97, +2)
  • Heptagon: 89 (Expected 97, -2)
  • Circle: 64 (Expected 70, -6)


When splitting shapes, there's a probability that one of the splits gets removed, creating some gaps. Decay controls this. Decay: No decay has an 11% more chance to happen.

  • No decay: 182 (Expected 186, -4)
  • Low: 134 (Expected 123, +11)
  • Average: 126 (Expected 123, +3)
  • High: 113 (Expected 123, -10)


The number of times the initial shape gets fragmented recursively. Decay: None and higher amounts of Shapes decrease this number.

  • Low: 160
  • Average: 230
  • High: 140
  • Maximum: 25


Defines how much the individual fragments are pushed away from the original shape in the beginning. Stroke: None and a low Fragmentation automatically set this to No entropy.

  • No entropy: 134
  • Low: 133
  • Average: 161
  • High: 78
  • Maximum: 49


This is set to Yes if Decay: None & Entropy: No entropy are true at the same time.

  • Yes: 95
  • No: 460


This defines the split style, or by how much the divisions deviate from the midpoint between two vertices.

  • Half: 2 — the rarest trait, splitting the shapes in half. Happens only when Fragmentation: Low and Rows and Columns are 4 or 5)
  • Four: 13 — similar to half, splits the shapes four times. Happens only when Fragmentation: Low and Rows or Columns are 4 or 5
  • Similar: 43 — almost no deviation from the middle point
  • Clean: 186 — regular deviation
  • Diverging: 173 — strong deviation
  • Random: 138 — midpoint is chosen randomly


Determines how much time needs to pass before the shapes explode. Higher stability means a longer time. Each option has the same probability.

  • Minimum: 66 (Expected 79, -13)
  • Very low: 75 (Expected 79, -4)
  • Low: 86 (Expected 79, +7)
  • Average: 71 (Expected 79, -8)
  • High: 85 (Expected 79, +6)
  • Very high: 84 (Expected 79, +5)
  • Maximum: 88 (Expected 80, +8)