get in touch

about me

I'm 29 years old, live in Turin (Italy) and work as a freelance designer. Mainly I collaborate with ToDo, a studio of interaction e media design.

 
Cos’è Nodebox?
Nodebox è un software open source per Mac in grado di creare immagini ed elaborazioni grafiche vettoriali.

Come si usa?
Cominciare ad utilizzare Nodebox è abbastanza semplice:
è sufficiente avere conoscenze base di programmazione e voglia di provare.
Nodebox si basa sul linguaggio di programmazione Python, un linguaggio semplice da usare e da imparare.
Inoltre nel sito sono presenti una notevole quantità di esempi pratici creati dalla community, perciò potete anche cominciare con dei copia-incolla per vedere cosa ne esce fuori.

Perchè usarlo?
Già, perchè usare Nodebox al posto di programmi professionali per grafica vettoriale come Illustator?
Un grande pregio di fare grafica scrivendo codice è innanzitutto l’utilizzo di variabili:
possiamo cambiare velocemente resa grafica o palette colori, oppure velocizzare operazioni che richiederebbero veramente troppo tempo farle a mano.
Mi è capitato di dover comporre una griglia di un migliaio di quadrati riempiti con immagini prese da una cartella, avrei potuto anche farlo pazientemente a mano, ma se poi il cliente volesse sostituire i quadrati con dei cerchi?
Oppure talvolta siamo poco ispirati, allora astrarre le immagini via codice può essere un buon metodo per fare velocemente delle prove, esplorare trattamenti sui tracciati o testare combinazioni di colori e semplicemente stare a guardare cosa ne esce.
Dato che l’output è vettoriale possiamo sempre salvare l’immagine come PDF ed importarla in Illustrator per continuare a lavorarla o integrarla nei nostri lavori.

Per saperne di più:

Cominciamo a vedere come creare una composizione di linee ondulate utilizzando una palette colori estrapolata da un’immagine.

waves with Nodebox

web = ximport("web")
colors = ximport("colors")

per prima cosa importo le librerie di cui avrò bisogno:
web, che contiene una serie di strumenti in grado di recuperare dati da internet;
colors, che permette di editare e lavorare con i colori in modo estremamente semplice.

n = 20    #numero di elementi da cercare
r = random(n)    #immagine selezionata
q = "Red"    #parola da cercare in flickr
ncolors = 20    #tot colori da estrapolare
numlines = 250    #tot linee
delta = 8    #delta spostamento linee
s_width = 30    #larghezza tratto delle linee
numpoints = 6    #numero di punti nella linea

in questo punto sono specificati la maggior parte dei parametri che ci permetteranno poi di personalizzare l’output.

search = web.flickr.search(q, start=1, count=n, wait=10, cached=True, match=all)
img = search[r]
i = img.download("small")
print img.name, "by", img.author      #stampo il titolo e l'autore  dell'immagine
palette = colors.list(i, n=ncolors)      #estrapolo una palette colori dall'immagine

in questa parte eseguo la ricerca di immagini in flickr. Ho utilizzato la parola chiave specificata in precedenza, nel nostro caso “Red”, quindi eseguo il download ed estrapolo una palette colori dall’immagine.
Prendere colori da immagini è sempre un buon metodo per ottenere palette più accattivanti e accostamenti di colore inaspettati ed esaltanti.

bg = rect(0, 0, WIDTH, HEIGHT, draw=False)
c1 = palette.lightest
c1.a = 255
c2 = palette.darkest
c2.a = 255
colors.gradientpath(bg, color(c2), color(c1))

Comincio a disegnare lo sfondo con un gradient radiale, utilizzando il colore più scuro e il più chiaro della palette.

 points = []
 xpos = -20
 ypos = 0
 #linea guida
 for i in range(numpoints):
    p = (xpos, ypos)
    points.append(p)
    xpos += (WIDTH/numpoints)
    ypos += random(-delta, delta)
p = (WIDTH+20, 0)
points.append(p)

Quindi definisco una funzione che disegni la prima linea. Il punto di partenza e quello di arrivo sono posizionati, rispettivamente, in alto a sinistra e in alto a destra, entrambi fuori dallo stage. Gli altri punti intermedi li genero con un semplice random, che restituisce un numero in un range compreso tra -delta e +delta, variabile che avevamo definito all’inizio.

#linee derivate
colors.shadow(dx=0, dy=2, alpha=5, blur=8.0)
for h in range(numlines):
    newpoints = []
    for k in points:
        newxpos = k[0]
        newypos = k[1]+random(delta)
        newpoints.append((newxpos,newypos))
    autoclosepath(False)
    newpath = findpath(newpoints)
    nofill()
    c = choice(palette)
    c.a = 50 #alpha
    strokewidth(s_width)
    if random() > .9:
        strokewidth(s_width*2)
    stroke(c)
 
    drawpath(newpath)
    points = []
    for item in newpoints:
        points.append((item.x,item.y))

A partire dalla prima linea guida disegno le altre linee. Per ogni punto della linea principale aggiungo un valore random, sempre in base al parametro “delta”, in modo che ogni linea sia spostata verso il basso rispetto alla precedente.

modificando alcuni parametri è possibile ottenere risultati diversi ma tutti affascinanti:

waves_1 made with nodeboxwaves_4 made with nodeboxwaves_3 made with nodeboxwaves_2 made with nodebox

Il codice è stato scritto abbastanza in fretta e può essere sicuramente ottimizzato. Puoi scaricare il file ed utilizzarlo o modificarlo liberamente.

3 comments for 'Waves with Nodebox'

  1. Tom De Smedt

    Nice work!


  2. Thank you Tom, I really appreciate your feedback!

  3. VA

    Nice work!

Leave a comment

Waves with Nodebox

posted on Sep 2009

type of work: ,

La settimana scorsa stavo cercando di realizzare uno sfondo per un progetto e mi sono affidato a Nodebox, un software open source per Mac che permette di creare immagini ed elaborazioni grafiche usando il linguaggio di programmazione Python. L’effetto finale è una cascata di linee multicolore, con infinite possibilità di output e parametrizzata in modo da cambiare la resa grafica modificando alcune variabili.