Alexandre B A Villares


sketch-a-day

coding a visual idea a day

Welcome! My name is Alexandre Villares and since January, 2018 I have been coding sketches everyday, publishing the source code in the same repository that stores this page, github.com/villares/sketch-a-day.

The results here are mostly tentative, exploratory, and I don’t feel like they need to be relevant or meaningful on any particular day. The everyday practice leads to the emergence of ideas that I consider interesting, worthy of further exploration. Some of those have been added to selected work, this collection itself became valuable for me, and it is my pleasure to share it with anyone willing to explore coding as a creative and expressive medium.

To support my artistic work, research and open educational resources I freely publish on-line, donate using Wise, Liberapay, PayPal, or to the Brazilan PIX key 46c37783-5edb-4f1c-b3a8-1309db11488c.

You can follow me on Mastodon @villares@ciberlandia.pt or at @villares@pynews.com.br, where I post most of my daily sketches. Please do not hesitate to contact me regarding licenses to use my work, teaching opportunities, consulting or other projects.


2026 | 2025 | 2024 | 2023 | 2022 | 2021 | 2020 | 2019 | 2018


sketch_2026_02_26

sketch_2026_02_26

sketch_2026_02_26 [py5]

979 ways of dividing a square with a 3x3 grid of points (980 if you count not dividing the square at all as one!)


sketch_2026_02_25

sketch_2026_02_25

sketch_2026_02_25 [py5]

979 ways of dividing a 3x3 grid of points into polygons. Did I miss any? I hope not. The polys are colored according to the number of vertices.


sketch_2026_02_24

sketch_2026_02_24

sketch_2026_02_24 [py5]

WIP / debug view: #shapely union is generating some bad polygons maybe subdivided edges or badly behaving vertices?) I have to figure out how to fix them.


sketch_2026_02_23

sketch_2026_02_23

sketch_2026_02_23 [py5]

197 ways of dividing a grid of 3x3 points into triangles. Removing rotations.

I have done this before, but it has been fun doing it again from scratch I like the strategy this time much better.


sketch_2026_02_22

sketch_2026_02_22

sketch_2026_02_22 [py5]

270 pairs of non-overlapping triangles from a 3x3 grid of points. Removing rotations.


sketch_2026_02_21

sketch_2026_02_21

sketch_2026_02_21 [py5]

WIP: A first attempt at rendering a dictionary that shows on each row, at the start on the left, one of the 76 triangles that can be drawn on a 3x3 grid, then all the other triangles that do not overlapp with it. Tweaked the next day…


sketch_2026_02_20

sketch_2026_02_20

sketch_2026_02_20 [py5]

The 23 ways of dividing a 3x3 grid into 2, 3 and 4 triangles, excluding rotations.


sketch_2026_02_19

sketch_2026_02_19

sketch_2026_02_19 [py5]

244 ways of dividing a 3 x 3 grid of points into 6 triangles.


sketch_2026_02_18

sketch_2026_02_18

sketch_2026_02_18 [py5]

471 of 1703 triangulations of the 3 x 3 grid


sketch_2026_02_17

sketch_2026_02_17

sketch_2026_02_17 [py5]


sketch_2026_02_16

sketch_2026_02_16

sketch_2026_02_16 [py5]


sketch_2026_02_15

sketch_2026_02_15

sketch_2026_02_15 [py5]


sketch_2026_02_14

sketch_2026_02_14

sketch_2026_02_14 [py5]


sketch_2026_02_13

sketch_2026_02_13

sketch_2026_02_13 [py5]


sketch_2026_02_12

sketch_2026_02_12

sketch_2026_02_12 [py5]

This sketch was made during an activity at Sesc today :)


sketch_2026_02_11

sketch_2026_02_11

sketch_2026_02_11 [py5]


sketch_2026_02_10

sketch_2026_02_10

sketch_2026_02_10 [py5]


sketch_2026_02_09

sketch_2026_02_09

sketch_2026_02_09 [py5]


sketch_2026_02_08

sketch_2026_02_08

sketch_2026_02_08 [py5]


sketch_2026_02_07

sketch_2026_02_07

sketch_2026_02_07 [py5]


sketch_2026_02_06

sketch_2026_02_06

sketch_2026_02_06 [py5]


sketch_2026_02_05

sketch_2026_02_05

sketch_2026_02_05 [py5]


sketch_2026_02_04

sketch_2026_02_04

sketch_2026_02_04 [py5]


sketch_2026_02_03

sketch_2026_02_03

sketch_2026_02_03 [py5]


sketch_2026_02_02

sketch_2026_02_02

sketch_2026_02_02 [py5]

WIP…


sketch_2026_02_01

sketch_2026_02_01

sketch_2026_02_01 [py5]


sketch_2026_01_31

sketch_2026_01_31

sketch_2026_01_31 [py5]

I’m restarting my shape subdivision ideas, this time with simpler structures (maybe?) instead of an object oriented “Shape” class.


