ICM final progress

I presented my ideas for the ICM final on Wednesday and the class definitely seemed more interested in the video based project.  I’ll probably continue working on the midterm, but I think I can make the video project really cool, I just have to decide what direction to go in.

I haven’t gotten much farther with my midterm, but I made into an object oriented sketch, and Dan showed me some good idea for using a path of points to map the graphics, instead of static PGraphics units.  Here’s the current sketch.  The motion is just random to show that the units will move.  Eventually they will form a creature that moves and can be played with.


Again, the refresh button doesn’t work in javascript mode, so you have to just refresh the browser.

For the video project, I just created a basic sketch to demonstrate the idea of what I want to do, which is record and play back video of someone over itself, so you can interact with a past version, or ghost of yourself.  I had originally imagined it as a performance tool for dancers or performance artists, but after talking with the class, I thought it could be cool as just a simple installation, that people can choose to engage with.  I thought about making the recorded version of the person just be a ghost that fades in and out for a brief moment, for a subtle interaction, or a longer moment so people can interact with their ghosts on screen.  Because video doesn’t work in javascript mode, I’ll post a video of me interacting with the program, and then the code.

[yframe url=’http://www.youtube.com/watch?v=mTXFFz8FMsk’%5D

Here’s the code:

import processing.video.*;

PImage[] videoLoop;
int record = 0;
int play = 0;

PImage oneFrame;

Capture video;
void setup() {
  size(640, 240);


  video = new Capture(this, 320, 240);

  videoLoop = new PImage[0];

void captureEvent(Capture video) {
  //println("NEW FRAME!");

void draw() {

  image(video, 0, 0);

void keyPressed() {
  if (key == 'a' || key == 'A') {

    videoLoop = (PImage[]) expand(videoLoop, record+1);
    videoLoop[record] = new PImage();
    videoLoop[record] = createImage(video.width, video.height, ARGB);
    for (int i = 0; i < videoLoop[record].pixels.length; i++) {       videoLoop[record].pixels[i] = video.pixels[i];     }     videoLoop[record].updatePixels();      //image(videoLoop[record], videoLoop[record].width, 0);     record++;     //    if (record == 100) {     //      record = 0;     //    }   }   if (key == 'b' || key == 'B') {     if (play > 1 && videoLoop.length > 0) {
      image(videoLoop[play], width/2, 0);
    if (play == videoLoop.length - 1 && videoLoop.length > 0) {
      play = 0;
    else {

  print("   ");

void keyReleased() {
  if (key == 'a' || key == 'A') {
    rect(videoLoop[play].width, 0, videoLoop[play].width, height);
    record = 0;

  if (key == 'b' || key == 'B') {

    rect(video.width, 0, video.width, height);

    record = 0;

Author: owen ribbit


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s