February 7, 2014

Hey, there! I’m teaching series of Glitch Art courses on Skillshare. Sign up for the Basic Databending class today.

Use this link + code TUMBLR50 for a 50% discount on enrollment: http://skl.sh/1f22nqx (limited to the first 50 students)

Glitch Art - Creating Design from Error: Databending Basics will show you how to use text editors and hex editors to make glitch art and then turn a series of glitched images into an animated GIF. We begin with a brief introduction to what Glitch Art is, the materials involved, and then dive into hacking the materiality of our digital world.

PROJECT CHALLENGE!

Top 5 projects as selected by the class will be featured on my blog, Year of the Glitch!

February 5, 2014
The Radical Capacity of Glitch Art: Expression through an Aesthetic Rooted in Error - REDEFINE magazine

February 1, 2014
I think it’s trying to tell me something…

I think it’s trying to tell me something…

January 30, 2014

RGB Channel Shifting

Top Image Source

Bottom Image Source

January 30, 2014

Sorting Governor Chris Christie

on left: sorting by 32bit ARGB color values

on right: sorting RGB channel values separately

Source Image

January 30, 2014

January 30, 2014
More pixel shifting experiments…
Source Image:
Processing Code:
//PixelShifting by Phillip Stearns 2014
PImage sourceImg;
int iteration;

void setup(){
  iteration=0;
  sourceImg = loadImage("shift.jpg");
  size(sourceImg.width, sourceImg.height);
}

void draw(){
  int yoffset = int(random(height));
  int xoffset= int(random(width));
  int randomRows= int(random(height)) - yoffset;
  int randomColumns=int(random(width)) - xoffset;
  
  for(int i = 0 ; i < randomRows ; i++){
  shiftRow(sourceImg, i+yoffset, 15);
  }
  for(int j = 0 ; j < randomColumns ; j++){
  shiftColumn(sourceImg, j+xoffset, 15);
  }
  image(sourceImg, 0, 0);
  sourceImg.save("shifted_" +nf(iteration, 3)+ ".png");
  iteration++;
}

void shiftRow(PImage image, int row, int shift){
  int[] buffer = new int[image.width];
  if (row < 0 || row >= height){
    println("Row value is out of range.");
  } else{
    for(int i = 0 ; i < image.width ; i++){
      buffer[(i+shift) % (image.width)] = image.pixels[row*image.width+i];
    }
    for(int j = 0 ; j < image.width ; j++){  

      sourceImg.pixels[row*image.width+j] = buffer[j];
    }
  }
  sourceImg.updatePixels();
}

void shiftColumn(PImage image, int column, int shift){
  int[] buffer = new int[image.height];
  if(column < 0 || column >= width){
    println("Column value is out of range.");
  }else{ 
    for(int i = 0 ; i < image.height ; i++){
      buffer[(i+shift) % (image.height)] = image.pixels[i*image.width+column];
    }
    for(int j = 0 ; j < image.height ; j++){  
      sourceImg.pixels[j*image.width+column] = buffer[j];
    }
  }
  sourceImg.updatePixels();
}

More pixel shifting experiments…

Source Image:

Processing Code:

//PixelShifting by Phillip Stearns 2014
PImage sourceImg;
int iteration;

void setup(){
  iteration=0;
  sourceImg = loadImage("shift.jpg");
  size(sourceImg.width, sourceImg.height);
}

void draw(){
  int yoffset = int(random(height));
  int xoffset= int(random(width));
  int randomRows= int(random(height)) - yoffset;
  int randomColumns=int(random(width)) - xoffset;
  
  for(int i = 0 ; i < randomRows ; i++){
  shiftRow(sourceImg, i+yoffset, 15);
  }
  for(int j = 0 ; j < randomColumns ; j++){
  shiftColumn(sourceImg, j+xoffset, 15);
  }
  image(sourceImg, 0, 0);
  sourceImg.save("shifted_" +nf(iteration, 3)+ ".png");
  iteration++;
}

void shiftRow(PImage image, int row, int shift){
  int[] buffer = new int[image.width];
  if (row < 0 || row >= height){
    println("Row value is out of range.");
  } else{
    for(int i = 0 ; i < image.width ; i++){
      buffer[(i+shift) % (image.width)] = image.pixels[row*image.width+i];
    }
    for(int j = 0 ; j < image.width ; j++){  

      sourceImg.pixels[row*image.width+j] = buffer[j];
    }
  }
  sourceImg.updatePixels();
}

void shiftColumn(PImage image, int column, int shift){
  int[] buffer = new int[image.height];
  if(column < 0 || column >= width){
    println("Column value is out of range.");
  }else{ 
    for(int i = 0 ; i < image.height ; i++){
      buffer[(i+shift) % (image.height)] = image.pixels[i*image.width+column];
    }
    for(int j = 0 ; j < image.height ; j++){  
      sourceImg.pixels[j*image.width+column] = buffer[j];
    }
  }
  sourceImg.updatePixels();
}

January 29, 2014
Playing with wrap around, pixel shift registers. Each row of pixels has been shifted a random amount.
Source Image

Playing with wrap around, pixel shift registers. Each row of pixels has been shifted a random amount.

Source Image

January 29, 2014
Image Source

Image Source

January 29, 2014

Toying around with averaging and sorting on RGB channels…

Source Image

January 29, 2014

SUGGESTED VIEWING:

http://dreamclaws.tumblr.com/

January 27, 2014
Vote for the "Best Tumblr of the Year" Shorty Award

staff:

Do you love a blog? Okay, how hard do you love it? If you love it truly, madly, deeply, you will nominate it for the annual Shorty Award for Tumblr of the Year.

Nominees are now being accepted, and the winner will be honored at the official ceremony this April in New York City!

I just nominated http://adamferriss.tumblr.com/

January 27, 2014
Shift Registers and Ripple Counters

Shift Registers and Ripple Counters

January 27, 2014
WGSN Creative Direction, GLOBAL MATERIALS DIRECTION AW15/16€“ INTUITIVE.

Fragmented Memory appears in a WGSN report!

January 27, 2014

Mac OSX 10.4 Install Disc ISO no. 4

Mac OSX Mach Kernel No. 2

Binary Blankets by Glitch Textiles

A collection of blankets aimed at making visible the hidden data structures that give shape to everyday life. The materiality of our digital age is composed of binary data encoded on electronic devices and transmitted through the airwaves on invisible frequencies of light. As an alternative to the screen, Binary Blankets allow you experience the fabric of this otherwise invisible and intangible side of our digital world.