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. You can follow this project on Mastodon at pynews.com.br/@villares.

The results 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.

Please do not hesitate to contact me regarding licenses to use my work, teaching opportunities, consulting or other projects. Moreover, I kindly invite you to subscribe to my newsletter, [sketch-mail - on pause]. If you appreciate what I have been doing, you may 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.

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


2023 | 2022 | 2021 | 2020 | 2019 | 2018


sketch_2023_12_06

sketch_2023_12_06

sketch_2023_12_06 [py5]


sketch_2023_12_05

sketch_2023_12_05

sketch_2023_12_05 [py5]


sketch_2023_12_04

sketch_2023_12_04

sketch_2023_12_04 [py5]


sketch_2023_12_03

sketch_2023_12_03

sketch_2023_12_03 [py5]


sketch_2023_12_02

sketch_2023_12_02

sketch_2023_12_02 [py5]


sketch_2023_12_01

sketch_2023_12_01

sketch_2023_12_01 [py5]


sketch_2023_11_30

sketch_2023_11_30

sketch_2023_11_30 [py5]

#numpy ordering glyphs by black pixel count!


sketch_2023_11_29

sketch_2023_11_29

sketch_2023_11_29 [py5]


sketch_2023_11_28

sketch_2023_11_28

sketch_2023_11_28 [py5]


sketch_2023_11_27

sketch_2023_11_27

sketch_2023_11_27 [py5]


sketch_2023_11_26

sketch_2023_11_26

sketch_2023_11_26 [py5]


sketch_2023_11_25

sketch_2023_11_25

sketch_2023_11_25 [py5]


sketch_2023_11_24

sketch_2023_11_24

sketch_2023_11_24 [py5]


sketch_2023_11_23

sketch_2023_11_23

sketch_2023_11_23 [py5]


sketch_2023_11_22

sketch_2023_11_22

sketch_2023_11_22 [py5]


sketch_2023_11_21

sketch_2023_11_21

sketch_2023_11_21 [py5]


sketch_2023_11_20

sketch_2023_11_20

sketch_2023_11_20 [py5]

#numpy boids work in progress


sketch_2023_11_19

sketch_2023_11_19

sketch_2023_11_19 [py5]


sketch_2023_11_18

sketch_2023_11_18

sketch_2023_11_18 [py5]


sketch_2023_11_17

sketch_2023_11_17

sketch_2023_11_17 [py5]


sketch_2023_11_16

sketch_2023_11_16

sketch_2023_11_16 [py5]


sketch_2023_11_15

sketch_2023_11_15

sketch_2023_11_15 [py5]

regras = { ‘X’: ‘F+@[![X]-X!]-@F[-FX]+X’, ‘F’: ‘FF’, } axioma = ‘X’ iteracoes = 6 angulo = 25 tamanho = 5 scale_factor = 0.9 #LSytem #CreativeCoding


sketch_2023_11_14

sketch_2023_11_14

sketch_2023_11_14 [py5]

regras = { ‘X’: ‘F+[![X]-X!]-F[-FX]+X’, ‘F’: ‘FGF’, } axioma = ‘X’ iteracoes = 6 angulo = 25

#LSystem


sketch_2023_11_13

sketch_2023_11_13

sketch_2023_11_13 [py5]


sketch_2023_11_12

sketch_2023_11_12

sketch_2023_11_12 [py5]


sketch_2023_11_11

sketch_2023_11_11

sketch_2023_11_11 [py5]


sketch_2023_11_10

sketch_2023_11_10

sketch_2023_11_10 [py5]

sketch feito na aula de ontem… (acrescentei o py5_tools.animated_gif hoje)


sketch_2023_11_09

sketch_2023_11_09

sketch_2023_11_09 [py5]


sketch_2023_11_08

sketch_2023_11_08

sketch_2023_11_08 [py5]


sketch_2023_11_07

sketch_2023_11_07

sketch_2023_11_07 [py5]


sketch_2023_11_06

sketch_2023_11_06

sketch_2023_11_06 [py5]


sketch_2023_11_05

sketch_2023_11_05

sketch_2023_11_05 [py5]


sketch_2023_11_04

sketch_2023_11_04

sketch_2023_11_04 [py5]


sketch_2023_11_03

sketch_2023_11_03

sketch_2023_11_03 [py5]


sketch_2023_11_02

sketch_2023_11_02

sketch_2023_11_02 [py5]


sketch_2023_11_01

sketch_2023_11_01

sketch_2023_11_01 [py5]


sketch_2023_10_31

sketch_2023_10_31

sketch_2023_10_31 [py5]

based on https://github.com/roholazandie/boids/tree/master

#flocking #boids


sketch_2023_10_30

sketch_2023_10_30

sketch_2023_10_30 [py5]

#debugAesthetics #pymunk #trimesh #shapely


sketch_2023_10_29

sketch_2023_10_29

sketch_2023_10_29 [py5]

#pymunk #shapely


sketch_2023_10_28

sketch_2023_10_28

sketch_2023_10_28 [py5]

Viva o LHC! #pymunk


sketch_2023_10_27

sketch_2023_10_27

sketch_2023_10_27 [py5]

#pymunk


sketch_2023_10_26

sketch_2023_10_26

sketch_2023_10_26 [py5]

#pymunk


sketch_2023_10_25

sketch_2023_10_25

sketch_2023_10_25 [py5]


sketch_2023_10_24

sketch_2023_10_24

sketch_2023_10_24 [py5]

pymunk


sketch_2023_10_23

sketch_2023_10_23

sketch_2023_10_23 [py5]


sketch_2023_10_22

sketch_2023_10_22

sketch_2023_10_22 [py5]

#pymunk


sketch_2023_10_21

sketch_2023_10_21

sketch_2023_10_21 [py5]


sketch_2023_10_20

sketch_2023_10_20

sketch_2023_10_20 [py5]


sketch_2023_10_19

sketch_2023_10_19

sketch_2023_10_19 [py5]


sketch_2023_10_18

sketch_2023_10_18

sketch_2023_10_18 [py5]


sketch_2023_10_17

sketch_2023_10_17

sketch_2023_10_17 [py5]


sketch_2023_10_16

sketch_2023_10_16

sketch_2023_10_16 [py5]


sketch_2023_10_15

sketch_2023_10_15

sketch_2023_10_15 [py5]

https://ciberlandia.pt/deck/@villares/111240083837972964


sketch_2023_10_14

sketch_2023_10_14

sketch_2023_10_14 [py5]

first attempt at showing a GIF animation with py5…


sketch_2023_10_13

sketch_2023_10_13

sketch_2023_10_13 [py5]

Adding a “diff” mode to my folder-image browser!


sketch_2023_10_12

sketch_2023_10_12

sketch_2023_10_12 [py5]

#shapely


sketch_2023_10_11

sketch_2023_10_11

sketch_2023_10_11 [py5]


sketch_2023_10_10

sketch_2023_10_10

sketch_2023_10_10 [py5]


sketch_2023_10_09

sketch_2023_10_09

sketch_2023_10_09 [py5]

back to some #shapely & #typography ideas (aiming at a stencil as usual)


sketch_2023_10_08

sketch_2023_10_08

sketch_2023_10_08 [py5]


sketch_2023_10_07

sketch_2023_10_07

sketch_2023_10_07 [py5]

# LSystem
axiom = 'X'
rules = {
    'X': '[-X][+X][+FX]-FXB',
    'F': 'FF',
    } 
# F -> foward step
# B -> blue circle

sketch_2023_10_06

sketch_2023_10_06

sketch_2023_10_06 [py5]


sketch_2023_10_05

sketch_2023_10_05

sketch_2023_10_05 [py5]

#itertools #combinations #combinations_with_replacement #permutations #product


sketch_2023_10_04

sketch_2023_10_04

sketch_2023_10_04 [py5]

https://github.com/villares/sketch-a-day/blob/main/2023/sketch_2023_10_04/sketch_2023_10_04.py


sketch_2023_10_03

sketch_2023_10_03

sketch_2023_10_03 [py5]

#JupyterNotebook


sketch_2023_10_02

sketch_2023_10_02

sketch_2023_10_02 [py5]

#JupyterLab #Jupyter


sketch_2023_10_01

sketch_2023_10_01

sketch_2023_10_01 [py5]


sketch_2023_09_30

sketch_2023_09_30

sketch_2023_09_30 [py5]


sketch_2023_09_29

sketch_2023_09_29

sketch_2023_09_29 [py5]


sketch_2023_09_28

sketch_2023_09_28

sketch_2023_09_28 [py5]


sketch_2023_09_27

sketch_2023_09_27

sketch_2023_09_27 [py5]


sketch_2023_09_26

sketch_2023_09_26

sketch_2023_09_26 [py5]


sketch_2023_09_25

sketch_2023_09_25

sketch_2023_09_25 [py5]


sketch_2023_09_24

sketch_2023_09_24

sketch_2023_09_24 [py5]

my folder browser is mostly working…


sketch_2023_09_23

sketch_2023_09_23

sketch_2023_09_23 [py5]


sketch_2023_09_22

sketch_2023_09_22

sketch_2023_09_22 [py5]

Slowly prograssing on my file/image browser from scratch…


sketch_2023_09_21

sketch_2023_09_21

sketch_2023_09_21 [py5]


sketch_2023_09_20

sketch_2023_09_20

sketch_2023_09_20 [py5]

Small progress on my image browser, trying some folder navigation “from scratch” with py5… I can get some thumbnails from the OS, but others fail:


sketch_2023_09_19

sketch_2023_09_19

sketch_2023_09_19 [py5]


sketch_2023_09_18

sketch_2023_09_18

sketch_2023_09_18 [py5]

work in progress


sketch_2023_09_17

sketch_2023_09_17

sketch_2023_09_17 [py5]


sketch_2023_09_16

sketch_2023_09_16

sketch_2023_09_16 [py5]

#SãoPaulo


sketch_2023_09_15

sketch_2023_09_15

sketch_2023_09_15 [py5]


sketch_2023_09_14

sketch_2023_09_14

sketch_2023_09_14 [py5]


sketch_2023_09_13

sketch_2023_09_13

sketch_2023_09_13 [py5]


sketch_2023_09_12

sketch_2023_09_12

sketch_2023_09_12 [py5]

Based on rain code by @claromes!


sketch_2023_09_11

sketch_2023_09_11

sketch_2023_09_11 [py5]

Tem dias que eu fico bem feliz com o resultado do meu sketch do dia :)


sketch_2023_09_10

sketch_2023_09_10

sketch_2023_09_10 [py5]


sketch_2023_09_09

sketch_2023_09_09

sketch_2023_09_09 [py5]

https://github.com/villares/sketch-a-day/blob/main/2023/sketch_2023_09_09/sketch_2023_09_09.py #NumPy


sketch_2023_09_08

sketch_2023_09_08

sketch_2023_09_08 [py5]

#numpy


sketch_2023_09_07

sketch_2023_09_07

sketch_2023_09_07 [py5]


sketch_2023_09_06

sketch_2023_09_06

sketch_2023_09_06 [py5]


sketch_2023_09_05

sketch_2023_09_05

sketch_2023_09_05 [py5]


sketch_2023_09_04

sketch_2023_09_04

sketch_2023_09_04 [py5]

github.com/villares/sketch-a-day


sketch_2023_09_03

sketch_2023_09_03

sketch_2023_09_03 [py5]


sketch_2023_09_02

sketch_2023_09_02

sketch_2023_09_02 [py5]

#NumPy


sketch_2023_09_01

sketch_2023_09_01

sketch_2023_09_01 [py5]

#NumPy


sketch_2023_08_31

sketch_2023_08_31

sketch_2023_08_31 [py5]


sketch_2023_08_30

sketch_2023_08_30

sketch_2023_08_30 [py5]


sketch_2023_08_29

sketch_2023_08_29

sketch_2023_08_29 [py5]


sketch_2023_08_28

sketch_2023_08_28

sketch_2023_08_28 [py5]

#osmnx #GeoDataFrame #OpenStreetMap contributors data


sketch_2023_08_27

sketch_2023_08_27

sketch_2023_08_27 [py5]

#São Paulo #osmnx data from #OpenStreetMap contributors. Av. Paulista in red.


sketch_2023_08_26

sketch_2023_08_26

sketch_2023_08_26 [py5]


sketch_2023_08_25

sketch_2023_08_25

sketch_2023_08_25 [Python]

#Python #matplotlib explorando dados © contribuidores do #OpenStreetMaps


sketch_2023_08_24

sketch_2023_08_24

sketch_2023_08_24 [py5]


sketch_2023_08_23

sketch_2023_08_23

sketch_2023_08_23 [py5]


sketch_2023_08_22

sketch_2023_08_22

sketch_2023_08_22 [py5]


sketch_2023_08_21

sketch_2023_08_21

sketch_2023_08_21 [py5]

#trimesh


sketch_2023_08_20

sketch_2023_08_20

sketch_2023_08_20 [py5]

more #trimesh


sketch_2023_08_19

sketch_2023_08_19

sketch_2023_08_19 [py5]

more #trimesh experiments


sketch_2023_08_18

sketch_2023_08_18

sketch_2023_08_18 [py5]

PNG export examples


sketch_2023_08_17

sketch_2023_08_17

sketch_2023_08_17 [py5]

more trimesh studies!


sketch_2023_08_16

sketch_2023_08_16

sketch_2023_08_16 [py5]

trimesh studies


sketch_2023_08_15

sketch_2023_08_15

sketch_2023_08_15 [py5]

Segunda aula do curso com Daniel Bueno no Sesc Av. Paulista!


sketch_2023_08_14

sketch_2023_08_14

sketch_2023_08_14 [py5]

