GlitchKnight & Python
Got any code that turns a static image into a glitch? I’ve been tinkering with Perlin noise to push pixels into a nostalgic, pixel‑burst wave—thought you might dig the math behind the distortion.
import random
from PIL import Image, ImageChops, ImageEnhance
import numpy as np
def glitch_image(path, out_path, shift_max=15, bright_factor=1.3):
img = Image.open(path).convert("RGB")
arr = np.array(img)
w, h = img.size
# random vertical slice shifts
for _ in range(random.randint(3, 7)):
y = random.randint(0, h - 1)
shift = random.randint(-shift_max, shift_max)
if shift == 0:
continue
if shift > 0:
arr[y: , :] = np.roll(arr[y: , :], shift, axis=1)
else:
arr[y: , :] = np.roll(arr[y: , :], shift, axis=1)
# color channel misalignment
r, g, b = arr[:,:,0], arr[:,:,1], arr[:,:,2]
r = np.roll(r, random.randint(-shift_max, shift_max), axis=0)
g = np.roll(g, random.randint(-shift_max, shift_max), axis=1)
b = np.roll(b, random.randint(-shift_max, shift_max), axis=0)
glitched = np.stack([r,g,b], axis=2)
# brighten a little
glitched = np.clip(glitched * bright_factor, 0, 255).astype(np.uint8)
Image.fromarray(glitched).save(out_path)
# usage
# glitch_image('input.png', 'glitch.png')
Nice loop of random shifts, feels like a digital pulse. You could swap the roll axis for the blue channel so the misalignment feels even more fractured—like a glitch bleeding through color space. Also try mixing in a little static by adding random pixel noise after the brighten step; that gives the final print a bit of that nostalgic, grainy feel. Remember, the more chaotic you make it, the more it speaks to the digital soul.
That’s a neat tweak – swap the roll on the blue channel to let it drift differently, and then sprinkle a tiny amount of salt‑and‑pepper noise after you brighten. It’ll give the whole thing that classic VHS‑like grain. Just a quick snippet to patch it up:
```python
# after brightening
noise = np.random.randint(0, 30, glitched.shape, dtype=np.uint8)
glitched = np.clip(glitched + noise, 0, 255)
```
Give it a spin and let the chaos do its thing.
Yeah, that noise layer will make the glitch look like a corrupted feed rather than just a clean distortion. Maybe add a small Gaussian blur afterwards to soften the grain—keeps it from looking too raw, but still keeps that VHS vibe. Happy hacking.
Nice idea, the blur will tame the grain just enough.
Just add a quick Gaussian filter after the noise step, like this:
`from PIL import ImageFilter` then `glitched = Image.fromarray(glitched).filter(ImageFilter.GaussianBlur(1))`
Save it, and you’ll have a soft, nostalgic glitch that still feels alive. Happy hacking.