“Shine on you crazy diamond” – A Generative Light Printer

This post-digital installation operates at the intersection of computational imaging, kinetic light art, and data-driven performance. The work transforms a bitmap portrait of Syd Barrett into a site for algorithmic exploration, employing a custom-built “light printer” that functions as an inverted mark-making apparatus—a CNC plotter reconfigured for photonic inscription rather than material deposition.

The piece engages with traditions of expanded cinema and light-based media art, while specifically interrogating the materiality of digital image data. Through real-time computational processes, the RGB diode executes stochastic traversals across the color matrix, translating discrete pixel values into continuous luminous gestures. These random walks—borrowing from mathematical models of Brownian motion and algorithmic composition techniques pioneered by Xenakis—generate an infinite series of ephemeral light-drawings in space.

The work’s temporal architecture creates a synaesthetic bridge between visual and sonic domains, echoing both the durational strategies of process art and the improvisational logic of generative music systems. Each luminous trace exists as a unique, unrepeatable performance—a meditation on presence and erasure that resonates with the psychedelic temporalities embedded in its titular Pink Floyd reference.

By treating the portrait’s data as both score and territory, the installation participates in contemporary discourses around data aesthetics, post-photographic practices, and the performativity of code. The work ultimately positions itself within a lineage of artists who employ computational processes to reveal the latent choreographies within static images—from Vera Molnár’s algorithmic transformations to Casey Reas’s software-based abstractions—while adding a distinctly embodied, luminous dimension to the tradition of generative portraiture.

				
					// ––––––––––––––––––––––––––––––––––––––––––––––––––––––––
// Pixel Reader Sketch 2011
// processes the image and saves txt-Files to SD-card
// to use the values later with Arduino
// ––––––––––––––––––––––––––––––––––––––––––––––––––––––––

void setup () {
  size (500, 500);
   int loc;
  PImage img = loadImage ("SydSquare50.jpg");  
 image (img, 0, 0);
 float [] [] redArray;
 float [] [] greenArray;
 float [] [] blueArray;
 redArray = new float [img.width] [img.height];
 greenArray = new float [img.width] [img.height];
 blueArray = new float [img.width] [img.height];
 
 for (int px = 0; px < img.width; px+=1) {
    for (int py = 0; py < img.height; py+=1) {
      color c = img.get (px, py);  
      redArray [px] [py] = red(c);
      greenArray [px] [py] = green(c);
      blueArray [px] [py] = blue(c);
    }
 }
 
   PrintWriter outputRed;
   PrintWriter outputGreen;
   PrintWriter outputBlue;
   outputRed = createWriter("output/red.txt"); 
   outputGreen = createWriter("output/green.txt"); 
   outputBlue = createWriter("output/blue.txt"); 
   
   for (int px = 0; px < img.width; px+=1) {
    for (int py = 0; py < img.height; py+=1) {
      
      outputRed.print(int(redArray [px] [py]));
      outputGreen.print(int(greenArray [px] [py]));
      outputBlue.print(int(blueArray [px] [py]));
      
      outputRed.print(",");
      outputGreen.print(",");
      outputBlue.print(",");
      
      color rPrint = color(int (redArray [px] [py]),0,0); 
      color gPrint = color(0, int (greenArray [px] [py]),0);
      color bPrint = color(0,0, int (blueArray [px] [py]));
      color allPrint = color(int (redArray [px] [py]), int (greenArray [px] [py]), int (blueArray [px] [py]));
      set (px, py, rPrint+bPrint+gPrint);
    }
   }
   
  
   outputRed.close(); 
   outputGreen.close(); 
   outputBlue.close(); 
  }

void draw () {
 
  
}
				
			
				
					// ––––––––––––––––––––––––––––––––––––––––––––––––––––––––
// Pixel Reader Sketch 2011
// Reads RGB values from SD-Card 
// and sets the color of the LED. 
// ––––––––––––––––––––––––––––––––––––––––––––––––––––––––

#include <SD.h>

File redFile;
File greenFile;
File blueFile;

int redPin = 6;
int greenPin = 5;
int bluePin = 3;

void setup()
{
 // Open serial communications and wait for port to open:
  Serial.begin(9600);

  Serial.print("Initializing SD card...");
   pinMode(10, OUTPUT);
   
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

 
  redFile = SD.open("red.txt");
  greenFile = SD.open("green.txt");
  blueFile = SD.open("blue.txt");
  //if (redFile) {
      int counter = 0;  
      while (counter < 2500) {
            int redNumber = redFile.read();
            int greenNumber = greenFile.read();
            int blueNumber = blueFile.read();
            setColor(100, 0, 50);	
            delay(100);
            counter = counter + 1;
          
      }   
      
        redFile.close();
        greenFile.close();
        blueFile.close();
 // }
}

void loop()
{
	// nothing happens after setup
}


void setColor(int red, int green, int blue)
{
  #ifdef COMMON_ANODE
  red = 255 - red;
  green = 255 - green;
  blue = 255 - blue;
  #endif
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);
}