plugins/ffmpeg-effects/skills/ffmpeg-glitch-distortion-effects/SKILL.md
Complete glitch art, datamosh, and video distortion effects system. PROACTIVELY activate for: (1) Datamosh/pixel bleeding effects, (2) VHS/analog glitch simulation, (3) Digital corruption effects, (4) Displacement mapping, (5) Wave/ripple distortions, (6) Pixelation and mosaic effects, (7) Chromatic aberration, (8) Scan line effects, (9) Time-based distortions (echo, trails), (10) Lens distortion and barrel effects. Provides: minterpolate for datamosh, displacement filter, geq pixel manipulation, noise and artifacts, rgbashift/chromashift for color separation, lagfun for trails, tmix for frame blending, tblend for frame difference effects.
npx skillsauth add JosiahSiegel/claude-plugin-marketplace ffmpeg-glitch-distortion-effectsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
MANDATORY: Always Use Backslashes on Windows for File Paths
When using Edit or Write tools on Windows, you MUST use backslashes (\) in file paths, NOT forward slashes (/).
| Effect | Command |
|--------|---------|
| Datamosh | -vf "minterpolate='mi_mode=mci:mc_mode=aobmc:me_mode=bidir'" |
| Chromatic aberration | -vf "rgbashift=rh=-5:bh=5" |
| VHS noise | -vf "noise=c0s=20:c0f=t,eq=saturation=1.2" |
| Pixelate | -vf "scale=iw/10:ih/10,scale=iw*10:ih*10:flags=neighbor" |
| Wave distortion | -vf "displace=..." with displacement map |
| Echo/trails | -vf "lagfun=decay=0.95" |
| Scan lines | -vf "drawgrid=w=iw:h=2:t=1:[email protected]" |
Use for creative distortion effects:
Complete guide to datamosh, glitch art, VHS effects, displacement, and creative video distortion with FFmpeg.
Datamosh creates the "pixel bleeding" effect by manipulating motion compensation.
# Basic datamosh effect
ffmpeg -i input.mp4 \
-vf "minterpolate='mi_mode=mci:mc_mode=aobmc:me_mode=bidir:vsbmc=1'" \
-c:v libx264 -crf 18 datamosh.mp4
# Parameters explained:
# mi_mode=mci: Motion compensated interpolation
# mc_mode=aobmc: Adaptive overlapped block motion compensation
# me_mode=bidir: Bidirectional motion estimation
# vsbmc=1: Variable size block motion compensation
# Heavy datamosh (more chaos)
ffmpeg -i input.mp4 \
-vf "minterpolate='fps=60:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:me=epzs:vsbmc=1:scd=none'" \
-c:v libx264 -crf 18 heavy_datamosh.mp4
# scd=none: Disable scene change detection (more bleeding across cuts)
# me=epzs: Enhanced predictive zonal search (faster, rougher)
# Datamosh by removing I-frames (requires re-encoding)
ffmpeg -i input.mp4 \
-vf "minterpolate='mi_mode=mci:mc_mode=aobmc',\
tblend=all_mode=difference:all_opacity=0.5" \
datamosh_blend.mp4
# Combine with echo for trails
ffmpeg -i input.mp4 \
-vf "minterpolate='mi_mode=mci:mc_mode=aobmc',lagfun=decay=0.9" \
datamosh_trails.mp4
# Datamosh only certain section
ffmpeg -i input.mp4 \
-vf "minterpolate='mi_mode=mci:mc_mode=aobmc':enable='between(t,5,10)'" \
controlled_datamosh.mp4
Color channel separation for that "broken lens" look.
# Horizontal chromatic aberration
ffmpeg -i input.mp4 \
-vf "rgbashift=rh=-5:bh=5" \
chromatic.mp4
# Parameters:
# rh/rv: Red horizontal/vertical shift
# gh/gv: Green horizontal/vertical shift
# bh/bv: Blue horizontal/vertical shift
# ah/av: Alpha horizontal/vertical shift
# Vertical chromatic aberration
ffmpeg -i input.mp4 \
-vf "rgbashift=rv=-3:bv=3" \
chromatic_v.mp4
# Both directions
ffmpeg -i input.mp4 \
-vf "rgbashift=rh=-4:rv=-2:bh=4:bv=2" \
chromatic_both.mp4
# Pulsing chromatic aberration
ffmpeg -i input.mp4 \
-vf "rgbashift=rh='5*sin(t*3)':bh='-5*sin(t*3)'" \
pulsing_chromatic.mp4
# Increasing aberration over time
ffmpeg -i input.mp4 \
-vf "rgbashift=rh='-t*2':bh='t*2'" \
increasing_chromatic.mp4
# Shift chroma channels (U/V in YUV)
ffmpeg -i input.mp4 \
-vf "chromashift=cbh=5:crh=-5" \
chroma_shift.mp4
# cbh/cbv: Cb (blue-difference) horizontal/vertical
# crh/crv: Cr (red-difference) horizontal/vertical
# Full VHS effect
ffmpeg -i input.mp4 \
-vf "\
noise=c0s=15:c0f=t:c1s=10:c1f=t,\
eq=saturation=1.4:contrast=1.1:brightness=-0.02,\
chromashift=cbh=3:crh=-3,\
rgbashift=rh=2:bh=-2,\
unsharp=3:3:-0.5,\
drawgrid=w=iw:h=2:t=1:[email protected],\
curves=preset=vintage" \
-c:v libx264 -crf 20 vhs_effect.mp4
# 1. VHS Noise (temporal noise)
ffmpeg -i input.mp4 \
-vf "noise=c0s=20:c0f=t:c1s=15:c1f=t" \
vhs_noise.mp4
# 2. VHS Color bleeding
ffmpeg -i input.mp4 \
-vf "chromashift=cbh=4:cbv=2:crh=-3:crv=1" \
vhs_color_bleed.mp4
# 3. VHS Scan lines
ffmpeg -i input.mp4 \
-vf "drawgrid=w=iw:h=2:t=1:[email protected]" \
vhs_scanlines.mp4
# 4. VHS Tracking issues (simulated)
ffmpeg -i input.mp4 \
-vf "crop=iw:ih-20:0:'20*random(1)',pad=iw:ih+20:0:10" \
vhs_tracking.mp4
# 5. VHS Oversaturated colors
ffmpeg -i input.mp4 \
-vf "eq=saturation=1.5:contrast=1.1,curves=preset=vintage" \
vhs_colors.mp4
# Static overlay blend
ffmpeg -f lavfi -i "nullsrc=s=1920x1080:d=10" \
-vf "noise=c0s=100:c0f=a+t,format=gray" \
-c:v libx264 -t 10 static.mp4
# Blend static with video
ffmpeg -i input.mp4 -i static.mp4 \
-filter_complex "[0:v][1:v]blend=all_mode=screen:all_opacity=0.1" \
vhs_static.mp4
# Pixelate entire video
ffmpeg -i input.mp4 \
-vf "scale=iw/10:ih/10,scale=iw*10:ih*10:flags=neighbor" \
pixelated.mp4
# Parameters:
# First scale: Reduce resolution (divide by pixelation level)
# Second scale: Scale back up with nearest neighbor (no interpolation)
# Variable pixelation level
ffmpeg -i input.mp4 \
-vf "scale=iw/20:ih/20,scale=iw*20:ih*20:flags=neighbor" \
heavy_pixel.mp4
# Pixelation that increases over time
ffmpeg -i input.mp4 \
-vf "scale='iw/max(1,t*2)':'ih/max(1,t*2)',scale=iw:ih:flags=neighbor" \
animated_pixel.mp4
# Note: This is approximate; true animated requires geq or external scripts
# Mosaic specific region (face blur style)
ffmpeg -i input.mp4 \
-filter_complex "\
[0:v]crop=200:200:300:200[face];\
[face]scale=iw/10:ih/10,scale=iw*10:ih*10:flags=neighbor[blurred];\
[0:v][blurred]overlay=300:200" \
mosaic_region.mp4
# Create displacement map (gradient)
ffmpeg -f lavfi -i "gradients=s=1920x1080:c0=black:c1=white:x0=0:y0=540:x1=1920:y1=540" \
-vframes 1 displacement_h.png
# Apply horizontal wave displacement
ffmpeg -i input.mp4 -i displacement_h.png \
-filter_complex "[0:v][1:v]displace=edge=wrap" \
wave_h.mp4
# Horizontal wave using geq
ffmpeg -i input.mp4 \
-vf "geq=lum='lum(X+10*sin(Y/20+T*5),Y)':cb='cb(X+10*sin(Y/20+T*5),Y)':cr='cr(X+10*sin(Y/20+T*5),Y)'" \
wave_animated.mp4
# Vertical wave
ffmpeg -i input.mp4 \
-vf "geq=lum='lum(X,Y+10*sin(X/20+T*5))':cb='cb(X,Y+10*sin(X/20+T*5))':cr='cr(X,Y+10*sin(X/20+T*5))'" \
wave_v.mp4
# Ripple from center
ffmpeg -i input.mp4 \
-vf "geq=lum='lum(X+5*sin(sqrt(pow(X-W/2,2)+pow(Y-H/2,2))/10-T*5),Y+5*cos(sqrt(pow(X-W/2,2)+pow(Y-H/2,2))/10-T*5))':cb='cb(X,Y)':cr='cr(X,Y)'" \
ripple.mp4
# Barrel distortion (fisheye-like)
ffmpeg -i input.mp4 \
-vf "lenscorrection=cx=0.5:cy=0.5:k1=0.5:k2=0.5" \
barrel.mp4
# Pincushion distortion (opposite of barrel)
ffmpeg -i input.mp4 \
-vf "lenscorrection=cx=0.5:cy=0.5:k1=-0.3:k2=-0.3" \
pincushion.mp4
# Parameters:
# cx, cy: Lens center (0-1, 0.5 = center)
# k1, k2: Distortion coefficients (positive = barrel, negative = pincushion)
# Motion trails
ffmpeg -i input.mp4 \
-vf "lagfun=decay=0.95" \
trails.mp4
# Parameters:
# decay: How fast trails fade (0-1, higher = longer trails)
# Heavy trails
ffmpeg -i input.mp4 \
-vf "lagfun=decay=0.98" \
heavy_trails.mp4
# Light trails
ffmpeg -i input.mp4 \
-vf "lagfun=decay=0.85" \
light_trails.mp4
# Trails with color shift
ffmpeg -i input.mp4 \
-vf "lagfun=decay=0.95,hue=h=t*10" \
color_trails.mp4
# Inverted trails (bright areas leave dark trails)
ffmpeg -i input.mp4 \
-vf "negate,lagfun=decay=0.95,negate" \
inverted_trails.mp4
# Average 5 frames (motion blur effect)
ffmpeg -i input.mp4 \
-vf "tmix=frames=5:weights='1 1 1 1 1'" \
motion_blur.mp4
# Echo effect (repeat previous frames)
ffmpeg -i input.mp4 \
-vf "tmix=frames=10:weights='1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1'" \
echo.mp4
# Ghosting
ffmpeg -i input.mp4 \
-vf "tmix=frames=3:weights='1 0.5 0.25'" \
ghosting.mp4
# Frame difference (motion highlight)
ffmpeg -i input.mp4 \
-vf "tblend=all_mode=difference" \
frame_diff.mp4
# Available modes:
# addition, addition128, multiply, multiply128
# average, difference, difference128
# divide, exclusion, extremity, freeze
# glow, hardlight, hardmix, heat
# lighten, darken, linearlight, negation
# normal, overlay, phoenix, pinlight
# reflect, screen, softdifference
# softlight, stain, subtract, vividlight, xor
# Neon edges
ffmpeg -i input.mp4 \
-vf "tblend=all_mode=difference128,eq=brightness=0.1:contrast=2" \
neon_edges.mp4
# Psychedelic blend
ffmpeg -i input.mp4 \
-vf "tblend=all_mode=phoenix" \
psychedelic.mp4
# Burn effect
ffmpeg -i input.mp4 \
-vf "tblend=all_mode=heat" \
burn_effect.mp4
# Digital glitch noise
ffmpeg -i input.mp4 \
-vf "\
noise=c0s=30:c0f=a+t:c1s=20:c1f=a+t,\
rgbashift=rh='5*random(1)':bh='-5*random(1)'" \
digital_glitch.mp4
# Note: random() generates noise, but isn't truly random between frames
# Heavy compression artifacts
ffmpeg -i input.mp4 \
-c:v libx264 -crf 51 -preset ultrafast \
temp_compressed.mp4
ffmpeg -i temp_compressed.mp4 \
-c:v libx264 -crf 18 \
artifacts.mp4
# Blocky artifacts with multiple re-encodes
for i in {1..5}; do
ffmpeg -y -i input.mp4 -c:v libx264 -crf 40 temp.mp4
mv temp.mp4 input.mp4
done
# Bit-depth reduction (posterization)
ffmpeg -i input.mp4 \
-vf "geq=lum='floor(lum(X,Y)/32)*32':cb='floor(cb(X,Y)/32)*32':cr='floor(cr(X,Y)/32)*32'" \
bit_crush.mp4
# XOR pattern
ffmpeg -i input.mp4 \
-vf "geq=lum='bitxor(lum(X,Y),X+Y)':cb='cb(X,Y)':cr='cr(X,Y)'" \
xor_pattern.mp4
# Horizontal scan lines
ffmpeg -i input.mp4 \
-vf "drawgrid=w=iw:h=2:t=1:[email protected]" \
scanlines.mp4
# Heavier scan lines
ffmpeg -i input.mp4 \
-vf "drawgrid=w=iw:h=4:t=2:[email protected]" \
heavy_scanlines.mp4
# RGB scan lines (trinitron style)
ffmpeg -i input.mp4 \
-vf "drawgrid=w=3:h=ih:t=1:[email protected]" \
rgb_scanlines.mp4
# Full CRT effect
ffmpeg -i input.mp4 \
-vf "\
gblur=sigma=0.5,\
drawgrid=w=iw:h=2:t=1:[email protected],\
vignette=PI/4,\
eq=saturation=1.2:contrast=1.1,\
lenscorrection=k1=0.1:k2=0.1,\
noise=c0s=5:c0f=t" \
crt_effect.mp4
# Add interlacing artifacts
ffmpeg -i input.mp4 \
-vf "interlace=scan=tff,fieldorder=bff" \
interlaced.mp4
# Fake interlacing (comb effect)
ffmpeg -i input.mp4 \
-vf "tinterlace=merge" \
comb_effect.mp4
# Horizontal mirror (left to right)
ffmpeg -i input.mp4 \
-vf "crop=iw/2:ih:0:0,split[a][b];[b]hflip[b];[a][b]hstack" \
mirror_h.mp4
# Vertical mirror (top to bottom)
ffmpeg -i input.mp4 \
-vf "crop=iw:ih/2:0:0,split[a][b];[b]vflip[b];[a][b]vstack" \
mirror_v.mp4
# Quad mirror (kaleidoscope-lite)
ffmpeg -i input.mp4 \
-vf "\
crop=iw/2:ih/2:0:0,split=4[a][b][c][d];\
[b]hflip[b];[c]vflip[c];[d]hflip,vflip[d];\
[a][b]hstack[top];[c][d]hstack[bottom];\
[top][bottom]vstack" \
quad_mirror.mp4
ffmpeg -i input.mp4 \
-vf "\
minterpolate='mi_mode=mci:mc_mode=aobmc':enable='lt(mod(t,2),0.2)',\
rgbashift=rh='3*sin(t*10)':bh='-3*sin(t*10)',\
lagfun=decay=0.9:enable='gt(mod(t,3),2.5)',\
noise=c0s=10:c0f=t:enable='lt(mod(t,5),0.3)'" \
-c:v libx264 -crf 18 music_glitch.mp4
ffmpeg -i input.mp4 \
-vf "\
eq=brightness=-0.1:contrast=1.2:saturation=0.7,\
chromashift=cbh='5*random(1)':crh='-3*random(1)',\
noise=c0s=15:c0f=a+t,\
tblend=all_mode=difference:all_opacity=0.1:enable='lt(mod(t,3),0.1)',\
drawgrid=w=iw:h=2:t=1:[email protected]" \
horror_glitch.mp4
ffmpeg -i input.mp4 \
-vf "\
eq=saturation=1.5:contrast=1.3,\
colorbalance=rs=0.2:bs=0.2,\
rgbashift=rh='-3':bh='3',\
drawgrid=w=iw:h=3:t=1:[email protected],\
unsharp=5:5:1.5" \
cyberpunk.mp4
ffmpeg -i input.mp4 \
-vf "\
noise=c0s=50:c0f=t:enable='lt(mod(t,10),0.5)',\
chromashift=cbh='10*random(1)':enable='lt(mod(t,10),0.5)',\
eq=brightness='-0.3*lt(mod(t,10),0.5)'" \
signal_loss.mp4
# Process effects, then encode with hardware
ffmpeg -i input.mp4 \
-vf "your_glitch_filters" \
-c:v rawvideo -f nut - | \
ffmpeg -i - \
-c:v h264_nvenc -preset p4 -cq 20 \
output.mp4
This guide covers FFmpeg glitch and distortion effects. For color grading see ffmpeg-color-grading-chromakey, for transitions see ffmpeg-transitions-effects.
development
This skill should be used when the user asks to train, debug, scale, or improve ML models. PROACTIVELY activate for: (1) PyTorch, TensorFlow/Keras, JAX, Flax, Hugging Face Trainer/Accelerate training loops, (2) distributed training, DDP/FSDP/DeepSpeed, TPU/GPU setup, (3) mixed precision AMP/bf16, gradient accumulation, checkpointing, seeding, (4) overfitting, imbalance, loss functions, regularization, LR schedules, warmup, (5) memory optimization, gradient checkpointing, offloading, quantization-aware training. Provides: reproducible training best practices across deep learning and classical ML.
development
This skill should be used when the user asks to productionize, track, version, govern, monitor, or automate ML systems. PROACTIVELY activate for: (1) MLflow, Weights & Biases, Neptune, Comet, ClearML experiment tracking, (2) model registry, model versioning, artifact lineage, reproducibility, (3) Kubeflow, SageMaker Pipelines, Vertex AI Pipelines, Azure ML pipelines, Databricks workflows, (4) CI/CD, continuous training/evaluation, A/B tests, canary/shadow deployments, (5) drift detection, model monitoring, data validation, responsible AI governance. Provides: end-to-end MLOps architecture and operational safeguards.
development
This skill should be used when the user asks to optimize, export, serve, compress, or accelerate ML inference. PROACTIVELY activate for: (1) latency, throughput, p95/p99, batching, concurrency, KV cache, memory, or cost issues, (2) quantization INT8/INT4, GPTQ, AWQ, bitsandbytes, pruning, sparsity, distillation, (3) ONNX export, ONNX Runtime, TensorRT, TorchScript, torch.compile, XLA, OpenVINO, Core ML, TFLite, (4) Triton, TorchServe, TF Serving, BentoML, Seldon, KServe configuration, (5) edge deployment, CPU/GPU/TPU/Inferentia serving. Provides: hardware-aware inference optimization and safe benchmarking.
testing
This skill should be used when the user asks to tune hyperparameters, run sweeps, optimize search spaces, or use AutoML. PROACTIVELY activate for: (1) Optuna, Ray Tune, FLAML, AutoGluon, Hyperopt, Nevergrad, KerasTuner, W&B sweeps, (2) grid search, random search, Bayesian optimization, TPE, Gaussian processes, evolutionary search, (3) ASHA, Hyperband, successive halving, multi-fidelity optimization, population-based training, (4) learning-rate finder, batch-size search, early stopping, pruning, (5) reproducible sweep design and experiment analysis. Provides: budget-aware hyperparameter search strategy.