“Improviz is a live-coding environment built for creating visual performances of abstract shapes, blurred shades, and broken GIFs.”
When I was choosing a platform from the list, the caption for Improviz mentioned something about how it’s based on using and abusing basic shapes. This caught my attention as I am always interested in seeing how far you can push basic structures to create significantly more complex visuals.

Improviz is built in Haskell and interacts directly with OpenGL and it was developed by David Guy John, who goes by ‘rumble-san’. This platform is considered to be a fork of another platform: LiveCodeLab which rumble-san also took part in developing. Still, Improviz stands out a lot more to users as it is much faster than LiveCodeLab, but most importantly, it also offers the option to load custom textures, materials, models, … which gives a lot of room for personalization and experimentation.

It has a web version (you can find it here), but it lacks the ability to load all the custom objects I mentioned previously. Therefore it is recommended to download the latest release from GitHub, run it from the terminal, and use an editor (like Atom) alongside it.

The language used reminds me a lot of p5.js. It has a quite simple syntax where you call functions that either draw shapes to the screen or change those shapes in some way. “By default, the only thing that actually changes in Improviz is the time variable, which tracks the number of seconds that have passed since the program was started.” So introducing the time variable in the code is a good idea to get some cool variations and effects.

 

Here’s one of the demos I experimented with using Improviz:

 

And, here’s the code I used for it:

background(30)
t = time/2
rectSize = 2

paintOver()

texture(:art4)

//axis
ax = sin(time) *3

move(0,0,0.5*ax*0.4)
  rotate(0,0,time*2)
  rectangle(rectSize*sin(t))

move(0,0,-0.5*ax*1.5)
  rotate(0,0,time)
  rectangle(rectSize*sin(t)*0.3)

move(0,-0.5*ax*2,0)
  rotate(0,0,time*0.5)
  rectangle(rectSize*sin(t)*2)

move(0,0.5*ax*4,0)
  rotate(0,0,time*2)
  rectangle(rectSize*sin(t)*1.5)

move(0.5*ax*2,0,0)
  rotate(0,0,time*0.2)
  rectangle(rectSize*sin(t))

move(-0.5*ax*3,0,0)
  rotate(0,0,time*0.4)
  rectangle(rectSize*sin(t)*0.7)

 

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>