EDIT: I have completed the basic version!
EDIT: Well, almost there. Doesn’t work like how I want it to, but it’ll do for now. Works great for generating vibrato background. For generic editing, a new version will be created.
#@gui Vibrato Texture : fx_vibrato_texture, fx_vibrato_texture_preview(0)
#@gui : note = note("This filter is inspired by the Paint.NET plugin named Vibrato authored by MadJik for Paint.NET.")
#@gui : sep = separator()
#@gui : 1. X-Orientation = bool(1)
#@gui : 2. Y-Orientation = bool(1)
#@gui : 3. U- Factor = float(1,.25,15)
#@gui : 4. V- Factor = float(1,.25,15)
#@gui : 5. X-Scale Factor = float(1,.5,5)
#@gui : 6. Y-Scale Factor = float(1,.5,5)
#@gui : 7. Percentage-Based X Pixel Shift = float(0,-100,100)
#@gui : 8. Percentage-Based Y Pixel Shift = float(0,-100,100)
#@gui : 9. Elevation = float(0,-250,250)
#@gui : 10. Apply Inversion Factor = bool(1)
#@gui : 11. Inversion Factor = float(1,-1,10)
#@gui : 12. Final Mod Factor = float(1,1,32)
#@gui : sep = separator(), Channel(s) = choice{"All","RGBA [all]","RGB [all]","RGB [red]","RGB [green]","RGB [blue]","RGBA [alpha]","Linear RGB [all]","Linear RGB [red]","Linear RGB [green]","Linear RGB [blue]","YCbCr [luminance]","YCbCr [blue-red chrominances]","YCbCr [blue chrominance]","YCbCr [red chrominance]","YCbCr [green chrominance]","Lab [lightness]","Lab [ab-chrominances]","Lab [a-chrominance]","Lab [b-chrominance]","Lch [ch-chrominances]","Lch [c-chrominance]","Lch [h-chrominance]","HSV [hue]","HSV [saturation]","HSV [value]","HSI [intensity]","HSL [lightness]","CMYK [cyan]","CMYK [magenta]","CMYK [yellow]","CMYK [key]","YIQ [luma]","YIQ [chromas]"}
#@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")
#@gui : sep = separator(), note = note("<small>Author : <i>Reptorian</i>. Latest update : <i>2018/09/22</i>.</small>")
fx_vibrato_texture:
ac "_fx_vibrato_texture ${1-13}",$13
_fx_vibrato_texture:
repeat $! l[$>]
#if {x+$1}
n 0,255 f "q=($7/100)*w; l=($8/100)*h; X=(($1?w-x+q:x+q)/w-.5) * 2 * $5; Y=(($2?h-y+l:y+l)/h-.5) * 2 * $6; g=1*10^(-$11); U=sqrt($3); V=sqrt($4); Z=((X-Y) * (X-U) * (X+U) * (Y-V) * (Y+V))+ $9; D=$10?(1-(Z>g?Z:1-Z * -1)):Z;C=D*D;F=abs(C)>1?C-int(C):C;1-F;" n 0,255 mul $12 mod 256
# fi
endl done
fx_vibrato_texture_preview :
gui_split_preview "fx_vibrato_texture ${1--2}",$-1
Sample of the Basic Vibrato Texture :
I think that’s enough pictures.
Now, I call the basic done as I’m not interested into adding more conditions inside the code to have image influence vibrato result over 1.0. There is a mathematical mechanic to force the image to not influence it as much in case if it goes way under 1 or way over 1. If you remove that, you can get the image to alter the vibrato result a lot more. :
#@gui Vibrato Texture : fx_vibrato_texture, fx_vibrato_texture_preview(0)
#@gui : note = note("This filter is inspired by the Paint.NET plugin named Vibrato authored by MadJik for Paint.NET.")
#@gui : sep = separator()
#@gui : 1. X-Orientation = bool(1)
#@gui : 2. Y-Orientation = bool(1)
#@gui : 3. U- Factor = float(.85,.25,15)
#@gui : 4. V- Factor = float(.85,.25,15)
#@gui : 5. X-Scale Factor = float(1,.5,5)
#@gui : 6. Y-Scale Factor = float(1,.5,5)
#@gui : 7. Percentage-Based X Pixel Shift = float(0,-100,100)
#@gui : 8. Percentage-Based Y Pixel Shift = float(0,-100,100)
#@gui : 9. Elevation = float(.7,-1,1)
#@gui : 10. Z-Multiplier = float(.5,0,5)
#@gui : 11. Apply Inversion Factor = bool(0)
#@gui : 12. Inversion Factor = float(1,-1,10)
#@gui : 13. Final Mod Factor = float(1,1,32)
#@gui : sep = separator(), 14. Image Influence Factor = float(1,0,1)
#@gui : sep = separator(), Channel(s) = choice{"All","RGBA [all]","RGB [all]","RGB [red]","RGB [green]","RGB [blue]","RGBA [alpha]","Linear RGB [all]","Linear RGB [red]","Linear RGB [green]","Linear RGB [blue]","YCbCr [luminance]","YCbCr [blue-red chrominances]","YCbCr [blue chrominance]","YCbCr [red chrominance]","YCbCr [green chrominance]","Lab [lightness]","Lab [ab-chrominances]","Lab [a-chrominance]","Lab [b-chrominance]","Lch [ch-chrominances]","Lch [c-chrominance]","Lch [h-chrominance]","HSV [hue]","HSV [saturation]","HSV [value]","HSI [intensity]","HSL [lightness]","CMYK [cyan]","CMYK [magenta]","CMYK [yellow]","CMYK [key]","YIQ [luma]","YIQ [chromas]"}
#@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")
#@gui : sep = separator(), note = note("<small>Author : <i>Reptorian</i>. Latest update : <i>2018/09/22</i>.</small>")
fx_vibrato_texture:
ac "_fx_vibrato_texture ${1-15}",$15
_fx_vibrato_texture:
repeat $! l[$>]
#if {x+$1}
n 0,255 f "q=($7/100)*w;
l=($8/100)*h;
X=(($1?w-x+q:x+q)/w-.5) * 2 * $5;
Y=(($2?h-y+l:y+l)/h-.5) * 2 * $6;
g=1*11^(-$12);
U=sqrt($3);
V=sqrt($4);
Z=((X-Y) * (X-U) * (X+U) * (Y-V) * (Y+V))+ $9;
D=$11?(1-(Z>g?Z:1-Z * -1)):Z;
C=(D+((1-i/255)/(($3>1?$3:1/$3)*($4>1?$4:1/$4)))*$14)*(D+((1-i/255)/(($3>1?$3:1/$3)*($4>1?$4:1/$4)))*$14)*$10;
F=abs(C)>1?C-int(C):C;
1-F;
" n 0,255 mul $13 mod 256
# fi
endl done
fx_vibrato_texture_preview :
gui_split_preview "fx_vibrato_texture ${1--2}",$-1