Skip to content

Instantly share code, notes, and snippets.

@yorickvP
Last active August 24, 2019 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yorickvP/70cecb02096379b2f7a3510fb726f2ff to your computer and use it in GitHub Desktop.
Save yorickvP/70cecb02096379b2f7a3510fb726f2ff to your computer and use it in GitHub Desktop.
glitchlock

I saw the awesome thing at r/unixporn and wanted to make it lock faster and run it with sway, so here it is.

nix run https://gist.github.com/yorickvP/70cecb02096379b2f7a3510fb726f2ff/archive/master.tar.gz -c glitchlock

with import <nixpkgs> { };
let
pypkg = python37.pkgs;
pillow_simd = (pypkg.pillow.overridePythonAttrs (old: rec {
pname = "Pillow-SIMD";
version = "6.0.0.post0";
src = pypkg.fetchPypi {
inherit pname version;
sha256 = "1jla56zidgh9dscl5ndi025rvzsbn4zz5aqas0rgw60plpzzdfsr";
};
postPatch = "";
NIX_CFLAGS_COMPILE = "-mavx2 -msse4";
doCheck = false;
})).override { libjpeg = libjpeg_turbo; };
in stdenv.mkDerivation {
name = "glitchlock";
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ (python37.withPackages (o: [ pillow_simd ])) ];
src = ./.;
installPhase = ''
mkdir -p $out/bin $out/libexec
patchShebangs .
cp glitchlock.sh $out/bin/glitchlock
cp glitchlock.py $out/libexec
chmod +x $out/bin/glitchlock
chmod +x $out/libexec/glitchlock.py
wrapProgram $out/bin/glitchlock --suffix PATH : ${
lib.makeBinPath [ sox grim swaylock ]
}:$out/libexec
'';
}
#!/usr/bin/env python
# run with <(grim -t ppm -)
from PIL import Image
import subprocess, sys, os
from io import BytesIO
def pixelate(src, scale=10):
dstsize = tuple(map(lambda x: x//scale, src.size))
iS = src.resize(dstsize, resample=Image.BILINEAR)
return iS.resize(src.size, resample=Image.NEAREST)
def glitch(src, dst):
# Glitch it with sox FROM: https://maryknize.com/blog/glitch_art_with_sox_imagemagick_and_vim/
# src cannot be dst
subprocess.check_call(["sox", "-t", "ul", "-c", "1", "-r", "48k", src, "-t", "ul", dst, "trim", "0", "100s", ":", "echo", "0.9", "0.9", "15", "0.9"])
def lock(filename):
os.execlp('swaylock', 'swaylock', '-i', filename)
screenshot = "/tmp/glitchlock.bmp"
screenshot2 = "/tmp/glitchlock_glitched.bmp"
pixelate(Image.open(sys.argv[1]), scale=7).save(screenshot)
glitch(screenshot, screenshot2)
Image.open(screenshot2).transpose(Image.ROTATE_90).save(screenshot)
glitch(screenshot, screenshot2)
Image.open(screenshot2).transpose(Image.ROTATE_270).save(screenshot)
os.remove(screenshot2)
lock(screenshot)
#/bin/sh
glitchlock.py <(grim -t ppm -)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment