For this assignment, I wanted to recreate the Matrix movie’s Neo sees the matrix for the first time in the scene, in which we see everything in green from Neo’s perspective. 
I wanted to create the scene using the transcript of the movie itself. So, I quickly downloaded the transcript from open source. While looking for any tutorials online, I found Daniel Shiffman’s tutorial on creating images with ASCII text. I followed this tutorial only to complete the assignment. Following the tutorial, I started with creating the still image attached to this post with the movie transcript. I quickly realized that due to the presence of unwanted characters (numbers, :, etc.), the visualization was not looking great. I decided to clean up the transcript according to my needs. I used p5.js to remove any unwanted characters from the data. However, following the tutorial, I could not replicate the brightness using empty/smaller ASCII text, as I was using sentences to create the visualization. So, I decided to manipulate the brightness of the text itself, and it worked. However, moving into the video loop, the code was not working smoothly. I realized that as I was using a large string (3300 lines), the array became too big to loop and refresh in the draw loop. I had to cut down the data to the first 70 lines of the transcript to accommodate that.
// draw function
function draw() {
background(0); // setting background as black
let charIndex = startIndex;
// calculating the width and height of the cells
let w = width / capture.width;
let h = height / capture.height;
// load the pixels of the webcam capture
capture.loadPixels();
// loops to iterate over each pixel of the webcam capture
for (let j = 0; j < capture.height; j++) {
for (let i = 0; i < capture.width; i++) {
// calculate the pixel index
const pixelIndex = (i + j * capture.width) * 4;
// rgb component of the pixel
const r = capture.pixels[pixelIndex + 0];
const g = capture.pixels[pixelIndex + 1];
const b = capture.pixels[pixelIndex + 2];
// calculating brightness
const brightness = (r + g + b) / 3;
// Adjust the fill color based on brightness
// map brightness to green color range
let fillColor = map(brightness, 225, 0, 225, -150);
fill(0, fillColor, 0);
textSize(w * 1.3);
textAlign(CENTER, CENTER);
// retrieve a character from the matrixText string based on charIndex
let textChar = matrixText.join('').charAt(charIndex % matrixText.join('').length);
if (random(1) < 0.05) {
textChar = matrixText.join('').charAt(floor(random(matrixText.join('').length)));
}
text(textChar, i * w + w / 2, j * h + h / 2);
charIndex += rainSpeed;
}
}
}
I still could not replicate the rain sequence in the visuals as expected. I hope to improve that in the future.