"I always feel like somebody's watching me."
Play this video in another tab and scroll very slowly for maximum effect.
A dystopian future of hellish proportions where citizens are spied upon daily by their own fellow citizens — or you know, just your average 9-5 on the social networks and whatnot.
The above creepy images are examples of generative art created with Nodebox using random selections of over 14,000 profile photographs from intelligence community members' resumes as source data.
Check out the great talk Collect It All: Open Source Intelligence (OSINT) for Everyone by Transparency Toolkit team member M. C. McGrath from the 32nd annual Chaos Communication Congress.
I have written a bit about using Nodebox before to create neat things like generative images.
The Python code for Nodebox looks a little like this:
""" They are watching. Random creepy folk mashed up all wild like into hellish nightmares. """ size(1200, 900) # Import coreimage library try: coreimage = ximport("coreimage") except: coreimage = ximport("__init__") reload(coreimage) background(0.1) canvas = coreimage.canvas(WIDTH, HEIGHT) # Create 360 random layers for i in range(360): img = choice(files("/tmp/icwatch_faces/*.jpg")) l = canvas.append(img) # Give each layer a gradient mask. l.mask.gradient(type="radial") # Put it at a random location on the canvas l.x = random(canvas.w) l.y = random(canvas.h) # Flip, random rotate and scale l.flip(horizontal=choice((True, False))) l.rotate(random(42)) l.scale(random(1.0, 2.0)) # Apply some filters with a bit of randomness if random() > 0.20: l.filter("zoomblur", dx=random(10, 20)) if random() > 0.40: l.filter("twirl", radius=random(10, 20), dx=random(-5, 5), dy=random(-5, 5)) if random() > 0.20: l.filter("bumpdistortion") l.sharpen = 20 # Add a fill color that hues all layers l = canvas.append(color(1, random(0.3), random(0.8, 0.9))) l.blend(50, "hue") # All layers as a group in a second canvas then adjust group contrast c2 = coreimage.canvas(1200, 900) l = c2.append(canvas) l.contrast = 1.1 # Draw something c2.draw()
Some additional processing of the images after generation by the above code is done to ensure maximum discomfort to the viewer.
A variation on this could make for an interesting Twitter bot someday.