Recent changes

Recent changes (extended)

Click on the name of the page in the black panel, not on the preview.

How to disable the title bar of a window (undecorated window)

effect - the grey rectangle is the openframeworks window:

Openframeworks undecorated window.png

This tip depends on the renderer you are using! As i'm running linux (on a crappy computer, not sure it is valid for any linux-hardware rig), i had to modify the method setup in [OF_ROOT]/lib/openFrameworks/app/ofAppGLFWWindow.cpp.

ofAppGLFWWindow::setup(const ofGLFWWindowSettings & _settings) {
	//glfwWindowHint(GLFW_DECORATED, settings.decorated); // comment this line
	glfwWindowHint(GLFW_DECORATED, GL_FALSE); // force DECORATED to false

Then you have to recompile OF. Once again, i'm running linux so i just to do:

$ [OF_ROOT]/scripts/linux/./

To view the result, just clean and recompile any app using OF: done!

All methods to manipulate the window are listed in [OF_ROOT]/lib/openFrameworks/app/ofAppRunner.cpp.

bool ofDoesHWOrientation();
ofPoint ofGetWindowSize();
ofRectangle ofGetWindowRect()
ofAppBaseWindow * ofGetWindowPtr();
void ofSetWindowPosition(int x, int y);
void ofSetWindowShape(int width, int height);
void ofSetWindowTitle(string title);
void ofEnableSetupScreen();
void ofDisableSetupScreen();
void ofSetFullscreen(bool fullscreen);
void ofToggleFullscreen();

You can also get the native objects, depending on the OS:

Display* ofGetX11Display();
Window  ofGetX11Window();

Tested on linux mint 18.3 & of v0.9.8

online identity ∋ [ social ∋ [mastodon♥, twitter®, facebook®, diaspora, linkedin®] ∥ repos ∋ [github®, gitlab♥, bitbucket®, sourceforge] ∥ media ∋ [®, vimeo®, peertube♥,®, tumblr®] ∥ communities ∋ [godotengine♥, openprocessing, stackoverflow, threejs]]

Recent changes

Recent changes (extended)

Click on the name of the page in the black panel, not on the preview.




Main work units


Disrupted Cities - ballad in a virtual city

Carnages-banner-hitomi and the yakuzas.jpg

Carnages - videos generation


Tanukis - avatar based


Genealogy - generative art

Igotit 1000-1500jpg movie.png

Automatised post-processing of video using image compression algorithm glitches.


Die Antwoord, Banana brain

Lorn, Acid Rain

Bhad Bhabie, I got it



For jpg codec, the process is recompressing each frame with 1% less quality than previous compression. In the videos above, we start at 40% and gradually decrease the quality to 1%.

For gif codec, it is much more straight-forward, as we do the process in one pass, specifying the number of colors in the palette.

Python script

   from cStringIO import StringIO as BytesIO
except ImportError:
   from io import BytesIO
from PIL import Image
import os
import shutil
import subprocess 

------------- GLOBAL ------------- 

# set to true if the source video has not been extracted already
regenarate_video_frames = False
recompress_video_frames = True
regenarate_output_video = True
# source video path
video = ''
# folder path to export source video frames
folder_frames = 'frames'
# folder path to store compressed video frames
folder_compressed = 'compressed'
# type of compressor - JPG or GIF
compressor = 'JPG'

# jpg compressor settings
jpg_from = 40
jpg_to = 1
jpg_steps = 1

# gif compressor settings
gif_colors = 4

# output frames limits
limit_from = 1800
limit_to = 3125

# output frame rate
fps = 25

fprefix = 'output_'

------------- FUNCTIONS ------------- 

def create_folder(p):
	if not os.path.exists(p):
def clear_folder(p):
	for root, dirs, files in os.walk( p ):
		for f in files:
			os.unlink(os.path.join( root, f ))
		for d in dirs:
			shutil.rmtree(os.path.join( root, d ))

def jpg_compress( src_path, dst_path ):
	jpg_q = jpg_from
	while jpg_q >= jpg_to:
		src = src_path )
		buffer = BytesIO() buffer, "JPEG", quality = jpg_q, optimize=True, progressive=True ) [...WorkUnit:Carnages, frame per frame compressions...]

Carnages 2 [extra small] - sound by Gauthier Keyaerts


