Here’s my trial, already available after a filter refresh:
The source code:
#@gui Self glitching : fx_self_glitching, fx_self_glitching_preview(1)
#@gui : Multiplier = float(0,-5,5)
#@gui : Bias = float(0,-255,255)
#@gui : Negate = bool(0)
#@gui : Operator = choice("Add","Mul","And","Or","Xor","Pow","Reverse pow","Mod","Reverse mod")
#@gui : Shift point = point(50,50,0,1)
#@gui : Boundary = choice(3,"Zero","Nearest","Periodic","Mirror")
#@gui : sep = separator(), Preview type = choice("Full","Forward horizontal","Forward vertical","Backward horizontal","Backward vertical","Duplicate top","Duplicate left","Duplicate bottom","Duplicate right","Duplicate horizontal","Duplicate vertical","Checkered","Checkered inverse"), Preview split = point(50,50,0,0,200,200,200,0,10,0)
#@gui : sep = separator(), note = note("<small>Author: <i>David Tschumperlé</i>. Latest update: <i>2018/08/19</i>.</small>")
fx_self_glitching :
repeat $! l[$>] split_opacity l[0]
f "init(
shift = ([w,h]-1)*(50-[$5,$6])%;
const sign = $3?-1:1;
const boundary = $7;
);
val = sign*((2^$1)*j(shift) + $2);
($4==0?(val + i):
$4==1?(val * i):
$4==2?(val & i):
$4==3?(val | i):
$4==4?xor(val,i):
$4==5?(val^i):
$4==6?(i^val):
$4==7?(val%i):
(i%val)
)%256;
"
endl a c endl done
fx_self_glitching_preview :
gui_split_preview "fx_self_glitching $*",${-3--1}
Let me know what you think about it.