Refatorei o meu código de tokenize, aprendi um pouco sobre ANSI escape sequences, e agora consigo desenhar um pouco melhor (vai ser útil pros meus zines!


sketch_2023_08_13

sketch_2023_08_13

sketch_2023_08_13 [py5]

Work in Progress - again trying to draw some source code to the screen


sketch_2023_08_12

sketch_2023_08_12

sketch_2023_08_12 [py5]


sketch_2023_08_11

sketch_2023_08_11

sketch_2023_08_11 [py5]


sketch_2023_08_10

sketch_2023_08_10

sketch_2023_08_10 [py5]


sketch_2023_08_09

sketch_2023_08_09

sketch_2023_08_09 [py5]


sketch_2023_08_08

sketch_2023_08_08

sketch_2023_08_08 [Primeira aula do curso de quadrinhos experimentais com Daniel Bueno!]


sketch_2023_08_07

sketch_2023_08_07

sketch_2023_08_07 [Interactive quadratic vertex curve #pyp5js]


sketch_2023_08_06

sketch_2023_08_06

sketch_2023_08_06 [py5]

quadratic curves on shapely


sketch_2023_08_05

sketch_2023_08_05

sketch_2023_08_05 [py5]


sketch_2023_08_04

sketch_2023_08_04

sketch_2023_08_04 [py5]


sketch_2023_08_03

sketch_2023_08_03

sketch_2023_08_03 [py5]


sketch_2023_08_02

sketch_2023_08_02

sketch_2023_08_02 [py5]

WIP


sketch_2023_08_01

sketch_2023_08_01

sketch_2023_08_01 [py5]


sketch_2023_07_31

sketch_2023_07_31

sketch_2023_07_31 [py5]


sketch_2023_07_30

sketch_2023_07_30

sketch_2023_07_30 [py5]


sketch_2023_07_29

sketch_2023_07_29

sketch_2023_07_29 [py5]


sketch_2023_07_28

sketch_2023_07_28

sketch_2023_07_28 [py5]


sketch_2023_07_27

sketch_2023_07_27

sketch_2023_07_27 [py5]


sketch_2023_07_26

sketch_2023_07_26

sketch_2023_07_26 [py5]


sketch_2023_07_25

sketch_2023_07_25

sketch_2023_07_25 [py5]


sketch_2023_07_24

sketch_2023_07_24

sketch_2023_07_24 [py5]


sketch_2023_07_23

sketch_2023_07_23

sketch_2023_07_23 [py5]


sketch_2023_07_22

sketch_2023_07_22

sketch_2023_07_22 [py5]


sketch_2023_07_21

sketch_2023_07_21

sketch_2023_07_21 [py5]

Fragments of a São Paulo Map from 1930 kept at Museu Paulista


sketch_2023_07_20

sketch_2023_07_20

sketch_2023_07_20 [py5]


sketch_2023_07_19

sketch_2023_07_19

sketch_2023_07_19 [py5]


sketch_2023_07_18

sketch_2023_07_18

sketch_2023_07_18 [py5]


sketch_2023_07_17

sketch_2023_07_17

sketch_2023_07_17 [py5]


sketch_2023_07_16

sketch_2023_07_16

sketch_2023_07_16 [py5]


sketch_2023_07_15

sketch_2023_07_15

sketch_2023_07_15 [py5]


sketch_2023_07_14

sketch_2023_07_14

sketch_2023_07_14 [py5]


sketch_2023_07_13

sketch_2023_07_13

sketch_2023_07_13 [py5]


sketch_2023_07_12

sketch_2023_07_12

sketch_2023_07_12 [py5]


sketch_2023_07_11

sketch_2023_07_11

sketch_2023_07_11 [py5]


sketch_2023_07_10

sketch_2023_07_10

sketch_2023_07_10 [py5]


sketch_2023_07_09

sketch_2023_07_09

sketch_2023_07_09 [py5]


sketch_2023_07_08

sketch_2023_07_08

sketch_2023_07_08 [py5]


sketch_2023_07_07

sketch_2023_07_07

sketch_2023_07_07 [py5]


sketch_2023_07_06

sketch_2023_07_06

sketch_2023_07_06 [py5]


sketch_2023_07_05

sketch_2023_07_05

sketch_2023_07_05 [py5]


sketch_2023_07_04

sketch_2023_07_04

sketch_2023_07_04 [py5]


sketch_2023_07_03

sketch_2023_07_03

sketch_2023_07_03 [py5]


sketch_2023_07_02

sketch_2023_07_02

sketch_2023_07_02 [py5]


sketch_2023_07_01

sketch_2023_07_01

sketch_2023_07_01 [py5]


sketch_2023_06_30

sketch_2023_06_30

sketch_2023_06_30 [py5]


sketch_2023_06_29

sketch_2023_06_29

sketch_2023_06_29 [py5]


sketch_2023_06_28

sketch_2023_06_28

sketch_2023_06_28 [py5]


sketch_2023_06_27

sketch_2023_06_27

sketch_2023_06_27 [py5]


sketch_2023_06_26

sketch_2023_06_26

sketch_2023_06_26 [py5]


sketch_2023_06_25

sketch_2023_06_25

sketch_2023_06_25 [py5]


sketch_2023_06_24

sketch_2023_06_24

sketch_2023_06_24 [py5]


sketch_2023_06_23

sketch_2023_06_23

sketch_2023_06_23 [py5]


sketch_2023_06_22

sketch_2023_06_22

sketch_2023_06_22 [py5]


sketch_2023_06_21

sketch_2023_06_21

sketch_2023_06_21 [py5]


sketch_2023_06_20

sketch_2023_06_20

sketch_2023_06_20 [py5]


sketch_2023_06_19

sketch_2023_06_19

sketch_2023_06_19 [py5]


sketch_2023_06_18

sketch_2023_06_18

sketch_2023_06_18 [py5]


sketch_2023_06_17

sketch_2023_06_17

sketch_2023_06_17 [py5]


sketch_2023_06_16

sketch_2023_06_16

sketch_2023_06_16 [py5]

Draw interrupted stencil-ready lines with py5.

Left-click to add vertex. Right-click to stop polyline. Backspace to remove last vertex. ‘e’ to erase everything. ‘s’ to save SVG. Mouse wheel to change line thickness.


sketch_2023_06_15

sketch_2023_06_15

sketch_2023_06_15 [py5]


sketch_2023_06_14

sketch_2023_06_14

sketch_2023_06_14 [py5]


sketch_2023_06_13

sketch_2023_06_13

sketch_2023_06_13 [py5]


sketch_2023_06_11

sketch_2023_06_11

sketch_2023_06_11 [py5]


sketch_2023_06_10

sketch_2023_06_10

sketch_2023_06_10 [py5]


sketch_2023_06_09

sketch_2023_06_09

sketch_2023_06_09 [py5]


sketch_2023_06_08

sketch_2023_06_08

sketch_2023_06_08 [py5]


sketch_2023_06_07

sketch_2023_06_07

sketch_2023_06_07 [py5]


sketch_2023_06_06

sketch_2023_06_06

sketch_2023_06_06 [py5]


sketch_2023_06_05

sketch_2023_06_05

sketch_2023_06_05 [py5]


sketch_2023_06_04

sketch_2023_06_04

sketch_2023_06_04 [py5]


sketch_2023_06_03

sketch_2023_06_03

sketch_2023_06_03 [py5]


sketch_2023_06_02

sketch_2023_06_02

sketch_2023_06_02 [py5]


sketch_2023_06_01

sketch_2023_06_01

sketch_2023_06_01 [py5]

Back to an earlier idea, but using shapely!


sketch_2023_05_31

sketch_2023_05_31

sketch_2023_05_31 [py5]

partial sample of the animation


sketch_2023_05_30

sketch_2023_05_30

sketch_2023_05_30 [py5]


sketch_2023_05_29

sketch_2023_05_29

sketch_2023_05_29 [py5]


sketch_2023_05_28

sketch_2023_05_28

sketch_2023_05_28 [py5]

Based on https://botsin.space/@bitartbot/110448213578682186]]

def func(x, y):
    try:
        return (~(int((x & y) / (x ^ 8)) | ((y * 10) % (~x)))) % 3 > 0
    except ZeroDivisionError:
        return 0

sketch_2023_05_27

sketch_2023_05_27

sketch_2023_05_27 [py5]


sketch_2023_05_26

sketch_2023_05_26

sketch_2023_05_26 [py5]


sketch_2023_05_25

sketch_2023_05_25

sketch_2023_05_25 [py5]


sketch_2023_05_24

sketch_2023_05_24

sketch_2023_05_24 [py5]


sketch_2023_05_23

sketch_2023_05_23

sketch_2023_05_23 [py5]


sketch_2023_05_22

sketch_2023_05_22

sketch_2023_05_22 [py5]


sketch_2023_05_21

sketch_2023_05_21

sketch_2023_05_21 [py5]


sketch_2023_05_20

sketch_2023_05_20

sketch_2023_05_20 [py5]


sketch_2023_05_19

sketch_2023_05_19

sketch_2023_05_19 [py5]


sketch_2023_05_18

sketch_2023_05_18

sketch_2023_05_18 [py5]


sketch_2023_05_17

sketch_2023_05_17

sketch_2023_05_17 [py5]


sketch_2023_05_16

sketch_2023_05_16

sketch_2023_05_16 [py5]


sketch_2023_05_15

sketch_2023_05_15

sketch_2023_05_15 [py5]


sketch_2023_05_14

sketch_2023_05_14

sketch_2023_05_14 [py5]


sketch_2023_05_13

sketch_2023_05_13

sketch_2023_05_13 [py5]


sketch_2023_05_12

sketch_2023_05_12

sketch_2023_05_12 [py5]


sketch_2023_05_11

sketch_2023_05_11

sketch_2023_05_11 [py5]


sketch_2023_05_10

sketch_2023_05_10

sketch_2023_05_10 [py5]


sketch_2023_05_09

sketch_2023_05_09

sketch_2023_05_09 [py5]


sketch_2023_05_08

sketch_2023_05_08

sketch_2023_05_08 [py5]


sketch_2023_05_07

sketch_2023_05_07

sketch_2023_05_07 [py5]


sketch_2023_05_06

sketch_2023_05_06

sketch_2023_05_06 [py5]


sketch_2023_05_05

sketch_2023_05_05

sketch_2023_05_05 [py5]


sketch_2023_05_04

sketch_2023_05_04

sketch_2023_05_04 [PySimpleGUI]


sketch_2023_05_03

sketch_2023_05_03

sketch_2023_05_03 [py5]


sketch_2023_05_02

sketch_2023_05_02

sketch_2023_05_02 [py5]


sketch_2023_05_01

sketch_2023_05_01

sketch_2023_05_01 [py5]


sketch_2023_04_30

sketch_2023_04_30

sketch_2023_04_30 [py5]


sketch_2023_04_29

sketch_2023_04_29

sketch_2023_04_29 [py5]


sketch_2023_04_28

sketch_2023_04_28

sketch_2023_04_28 [py5]


sketch_2023_04_27

sketch_2023_04_27

sketch_2023_04_27 [py5]

More OpenCV


sketch_2023_04_26

sketch_2023_04_26

sketch_2023_04_26 [py5]


sketch_2023_04_25

sketch_2023_04_25

sketch_2023_04_25 [py5]


sketch_2023_04_24

sketch_2023_04_24

sketch_2023_04_24 [py5]


sketch_2023_04_23

sketch_2023_04_23

sketch_2023_04_23 [py5]


sketch_2023_04_22

sketch_2023_04_22

sketch_2023_04_22 [py5]


sketch_2023_04_21

sketch_2023_04_21

sketch_2023_04_21 [py5]

Transparent PNG export accumulating frames


sketch_2023_04_20

sketch_2023_04_20

sketch_2023_04_20 [py5]

Recreating Ira Greenberg’s 2 colour Trouched + MAM Trouchet example


sketch_2023_04_19

sketch_2023_04_19

sketch_2023_04_19 [py5]

Trouchet WIP


sketch_2023_04_18

sketch_2023_04_18

sketch_2023_04_18 [py5]


sketch_2023_04_17

sketch_2023_04_17

sketch_2023_04_17 [py5]

5 colors, random choice of next, but do not repeat last 2.


sketch_2023_04_16

sketch_2023_04_16

sketch_2023_04_16 [py5]

4 colors, do not repeat last 3… this creates a cycle. Each horiz. band repeats process, so new configuration.


sketch_2023_04_15

sketch_2023_04_15

sketch_2023_04_15 [py5]


sketch_2023_04_14

sketch_2023_04_14

sketch_2023_04_14 [py5]


sketch_2023_04_13

sketch_2023_04_13

sketch_2023_04_13 [py5]


sketch_2023_04_12

sketch_2023_04_12

sketch_2023_04_12 [py5]


sketch_2023_04_11

sketch_2023_04_11

sketch_2023_04_11 [py5]


sketch_2023_04_10

sketch_2023_04_10

sketch_2023_04_10 [py5]


sketch_2023_04_09

sketch_2023_04_09

sketch_2023_04_09 [py5]


sketch_2023_04_08

sketch_2023_04_08

sketch_2023_04_08 [py5]


sketch_2023_04_07

sketch_2023_04_07

sketch_2023_04_07 [py5]


sketch_2023_04_06

sketch_2023_04_06

sketch_2023_04_06 [py5]


sketch_2023_04_05

sketch_2023_04_05

sketch_2023_04_05 [py5]

d’aprés Vera Molnár’s Des(ordres)


sketch_2023_04_04

sketch_2023_04_04

sketch_2023_04_04 [py5]


sketch_2023_04_03

sketch_2023_04_03

sketch_2023_04_03 [py5]


sketch_2023_04_02

sketch_2023_04_02

sketch_2023_04_02 [py5]


sketch_2023_04_01

sketch_2023_04_01

sketch_2023_04_01 [py5]


sketch_2023_03_31

sketch_2023_03_31

sketch_2023_03_31 [py5]


sketch_2023_03_30

sketch_2023_03_30

sketch_2023_03_30 [py5]


sketch_2023_03_29

sketch_2023_03_29

sketch_2023_03_29 [py5]

Trying to recreate this work by Vera Molnár: https://collections.vam.ac.uk/item/O1488630/print/


sketch_2023_03_28

sketch_2023_03_28

sketch_2023_03_28 [py5]


sketch_2023_03_27

sketch_2023_03_27

sketch_2023_03_27 [py5]

OpenCV edge detection on a video


sketch_2023_03_26

sketch_2023_03_26

sketch_2023_03_26 [py5]

OpenCV edge detection on a video


sketch_2023_03_25

sketch_2023_03_25

sketch_2023_03_25 [py5]

Java swing


sketch_2023_03_24

sketch_2023_03_24

sketch_2023_03_24 [py5]


sketch_2023_03_23

sketch_2023_03_23

sketch_2023_03_23 [py5]


sketch_2023_03_22

sketch_2023_03_22

sketch_2023_03_22 [py5]


sketch_2023_03_21

sketch_2023_03_21

sketch_2023_03_21 [Processing Java]


sketch_2023_03_20

sketch_2023_03_20

sketch_2023_03_20 [py5]

Porting a Processing forum example to py5


sketch_2023_03_19

sketch_2023_03_19

sketch_2023_03_19 [py5]

Porting a Processing forum example to py5


sketch_2023_03_18

sketch_2023_03_18

sketch_2023_03_18 [py5]


sketch_2023_03_17

sketch_2023_03_17

sketch_2023_03_17 [py5]


sketch_2023_03_16

sketch_2023_03_16

sketch_2023_03_16 [py5]

Based on Tom Larrow’s code.


sketch_2023_03_15

sketch_2023_03_15

sketch_2023_03_15 [py5]

Inspired by Vera Molnár’s Icône 2020


sketch_2023_03_14

sketch_2023_03_14

sketch_2023_03_14 [py5]

Learning more numpy…


sketch_2023_03_13

sketch_2023_03_13

sketch_2023_03_13 [py5]


sketch_2023_03_12

sketch_2023_03_12

sketch_2023_03_12 [py5]

144 combinations of sizes, nubmer of points and 2 colors.


sketch_2023_03_11

sketch_2023_03_11

sketch_2023_03_11 [py5]


sketch_2023_03_10

sketch_2023_03_10

sketch_2023_03_10 [py5]


sketch_2023_03_09

sketch_2023_03_09

sketch_2023_03_09 [py5]


sketch_2023_03_08

sketch_2023_03_08

sketch_2023_03_08 [py5]


sketch_2023_03_07

sketch_2023_03_07

sketch_2023_03_07 [py5]


sketch_2023_03_06

sketch_2023_03_06

sketch_2023_03_06 [py5]


sketch_2023_03_05

sketch_2023_03_05

sketch_2023_03_05 [py5]


sketch_2023_03_04

sketch_2023_03_04

sketch_2023_03_04 [py5]


sketch_2023_03_03

sketch_2023_03_03

sketch_2023_03_03 [py5]

Another numbered squares idea…


sketch_2023_03_02

sketch_2023_03_02

sketch_2023_03_02 [py5]

back to shuffling squares?


sketch_2023_03_01

sketch_2023_03_01

sketch_2023_03_01 [py5]

Tried threads, still too slow. I shoul try Numpy… I asked for Melissa Weber’s helpp


sketch_2023_02_28

sketch_2023_02_28

sketch_2023_02_28 [py5]

A horribly slow Particle Life simulation (adapted from the Noite de Processing one) WIP


sketch_2023_02_27

sketch_2023_02_27

sketch_2023_02_27 [py5]


sketch_2023_02_26

sketch_2023_02_26

sketch_2023_02_26 [py5]


sketch_2023_02_25

sketch_2023_02_25

sketch_2023_02_25 [py5]


sketch_2023_02_24

sketch_2023_02_24

sketch_2023_02_24 [py5]


sketch_2023_02_23

sketch_2023_02_23

sketch_2023_02_23 [py5]


sketch_2023_02_22

sketch_2023_02_22

sketch_2023_02_22 [py5]


sketch_2023_02_21

sketch_2023_02_21

sketch_2023_02_21 [py5]


sketch_2023_02_20

sketch_2023_02_20

sketch_2023_02_20 [py5]


sketch_2023_02_19

sketch_2023_02_19

sketch_2023_02_19 [py5]


sketch_2023_02_18

sketch_2023_02_18

sketch_2023_02_18 [py5]


sketch_2023_02_17

sketch_2023_02_17

sketch_2023_02_17 [py5]


sketch_2023_02_16

sketch_2023_02_16

sketch_2023_02_16 [py5]


sketch_2023_02_15

sketch_2023_02_15

sketch_2023_02_15 [py5]


sketch_2023_02_14

sketch_2023_02_14

sketch_2023_02_14 [py5]


sketch_2023_02_13

sketch_2023_02_13

sketch_2023_02_13 [py5]


sketch_2023_02_12

sketch_2023_02_12

sketch_2023_02_12 [py5]


sketch_2023_02_11

sketch_2023_02_11

sketch_2023_02_11 [py5]


sketch_2023_02_10

sketch_2023_02_10

sketch_2023_02_10 [py5]


sketch_2023_02_09

sketch_2023_02_09

sketch_2023_02_09 [py5]


sketch_2023_02_08

sketch_2023_02_08

sketch_2023_02_08 [py5]


sketch_2023_02_07

sketch_2023_02_07

sketch_2023_02_07 [py5]


sketch_2023_02_06

sketch_2023_02_06

sketch_2023_02_06 [py5]


sketch_2023_02_05

sketch_2023_02_05

sketch_2023_02_05 [py5]


sketch_2023_02_04

sketch_2023_02_04

sketch_2023_02_04 [py5]


sketch_2023_02_03

sketch_2023_02_03

sketch_2023_02_03 [py5]


sketch_2023_02_02

sketch_2023_02_02

sketch_2023_02_02 [py5]


sketch_2023_02_01

sketch_2023_02_01

sketch_2023_02_01 [py5]


sketch_2023_01_31

sketch_2023_01_31

sketch_2023_01_31 [py5]


sketch_2023_01_30

sketch_2023_01_30

sketch_2023_01_30 [py5]

# Kate Rose Morley's palette
# https://iamkate.com/data/12-bit-rainbow/
#Processing #Python #py5 imported mode
#genuary #genuary30 #トゥートProcessing 

from itertools import product

palette = (
    '#817', '#a35', '#c66', '#e94',
    '#ed0', '#9d5', '#4d8', '#2cb',
    '#0bc', '#09c', '#36b', '#639'
    )

def setup():
    global palavras
    size(800, 800)
    no_loop()
    rect_mode(CENTER)
    no_stroke()

def draw():
    w = 400
    i = 0
    for x, y in product(range(0, width, w), repeat=2):
        for z in range(3):
            fill(palette[i])
            square(w / 2 + x, w / 2 + y, w / (z / 2 + 1))
            i += 1


sketch_2023_01_29

sketch_2023_01_29

sketch_2023_01_29 [py5]

Kate Rose Morley’s palette

from random import sample
from itertools import product

palette = (
    '#817', '#a35', '#c66', '#e94',
    '#ed0', '#9d5', '#4d8', '#2cb',
    '#0bc', '#09c', '#36b', '#639'
    )

def setup():
    global palavras
    size(800, 800)
    no_loop()
    rect_mode(CENTER)
    no_stroke()

def draw():
    w = 100
    for x, y in product(range(0, width, w), repeat=2):
        d = width // w
        cores = sample(palette, d)
        for z in range(d):
            fill(cores[z])
            square(w / 2 + x, w / 2 + y, w / (z / 2 + 1))
        
def key_pressed():
    redraw()


sketch_2023_01_28

sketch_2023_01_28

sketch_2023_01_28 [py5]


sketch_2023_01_27

sketch_2023_01_27

sketch_2023_01_27 [py5]

Based on Tom Larrow’s experiment at: https://codeberg.org/TomLarrow/creative-coding-experiments/src/branch/main/x_0049/x_0049.py


sketch_2023_01_26

sketch_2023_01_26

sketch_2023_01_26 [py5]

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


sketch_2023_01_25

sketch_2023_01_25

sketch_2023_01_25 [py5]


sketch_2023_01_24

sketch_2023_01_24

sketch_2023_01_24 [py5]


sketch_2023_01_23

sketch_2023_01_23

sketch_2023_01_23 [py5]


sketch_2023_01_22

sketch_2023_01_22

sketch_2023_01_22 [py5]


sketch_2023_01_21

sketch_2023_01_21

sketch_2023_01_21 [py5]


sketch_2023_01_20

sketch_2023_01_20

sketch_2023_01_20 [py5]


sketch_2023_01_19

sketch_2023_01_19

sketch_2023_01_19 [py5]


sketch_2023_01_18

sketch_2023_01_18

sketch_2023_01_18 [py5]


sketch_2023_01_17

sketch_2023_01_17

sketch_2023_01_17 [py5]


sketch_2023_01_16

sketch_2023_01_16

sketch_2023_01_16 [py5]


sketch_2023_01_15

sketch_2023_01_15

sketch_2023_01_15 [py5]


sketch_2023_01_14

sketch_2023_01_14

sketch_2023_01_14 [py5]


sketch_2023_01_13

sketch_2023_01_13

sketch_2023_01_13 [py5]


sketch_2023_01_12

sketch_2023_01_12

sketch_2023_01_12 [py5]


sketch_2023_01_11

sketch_2023_01_11

sketch_2023_01_11 [py5]


sketch_2023_01_09

sketch_2023_01_09

sketch_2023_01_09 [py5]


sketch_2023_01_10

sketch_2023_01_10

sketch_2023_01_10 [pyxel]


sketch_2023_01_08

sketch_2023_01_08

sketch_2023_01_08 [py5]


sketch_2023_01_07

sketch_2023_01_07

sketch_2023_01_07 [py5]

"""
A reticule of colored circles forms The Beatles's Abbey Road album cover
"""
import py5

def setup():
    py5.size(1000, 1000)
    py5.color_mode(py5.HSB)
    img = py5.load_image('ar.jpg')
    py5.no_stroke()
    py5.background(0)
    s = 10
    w = py5.width // s
    for i in range(w):
        for j in range(w):
            x, y = s // 2 + i * s, s // 2 + j * s
            px = img.get(x, y)
            h = py5.hue(px)
            sat = py5.saturation(px)
            b = 0.36 + py5.brightness(px) / 400
            py5.fill(h, sat * 2, 255)
            py5.circle(x, y, s * b)
    py5.save('out.png')

py5.run_sketch()

sketch_2023_01_06

sketch_2023_01_06

sketch_2023_01_06 [py5]

D’aprés @ntsutae つぶやきProcessing https://twitter.com/ntsutae/status/1268432505356513280?s=20


sketch_2023_01_05

sketch_2023_01_05

sketch_2023_01_05 [py5]


sketch_2023_01_04

sketch_2023_01_04

sketch_2023_01_04 [py5]

from itertools import product

circles = []
intersections = []

def setup():
    size(600, 600)
    for x, y in product(range(100, 550, 50), repeat=2):
        r = random(10, 60)
        circles.append((x, y, r))
    for xa, ya, ra in circles:
        for xb, yb, rb in circles[1:]:
            if (xa, ya) != (xb, yb):
                pts = calc_cci(xa, ya, ra, xb, yb, rb)
                intersections.extend(pts)
    background(0, 0, 100)
    stroke(255)
    no_fill()
    for x, y, r in circles:
        circle(x, y, r * 2)
    no_stroke()
    fill(255, 0, 0)
    for x, y in intersections:
        circle(x, y, 5)

def calc_cci(x0, y0, r0, x1 ,y1, r1):
    d = dist(x0, y0, x1, y1)
    a = (r0 ** 2-r1 ** 2+d ** 2) / (2 * d)
    hsqd = r0 ** 2 - a ** 2
    if hsqd == 0:
        return [(x0 + a * (x1 - x0) / d, y0 + a * (y1 - y0) / d)]
    elif hsqd > 0:
        h = sqrt(hsqd)
        x2 = x0 + a * (x1 - x0) / d
        y2 = y0 + a * (y1 - y0) / d
        xa, ya = x2 + h * (y1 - y0) / d, y2 - h * (x1 - x0) / d 
        xb, yb = x2 - h * (y1 - y0) / d, y2 + h * (x1 - x0) / d
        return[(xa, ya), (xb, yb)]
    else:
        return []

sketch_2023_01_03

sketch_2023_01_03

sketch_2023_01_03 [Processing Java] & [py5]

Java version:

// Para criar imagem com glitch a partir de 
// arquivo JPG na sub-pasta /data 

PImage img;
int n = 10;  // número de passos estragando bytes!
String nomeArquivo = "sesc.jpg";

void setup() {
  size(382, 510);
  noLoop();
}

void draw() {
  byte[] data=loadBytes(nomeArquivo);    // carrega a imagem original
  for (int i = 0; i < n; i++) {
    int loc=(int)random(1, data.length);  // sorteia uma posição no array
    data[loc]=(byte)random(255);          // sorteia um valor de byte e substitui
  }
  saveBytes("gliched_" + nomeArquivo, data);         // salva um novo arquivo modificado
  img = loadImage("gliched_" + nomeArquivo);        // carrega a imagem modificada
  image (img, 0, 0);
}

void keyPressed() {
  saveFrame("###.png");
  redraw();
}

Python version:

# using py5 (py5coding.org) imported mode

from PIL import Image
import io

def setup():
    size(517, 707)
    no_loop()

def draw():
    with open('data/a.jpg', 'rb') as f:
        list_jpg_bytes = list(f.read())

    for _ in range(10):
        loc = random_int(len(list_jpg_bytes) - 1)
        list_jpg_bytes[loc] = random_int(1, 255)

    stream = io.BytesIO(bytes(list_jpg_bytes))
    new_img = Image.open(stream)
    try:
        image(convert_image(new_img), 0, 0) # PIL.Image to py5Image
    except: # OSError / UnidentifiedImageError:
        pass

def key_pressed():
    save_frame("###.png");
    redraw()

sketch_2023_01_02

sketch_2023_01_02

sketch_2023_01_02 [py5]

Genuary 2 - 10 minutes

def setup():
    size(600, 600)
    color_mode(HSB)
    no_stroke()
    rect_mode(CENTER)

def draw():
    background(0)
    m = frame_count #1 + mouse_x // 10
    for x in range(100):
        cx = 50 + x * 5
        for y in range(100):
            cy = 50 + y * 5
            c = (x ^ y) ** 13 % m
            fill(c * (255 / m), 255, 255)
#             print(c, cx, cy)
            square(cx, cy, 5)

    if frame_count % 10 == 0 and frame_count <= 100:
        save_frame('###.png')

sketch_2023_01_01

sketch_2023_01_01

sketch_2023_01_01 [py5]

Genuary 1 - loop

def setup():
    size(600, 600)
    blend_mode(ADD)
    no_stroke()

def draw():
    background(0)
    xc = yc = 300
    r = 250
    for i in range(6):
        m = cos(radians(frame_count / 2)) ** 2
        a = radians(frame_count / 2 + 60 * i)
        x = xc + r * cos(a)
        y = yc + r * sin(a)
        fill(0, 0, 255)
        circle(x, y, 50)
        x = xc + r * cos(a * m)
        y = yc + r * sin(a * m)
        fill(0, 255, 0)
        circle(x, y, 50)
        x = xc + r * cos(a * -m)
        y = yc + r * sin(a * -m)
        fill(255, 0, 0)
        circle(x, y, 50)

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.