[en] This work unit is based on the algorithmic processing of videos gleaned on pornographic platforms. The intention that guided the development of this algorithm aims to blur the obviousness and roughness of the sources and to turn them into an animated painting, twisting the mind of the watchers by eluding the direct representation of bodies without losing their presence, in a pictorial surface constantly morphing. It is also a way to trigger an awareness about the depiction of sexual act in the contemporary web-based world.

Etymology of the word of pornography.

1842, "ancient obscene painting, especially in temples of Bacchus," from French pornographie, from Greek pornographos "(one) depicting prostitutes," from porne "prostitute," originally "bought, purchased" (with an original notion, probably of "female slave sold for prostitution"), related to pernanai "to sell" (from PIE *perə-, variant of root *per- (5) "to traffic in, to sell") + graphein "to write" (see -graphy).


  • #1 - cute brunette - vimeo
  • #2 - extra small - vimeo
  • #3 - rui
  • #4 - in da wood
  • (no number) - strapless, 30 seconds, part of ECVP Volume 4 PORN & POLITICS - vimeo
  • #5 - hitomi and the yakuzas - page
  • #6 - teeny black
  • Carnages teenyblack mosaic.jpg
  • #7 - jane in the toilet - page
  • #8 - creamy hairs, long play (~98min)
  • Carnages creamy hairs mosaic.jpg
  • #9 - creamy patterns, long play (~99min)
  • Carnages creamy patterns mosaic.jpg



  • 2017 October - #6, #8 & #9 – synchroniCITIES: BXL-SP - Bruxelles – Belgium
  • 2015 April - #2 - Found Pixels – La Panacée, Montpellier – France
  • 2014 May - #2, #3 & #4 - Ateliers du web – Bruxelles

Ways to present



in visioning chronological order, newest first

Blame! 2017

  • seen (again) 2018/05/23 - 2017 - imdb rotten tomatoes
  • torrent - dark sf, anime, tsutomu nihei, infnite city, terminal gene, respectful even if slightly wrong

see also Disrupted Cities - docs

Blame-poster.jpg Blame-netflix-760x428.jpg

Insects (Czech: Hmyz)

  • seen 2018/03/26 - 2018 - wikipedia:Insects_(film) imdb
  • Nova - bxls, animation, mixed with documentary, funny, adapted from a Pictures from the Insects' Life by Karel and Josef Čapek., czech, Jan Švankmajer.

Insects poster.jpg

Insects still 001.jpg Insects still 002.jpg Insects still 003.jpg Insects still 004.jpg

Black panther

  • seen 2018/03/09 - 2018 - imdb - rotten tomatoes
  • Regal Union Square Stadium 14 - NY, trans-generational fratricide, black supremacy, woman scientist, power ranger tribes


Same kind of structure as in the movie Curse of the Golden Flower: the aristocracy of blood-right is not taken down at the end of the movie, but the story has modified the main male character.

