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.

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.

If you appreciate what I have been doing, you may also support my artistic work, research and open educational resources I publish on-line using the Brazilan PIX key at 46c37783-5edb-4f1c-b3a8-1309db11488c, PayPal or gumroad.com/villares, where you can subscribe to my [sketch-mail] newsletter.

Here are listed some of the tools I have been using:


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


sketch_2024_07_14

sketch_2024_07_14

sketch_2024_07_14 [py5]

Work in progress… tesselation studies


sketch_2024_07_13

sketch_2024_07_13

sketch_2024_07_13 [cpy5]


sketch_2024_07_12

sketch_2024_07_12

sketch_2024_07_12 [py5]


sketch_2024_07_11

sketch_2024_07_11

sketch_2024_07_11 [py5]

130 rectangles on a 5 x 5 grid of points.


sketch_2024_07_10

sketch_2024_07_10

sketch_2024_07_10 [py5]

100 rectangles on a 5 x 5 grid of points


sketch_2024_07_09

sketch_2024_07_09

sketch_2024_07_09 [py5]


sketch_2024_07_08

sketch_2024_07_08

sketch_2024_07_08 [py5]

A first baby step towards Tetris with py5. Python’s dicts are so cool!


sketch_2024_07_07

sketch_2024_07_07

sketch_2024_07_07 [py5]


sketch_2024_07_06

sketch_2024_07_06

sketch_2024_07_06 [py5]


sketch_2024_07_05

sketch_2024_07_05

sketch_2024_07_05 [py5]


sketch_2024_07_04

sketch_2024_07_04

sketch_2024_07_04 [py5]

Em colaboração com Nariz Coletivo d’aprés Warhol…


sketch_2024_07_03

sketch_2024_07_03

sketch_2024_07_03 [py5]


sketch_2024_07_02

sketch_2024_07_02

sketch_2024_07_02 [py5]


sketch_2024_07_01

sketch_2024_07_01

sketch_2024_07_01 [py5]


sketch_2024_06_30

sketch_2024_06_30

sketch_2024_06_30 [py5]


sketch_2024_06_29

sketch_2024_06_29

sketch_2024_06_29 [py5]


sketch_2024_06_28

sketch_2024_06_28

sketch_2024_06_28 [py5]


sketch_2024_06_27

sketch_2024_06_27

sketch_2024_06_27 [py5]


sketch_2024_06_26

sketch_2024_06_26

sketch_2024_06_26 [py5]


sketch_2024_06_25

sketch_2024_06_25

sketch_2024_06_25 [py5]


sketch_2024_06_24

sketch_2024_06_24

sketch_2024_06_24 [py5]


sketch_2024_06_23

sketch_2024_06_23

sketch_2024_06_23 [py5]


sketch_2024_06_22

sketch_2024_06_22

sketch_2024_06_22 [py5]

Kind of works… based on Stand-up Maths video abou rotation without rotation (3 skews) https://www.youtube.com/watch?v=1LCEiVDHJmc


sketch_2024_06_21

sketch_2024_06_21

sketch_2024_06_21 [py5]


sketch_2024_06_20

sketch_2024_06_20

sketch_2024_06_20 [py5]


sketch_2024_06_19

sketch_2024_06_19

sketch_2024_06_19 [py5]


sketch_2024_06_18

sketch_2024_06_18

sketch_2024_06_18 [py5]


sketch_2024_06_17

sketch_2024_06_17

sketch_2024_06_17 [py5]

Back to drawing text with colors for highlights. I have an earlier sketch that uses Python’s tokenize to draw source with some basic syntax coloring https://github.com/villares/sketch-a-day/tree/main/2023/sketch_2023_08_14, this one is simpler (preparing for another idea).


sketch_2024_06_16

sketch_2024_06_16

sketch_2024_06_16 [py5]

another nasty SVG + pymunk failure


sketch_2024_06_15

sketch_2024_06_15

sketch_2024_06_15 [py5]