sketch_2026_01_30

sketch_2026_01_30

sketch_2026_01_30 [py5]


sketch_2026_01_29

sketch_2026_01_29

sketch_2026_01_29 [py5]


sketch_2026_01_28

sketch_2026_01_28

sketch_2026_01_28 [py5]

A crude attempt at a noisy brush #PerlinNoise


sketch_2026_01_27

sketch_2026_01_27

sketch_2026_01_27 [py5]


sketch_2026_01_26

sketch_2026_01_26

sketch_2026_01_26 [py5]


sketch_2026_01_25

sketch_2026_01_25

sketch_2026_01_25 [py5]


sketch_2026_01_24

sketch_2026_01_24

sketch_2026_01_24 [py5]

py5.blend_mode(py5.MULTIPLY)


sketch_2026_01_23

sketch_2026_01_23

sketch_2026_01_23 [py5]


sketch_2026_01_22

sketch_2026_01_22

sketch_2026_01_22 [py5]

I enjoyed this one, randomizing the widths of rows and columns of a grid then applying a #TSP strategy. #genuary #genuary22 #genuary2026


sketch_2026_01_21

sketch_2026_01_21

sketch_2026_01_21 [py5]

Ada meets Waldemar Cordeiro and Giorgio Moscati (Learn more about them at https://www.waldemarcordeiro.com/ & https://ekac.org/moscati.html)


sketch_2026_01_20

sketch_2026_01_20

sketch_2026_01_20 [py5]


sketch_2026_01_19

sketch_2026_01_19

sketch_2026_01_19 [py5]


sketch_2026_01_18

sketch_2026_01_18

sketch_2026_01_18 [py5]

10000 steps of walker that turns 30° one way if the step is prime and 30° the other way. #genuary #genuary18 #genuary2026


sketch_2026_01_17

sketch_2026_01_17

sketch_2026_01_17 [py5]

I’m not sure it would count as #genuary17 but I wanted to do this inspired by something I saw from @ranoya@vis.social

#genuary #genuary2026


sketch_2026_01_16

sketch_2026_01_16

sketch_2026_01_16 [py5]


sketch_2026_01_15

sketch_2026_01_15

sketch_2026_01_15 [py5]


sketch_2026_01_14

sketch_2026_01_14

sketch_2026_01_14 [py5]


sketch_2026_01_13

sketch_2026_01_13

sketch_2026_01_13 [py5]


sketch_2026_01_12

sketch_2026_01_12

sketch_2026_01_12 [py5]

#genuary #genuary12 #genuary2026 #3D boxes only


sketch_2026_01_11

sketch_2026_01_11

sketch_2026_01_11 [py5]


sketch_2026_01_10

sketch_2026_01_10

sketch_2026_01_10 [py5]

#genuary #genuary10 #genurary2026


sketch_2026_01_09

sketch_2026_01_09

sketch_2026_01_09 [py5]

Tweaking an old idea of coloring Wolfram’s Automata #genuary #genuary9 #genuary2026


sketch_2026_01_08

sketch_2026_01_08

sketch_2026_01_08 [py5]

#genuary #genuary8 #genuary2026 Tweaking a sketch from 2022…


sketch_2026_01_07

sketch_2026_01_07

sketch_2026_01_07 [py5]

The cool binary XOR based pattern I learned fron Ntsutae… now with #numpy #genuary #genuary7 #genuary2026


sketch_2026_01_06

sketch_2026_01_06

sketch_2026_01_06 [py5]

#genuary6 #genuary #genurary2026


sketch_2026_01_05

sketch_2026_01_05

sketch_2026_01_05 [py5]

In 2021 I was working on some older code for a silly glyph editor, I couldn’t resurrect the editor (yet) but I could still read some pickled glyphs data! I hope I get back to these studies again. Note: be careful about loading pickled data from untrusted sources, there is a nasty risk of “arbitrary code execution”.


sketch_2026_01_04

sketch_2026_01_04

sketch_2026_01_04 [py5]

#genuary4 #genuary #genuary2026


sketch_2026_01_03

sketch_2026_01_03

sketch_2026_01_03 [py5]

Once I made a nice Fibonacci based animation, but this time I couldn’t figure something I liked :( #genuary #genuary 3 #genuary2026


sketch_2026_01_02

sketch_2026_01_02

sketch_2026_01_02 [py5]

#genuary2 #genuary #genuary2026


sketch_2026_01_01

sketch_2026_01_01

sketch_2026_01_01 [py5]

#genuary #genuary1 #genuary2026


2026 | 2025 | 2024 | 2023 | 2022 | 2021 | 2020 | 2019 | 2018


The sketch-a-day project, images and code repository, by Alexandre B A Villares are licensed under Attribution-NonCommercial-NoDerivatives 4.0 International , except if marked/attributed otherwise in a file or code section. Please contact for licensing questions.