The male figures are surrounded by women, nearly no secondary roles in the black suite of the two protagonists are men:

  • mother of the king (former queen),
  • sister (scientist),
  • future wife (undercover agent),
  • general (in love with a tribe's chief),
  • hacker (cousin sidekicks). [...Movies, shorts, anime & series log...]

Links and any kind of info related to disrupted cities.

The city as a research

New Babylon

Constant new babylon model bw.jpg Constant new babylon model color.jpg.jpg

New Babylon is an anti-capitalist city, perceived and designed in 1959-74 as a future potentiality by visual artist Constant Nieuwenhuys

The city as an actor

Different story and/or artwork where the city is leaving its role of background to become an actual protagonist of the story, imposing its scale, structure and time to the human-like characters.

Dark city


Darkcity, 100min, 1998, by Alex Proyas

The city is shifting every night, while population is in a catatonic sleep. The whole map and architecture is mixed up in front of our eyes, modifying the perception of structural stability, or at least very slow evolution, commonly inferred by the streets and buildings. This movie is the main inspiration for the city generator library.


Blame.jpg Blame-killy and shibo.jpg

Blame! (original title: ブラム!), 1998 – 2003, by Tsutomu Nihei

The main character, killy, a taciturn and undetermined young adult, is wandering in an endless succession of super-structure (megastructures in the manga) enclosing cities and vast empty space. Along the 10 volumes covering an undefined time, from several years to hundreds. During this journey, the different action scenes are separated by long periods of absolute loneliness. In this story, the city is not decaying but self-regenerate thanks to giant building robots, apparently left on their own and continuously creating new structures. The city is not actually moving by itself, but has no other reason of expending else than the fact of build. It is a self-sufficient object, liberated from its utility to mankind. [...WorkUnit:Disrupted Cities - docs...]

Essai de typologie de l’art numérique, et François Zajega à la galerie Charlot



Links about GLSL shaders in Godot engine



Visit @ museum boijmans, rotterdam, 2017/09/17



  • MegaFace Dataset - the largest publicly available facial recognition dataset with a million faces and their respective bounding boxes. 65GB of faces


Scanimate News Report


Je tends à penser que le nom même d'art est devenu un cache-misère pour éviter de penser les vraies questions esthétiques - ca fait un bien fou d'entendre ca! Je ressens qqle chose de cet ordre-là, intuitivement, sans vraiment prendre le temps de le formuler à cause de mon implication dans la production d'objets et dans le sensible de leur expérience.

À quoi sert l’art ? par Bernard Stiegler sur youtube

"Les systèmes automatisés ont envahi notre quotidien via les applications pour smartphone, les GPS, les objets connectés, les robots ou drones domestiques – et bientôt les voitures sans conducteur [...Bookmarks...]

Modular structure research, 3d printable, light-weighted and that doesn't requires any tools to mount. One of the topic was also to use the electric wires as tensioner.

Latest version (006)

Tri-lamp-basic modules-v006.png

Version 004 nearly completely printed and mounted.



Tri-lamp-v004-details01.jpg Tri-lamp-v004-details02.jpg Tri-lamp-v004-details03.jpg



version 001: jaws to snap the cable and clamps to constraint the jaws. The clamps were too weak to hold the pressure, and the jaws were bitting so much into the cable that the wire was seriously damage during installation.


version 002: Complete revision of the design. The arms are now made of wood and not plastic (print time and cost reduction), making the structure much more modular. The wire is locked without pressure in a locking maze embedded into a small part at the end of each arm. The pieces are drilled to re-enforce their structure.


version 003: The drilling was not making any significant difference on strength. It was also weakening the outer shell of the piece. So we dropped it. h. It was also weakening the outer shell of the piece. So we dropped it.


version 004: After building three modules, the design of the locking maze showed its limits: really hard to adjust the tension on wire and nearly impossible to unmount once the wire was pull tight into it. Therefore, we open the maze to make the wire adjustments easier. Result is convincing: the wire can now be mounted and unmounted easily, and the structure is stiffer.




  • Design and modelling by François Zajéga
  • Printing and advices by Yacine Sebti [...Notes:Tri-lamp...]

Notes about computation of inverse kinematics, first implementation done in threejs.


At this moment, the research is focusing on solving a 2 bones system, the leg in this case, but it would be applicable on the arms or any other part of a skeleton having at least 2 parents.

The main issue seems to be the computation of the knee position. All distances are easily computed:

  • upperleg (red) keeps its length
  • leg (yellow) keeps its length also
  • distance between the target and the origin of the upper leg can be easily computed in world space.

Rendering the position of the knee is crucial to compute the rotation of the upper leg. Once correct, the rotation of the leg will be simple to render, as it is the rotation from the current direction to the [knee - target] direction.


A little warning: the graphic here above is in 2d. In a 3d world, the position of the knee is a circle on a sphere: any point being at the right distance of the target point and the upperleg origin will be a valid candidate! The circle of possibilities is the intersection of 2 spheres having their radii equals to bones length.


The radius of the cyan circle can be solved by using this equation:

a = 1/(2d)sqrt(4d^2R^2-(d^2-r^2+R^2)^2) 

A little screenshot for better readability:

Sphere-Sphere Intersection.png

The tricky point is to forget about the spheres' position and only consider the distance of their centers as the d parameter. The normal of the intersection plane can be computed independently.

Implementation of the equation in an openprocessing sketch.

Selecting a point on the circle

To select a point on the intersection of the 2 spheres, we first computed a quaternion representing the rotation to apply on a unit vector. As the Z axis is pointing forward in the model, we can use a vector( 0, 0, 1 ) to compute the orientation: [...Notes:Inverse kinematics...]


quoi et où à new-york




DSC 0302.jpg

Indie / underground gaming place in manhattan (workspace, events). Visited on the 05/03/2018.

Rules of the place:

Babycastles is a community committed to being a safe, respectful and positive environment -- supporting artists and guests by providing a space for free expression of all people. Upon entry, all attendees agree to respect personal boundaries and take responsibility for their actions and experience.

Babycastles will not tolerate language or behavior that is oppressive. We define oppressive behavior as:

  • Any kind of uninvited physical contact, sexual or otherwise
  • Comments or other behaviors that are racist, sexist, homophobic, or transphobic, ableist, classist, ageist, or otherwise discriminatory
  • Deliberate intimidation
  • Harassing photography or recording
  • Sustained or willful disruption of events, programming, or services


Spherical Smackdown by rbazelais Mound by ohsqueezy


  • Current address: 145 W.14th St. - Downstairs - NY, NY 10011
  • website
  • twitter

Death by audio arcade



The Death By Audio Arcade is a series of local multiplayer arcade cabinets produced by local indie game developers that originate from Death By Audio, Brooklyn's influential DIY music venue.


Event i went to: DBAA NYC Dev Demo Night


Zarvot by snowhydra games Tuned Out by Shallow Games [...Notes:New-York...]

Question here below is simple: how to produce moving images with colored dots. The idea has been experimented in several technical and visual forms, all based on the manipulation of simple basic entities.


Researches related to particles, in different context:

  • colliding with a 3d model, researches of 2013
  • in relation with a vector field, for Pelléas et Mélisande opéra.

Accumulation management

FBO pipeline that:

  • control the accumulation of the particles in time by making them disappear gradually (fade2black)
  • transform the luminosity of pixels into alpha, darker => more transparent (lum2alpha)

Passes, by columns:

  1. current frame
  2. fade2black shader and accumulation of the current on top of previous ones
  3. lum2alpha shader, this is the output frame, shown on checkboard, black and green background
  4. delta between second and third pass, showing the color loss during the lum2alpha pass

Accumulation alpha shaders.png


All shaders below are pixels shaders. The vertex shader associated is ultra basic, and i'm not even sure you need one... (openframeworks binding)

vertex shader

#version 120
void main() {
   gl_Position = ftransform();


#version 120
uniform sampler2DRect tex0;
uniform float decay_factor;
uniform float decay_mult;
const float PI = 3.14159265358979323846;
const float HALF_PI = 1.57079632679489661923;
void main() {
   vec4 c = texture2DRect(tex0, gl_FragCoord.xy);
   float dfi = 1.0 - decay_factor;
   c.r -=  ( 1 - ( ( 1 + sin( -HALF_PI + c.r * PI ) ) * 0.5 ) ) * decay_factor;
   c.g -=  ( 1 - ( ( 1 + sin( -HALF_PI + c.g * PI ) ) * 0.5 ) ) * decay_factor;
   c.b -=  ( 1 - ( ( 1 + sin( -HALF_PI + c.b * PI ) ) * 0.5 ) ) * decay_factor;
   c.r *= decay_mult;
   c.g *= decay_mult;
   c.b *= decay_mult;
   gl_FragColor = c;


#version 120 [...WorkUnit:Particles...]

Chubby and caballo

Her comes the transi

Adding a character: Le Transi de Rene de Chalon, 3d scan.

All images below has been rendered in blender, just to mention.

It has been quite a work to rig it and uv unwrapped it, now it is ready for godot, where i will test animations.

Transi 001.png Transi 002.png Transi 003.png

Other point of view.

Transi rockandroll.png Transi backlight.png

First batch

First batch of ingame screenshots.


the 2 scenes




Main work units[1]


Disrupted Cities - ballad in a virtual city

Carnages-banner-hitomi and the yakuzas.jpg

Carnages - videos generation


Tanukis - avatar based


Genealogy - generative art

  1. I choose to avoid the word project (everybody has projects) and, from now on, I'll call the different pieces I'm working on work unit. About Work Unit.

online identity ∋ [ social ∋ [mastodon♥, twitter®, facebook®, diaspora, linkedin®] ∥ repos ∋ [github®, gitlab♥, bitbucket®, sourceforge] ∥ media ∋ [®, vimeo®, peertube♥,®, tumblr®] ∥ communities ∋ [godotengine♥, openprocessing, stackoverflow, threejs]]