Not very good WIP :(


sketch_2024_06_14

sketch_2024_06_14

sketch_2024_06_14 [blender geometry nodes]


sketch_2024_06_13

sketch_2024_06_13

sketch_2024_06_13 [py5]


sketch_2024_06_12

sketch_2024_06_12

sketch_2024_06_12 [py5]


sketch_2024_06_11

sketch_2024_06_11

sketch_2024_06_11 [py5]


sketch_2024_06_10

sketch_2024_06_10

sketch_2024_06_10 [py5]


sketch_2024_06_09

sketch_2024_06_09

sketch_2024_06_09 [py5]


sketch_2024_06_08

sketch_2024_06_08

sketch_2024_06_08 [py5]


sketch_2024_06_07

sketch_2024_06_07

sketch_2024_06_07 [py5]


sketch_2024_06_06

sketch_2024_06_06

sketch_2024_06_06 [py5]


sketch_2024_06_05

sketch_2024_06_05

sketch_2024_06_05 [py5]


sketch_2024_06_04

sketch_2024_06_04

sketch_2024_06_04 [py5]


sketch_2024_06_03

sketch_2024_06_03

sketch_2024_06_03 [py5]


sketch_2024_06_02

sketch_2024_06_02

sketch_2024_06_02 [py5]


sketch_2024_06_01

sketch_2024_06_01

sketch_2024_06_01 [py5]


sketch_2024_05_31

sketch_2024_05_31

sketch_2024_05_31 [py5]


sketch_2024_05_30

sketch_2024_05_30

sketch_2024_05_30 [py5]


sketch_2024_05_29

sketch_2024_05_29

sketch_2024_05_29 [py5]


sketch_2024_05_28

sketch_2024_05_28

sketch_2024_05_28 [py5]


sketch_2024_05_27

sketch_2024_05_27

sketch_2024_05_27 [py5]


sketch_2024_05_26

sketch_2024_05_26

sketch_2024_05_26 [py5]

I’m happy with this, I converted yesterday’s sketch to an OO strategy and I could solve my “parent angle alignment” wishes.


sketch_2024_05_25

sketch_2024_05_25

sketch_2024_05_25 [py5]


sketch_2024_05_24

sketch_2024_05_24

sketch_2024_05_24 [py5]


sketch_2024_05_23

sketch_2024_05_23

sketch_2024_05_23 [py5]


sketch_2024_05_22

sketch_2024_05_22

sketch_2024_05_22 [py5]


sketch_2024_05_21

sketch_2024_05_21

sketch_2024_05_21 [py5]


sketch_2024_05_20

sketch_2024_05_20

sketch_2024_05_20 [py5]


sketch_2024_05_19

sketch_2024_05_19

sketch_2024_05_19 [py5]


sketch_2024_05_18

sketch_2024_05_18

sketch_2024_05_18 [py5]


sketch_2024_05_17

sketch_2024_05_17

sketch_2024_05_17 [py5]

the true May 17th’s sketch


sketch_2024_05_16

sketch_2024_05_16

sketch_2024_05_16 [py5]

#PyConUS I made this during my tutorial :)


sketch_2024_05_15b

sketch_2024_05_15b

sketch_2024_05_15b [py5]


sketch_2024_05_15

sketch_2024_05_15

sketch_2024_05_15 [py5]


sketch_2024_05_14

sketch_2024_05_14

sketch_2024_05_14 [py5]


sketch_2024_05_13

sketch_2024_05_13

sketch_2024_05_13 [py5]


sketch_2024_05_12

sketch_2024_05_12

sketch_2024_05_12 [py5]


sketch_2024_05_11

sketch_2024_05_11

sketch_2024_05_11 [py5]


sketch_2024_05_10

sketch_2024_05_10

sketch_2024_05_10 [py5]


sketch_2024_05_09

sketch_2024_05_09

sketch_2024_05_09 [py5]


sketch_2024_05_08

sketch_2024_05_08

sketch_2024_05_08 [py5]


sketch_2024_05_07

sketch_2024_05_07

sketch_2024_05_07 [py5]


sketch_2024_05_06

sketch_2024_05_06

sketch_2024_05_06 [py5]

40 different ways to divide a square using points from a 3x3 grid.


sketch_2024_05_05

sketch_2024_05_05

sketch_2024_05_05 [py5]

WIP on “partitioning”


sketch_2024_05_04

sketch_2024_05_04

sketch_2024_05_04 [py5]

WIP


sketch_2024_05_03

sketch_2024_05_03

sketch_2024_05_03 [py5]


sketch_2024_05_02

sketch_2024_05_02

sketch_2024_05_02 [py5]

Revisitando uma ideia de sketch de 2018 inspirado em um sketch de manoloide (Manuel Gamboa Naom)


sketch_2024_05_01

sketch_2024_05_01

sketch_2024_05_01 [py5]


sketch_2024_04_30

sketch_2024_04_30

sketch_2024_04_30 [py5]

Formas básicas, preenchimento, traço e interação usando draw(). Esse sketch do dia é bem bobo, mas o codigo anotado vira um quebra-cabeças de Parsons em https://abav.lugaralgum.com/faded-parsons-visual


sketch_2024_04_29

sketch_2024_04_29

sketch_2024_04_29 [py5]

#pymunk


sketch_2024_04_28

sketch_2024_04_28

sketch_2024_04_28 [py5]

#pymunk


sketch_2024_04_27

sketch_2024_04_27

sketch_2024_04_27 [py5]


sketch_2024_04_26

sketch_2024_04_26

sketch_2024_04_26 [py5]

#pymunk experiments… trying to extend pymunk.Body with a DrawableBody class (instead of monkeypatching pymunk.shape.Poly & etc.)


sketch_2024_04_25

sketch_2024_04_25

sketch_2024_04_25 [py5]

#Numpy


sketch_2024_04_24

sketch_2024_04_24

sketch_2024_04_24 [py5]

#pymunk


sketch_2024_04_23

sketch_2024_04_23

sketch_2024_04_23 [py5]


sketch_2024_04_22

sketch_2024_04_22

sketch_2024_04_22 [py5]


sketch_2024_04_21

sketch_2024_04_21

sketch_2024_04_21 [py5]


sketch_2024_04_20

sketch_2024_04_20

sketch_2024_04_20 [py5]

#DebugAesthetics


sketch_2024_04_19

sketch_2024_04_19

sketch_2024_04_19 [py5]


sketch_2024_04_18

sketch_2024_04_18

sketch_2024_04_18 [py5]

40 hexágonos brancos a partir de uma grande de 3x3 pontos. Em branco em quadrados pretos, dispostos em uma grade de 8 colunas e 5 linhas em um fundo azul.


sketch_2024_04_17

sketch_2024_04_17

sketch_2024_04_17 [py5]

All the 125 possible not self-intersecting polygons form a 3 x 3 grid of points (without rotations and translations).


sketch_2024_04_16

sketch_2024_04_16

sketch_2024_04_16 [py5]

Success! All the possible simple quadrilaterals from a 3 x 3 grid of points. Yesterday I had broken my hashing function that made it possible to eliminate rotations (it is possible to eliminate reflections too, but I like to have them)


sketch_2024_04_15

sketch_2024_04_15

sketch_2024_04_15 [py5]

still WIP, my translation/rotation elimination strategy didn’t work (so turned it off on this output)


sketch_2024_04_14

sketch_2024_04_14

sketch_2024_04_14 [py5]

WIP … hard to debug


sketch_2024_04_13

sketch_2024_04_13

sketch_2024_04_13 [py5]


sketch_2024_04_12

sketch_2024_04_12

sketch_2024_04_12 [py5]


sketch_2024_04_11

sketch_2024_04_11

sketch_2024_04_11 [py5]


sketch_2024_04_10

sketch_2024_04_10

sketch_2024_04_10 [py5]


sketch_2024_04_09

sketch_2024_04_09

sketch_2024_04_09 [py5]


sketch_2024_04_08

sketch_2024_04_08

sketch_2024_04_08 [py5]

Fiddling with https://github.com/Botffy/polyskel/tree/master


sketch_2024_04_07

sketch_2024_04_07

sketch_2024_04_07 [py5]


sketch_2024_04_06

sketch_2024_04_06

sketch_2024_04_06 [py5]

#scikitgeometry #skgeom


sketch_2024_04_05

sketch_2024_04_05

sketch_2024_04_05 [py5]


sketch_2024_04_04

sketch_2024_04_04

sketch_2024_04_04 [py5]

#OpenSimplexNoise #Numpy


sketch_2024_04_03

sketch_2024_04_03

sketch_2024_04_03 [py5]


sketch_2024_04_02

sketch_2024_04_02

sketch_2024_04_02 [py5]


sketch_2024_04_01

sketch_2024_04_01

sketch_2024_04_01 [py5]


sketch_2024_03_31

sketch_2024_03_31

sketch_2024_03_31 [py5]


sketch_2024_03_30

sketch_2024_03_30

sketch_2024_03_30 [py5]


sketch_2024_03_29

sketch_2024_03_29

sketch_2024_03_29 [py5]


sketch_2024_03_28

sketch_2024_03_28

sketch_2024_03_28 [py5]


sketch_2024_03_27

sketch_2024_03_27

sketch_2024_03_27 [py5]


sketch_2024_03_26

sketch_2024_03_26

sketch_2024_03_26 [py5]


sketch_2024_03_25

sketch_2024_03_25

sketch_2024_03_25 [py5]


sketch_2024_03_24

sketch_2024_03_24

sketch_2024_03_24 [py5]


sketch_2024_03_23

sketch_2024_03_23

sketch_2024_03_23 [py5]


sketch_2024_03_22

sketch_2024_03_22

sketch_2024_03_22 [py5]


sketch_2024_03_21

sketch_2024_03_21

sketch_2024_03_21 [py5]


sketch_2024_03_20

sketch_2024_03_20

sketch_2024_03_20 [py5]


sketch_2024_03_19

sketch_2024_03_19

sketch_2024_03_19 [py5]


sketch_2024_03_18

sketch_2024_03_18

sketch_2024_03_18 [py5]


sketch_2024_03_17

sketch_2024_03_17

sketch_2024_03_17 [py5]


sketch_2024_03_16

sketch_2024_03_16

sketch_2024_03_16 [py5]


sketch_2024_03_15

sketch_2024_03_15

sketch_2024_03_15 [py5]


sketch_2024_03_14

sketch_2024_03_14

sketch_2024_03_14 [py5]


sketch_2024_03_13

sketch_2024_03_13

sketch_2024_03_13 [py5]


sketch_2024_03_12

sketch_2024_03_12

sketch_2024_03_12 [py5]


sketch_2024_03_11

sketch_2024_03_11

sketch_2024_03_11 [py5]


sketch_2024_03_10

sketch_2024_03_10

sketch_2024_03_10 [py5]


sketch_2024_03_09

sketch_2024_03_09

sketch_2024_03_09 [py5]

the red text encodes the neighbours state


sketch_2024_03_08

sketch_2024_03_08

sketch_2024_03_08 [py5]

WIP


sketch_2024_03_07

sketch_2024_03_07

sketch_2024_03_07 [py5]


sketch_2024_03_06

sketch_2024_03_06

sketch_2024_03_06 [py5]


sketch_2024_03_05

sketch_2024_03_05

sketch_2024_03_05 [py5]


sketch_2024_03_04

sketch_2024_03_04

sketch_2024_03_04 [py5]


sketch_2024_03_03

sketch_2024_03_03

sketch_2024_03_03 [py5]


sketch_2024_03_02

sketch_2024_03_02

sketch_2024_03_02 [py5]


sketch_2024_03_01

sketch_2024_03_01

sketch_2024_03_01 [py5]


sketch_2024_02_29

sketch_2024_02_29

sketch_2024_02_29 [py5]

    for facet in bs:
        with py5.begin_shape(py5.LINES):
            py5.vertices(vs[v] for v in itertools.chain(*facet))

sketch_2024_02_28

sketch_2024_02_28

sketch_2024_02_28 [py5]


sketch_2024_02_27

sketch_2024_02_27

sketch_2024_02_27 [py5]


sketch_2024_02_26

sketch_2024_02_26

sketch_2024_02_26 [py5]


sketch_2024_02_25

sketch_2024_02_25

sketch_2024_02_25 [py5]

Now using #shapely as suggested by @py5coding@fosstodon.org :)


sketch_2024_02_24

sketch_2024_02_24

sketch_2024_02_24 [py5]

circle and line segment collision, based on: http://www.jeffreythompson.org/collision-detection/line-circle.php point_circle


sketch_2024_02_23

sketch_2024_02_23

sketch_2024_02_23 [py5]

rect collisions


sketch_2024_02_22

sketch_2024_02_22

sketch_2024_02_22 [py5]


sketch_2024_02_21

sketch_2024_02_21

sketch_2024_02_21 [py5]


sketch_2024_02_20

sketch_2024_02_20

sketch_2024_02_20 [py5]


sketch_2024_02_19

sketch_2024_02_19

sketch_2024_02_19 [py5]


sketch_2024_02_18

sketch_2024_02_18

sketch_2024_02_18 [py5]


sketch_2024_02_17

sketch_2024_02_17

sketch_2024_02_17 [py5]


sketch_2024_02_16

sketch_2024_02_16

sketch_2024_02_16 [py5]


sketch_2024_02_15

sketch_2024_02_15

sketch_2024_02_15 [py5]


sketch_2024_02_14

sketch_2024_02_14

sketch_2024_02_14 [py5]


sketch_2024_02_13

sketch_2024_02_13

sketch_2024_02_13 [py5]


sketch_2024_02_12

sketch_2024_02_12

sketch_2024_02_12 [py5]


sketch_2024_02_11

sketch_2024_02_11

sketch_2024_02_11 [py5]


sketch_2024_02_10

sketch_2024_02_10

sketch_2024_02_10 [py5]


sketch_2024_02_09

sketch_2024_02_09

sketch_2024_02_09 [py5]


sketch_2024_02_08

sketch_2024_02_08

sketch_2024_02_08 [py5]

Still capture of anolher animated gesture experiment


sketch_2024_02_07

sketch_2024_02_07

sketch_2024_02_07 [py5]

Another animated mouse gesture experiment


sketch_2024_02_06

sketch_2024_02_06

sketch_2024_02_06 [py5]

Another animated mouse gesture experiment


sketch_2024_02_05

sketch_2024_02_05

sketch_2024_02_05 [py5]

Another animated mouse gesture experiment


sketch_2024_02_04

sketch_2024_02_04

sketch_2024_02_04 [py5]

Another animated mouse gesture experiment


sketch_2024_02_03

sketch_2024_02_03

sketch_2024_02_03 [py5]


sketch_2024_02_02

sketch_2024_02_02

sketch_2024_02_02 [py5]


sketch_2024_02_01

sketch_2024_02_01

sketch_2024_02_01 [py5]


sketch_2024_01_31

sketch_2024_01_31

sketch_2024_01_31 [py5]

Sorru, no music.


sketch_2024_01_30

sketch_2024_01_30

sketch_2024_01_30 [py5]

#genuary30 just porting ad using a Processing shader example


sketch_2024_01_29

sketch_2024_01_29

sketch_2024_01_29 [py5]

#genuary29 using a 3D sdf based mesh library


sketch_2024_01_28

sketch_2024_01_28

sketch_2024_01_28 [py5]


sketch_2024_01_27

sketch_2024_01_27

sketch_2024_01_27 [py5]

#genuary27 the gif degraded the color gradients :(


sketch_2024_01_26

sketch_2024_01_26

sketch_2024_01_26 [py5]

#genuary26 Inspired by deconbatch’s “Poor man’s Diffusion Limited Aggregation” Istead of calculantig costly distance, I’m reading a pixel from the canvas and seeing if it falls in the “black halo”. I started not showing the halo, but changed my mind.


sketch_2024_01_25

sketch_2024_01_25

sketch_2024_01_25 [py5]

#genuary25


sketch_2024_01_24

sketch_2024_01_24

sketch_2024_01_24 [py5]

not engough energy for #genuary24 :(


sketch_2024_01_23

sketch_2024_01_23

sketch_2024_01_23 [py5]

#genuary23


sketch_2024_01_22

sketch_2024_01_22

sketch_2024_01_22 [py5]

#genuary22


sketch_2024_01_21

sketch_2024_01_21

sketch_2024_01_21 [py5]

#genuary21 #LibreTranslatePy #LibreTranslate


sketch_2024_01_20

sketch_2024_01_20

sketch_2024_01_20 [py5]

#genuary20 with shapely


sketch_2024_01_19

sketch_2024_01_19

sketch_2024_01_19 [py5]

#genuary19 Variation of an early flocking experiment


sketch_2024_01_18

sketch_2024_01_18

sketch_2024_01_18 [py5]

#genuary18 Bauhaus (inspired by Albers)


sketch_2024_01_17

sketch_2024_01_17

sketch_2024_01_17 [py5]

Badly done #genuray17


sketch_2024_01_16

sketch_2024_01_16

sketch_2024_01_16 [py5]

#genuary16


sketch_2024_01_15

sketch_2024_01_15

sketch_2024_01_15 [py5]

#genuary15 Physics (using pymunk)


sketch_2024_01_14

sketch_2024_01_14

sketch_2024_01_14 [py5]

#genuary14


sketch_2024_01_13

sketch_2024_01_13

sketch_2024_01_13 [py5]

#genuary13


sketch_2024_01_12

sketch_2024_01_12

sketch_2024_01_12 [py5]

#genuary12 “lava lamp” OpenSimplexNoise


sketch_2024_01_11

sketch_2024_01_11

sketch_2024_01_11 [py5]

#genuary11 inspired by Anni Albers


sketch_2024_01_10

sketch_2024_01_10

sketch_2024_01_10 [py5]

#genuary10 ASCII


sketch_2024_01_09

sketch_2024_01_09

sketch_2024_01_09 [py5]

#genuary9


sketch_2024_01_08

sketch_2024_01_08

sketch_2024_01_08 [py5]

#genuary8 Double-pendulum simulation based on pygame code by Bryan Brickman


sketch_2024_01_07

sketch_2024_01_07

sketch_2024_01_07 [py5]

#genuary7 progress bar


sketch_2024_01_06

sketch_2024_01_06

sketch_2024_01_06 [py5]

#genuary6 screensaver (based on earlier Processing sketches for “tweetprocessing”)


sketch_2024_01_05

sketch_2024_01_05

sketch_2024_01_05 [py5]

#genuary5 d’aprés Vera Molnar “interruptions” (https://collections.vam.ac.uk/item/O1193775/interruptions-drawing-vera-molnar/)


sketch_2024_01_04

sketch_2024_01_04

sketch_2024_01_04 [py5]

#genuary4 pixels


sketch_2024_01_03

sketch_2024_01_03

sketch_2024_01_03 [py5]

#genuary3 droste


sketch_2024_01_02

sketch_2024_01_02

sketch_2024_01_02 [py5]

#genuary2 no palette


sketch_2024_01_01

sketch_2024_01_01

sketch_2024_01_01 [py5]

#genuary1 #genuary2024 lots of particles


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.