Filter Reference
Auto-generated from
.vkfilterfiles in the Vapourkit repo. Do not hand-edit — re-runnpm run gen:filters.
162 filters across 34 categories.
Categories
Section titled “Categories”- Anti-Aliasing
- Blurring
- Chroma
- Cleaning
- Color Modification
- Comparison
- Compositing
- Debanding
- Deblocking
- Dehalo
- Deinterlacing
- Denoising
- Effects
- Frame Interpolation
- Frame Manipulation
- Frame Rate
- Frame Recovery
- Grain
- Hybrid
- Limiting
- Lines
- Masking
- Overlays
- Padding/Cropping
- Resizing
- Restoration
- Sharpening
- Stabilization
- Telecine
- Temporal Smoothing
- Tiling
- Transform
- Unresize
- Utility
Anti-Aliasing
Section titled “Anti-Aliasing”AA EEDI3
Section titled “AA EEDI3”Anti-aliasing using EEDI3 edge-directed interpolation
Show code
# Anti-aliasing using EEDI3 (via vs-jetpack)# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsaa/deinterlacers/#vsaa.deinterlacers.EEDI3
from vsaa import EEDI3
# Apply anti-aliasing in both directions using EEDI3clip = EEDI3().antialias(clip)AA SangNom
Section titled “AA SangNom”Single field anti-aliasing using SangNom edge-directed interpolation
Show code
# Anti-aliasing using SangNom (via vs-jetpack)# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsaa/deinterlacers/#vsaa.deinterlacers.SangNom
from vsaa import SangNom
# Anti-aliasing strength (0-128 for 8-bit)aa_strength = 48
# Apply anti-aliasing in both directions using SangNomclip = SangNom(aa=aa_strength).antialias(clip)Based AA
Section titled “Based AA”Advanced anti-aliasing using supersampling with edge detection masking
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsaa/funcs/?h=based#vsaa.funcs.based_aa
from vsaa import based_aa
# Based anti-aliasing - supersampling-based AA with edge detectionrfactor = 2.0 # Resize factor for supersampling (higher = better quality but slower)mask_thr = 60 # Edge detection threshold (higher = less AA applied)
clip = based_aa(clip, rfactor=rfactor, mask_thr=mask_thr)DAA Anti-Aliasing
Section titled “DAA Anti-Aliasing”Anti-aliasing with contra-sharpening by Didée, averages two independent interpolations
Show code
# Didée's anti-aliasing with contra-sharpening# From hybrid_filters/antiAliasing.pyimport syssys.path.insert(0, r'hybrid_filters')from antiAliasing import daa
clip = daa(clip)Blurring
Section titled “Blurring”Bilateral
Section titled “Bilateral”Edge-preserving and noise-reducing smoothing using bilateral filter
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/blur/#vsrgtools.blur.bilateral
from vsrgtools import bilateral
# Spatial sigma (controls spatial smoothing extent)sigmaS = 3.0# Range sigma (controls sensitivity to intensity differences)sigmaR = 0.02
clip = bilateral(clip, sigmaS=sigmaS, sigmaR=sigmaR)Box Blur
Section titled “Box Blur”Applies a box blur to the clip
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/blur/#vsrgtools.blur.box_blur
from vsrgtools import box_blur
radius = 15passes = 3
clip = box_blur(clip, radius=radius, passes=passes)Gauss Blur
Section titled “Gauss Blur”Blurs the clip with a Gaussian Blur.
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/blur/?h=gauss_bl#vsrgtools.blur.gauss_blur
import vsrgtoolsclip = vsrgtools.gauss_blur(clip, sigma=5.0)Guided Filter
Section titled “Guided Filter”Edge-preserving guided filter for smoothing while maintaining edges
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/blur/#vsrgtools.blur.guided_filter
from vsrgtools import guided_filter
# Apply edge-preserving guided filterradius = 4thr = 0.01 # Threshold (epsilon)clip = guided_filter(clip, radius=radius, thr=thr)Median Blur
Section titled “Median Blur”Applies median blur for noise reduction and artifact removal
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/blur/
from vsrgtools import median_blur
# Apply median blur for noise reductionradius = 1clip = median_blur(clip, radius=radius)Chroma
Section titled “Chroma”Fix Chroma Bleeding
Section titled “Fix Chroma Bleeding”Fixes chroma bleeding artifacts with adjustable strength and blur options
Show code
# Fix chroma bleeding artifacts# From hybrid_filters/chromaBleeding.pyimport syssys.path.insert(0, r'hybrid_filters')from chromaBleeding import FixChromaBleedingMod
clip = FixChromaBleedingMod(clip, cx=4, cy=4, thr=4.0, strength=0.8, blur=False)Rainbow Smooth
Section titled “Rainbow Smooth”Removes rainbow artifacts using edge-aware chroma smoothing
Show code
# Remove rainbow artifacts with edge-aware smoothing# From hybrid_filters/RainbowSmooth.pyimport syssys.path.insert(0, r'hybrid_filters')from RainbowSmooth import RainbowSmooth
clip = RainbowSmooth(clip, radius=3, lthresh=0, hthresh=220, mask="original")Cleaning
Section titled “Cleaning”Deblock
Section titled “Deblock”Removes blocking artifacts caused by video compression
Show code
# Remove blocking artifacts from compression# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsdenoise/deblock/
from vsdenoise import deblock_qed
quant = 25 # Quantizer strength (higher = stronger deblocking)alpha = 1 # Alpha parameter for deblockingbeta = 2 # Beta parameter for deblocking
clip = deblock_qed(clip, quant=(quant, quant), alpha=(alpha, alpha), beta=(beta, beta))DeSpot
Section titled “DeSpot”Removes temporal spots and artifacts using motion-compensated cleaning
Show code
# Remove temporal spots and artifacts using motion compensation# From hybrid_filters/artifacts.pyimport syssys.path.insert(0, r'hybrid_filters')from artifacts import DeSpot
clip = DeSpot(clip)Killer Spots
Section titled “Killer Spots”Removes spots from primitive videos using motion compensation
Show code
# Aggressive spot removal for primitive videos# From hybrid_filters/killerspots.pyimport syssys.path.insert(0, r'hybrid_filters')from killerspots import KillerSpots
clip = KillerSpots(clip, limit=10, advanced=False)LUTDeCrawl
Section titled “LUTDeCrawl”Removes dot crawl artifacts from video
Show code
# Remove dot crawl artifacts# From hybrid_filters/decrawl.pyimport syssys.path.insert(0, r'hybrid_filters')from decrawl import LUTDeCrawl
clip = LUTDeCrawl(clip, ythresh=10, cthresh=10, maxdiff=50, scnchg=25, usemaxdiff=True)LUTDeRainbow
Section titled “LUTDeRainbow”Removes rainbow artifacts from video
Show code
# Remove rainbow artifacts# From hybrid_filters/derainbow.pyimport syssys.path.insert(0, r'hybrid_filters')from derainbow import LUTDeRainbow
clip = LUTDeRainbow(clip, cthresh=10, ythresh=10, y=True, linkUV=True)Remove Dirt
Section titled “Remove Dirt”Removes dirt and specks from video using temporal cleaning
Show code
# Remove dirt and specks from video# From hybrid_filters/removeDirt.pyimport syssys.path.insert(0, r'hybrid_filters')from removeDirt import RemoveDirt
clip = RemoveDirt(clip, repmode=16, remgrainmode=17, limit=10)Remove Dirt MC
Section titled “Remove Dirt MC”Removes dirt using motion-compensated temporal cleaning
Show code
# Motion-compensated dirt removal# From hybrid_filters/removeDirt.pyimport syssys.path.insert(0, r'hybrid_filters')from removeDirt import RemoveDirtMC
clip = RemoveDirtMC(clip, limit=6, repmode=16, remgrainmode=17, block_size=8, block_over=4, gpu=False)Vinverse
Section titled “Vinverse”Small but effective function against residual combing by Didée
Show code
# Remove residual combing artifacts# From hybrid_filters/residual.pyimport syssys.path.insert(0, r'hybrid_filters')from residual import Vinverse
clip = Vinverse(clip, sstr=2.7, amnt=255, chroma=True, scl=0.25)Color Modification
Section titled “Color Modification”Average Color Fix
Section titled “Average Color Fix”Correct for color shift by matching the average color of the clip to that of the original input clip.
Show code
# Full Docs: https://github.com/pifroggi/vs_colorfix?tab=readme-ov-file#average-color-fix
import vs_colorfixoriginal_clip_converted = core.resize.Point(original_clip, format=clip.format)clip = vs_colorfix.average(clip, original_clip_converted, radius=10)Contrast Limited Adaptive Histogram Equalization. Similar to Retinex
Show code
# Full Docs: https://github.com/dnjulek/vapoursynth-zip/wiki/CLAHE
gray = core.std.ShufflePlanes(clip, planes=0, colorfamily=vs.GRAY)clip = core.vszip.CLAHE(gray, limit=3000, tiles=10)Clamp Values
Section titled “Clamp Values”Clamps pixel values to stay within specified min/max range
Show code
# Clamp values to specified range
min_value = 0max_value = 65535
clip = core.std.Expr(clip, expr=f"x {min_value} max {max_value} min")Invert
Section titled “Invert”Inverts all colors
Show code
# Invert all colors
clip = core.std.Invert(clip)Levels
Section titled “Levels”Leveling Filter including Gamma
Show code
# Full Docs: https://www.vapoursynth.com/doc/functions/video/levels.html
clip = core.std.Levels(clip, min_in=0, max_in=65535, min_out=0, max_out=65535, gamma=1.0)Retinex
Section titled “Retinex”Powerful filter in dynamic range compression, local contrast enhancement, color constancy, or defogging. Similar to CLAHE.
Show code
# Full Docs: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-Retinex
gray = core.std.ShufflePlanes(clip, planes=0, colorfamily=vs.GRAY)clip = core.retinex.MSRCP(gray, sigma=[25,80,250])Shift Chroma (bundled template)
Section titled “Shift Chroma (bundled template)”If the chroma is misaligned with the luma, this helps correct it.
Show code
# Shifts just the chroma in case it is misaligned.# Positive values go up/left, negative down/right.# Subpixel shifts are allowed.
horizontal_shift = 0vertical_shift = 0
shifted_chroma = core.resize.Bilinear(clip, format=vs.YUV444P16, src_top=vertical_shift, src_left=horizontal_shift)clip = core.resize.Bilinear(clip, format=vs.YUV444P16)clip = core.std.ShufflePlanes([clip, shifted_chroma, shifted_chroma], [0, 1, 2], vs.YUV)Adjusts hue, saturation, brightness and contrast with coring support
Show code
# Adjust hue, saturation, brightness and contrast# From hybrid_filters/color.pyimport syssys.path.insert(0, r'hybrid_filters')from color import Tweak
clip = Tweak(clip, hue=None, sat=None, bright=None, cont=None, coring=True)Wavelet Color Fix
Section titled “Wavelet Color Fix”Correct for color shift by matching the average color of the clip to that of the original input clip. Better results than Average Color Fix, but much slower.
Show code
# Full Docs: https://github.com/pifroggi/vs_colorfix?tab=readme-ov-file#wavelet-color-fix
wavelets = 5device = "cuda"fp16 = True
import vs_colorfixoriginal_clip_converted = core.resize.Point(original_clip, format=vs.YUV444PH if fp16 else vs.YUV444PS)clip_converted = core.resize.Point(clip, format=vs.YUV444PH if fp16 else vs.YUV444PS)clip_converted = vs_colorfix.wavelet(clip_converted, original_clip_converted, wavelets=wavelets, device=device)clip = core.resize.Point(clip_converted, format=clip.format.id)Comparison
Section titled “Comparison”Interleave Clips
Section titled “Interleave Clips”Interleaves frames from multiple clips for comparison
Show code
# Interleave frames from multiple clips# Full Docs: https://www.vapoursynth.com/doc/functions/video/interleave.html
clip_a = clipclip_b = clip # Replace with your second clip
# Alternates: frame 0 from clip_a, frame 0 from clip_b, frame 1 from clip_a, etc.clip = core.std.Interleave([clip_a, clip_b])Side by Side
Section titled “Side by Side”Stacks the current clip next to the original clip.
Show code
# Full Docs: https://www.vapoursynth.com/doc/functions/video/stackvertical_stackhorizontal.html
original_clip_resized = core.resize.Bilinear(original_clip, format=clip.format, width=clip.width, height=clip.height)clip = core.std.StackHorizontal([original_clip_resized, clip])Stack Horizontal
Section titled “Stack Horizontal”Stacks two clips side-by-side horizontally for comparison
Show code
# Stack two clips side-by-side horizontally# Full Docs: https://www.vapoursynth.com/doc/functions/video/stackvertical.html
clip_left = clipclip_right = clip # Replace with your second clip
clip = core.std.StackHorizontal([clip_left, clip_right])Stack Vertical
Section titled “Stack Vertical”Stacks two clips vertically (top and bottom) for comparison
Show code
# Stack two clips vertically (top and bottom)# Full Docs: https://www.vapoursynth.com/doc/functions/video/stackvertical.html
clip_top = clipclip_bottom = clip # Replace with your second clip
clip = core.std.StackVertical([clip_top, clip_bottom])Compositing
Section titled “Compositing”Overlay
Section titled “Overlay”Overlays clips with various blend modes and positioning options
Show code
# Overlay clips with different blend modes# From hybrid_filters/misc.pyimport syssys.path.insert(0, r'hybrid_filters')from misc import Overlay
# overlay_clip = ...# clip = Overlay(clip, overlay_clip, x=0, y=0, opacity=1.0, mode='normal')Debanding
Section titled “Debanding”Deband
Section titled “Deband”Removes banding from the clip with the placebo debander.
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsdeband/debanders/?h=deband#vsdeband.debanders.placebo_deband# thr is the strength for [luma, chroma, chroma]. Increase if the effect is not strong enough. Check the docs for a full explanation.
import vsdebandclip = vsdeband.placebo_deband(clip, radius=8, thr=[3, 3, 3], grain=0.0, iterations=4)GradFun3
Section titled “GradFun3”Advanced debanding combined with resizers for better detail preservation
Show code
# Advanced debanding with resizing support (GradFun3mod)# From hybrid_filters/deband.pyimport syssys.path.insert(0, r'hybrid_filters')from deband import GradFun3
clip = GradFun3(clip, thr=0.35, radius=16, elast=3.0, mask=2, mode=2, ampo=1, ampn=0, pat=32, dyn=False, staticnoise=False, smode=2, thr_det=2 + round(max(thr - 0.35, 0) / 0.3), debug=False, plane=0, bits=None, dyn_resize=False)Deblocking
Section titled “Deblocking”Deblock QED
Section titled “Deblock QED”Postprocessed deblocking using full frequencies on edges, DCT-lowpassed on interiors
Show code
# Advanced deblocking with DCT-lowpass filtering# From hybrid_filters/deblock.pyimport syssys.path.insert(0, r'hybrid_filters')from deblock import Deblock_QED
clip = Deblock_QED(clip, quant1=24, quant2=26, aOff1=1, bOff1=2, aOff2=1, bOff2=2, uv=3)DPIR Denoise/Deblock
Section titled “DPIR Denoise/Deblock”Deep Plug-and-Play Image Restoration is an AI spatial denoiser and deblocker.
Show code
from vsmlrt import DPIR, DPIRModel, Backend# Full Docs: https://github.com/AmusementClub/vs-mlrt/wiki/DPIR# Models: DPIRModel.drunet_color, DPIRModel.drunet_deblocking_color
model = DPIRModel.drunet_colorstrength = 5nvidia_gpu = Truefp16 = Truenum_streams = 1
backend = (Backend.TRT if nvidia_gpu else Backend.ORT_DML)(fp16=fp16, num_streams=num_streams)clip = core.resize.Bilinear(clip, format=vs.RGBH if fp16 else vs.RGBS, matrix_in_s="709")clip = DPIR(clip, strength=strength, model=model, backend=backend)clip = core.resize.Point(clip, format=vs.YUV444P16, matrix_s="709")Dehalo
Section titled “Dehalo”Dehalo Alpha
Section titled “Dehalo Alpha”Reduces halo artifacts by aggressively processing edges and surroundings
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsdehalo/alpha/
from vsdehalo import dehalo_alpha
# Reduce halo artifacts from edge processinglowsens = 50.0 # Lower sensitivity threshold (0-100)highsens = 50.0 # Upper sensitivity threshold (0-100)ss = 1.5 # Supersampling factor to reduce aliasingdarkstr = 0.0 # Strength for suppressing dark halos (0.0-1.0)brightstr = 1.0 # Strength for suppressing bright halos (0.0-1.0)
clip = dehalo_alpha(clip, lowsens=lowsens, highsens=highsens, ss=ss, darkstr=darkstr, brightstr=brightstr)DeHalo Alpha (Old)
Section titled “DeHalo Alpha (Old)”Reduces halo artifacts with separate controls for dark and bright halos
Show code
# Reduce halo artifacts from sharpening# From hybrid_filters/dehalo.pyimport syssys.path.insert(0, r'hybrid_filters')from dehalo import DeHalo_alpha
clip = DeHalo_alpha(clip, rx=2.0, ry=2.0, darkstr=1.0, brightstr=1.0, lowsens=50.0, highsens=50.0, ss=1.5)HQDering
Section titled “HQDering”Applies deringing using a smart smoother near edges where ringing occurs
Show code
# High-quality deringing using smart edge smoothing# From hybrid_filters/dering.pyimport syssys.path.insert(0, r'hybrid_filters')from dering import HQDeringmod
clip = HQDeringmod(clip, mrad=1, msmooth=1, incedge=False, mthr=60, thr=12.0, elast=2.0, show=False)Deinterlacing
Section titled “Deinterlacing”CQTGMC
Section titled “CQTGMC”Fast deinterlacing combining spatial and temporal methods
Show code
# Fast deinterlacing with QTGMC-like quality# From hybrid_filters/cqtgmc.pyimport syssys.path.insert(0, r'hybrid_filters')from cqtgmc import CQTGMC
clip = CQTGMC(clip, Sharpness=0.25, thSAD1=192, thSAD2=320, tff=True, openCL=False)Deep Deinterlace
Section titled “Deep Deinterlace”Three AI Deinterlacers. Input must be interlaced. This will double the frame rate, for example from 30i to 60p.
Show code
# Full Docs: https://github.com/pifroggi/vs_deepdeinterlace?tab=readme-ov-file#usage# Available deinterlacers are 1 (DDD) and 2 (DeF).# Deinterlacer 3 (DfConvEkSA) is not supported.
import vs_deepdeinterlaceclip = vs_deepdeinterlace.YUV(clip, tff=True, deinterlacer=[1, 1], tta=[False, False], matrix_in_s="709", range_in_s="limited", device="cuda", fp16=True)Deinterlace BWDIF
Section titled “Deinterlace BWDIF”Motion-adaptive deinterlacing using BWDIF with w3fdif and cubic interpolation algorithms
Show code
# BWDIF deinterlacing (motion adaptive with w3fdif and cubic interpolation)# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsaa/deinterlacers/#vsaa.deinterlacers.BWDIF
from vstools import vs, corefrom vsaa import BWDIF
tff = True # Field order (True=top field first, False=bottom field first)double_rate = False # Output frame rate (False=same rate, True=double rate)
deinterlacer = BWDIF(tff=tff, double_rate=double_rate)clip = deinterlacer.deinterlace(clip)High-quality edge-directed deinterlacing using EEDI3 algorithm
Show code
# High-quality deinterlacing with EEDI3# Full Docs: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-EEDI3
from vstools import vs, core
field = 1 # Field to keep (0=bottom, 1=top)dh = True # Double height
clip = core.eedi3m.EEDI3(clip, field=field, dh=dh)NNEDI3
Section titled “NNEDI3”Neural network-based deinterlacing/upscaling using NNEDI3
Show code
# Neural network deinterlacer# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsaa/deinterlacers/#vsaa.deinterlacers.NNEDI3
from vstools import vs, corefrom vsaa import NNEDI3
tff = True # Field order (True=top field first, False=bottom field first)double_rate = True # Double frame rate outputnsize = 4 # Network size (0-6, larger=slower but better quality)nns = 4 # Number of neurons (1-4, more neurons=better quality but slower)qual = 2 # Quality (1=fast, 2=slow)
deinterlacer = NNEDI3(nsize=nsize, nns=nns, qual=qual, tff=tff, double_rate=double_rate)clip = deinterlacer.deinterlace(clip)QTGMC (New)
Section titled “QTGMC (New)”Quasi Temporal Gaussian Motion Compensated is an advanced deinterlacer with a wide range of features, including noise processing, support for repair of progressive material, precision source matching, shutter speed simulation, and more.
Show code
# All default parameters for each stage exposed to see what is adjustable. These default are for best quality, not highest speed.# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsdeinterlace/qtgmc/?h=sharpe#vsdeinterlace.qtgmc
from functools import partialfrom vsdeinterlace.qtgmc import QTempGaussMCfrom vsdenoise.fft import DFTTestfrom vsdenoise.mvtools.presets import MVToolsPresetfrom vsaa.deinterlacers import NNEDI3
clip = ( QTempGaussMC( clip, input_type=QTempGaussMC.InputType.INTERLACE, tff=True, ) .prefilter( tr=2, sc_threshold=0.1, postprocess=QTempGaussMC.SearchPostProcess.GAUSSBLUR_EDGESOFTEN, strength=(1.9, 0.1), limit=(3, 7, 2), range_expansion_args=None, mask_shimmer_args={"erosion_distance": 0}, # ← was None ) .analyze( force_tr=1, preset=MVToolsPreset.HQ_SAD, blksize=16, overlap=2, refine=1, thsad_recalc=None, thscd=(180, 38.5), ) .denoise( tr=2, func=partial(DFTTest().denoise, sigma=8), mode=QTempGaussMC.NoiseProcessMode.IDENTIFY, deint=QTempGaussMC.NoiseDeintMode.GENERATE, mc_denoise=True, stabilize=(0.6, 0.2), func_comp_args=None, stabilize_comp_args=None, ) .basic( tr=2, thsad=640, bobber=NNEDI3(nsize=1), noise_restore=0.0, degrain_args=None, mask_args=None, mask_shimmer_args={"erosion_distance": 0}, ) .source_match( tr=1, bobber=None, mode=QTempGaussMC.SourceMatchMode.NONE, similarity=0.5, enhance=0.5, degrain_args=None, ) .lossless( mode=QTempGaussMC.LosslessMode.NONE, ) .sharpen( mode=None, strength=1.0, clamp=1, thin=0.0, ) .back_blend( mode=QTempGaussMC.BackBlendMode.BOTH, sigma=1.4, ) .sharpen_limit( mode=None, radius=3, clamp=0, comp_args=None, ) .final( tr=3, thsad=256, noise_restore=0.0, degrain_args=None, mask_shimmer_args={"erosion_distance": 0}, # ← was None ) .motion_blur( shutter_angle=(180, 180), fps_divisor=1, blur_args=None, mask_args={"ml": 4}, ) .deinterlace())
original_clip = clipQTGMC (Old)
Section titled “QTGMC (Old)”High-quality motion-compensated deinterlacing (QTGMC)
Show code
# High-quality deinterlacing with motion compensation# From hybrid_filters/qtgmc.pyimport syssys.path.insert(0, r'hybrid_filters')from qtgmc import QTGMC
clip = QTGMC(clip, Preset='Slower', FPSDivisor=1, TFF=None)TFMBobN
Section titled “TFMBobN”Deinterlaces using TFM with NNEDI3 bobbing for field reconstruction
Show code
# TFM + NNEDI3 bobbing deinterlace# From hybrid_filters/TFMBob.pyimport syssys.path.insert(0, r'hybrid_filters')from TFMBob import TFMBobN
clip = TFMBobN(clip, pp=6, cthresh=9, MI=80, chroma=False, openCL=False)TFMBobQ
Section titled “TFMBobQ”Deinterlaces using TFM with QTGMC bobbing for field reconstruction
Show code
# TFM + QTGMC bobbing deinterlace# From hybrid_filters/TFMBob.pyimport syssys.path.insert(0, r'hybrid_filters')from TFMBob import TFMBobQ
clip = TFMBobQ(clip, pp=6, cthresh=9, MI=80, chroma=False, openCL=False)Inverse telecine to convert 30i/60i back to original 24p film
Show code
# Inverse telecine (30i to 24p conversion)# Converts to 8 bit colors to function# Full Docs: https://github.com/vapoursynth/vivtc
from vstools import vs, core
order = 1 # Field order (0=bottom first, 1=top first)
# Convert to YUV420P8 if needed (VFM only supports specific formats)original_clip = clipif clip.format.id not in [vs.YUV420P8, vs.YUV422P8, vs.YUV440P8, vs.YUV444P8, vs.GRAY8]: clip = core.resize.Bicubic(clip, format=vs.YUV422P8)
clip = core.vivtc.VFM(clip, order=order)clip = core.vivtc.VDecimate(clip)
# Convert back to original format if it was changedif original_clip.format.id != clip.format.id: clip = core.resize.Bicubic(clip, format=original_clip.format)Denoising
Section titled “Denoising”DFTTest2
Section titled “DFTTest2”Frequency domain denoising using DFT (Discrete Fourier Transform)
Show code
# Frequency domain denoising# From hybrid_filters/dfttest2.pyimport syssys.path.insert(0, r'hybrid_filters')from dfttest2 import DFTTest
clip = DFTTest(clip, sigma=8.0)DPIR Denoise/Deblock
Section titled “DPIR Denoise/Deblock”Deep Plug-and-Play Image Restoration is an AI spatial denoiser and deblocker.
Show code
from vsmlrt import DPIR, DPIRModel, Backend# Full Docs: https://github.com/AmusementClub/vs-mlrt/wiki/DPIR# Models: DPIRModel.drunet_color, DPIRModel.drunet_deblocking_color
model = DPIRModel.drunet_colorstrength = 5nvidia_gpu = Truefp16 = Truenum_streams = 1
backend = (Backend.TRT if nvidia_gpu else Backend.ORT_DML)(fp16=fp16, num_streams=num_streams)clip = core.resize.Bilinear(clip, format=vs.RGBH if fp16 else vs.RGBS, matrix_in_s="709")clip = DPIR(clip, strength=strength, model=model, backend=backend)clip = core.resize.Point(clip, format=vs.YUV444P16, matrix_s="709")3D frequency-domain denoising using FFT (temporal + spatial)
Show code
# 3D frequency-domain denoising# Full Docs: https://github.com/myrsloik/VapourSynth-FFT3DFilter
from vstools import vs, core
sigma = 2.0 # Noise levelbt = 3 # Temporal block sizebw = 32 # Block widthbh = 32 # Block height
clip = core.fft3dfilter.FFT3DFilter(clip, sigma=sigma, bt=bt, bw=bw, bh=bh)KNLMeans Denoise
Section titled “KNLMeans Denoise”Non-local means denoising with GPU acceleration support
Show code
# Non-local means denoising# From hybrid_filters/denoise.pyimport syssys.path.insert(0, r'hybrid_filters')from denoise import KNLMeansCL
clip = KNLMeansCL(clip, d=None, a=None, s=None, h=None)MC_Degrain (Advanced)
Section titled “MC_Degrain (Advanced)”Motion Compensated Degrain - temporal denoising using motion compensation for high-quality noise reduction
Show code
# Motion Compensated Degrain using MVTools# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsdenoise/mvtools/
from vsdenoise import mc_degrainfrom vsdenoise.mvtools.presets import MVToolsPreset
clip = mc_degrain( clip, vectors=None, # Use internally generated motion vectors prefilter=None, # Optional prefilter clip or function mfilter=None, # Optional filtered clip for motion compensation preset=MVToolsPreset.HQ_SAD, # Quality preset (HQ_SAD, FAST, etc.) tr=2, # Temporal radius (1-3 recommended) blksize=16, # Block size for motion estimation overlap=2, # Block overlap refine=1, # Motion vector refinement iterations thsad=400, # SAD threshold for denoising strength thsad_recalc=None, # SAD threshold for recalculation limit=None, # Pixel change limit thscd=None, # Scene change detection threshold planes=None # Planes to process (None = all))MC_Degrain (Simple)
Section titled “MC_Degrain (Simple)”Motion Compensated Degrain - temporal denoising with motion compensation
Show code
# Motion Compensated Degrain# Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsdenoise/mvtools/
from vsdenoise import mc_degrainfrom vsdenoise.mvtools.presets import MVToolsPreset
clip = mc_degrain( clip, tr=2, thsad=400, blksize=16, overlap=2, preset=MVToolsPreset.HQ_SAD)NLM Denoise
Section titled “NLM Denoise”Non-Local Means Spatial Denoising Filter.
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsdenoise/nlm/
from vsdenoise import nl_means
clip = nl_means(clip, h=1.2, tr=1, a=2, s=4, backend=nl_means.Backend.ISPC)NLM Denoise (CUDA)
Section titled “NLM Denoise (CUDA)”Non-Local Means Spatial Denoising Filter. Requires an Nvidia GPU.
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsdenoise/nlm/
from vsdenoise import nl_means
clip = nl_means(clip, h=1.2, tr=1, a=2, s=4, backend=nl_means.Backend.CUDA)Oyster
Section titled “Oyster”High-quality denoising using BM3D with motion compensation
Show code
# High-quality denoising using BM3D# From hybrid_filters/Oyster.pyimport syssys.path.insert(0, r'hybrid_filters')from Oyster import Super_OYSTER
clip = Super_OYSTER(clip, sfMode=3, prefilter=False)SMDegrain
Section titled “SMDegrain”Pure temporal denoiser using MVTools with motion compensation
Show code
# Simple MDegrain - Motion-compensated temporal denoising# From hybrid_filters/smdegrain.pyimport syssys.path.insert(0, r'hybrid_filters')from smdegrain import SMDegrain
clip = SMDegrain(clip, tr=2, thSAD=300, RefineMotion=False, contrasharp=None, plane=4)SpotLess
Section titled “SpotLess”Strong temporal denoising optimized for removing spots and noise
Show code
# Strong temporal denoising using MVTools# From hybrid_filters/SpotLess.pyimport syssys.path.insert(0, r'hybrid_filters')from SpotLess import SpotLess
clip = SpotLess(clip, radT=1, thsad=10000, chroma=True, truemotion=True)STPresso
Section titled “STPresso”Dampens grain slightly while maintaining original look using spatial and temporal filtering
Show code
# Spatiotemporal grain dampening# From hybrid_filters/degrain.pyimport syssys.path.insert(0, r'hybrid_filters')from degrain import STPresso
clip = STPresso(clip, limit=3, bias=24, RGmode=4, tthr=12, tlimit=3, tbias=49, back=1)Effects
Section titled “Effects”Animate
Section titled “Animate”Framework for animated effects and crossfade transitions between filters
Show code
# Apply animated effects and transitions# From hybrid_filters/animate.pyimport syssys.path.insert(0, r'hybrid_filters')import animate
# Define your animation functions# def effect1(clip): return clip.std.Convolution([1,2,1,2,4,2,1,2,1])# def effect2(clip): return clip.std.Sobel()
# MAP = [# (0, 100), [effect1],# (101, 150), [animate.Crossfade(effect1, effect2)],# (151, 200), [effect2]# ]# clip = animate.run(clip, MAP)Fade In
Section titled “Fade In”Fades in from black over specified number of frames
Show code
# Fade from black at the start of clip# From hybrid_filters/fade.pyimport syssys.path.insert(0, r'hybrid_filters')from fade import fadein
clip = fadein(clip, fadeframes=30)Fade Out
Section titled “Fade Out”Fades clip to black over specified number of frames
Show code
# Fade to black at the end of clip# From hybrid_filters/fade.pyimport syssys.path.insert(0, r'hybrid_filters')from fade import fadeout
clip = fadeout(clip, fadeframes=30)Frame Interpolation
Section titled “Frame Interpolation”AI frame interpolation to increase frame rate.
Show code
from vsmlrt import RIFE, RIFEModel, Backendfrom vstools import sc_detectimport vs_tiletools
# Configurationmodel = RIFEModel.v4_10 # See available models at bottommulti = 2 # Frame multiplier (2=double FPS, 3=triple, etc.)fp16 = True # FP16 precisionuse_sc_detect = True # Enable scene change detection for better qualitysc_threshold = 0.1 # Scene change detection threshold (higher = less sensitive)
# Backend (DirectML for AMD/Intel GPUs)backend = Backend.ORT_DML(fp16=fp16)
# Scene detection (improves RIFE quality by preventing interpolation across scene changes)if use_sc_detect: clip = sc_detect(clip, threshold=sc_threshold)
# Pad to multiple of 32 (required by RIFE)clip = vs_tiletools.mod(clip, modulus=32, mode="mirror")
# Apply RIFEclip = core.resize.Bilinear(clip, format=vs.RGBH if fp16 else vs.RGBS, matrix_in_s="709")clip = RIFE(clip, multi=multi, model=model, backend=backend)
# Crop back to original dimensionsclip = vs_tiletools.crop(clip)
# Available models:# v4_0, v4_2, v4_3, v4_4, v4_5, v4_6, v4_7, v4_8, v4_9, v4_10Frame Manipulation
Section titled “Frame Manipulation”Add Duplicates
Section titled “Add Duplicates”Detects frames with low temporal difference and duplicates the previous frame if below threshold
Show code
# Add duplicate frames when temporal difference is below threshold# From hybrid_filters/AddDuplicates.pyimport syssys.path.insert(0, r'hybrid_filters')from AddDuplicates import addDup
clip = addDup(clip, thresh=0.3, debug=False)Delete Frames
Section titled “Delete Frames”Removes specified frames from the clip.
Show code
# Full Docs: https://www.vapoursynth.com/doc/functions/video/deleteframes.html
clip = core.std.DeleteFrames(clip, frames=[0, 5, 6])Duplicate Frames
Section titled “Duplicate Frames”Duplicates specified frames.
Show code
# Full Docs: https://www.vapoursynth.com/doc/functions/video/duplicateframes.html
clip = core.std.DuplicateFrames(clip, frames=[0, 5, 10])Freeze Frame
Section titled “Freeze Frame”Freezes frames in specified ranges using a replacement frame
Show code
# Freeze on a specific frame# Full Docs: https://www.vapoursynth.com/doc/functions/video/freezeframes.html
first = 0 # First frame to freezelast = 10 # Last frame to freezereplacement = 0 # Frame to use as replacement
clip = core.std.FreezeFrames(clip, first=[first], last=[last], replacement=[replacement])Replace Frames
Section titled “Replace Frames”Replace specified frames with the same frames from another clip.
Show code
# Full Docs: https://github.com/dnjulek/vapoursynth-zip/wiki/RFS
clip = core.vszip.RFS(clip, original_clip, frames=[10, 20, 30])Temporal Pad (Extend)
Section titled “Temporal Pad (Extend)”Extends a clip using various padding modes.
Show code
# Full Docs: https://github.com/pifroggi/vs_tiletools?tab=readme-ov-file#tpad# Padding mode can be mirror, repeat, black, or a custom color in 8-bit scale [128, 128, 128].
import vs_tiletoolsclip = vs_tiletools.extend(clip, start=0, end=0, mode="mirror")Frame Rate
Section titled “Frame Rate”Assume FPS
Section titled “Assume FPS”Changes the reported FPS without modifying frames (reinterprets timing)
Show code
# Change the FPS without dropping or duplicating frames# Full Docs: https://www.vapoursynth.com/doc/functions/video/assumefps.html
fpsnum = 24000fpsden = 1001 # 23.976 fps
clip = core.std.AssumeFPS(clip, fpsnum=fpsnum, fpsden=fpsden)Change FPS
Section titled “Change FPS”Convert framerate efficiently using precomputed lookup table for long clips
Show code
# Efficient framerate conversion for very long clips# From hybrid_filters/ChangeFPS.pyimport syssys.path.insert(0, r'hybrid_filters')from ChangeFPS import ChangeFPS
clip = ChangeFPS(clip, target_fps_num=60, target_fps_den=1)Frame Rate Converter
Section titled “Frame Rate Converter”Increases frame rate with interpolation and fine artifact removal
Show code
# Advanced frame rate conversion with artifact removal# From hybrid_filters/FrameRateConverter.pyimport syssys.path.insert(0, r'hybrid_filters')from FrameRateConverter import FrameRateConverter
clip = FrameRateConverter(clip, NewNum=60, NewDen=1, Preset='normal')Select Every
Section titled “Select Every”Selects every Nth frame from the clip to reduce frame rate
Show code
# Select every Nth frame# Full Docs: https://www.vapoursynth.com/doc/functions/video/selectevery.html
cycle = 5 # Take 1 frame every N framesoffsets = 0 # Which frame in the cycle to take
clip = core.std.SelectEvery(clip, cycle=cycle, offsets=[offsets])sRestore
Section titled “sRestore”Restores original framerate by detecting and removing duplicate frames
Show code
# Restore original framerate from telecined/decimated content# From hybrid_filters/srestore.pyimport syssys.path.insert(0, r'hybrid_filters')from srestore import sRestoreMUVs
clip = sRestoreMUVs(clip, frate=None, omode=6, mode=2, thresh=16)Frame Recovery
Section titled “Frame Recovery”Fill Drops RIFE
Section titled “Fill Drops RIFE”Fills dropped frames using RIFE AI-based interpolation
Show code
# Fill dropped frames using RIFE AI interpolation# From hybrid_filters/filldrops.pyimport syssys.path.insert(0, r'hybrid_filters')from filldrops import fillWithRIFE
clip = fillWithRIFE(clip, firstframe=100, rifeModel=22, rifeTTA=False, rifeUHD=False)Fill Drops SVP
Section titled “Fill Drops SVP”Fills dropped frames using SVP (SmoothVideo Project) interpolation
Show code
# Fill dropped frames using SVP interpolation# From hybrid_filters/filldrops.pyimport syssys.path.insert(0, r'hybrid_filters')from filldrops import fillWithSVP
clip = fillWithSVP(clip, firstframe=100, gpu=False)Fill Duplicate Frames
Section titled “Fill Duplicate Frames”Detects and replaces duplicate frames with interpolated frames
Show code
# Replace duplicate frames with interpolations# From hybrid_filters/FillDuplicateFrames.pyimport syssys.path.insert(0, r'hybrid_filters')from FillDuplicateFrames import FillDuplicateFrames
fdf = FillDuplicateFrames(clip, mode='FillDuplicate', thresh=0.001, method='SVP', debug=False)clip = fdf.outReplace Multiple Frames
Section titled “Replace Multiple Frames”Replaces specified frame intervals with interpolated frames
Show code
# Replace specified frame intervals with interpolation# From hybrid_filters/ReplaceMultipleFrames.pyimport syssys.path.insert(0, r'hybrid_filters')from ReplaceMultipleFrames import ReplaceMultipleFrames
rmf = ReplaceMultipleFrames(clip, intervals=[[100, 105], [200, 210]], method='SVP', debug=False)clip = rmf.outFGrain
Section titled “FGrain”Very high quality and realistic grain generator that animates the grain, adds opacity options, and support for YUV. Grain is only applied to luma. Requires an Nvidia GPU.
Show code
# Full Docs: https://github.com/pifroggi/vs_grain
import vs_grainclip = vs_grain.fgrain(clip, iterations=800, size=0.5, deviation=0.0, blur=0.9, opacity=0.1)Grain Factory
Section titled “Grain Factory”Advanced grain generation with separate controls for dark, midtone, and bright areas
Show code
# Add customizable film grain with separate controls for dark, midtone, and bright areas# From hybrid_filters/addGrain.pyimport syssys.path.insert(0, r'hybrid_filters')from addGrain import GrainFactory3
clip = GrainFactory3(clip, g1str=7.0, g2str=5.0, g3str=3.0, g1shrp=60, g2shrp=66, g3shrp=80, g1size=1.5, g2size=1.2, g3size=0.9, temp_avg=0, ontop_grain=0.0)Grain Stabilize
Section titled “Grain Stabilize”Stabilizes film grain to reduce temporal flickering
Show code
# Stabilize grain (make it less flickery)
from vstools import vs, core
# Temporal smoothing of grainclip = core.rgvs.RemoveGrain(clip, mode=19)Hybrid
Section titled “Hybrid”Add Duplicates
Section titled “Add Duplicates”Detects frames with low temporal difference and duplicates the previous frame if below threshold
Show code
# Add duplicate frames when temporal difference is below threshold# From hybrid_filters/AddDuplicates.pyimport syssys.path.insert(0, r'hybrid_filters')from AddDuplicates import addDup
clip = addDup(clip, thresh=0.3, debug=False)Animate
Section titled “Animate”Framework for animated effects and crossfade transitions between filters
Show code
# Apply animated effects and transitions# From hybrid_filters/animate.pyimport syssys.path.insert(0, r'hybrid_filters')import animate
# Define your animation functions# def effect1(clip): return clip.std.Convolution([1,2,1,2,4,2,1,2,1])# def effect2(clip): return clip.std.Sobel()
# MAP = [# (0, 100), [effect1],# (101, 150), [animate.Crossfade(effect1, effect2)],# (151, 200), [effect2]# ]# clip = animate.run(clip, MAP)Balance Borders
Section titled “Balance Borders”Balances brightness at clip borders to fix edge artifacts
Show code
# Balance border brightness (bbmod)# From hybrid_filters/edge.pyimport syssys.path.insert(0, r'hybrid_filters')from edge import bbmod
clip = bbmod(clip, cTop=0, cBottom=0, cLeft=0, cRight=0, thresh=128, blur=999)Change FPS
Section titled “Change FPS”Convert framerate efficiently using precomputed lookup table for long clips
Show code
# Efficient framerate conversion for very long clips# From hybrid_filters/ChangeFPS.pyimport syssys.path.insert(0, r'hybrid_filters')from ChangeFPS import ChangeFPS
clip = ChangeFPS(clip, target_fps_num=60, target_fps_den=1)CQTGMC
Section titled “CQTGMC”Fast deinterlacing combining spatial and temporal methods
Show code
# Fast deinterlacing with QTGMC-like quality# From hybrid_filters/cqtgmc.pyimport syssys.path.insert(0, r'hybrid_filters')from cqtgmc import CQTGMC
clip = CQTGMC(clip, Sharpness=0.25, thSAD1=192, thSAD2=320, tff=True, openCL=False)Crop with Preview
Section titled “Crop with Preview”Previews crop regions with visual overlay guides
Show code
# Preview crop regions with visual guides# From hybrid_filters/CPreview.pyimport syssys.path.insert(0, r'hybrid_filters')from CPreview import CPreview
clip = CPreview(clip, CL=10, CR=10, CT=10, CB=10, Frame=False, Time=False, Type=1)DAA Anti-Aliasing
Section titled “DAA Anti-Aliasing”Anti-aliasing with contra-sharpening by Didée, averages two independent interpolations
Show code
# Didée's anti-aliasing with contra-sharpening# From hybrid_filters/antiAliasing.pyimport syssys.path.insert(0, r'hybrid_filters')from antiAliasing import daa
clip = daa(clip)Debicubic
Section titled “Debicubic”Reverses bicubic upscaling to restore original resolution
Show code
# Reverse bicubic upscaling# From hybrid_filters/descale.pyimport syssys.path.insert(0, r'hybrid_filters')from descale import Debicubic
clip = Debicubic(clip, width=1280, height=720, b=0.0, c=0.5, yuv444=False, gray=False)Debilinear
Section titled “Debilinear”Reverses bilinear upscaling to restore original resolution
Show code
# Reverse bilinear upscaling# From hybrid_filters/descale.pyimport syssys.path.insert(0, r'hybrid_filters')from descale import Debilinear
clip = Debilinear(clip, width=1280, height=720, yuv444=False, gray=False)Deblock QED
Section titled “Deblock QED”Postprocessed deblocking using full frequencies on edges, DCT-lowpassed on interiors
Show code
# Advanced deblocking with DCT-lowpass filtering# From hybrid_filters/deblock.pyimport syssys.path.insert(0, r'hybrid_filters')from deblock import Deblock_QED
clip = Deblock_QED(clip, quant1=24, quant2=26, aOff1=1, bOff1=2, aOff2=1, bOff2=2, uv=3)DeHalo Alpha (Old)
Section titled “DeHalo Alpha (Old)”Reduces halo artifacts with separate controls for dark and bright halos
Show code
# Reduce halo artifacts from sharpening# From hybrid_filters/dehalo.pyimport syssys.path.insert(0, r'hybrid_filters')from dehalo import DeHalo_alpha
clip = DeHalo_alpha(clip, rx=2.0, ry=2.0, darkstr=1.0, brightstr=1.0, lowsens=50.0, highsens=50.0, ss=1.5)Delanczos
Section titled “Delanczos”Reverses Lanczos upscaling to restore original resolution
Show code
# Reverse Lanczos upscaling# From hybrid_filters/descale.pyimport syssys.path.insert(0, r'hybrid_filters')from descale import Delanczos
clip = Delanczos(clip, width=1280, height=720, taps=3, yuv444=False, gray=False)Despline36
Section titled “Despline36”Reverses Spline36 upscaling to restore original resolution
Show code
# Reverse Spline36 upscaling# From hybrid_filters/descale.pyimport syssys.path.insert(0, r'hybrid_filters')from descale import Despline36
clip = Despline36(clip, width=1280, height=720, yuv444=False, gray=False)DeSpot
Section titled “DeSpot”Removes temporal spots and artifacts using motion-compensated cleaning
Show code
# Remove temporal spots and artifacts using motion compensation# From hybrid_filters/artifacts.pyimport syssys.path.insert(0, r'hybrid_filters')from artifacts import DeSpot
clip = DeSpot(clip)DFTTest2
Section titled “DFTTest2”Frequency domain denoising using DFT (Discrete Fourier Transform)
Show code
# Frequency domain denoising# From hybrid_filters/dfttest2.pyimport syssys.path.insert(0, r'hybrid_filters')from dfttest2 import DFTTest
clip = DFTTest(clip, sigma=8.0)Fade In
Section titled “Fade In”Fades in from black over specified number of frames
Show code
# Fade from black at the start of clip# From hybrid_filters/fade.pyimport syssys.path.insert(0, r'hybrid_filters')from fade import fadein
clip = fadein(clip, fadeframes=30)Fade Out
Section titled “Fade Out”Fades clip to black over specified number of frames
Show code
# Fade to black at the end of clip# From hybrid_filters/fade.pyimport syssys.path.insert(0, r'hybrid_filters')from fade import fadeout
clip = fadeout(clip, fadeframes=30)Fill Drops RIFE
Section titled “Fill Drops RIFE”Fills dropped frames using RIFE AI-based interpolation
Show code
# Fill dropped frames using RIFE AI interpolation# From hybrid_filters/filldrops.pyimport syssys.path.insert(0, r'hybrid_filters')from filldrops import fillWithRIFE
clip = fillWithRIFE(clip, firstframe=100, rifeModel=22, rifeTTA=False, rifeUHD=False)Fill Drops SVP
Section titled “Fill Drops SVP”Fills dropped frames using SVP (SmoothVideo Project) interpolation
Show code
# Fill dropped frames using SVP interpolation# From hybrid_filters/filldrops.pyimport syssys.path.insert(0, r'hybrid_filters')from filldrops import fillWithSVP
clip = fillWithSVP(clip, firstframe=100, gpu=False)Fill Duplicate Frames
Section titled “Fill Duplicate Frames”Detects and replaces duplicate frames with interpolated frames
Show code
# Replace duplicate frames with interpolations# From hybrid_filters/FillDuplicateFrames.pyimport syssys.path.insert(0, r'hybrid_filters')from FillDuplicateFrames import FillDuplicateFrames
fdf = FillDuplicateFrames(clip, mode='FillDuplicate', thresh=0.001, method='SVP', debug=False)clip = fdf.outFix Chroma Bleeding
Section titled “Fix Chroma Bleeding”Fixes chroma bleeding artifacts with adjustable strength and blur options
Show code
# Fix chroma bleeding artifacts# From hybrid_filters/chromaBleeding.pyimport syssys.path.insert(0, r'hybrid_filters')from chromaBleeding import FixChromaBleedingMod
clip = FixChromaBleedingMod(clip, cx=4, cy=4, thr=4.0, strength=0.8, blur=False)Frame Rate Converter
Section titled “Frame Rate Converter”Increases frame rate with interpolation and fine artifact removal
Show code
# Advanced frame rate conversion with artifact removal# From hybrid_filters/FrameRateConverter.pyimport syssys.path.insert(0, r'hybrid_filters')from FrameRateConverter import FrameRateConverter
clip = FrameRateConverter(clip, NewNum=60, NewDen=1, Preset='normal')GradFun3
Section titled “GradFun3”Advanced debanding combined with resizers for better detail preservation
Show code
# Advanced debanding with resizing support (GradFun3mod)# From hybrid_filters/deband.pyimport syssys.path.insert(0, r'hybrid_filters')from deband import GradFun3
clip = GradFun3(clip, thr=0.35, radius=16, elast=3.0, mask=2, mode=2, ampo=1, ampn=0, pat=32, dyn=False, staticnoise=False, smode=2, thr_det=2 + round(max(thr - 0.35, 0) / 0.3), debug=False, plane=0, bits=None, dyn_resize=False)Grain Factory
Section titled “Grain Factory”Advanced grain generation with separate controls for dark, midtone, and bright areas
Show code
# Add customizable film grain with separate controls for dark, midtone, and bright areas# From hybrid_filters/addGrain.pyimport syssys.path.insert(0, r'hybrid_filters')from addGrain import GrainFactory3
clip = GrainFactory3(clip, g1str=7.0, g2str=5.0, g3str=3.0, g1shrp=60, g2shrp=66, g3shrp=80, g1size=1.5, g2size=1.2, g3size=0.9, temp_avg=0, ontop_grain=0.0)HQDering
Section titled “HQDering”Applies deringing using a smart smoother near edges where ringing occurs
Show code
# High-quality deringing using smart edge smoothing# From hybrid_filters/dering.pyimport syssys.path.insert(0, r'hybrid_filters')from dering import HQDeringmod
clip = HQDeringmod(clip, mrad=1, msmooth=1, incedge=False, mthr=60, thr=12.0, elast=2.0, show=False)Hysteria
Section titled “Hysteria”Darkens lines using edge detection and masking
Show code
# Line darkening with edge masking# From hybrid_filters/hysteria.pyimport syssys.path.insert(0, r'hybrid_filters')from hysteria import Hysteria
clip = Hysteria(clip, strength=1.0, usemask=True, lowthresh=6, highthresh=20, luma_cap=191)Killer Spots
Section titled “Killer Spots”Removes spots from primitive videos using motion compensation
Show code
# Aggressive spot removal for primitive videos# From hybrid_filters/killerspots.pyimport syssys.path.insert(0, r'hybrid_filters')from killerspots import KillerSpots
clip = KillerSpots(clip, limit=10, advanced=False)KNLMeans Denoise
Section titled “KNLMeans Denoise”Non-local means denoising with GPU acceleration support
Show code
# Non-local means denoising# From hybrid_filters/denoise.pyimport syssys.path.insert(0, r'hybrid_filters')from denoise import KNLMeansCL
clip = KNLMeansCL(clip, d=None, a=None, s=None, h=None)LSFmod Sharpen
Section titled “LSFmod Sharpen”Limited sharpening with range and nonlinear modes to avoid oversharpening
Show code
# Limited sharpening with multiple modes# From hybrid_filters/sharpen.pyimport syssys.path.insert(0, r'hybrid_filters')from sharpen import LSFmod
clip = LSFmod(clip, strength=100, Smode=2, Lmode=1, edgemode=1, overshoot=1, undershoot=1)LUTDeCrawl
Section titled “LUTDeCrawl”Removes dot crawl artifacts from video
Show code
# Remove dot crawl artifacts# From hybrid_filters/decrawl.pyimport syssys.path.insert(0, r'hybrid_filters')from decrawl import LUTDeCrawl
clip = LUTDeCrawl(clip, ythresh=10, cthresh=10, maxdiff=50, scnchg=25, usemaxdiff=True)LUTDeRainbow
Section titled “LUTDeRainbow”Removes rainbow artifacts from video
Show code
# Remove rainbow artifacts# From hybrid_filters/derainbow.pyimport syssys.path.insert(0, r'hybrid_filters')from derainbow import LUTDeRainbow
clip = LUTDeRainbow(clip, cthresh=10, ythresh=10, y=True, linkUV=True)NNEDI3 Resample
Section titled “NNEDI3 Resample”High-quality resampling using NNEDI3 edge-directed interpolation
Show code
# High-quality resampling using NNEDI3# From hybrid_filters/nnedi3_resample.pyimport syssys.path.insert(0, r'hybrid_filters')from nnedi3_resample import nnedi3_resample
clip = nnedi3_resample(clip, target_width=1920, target_height=1080)NNEDI3 rpow2
Section titled “NNEDI3 rpow2”Enlarges images by powers of 2 using NNEDI3 with optional shift correction
Show code
# Enlarge images by powers of 2 using NNEDI3# From hybrid_filters/nnedi3_rpow2.pyimport syssys.path.insert(0, r'hybrid_filters')from nnedi3_rpow2 import nnedi3_rpow2
clip = nnedi3_rpow2(clip, rfactor=2, correct_shift=True, kernel="spline36")Overlay
Section titled “Overlay”Overlays clips with various blend modes and positioning options
Show code
# Overlay clips with different blend modes# From hybrid_filters/misc.pyimport syssys.path.insert(0, r'hybrid_filters')from misc import Overlay
# overlay_clip = ...# clip = Overlay(clip, overlay_clip, x=0, y=0, opacity=1.0, mode='normal')Oyster
Section titled “Oyster”High-quality denoising using BM3D with motion compensation
Show code
# High-quality denoising using BM3D# From hybrid_filters/Oyster.pyimport syssys.path.insert(0, r'hybrid_filters')from Oyster import Super_OYSTER
clip = Super_OYSTER(clip, sfMode=3, prefilter=False)ProToon
Section titled “ProToon”Processes cartoons/anime with line darkening, thinning and sharpening
Show code
# Cartoon/anime processing with line darkening# From hybrid_filters/proToon.pyimport syssys.path.insert(0, r'hybrid_filters')from proToon import proToon
clip = proToon(clip, strength=48, luma_cap=191, threshold=4, thinning=24, sharpen=True, mask=True)QTGMC (Old)
Section titled “QTGMC (Old)”High-quality motion-compensated deinterlacing (QTGMC)
Show code
# High-quality deinterlacing with motion compensation# From hybrid_filters/qtgmc.pyimport syssys.path.insert(0, r'hybrid_filters')from qtgmc import QTGMC
clip = QTGMC(clip, Preset='Slower', FPSDivisor=1, TFF=None)Rainbow Smooth
Section titled “Rainbow Smooth”Removes rainbow artifacts using edge-aware chroma smoothing
Show code
# Remove rainbow artifacts with edge-aware smoothing# From hybrid_filters/RainbowSmooth.pyimport syssys.path.insert(0, r'hybrid_filters')from RainbowSmooth import RainbowSmooth
clip = RainbowSmooth(clip, radius=3, lthresh=0, hthresh=220, mask="original")Remove Dirt
Section titled “Remove Dirt”Removes dirt and specks from video using temporal cleaning
Show code
# Remove dirt and specks from video# From hybrid_filters/removeDirt.pyimport syssys.path.insert(0, r'hybrid_filters')from removeDirt import RemoveDirt
clip = RemoveDirt(clip, repmode=16, remgrainmode=17, limit=10)Remove Dirt MC
Section titled “Remove Dirt MC”Removes dirt using motion-compensated temporal cleaning
Show code
# Motion-compensated dirt removal# From hybrid_filters/removeDirt.pyimport syssys.path.insert(0, r'hybrid_filters')from removeDirt import RemoveDirtMC
clip = RemoveDirtMC(clip, limit=6, repmode=16, remgrainmode=17, block_size=8, block_over=4, gpu=False)Replace Multiple Frames
Section titled “Replace Multiple Frames”Replaces specified frame intervals with interpolated frames
Show code
# Replace specified frame intervals with interpolation# From hybrid_filters/ReplaceMultipleFrames.pyimport syssys.path.insert(0, r'hybrid_filters')from ReplaceMultipleFrames import ReplaceMultipleFrames
rmf = ReplaceMultipleFrames(clip, intervals=[[100, 105], [200, 210]], method='SVP', debug=False)clip = rmf.outRetinex Edge Mask
Section titled “Retinex Edge Mask”Greatly improves edge detection accuracy in dark scenes using retinex algorithm
Show code
# Improved edge detection for dark scenes using retinex# From hybrid_filters/masked.pyimport syssys.path.insert(0, r'hybrid_filters')from masked import retinex_edgemask
clip = retinex_edgemask(clip, sigma=1, draft=False)SMDegrain
Section titled “SMDegrain”Pure temporal denoiser using MVTools with motion compensation
Show code
# Simple MDegrain - Motion-compensated temporal denoising# From hybrid_filters/smdegrain.pyimport syssys.path.insert(0, r'hybrid_filters')from smdegrain import SMDegrain
clip = SMDegrain(clip, tr=2, thSAD=300, RefineMotion=False, contrasharp=None, plane=4)SpotLess
Section titled “SpotLess”Strong temporal denoising optimized for removing spots and noise
Show code
# Strong temporal denoising using MVTools# From hybrid_filters/SpotLess.pyimport syssys.path.insert(0, r'hybrid_filters')from SpotLess import SpotLess
clip = SpotLess(clip, radT=1, thsad=10000, chroma=True, truemotion=True)sRestore
Section titled “sRestore”Restores original framerate by detecting and removing duplicate frames
Show code
# Restore original framerate from telecined/decimated content# From hybrid_filters/srestore.pyimport syssys.path.insert(0, r'hybrid_filters')from srestore import sRestoreMUVs
clip = sRestoreMUVs(clip, frate=None, omode=6, mode=2, thresh=16)Stabilize
Section titled “Stabilize”CURRENTLY BROKEN - Stabilizes shaky video using motion estimation and compensation
Show code
# Video stabilization using motion compensation# From hybrid_filters/stabilize.pyimport syssys.path.insert(0, r'hybrid_filters')from stabilize import Stab
clip = Stab(clip, range=1, dxmax=4, dymax=4, mirror=0)STPresso
Section titled “STPresso”Dampens grain slightly while maintaining original look using spatial and temporal filtering
Show code
# Spatiotemporal grain dampening# From hybrid_filters/degrain.pyimport syssys.path.insert(0, r'hybrid_filters')from degrain import STPresso
clip = STPresso(clip, limit=3, bias=24, RGmode=4, tthr=12, tlimit=3, tbias=49, back=1)TFMBobN
Section titled “TFMBobN”Deinterlaces using TFM with NNEDI3 bobbing for field reconstruction
Show code
# TFM + NNEDI3 bobbing deinterlace# From hybrid_filters/TFMBob.pyimport syssys.path.insert(0, r'hybrid_filters')from TFMBob import TFMBobN
clip = TFMBobN(clip, pp=6, cthresh=9, MI=80, chroma=False, openCL=False)TFMBobQ
Section titled “TFMBobQ”Deinterlaces using TFM with QTGMC bobbing for field reconstruction
Show code
# TFM + QTGMC bobbing deinterlace# From hybrid_filters/TFMBob.pyimport syssys.path.insert(0, r'hybrid_filters')from TFMBob import TFMBobQ
clip = TFMBobQ(clip, pp=6, cthresh=9, MI=80, chroma=False, openCL=False)Adjusts hue, saturation, brightness and contrast with coring support
Show code
# Adjust hue, saturation, brightness and contrast# From hybrid_filters/color.pyimport syssys.path.insert(0, r'hybrid_filters')from color import Tweak
clip = Tweak(clip, hue=None, sat=None, bright=None, cont=None, coring=True)Vinverse
Section titled “Vinverse”Small but effective function against residual combing by Didée
Show code
# Remove residual combing artifacts# From hybrid_filters/residual.pyimport syssys.path.insert(0, r'hybrid_filters')from residual import Vinverse
clip = Vinverse(clip, sstr=2.7, amnt=255, chroma=True, scl=0.25)Limiting
Section titled “Limiting”Limit Filter
Section titled “Limit Filter”Limits the difference between a filtered clip and its original to prevent over-filtering
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/limit/
from vsrgtools import limit_filter
# Limit the difference between filtered and original cliporiginal = clip# filtered = your_filter(clip)# Limit how much the filter can change from originalthr = 1.0 # Threshold for limitingelast = 2.0 # Elasticity# clip = limit_filter(filtered, original, thr=thr, elast=elast)
clip = limit_filter(clip, clip, thr=thr, elast=elast)Hysteria
Section titled “Hysteria”Darkens lines using edge detection and masking
Show code
# Line darkening with edge masking# From hybrid_filters/hysteria.pyimport syssys.path.insert(0, r'hybrid_filters')from hysteria import Hysteria
clip = Hysteria(clip, strength=1.0, usemask=True, lowthresh=6, highthresh=20, luma_cap=191)ProToon
Section titled “ProToon”Processes cartoons/anime with line darkening, thinning and sharpening
Show code
# Cartoon/anime processing with line darkening# From hybrid_filters/proToon.pyimport syssys.path.insert(0, r'hybrid_filters')from proToon import proToon
clip = proToon(clip, strength=48, luma_cap=191, threshold=4, thinning=24, sharpen=True, mask=True)Masking
Section titled “Masking”Binarize Mask
Section titled “Binarize Mask”Converts a mask to pure black and white based on threshold
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/utils/
from vsmasktools import binarize
# Binarize a mask to pure black and whitethr = 32768 # Threshold (middle value for 16-bit)clip = binarize(clip, thr=thr)Comb Mask
Section titled “Comb Mask”Masks leftover combing from deinterlacing or inverse telecining.
Show code
# Full Docs: https://github.com/dnjulek/vapoursynth-zip/wiki/CombMask
gray = core.resize.Point(clip, format=vs.GRAY8)clip = core.vszip.CombMask(gray, cthresh = 6, mthresh = 9, expand = True, metric = 0)Comb Mask MT
Section titled “Comb Mask MT”Masks leftover combing from deinterlacing or inverse telecining.
Show code
# Full Docs: https://github.com/dnjulek/vapoursynth-zip/wiki/CombMaskMT
gray = core.resize.Point(clip, format=vs.GRAY8)clip = core.vszip.CombMaskMT(gray, thY1=30, thY2=30)Detail Mask
Section titled “Detail Mask”Creates a mask highlighting detailed/textured areas in the clip
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/details/
from vsmasktools import detail_mask
# Create a mask highlighting detailed areassigma = 1.0rxsigma = 1.0clip = detail_mask(clip, sigma=sigma, rxsigma=rxsigma)Difference Mask
Section titled “Difference Mask”Creates a mask showing the difference between two clips
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/diff/
from vsmasktools import diff_mask
# Create a mask from the difference between two clipsclip_a = clipclip_b = clip # Replace with your second clipthr = 0 # Threshold for differencesclip = diff_mask(clip_a, clip_b, thr=thr)Edge Mask
Section titled “Edge Mask”Masks edges in white with various edge detection algorithms.
Show code
# Full Docs: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-TCanny
gray = core.std.ShufflePlanes(clip, planes=0, colorfamily=vs.GRAY)clip = core.tcanny.TCanny(gray, sigma=0.5, mode=1, op=1, scale=1.0)Farid Edge Mask
Section titled “Farid Edge Mask”Creates high-quality edge mask using Farid 5x5 edge detection
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/edge/
from vsmasktools import Farid
# Create edge mask using Farid edge detection (high quality)mask = Farid().edgemask(clip, lthr=0.0, hthr=65535, multi=1.0)clip = maskFDoG Edge Mask
Section titled “FDoG Edge Mask”Creates stylized edge mask using Flow-based Difference of Gaussians (FDoG)
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/edge/
from vsmasktools import FDoG
# Create edge mask using Flow-based Difference of Gaussiansmask = FDoG().edgemask(clip, lthr=0.0, hthr=65535, multi=1.0)clip = maskFreyChen Edge Mask
Section titled “FreyChen Edge Mask”Creates edge mask using Frei-Chen G41 edge detection operator
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/edge/
from vsmasktools import FreyChenG41
# Create edge mask using Frei-Chen edge detectionmask = FreyChenG41().edgemask(clip, lthr=0.0, hthr=65535, multi=1.0)clip = maskLuma Mask
Section titled “Luma Mask”Creates a mask based on luma/brightness values in the clip
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/masks/
from vsmasktools import luma_mask
# Create a mask based on luma valueslthr = 0 # Low thresholdhthr = 65535 # High thresholdclip = luma_mask(clip, lthr=lthr, hthr=hthr)Maximum
Section titled “Maximum”Expands (dilates) a mask by growing bright regions
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/morpho/
from vsmasktools import expand
# Expand (dilate) a maskiterations = 2clip = expand(clip, iterations=iterations)Maximum then Minimum
Section titled “Maximum then Minimum”Inflates a mask by expanding then inpanding to smooth edges
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/morpho/
from vsmasktools import inflate
# Inflate a mask (expand followed by inpand)iterations = 2clip = inflate(clip, iterations=iterations)Minimum
Section titled “Minimum”Inpands (erodes) a mask by shrinking bright regions
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/morpho/
from vsmasktools import inpand
# Inpand (erode) a maskiterations = 2clip = inpand(clip, iterations=iterations)Minimum then Maximum
Section titled “Minimum then Maximum”Deflates a mask by inpanding then expanding to remove small details
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/morpho/
from vsmasktools import deflate
# Deflate a mask (inpand followed by expand)iterations = 2clip = deflate(clip, iterations=iterations)Motion Mask
Section titled “Motion Mask”Creates a mask of moving pixels. Every output pixel will be set to the absolute difference between the current frame and the previous frame.
Show code
# Full Docs: https://github.com/dubhater/vapoursynth-motionmask
gray = core.std.ShufflePlanes(clip, planes=0, colorfamily=vs.GRAY)clip = core.motionmask.MotionMask(gray, th1=[10, 10, 10], th2=[10, 10, 10], tht=10, sc_value=0)Normalize Mask
Section titled “Normalize Mask”Normalizes a mask to use the full value range (stretches contrast)
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/utils/
from vsmasktools import normalize_mask
# Normalize a mask to full rangeclip = normalize_mask(clip)Prewitt Edge Mask
Section titled “Prewitt Edge Mask”Creates an edge mask using Prewitt edge detection from vsmasktools
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/edge/
from vsmasktools import Prewitt
# Create edge mask using Prewitt edge detectionmask = Prewitt().edgemask(clip, lthr=0.0, hthr=65535, multi=1.0)clip = maskRetinex Edge Mask
Section titled “Retinex Edge Mask”Greatly improves edge detection accuracy in dark scenes using retinex algorithm
Show code
# Improved edge detection for dark scenes using retinex# From hybrid_filters/masked.pyimport syssys.path.insert(0, r'hybrid_filters')from masked import retinex_edgemask
clip = retinex_edgemask(clip, sigma=1, draft=False)Ridge Mask
Section titled “Ridge Mask”Creates a ridge mask for detecting lines and edges from vsmasktools
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/edge/
from vsmasktools import RidgeDetect
# Create ridge mask for line detectionmask = RidgeDetect().ridgemask(clip, lthr=0.0, hthr=65535, multi=1.0)clip = maskScharr Edge Mask
Section titled “Scharr Edge Mask”Creates an edge mask using Scharr edge detection (improved Sobel) from vsmasktools
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/edge/
from vsmasktools import Scharr
# Create edge mask using Scharr edge detectionmask = Scharr().edgemask(clip, lthr=0.0, hthr=65535, multi=1.0)clip = maskSobel Edge Mask
Section titled “Sobel Edge Mask”Creates an edge mask using Sobel edge detection from vsmasktools
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsmasktools/edge/
from vsmasktools import Sobel
# Create edge mask using Sobel edge detectionmask = Sobel().edgemask(clip, lthr=0.0, hthr=65535, multi=1.0)clip = maskOverlays
Section titled “Overlays”Frame Number
Section titled “Frame Number”Displays the current frame number on each frame
Show code
# Display frame number on clip
clip = core.text.FrameNum(clip, alignment=9)Text Overlay
Section titled “Text Overlay”Adds text overlay to the clip for annotations or debugging
Show code
# Add text overlay to clip# Full Docs: https://www.vapoursynth.com/doc/functions/video/text.html
text = "Sample Text"alignment = 7 # 1-9 (numpad layout: 7=top-left, 5=center, 3=bottom-right)
clip = core.text.Text(clip, text=text, alignment=alignment)Padding/Cropping
Section titled “Padding/Cropping”Balance Borders
Section titled “Balance Borders”Balances brightness at clip borders to fix edge artifacts
Show code
# Balance border brightness (bbmod)# From hybrid_filters/edge.pyimport syssys.path.insert(0, r'hybrid_filters')from edge import bbmod
clip = bbmod(clip, cTop=0, cBottom=0, cLeft=0, cRight=0, thresh=128, blur=999)Crops a clip by the specified pixel amount.
Show code
# Full Docs: https://github.com/pifroggi/vs_tiletools?tab=readme-ov-file#crop# If only "clip" is provided, this will automatically crop what was added via the Pad or the Modulus filter, even if the clip was since resized (after upscaling for example).
import vs_tiletoolsclip = vs_tiletools.crop(clip, left=0, right=0, top=0, bottom=0)Crop with Preview
Section titled “Crop with Preview”Previews crop regions with visual overlay guides
Show code
# Preview crop regions with visual guides# From hybrid_filters/CPreview.pyimport syssys.path.insert(0, r'hybrid_filters')from CPreview import CPreview
clip = CPreview(clip, CL=10, CR=10, CT=10, CB=10, Frame=False, Time=False, Type=1)Modulus
Section titled “Modulus”Pads or crops a clip so width and height are multiples of the given modulus. Useful for AI models that have such input limitations.
Show code
# Full Docs: https://github.com/pifroggi/vs_tiletools?tab=readme-ov-file#mod# Modes to reach the next upper multiple via padding can be mirror, repeat, fillmargins, black, a custom color in 8-bit scale [128, 128, 128], or discard to crop to the next lower multiple.
import vs_tiletoolsclip = vs_tiletools.mod(clip, modulus=64, mode="mirror")Pads a clip with various padding modes.
Show code
# Full Docs: https://github.com/pifroggi/vs_tiletools?tab=readme-ov-file#pad# Modes can be mirror, repeat, fillmargins, black, or a custom color in 8-bit scale [128, 128, 128].
import vs_tiletoolsclip = vs_tiletools.pad(clip, left=0, right=0, top=0, bottom=0, mode="mirror")Resizing
Section titled “Resizing”NNEDI3 Resample
Section titled “NNEDI3 Resample”High-quality resampling using NNEDI3 edge-directed interpolation
Show code
# High-quality resampling using NNEDI3# From hybrid_filters/nnedi3_resample.pyimport syssys.path.insert(0, r'hybrid_filters')from nnedi3_resample import nnedi3_resample
clip = nnedi3_resample(clip, target_width=1920, target_height=1080)NNEDI3 rpow2
Section titled “NNEDI3 rpow2”Enlarges images by powers of 2 using NNEDI3 with optional shift correction
Show code
# Enlarge images by powers of 2 using NNEDI3# From hybrid_filters/nnedi3_rpow2.pyimport syssys.path.insert(0, r'hybrid_filters')from nnedi3_rpow2 import nnedi3_rpow2
clip = nnedi3_rpow2(clip, rfactor=2, correct_shift=True, kernel="spline36")Resize (%) (bundled template)
Section titled “Resize (%) (bundled template)”Resizes the clip to new dimensions via a scale factor.
Show code
# Use 0.5 for 50%, 2.0 for 200%, etc.# Kernerls: point, bilinear, bicubic, lanczos, spline16, spline36, spline64
import basic_resizeclip = basic_resize.scale(clip, scale=1.0, kernel="bilinear")Resize (Custom) (bundled template)
Section titled “Resize (Custom) (bundled template)”Resize example for advanced users.
Show code
# The resizers have many additional resize parameters for advanced users.# Full Docs: https://www.vapoursynth.com/doc/functions/video/resize.html
clip = core.resize.Bicubic( clip=clip, width=720, height=480, filter_param_a=0.0, filter_param_b=0.5, resample_filter_uv="bilinear", filter_param_a_uv=0.0, filter_param_b_uv=0.5, src_left=0.0, src_top=0.0, src_width=clip.width, src_height=clip.height,)Resize (px) (bundled template)
Section titled “Resize (px) (bundled template)”Resizes the clip to new dimensions by providing them directly.
Show code
# Enter a new width and height. Either both or just one.# Kernels: point, bilinear, bicubic, lanczos, spline16, spline36, spline64
import basic_resizeclip = basic_resize.pixel(clip, width=720, height=480, kernel="bilinear")Restoration
Section titled “Restoration”Dot Crawl Reducer
Section titled “Dot Crawl Reducer”Spatial and temporal dot crawl reducer most effective in static or low motion scenes.
Show code
# Full Docs: https://github.com/dnjulek/vapoursynth-zip/wiki/Checkmate# This filter will reduce the depth to 8-bit during processing.
format8 = core.query_video_format(vs.YUV, vs.INTEGER, 8, clip.format.subsampling_w, clip.format.subsampling_h)clip_new = core.resize.Point(clip, format=format8.id)clip_new = core.vszip.Checkmate(clip_new, thr=12, tmax=12, tthr2=0)clip = core.resize.Point(clip_new, format=clip.format.id)Fine Dehalo
Section titled “Fine Dehalo”Advanced halo removal with masking and optional contra-sharpening to preserve line detail.
Show code
import vsdehalo
# Full docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsdehalo/mask/?h=fined#vsdehalo.mask.fine_dehalo# blur Gaussian sigma or custom blur func. Tuple = per-iter,# list inside tuple = per-plane. Default: 1.4# lowsens Dehalo fully applied below this. Default: 50.0# highsens Dehalo fully skipped above this. Default: 50.0# ss Supersampling factor (1.0 = off). Tuple = per-iter. Default: 1.5# darkstr Dark halo strength (0.0–1.0+). Default: 0.0# brightstr Bright halo strength (0.0–1.0+). Default: 1.0# rx / ry Halo removal radius H/V (ry defaults to rx). Default: 2# edgemask Edge detector (default: Robinson3)# thmi / thma Sharp edge selection ramp (strongest edges). Default: 80 / 128# thlimi/thlima Weaker edge ramp for exclusion zones. Default: 50 / 100# exclude Exclude close-together edges to avoid oversmooth. Default: True# edgeproc Blend raw edges back into mask (0 = off). Default: 0.0# contra Contra-sharpening after dehalo (0 = off). Default: 0.0# pre_ss NNEDI3 pre-upscale factor (power of 2). Default: 1# planes Planes to process (0 = luma). Default: 0# attach_masks Bake intermediate masks as frame props. Default: False## Masks after call: fine_dehalo.masks.MAIN | .EDGES | .SHARP_EDGES# .LARGE_EDGES | .IGNORE_DETAILS | .SHRINK | .SHRINK_EDGES_EXCL
clip = vsdehalo.fine_dehalo( clip, blur=1.4, lowsens=50.0, highsens=50.0, ss=1.5, darkstr=0.0, brightstr=1.0, rx=2, ry=None, thmi=80, thma=128, thlimi=50, thlima=100, exclude=True, edgeproc=0.0, contra=0.0, pre_ss=1, planes=0, attach_masks=False,)Fine Dehalo2
Section titled “Fine Dehalo2”Removes 2nd order halos (both bright and dark) from the clip.
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-dehalo/# Halo removal function for 2nd order halos# mode: 0=Horizontal, 1=Vertical, 2=Both (HV)# dark: True=filter dark halos, False=filter bright halos, None=disable merging with source
import vsdehaloclip = vsdehalo.fine_dehalo2(clip, mode=2, radius=2, mask_radius=2, brightstr=1.0, darkstr=1.0, dark=True)LGhost Deghost
Section titled “LGhost Deghost”Removes ghosting artifacts (halos offset to the side). Adjust shift values to match ghost positions.
Show code
# Full Docs: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-LGhost# Removes ghosting/halos offset to the right# mode: 1=edge, 2=luminance, 3=rising edge, 4=falling edge# shift: negative values shift left to counteract rightward ghosts# intensity: positive values remove bright ghosts, negative for dark ghosts# planes: [0] processes only luma to avoid color issues# Start with lower intensity values and increase if needed
clip = core.lghost.LGhost(clip, mode=[1, 1], shift=[-3, -6], intensity=[10, 6], planes=[0])TemporalFix (AI)
Section titled “TemporalFix (AI)”Adds Temporal Coherence to Single Image AI Upscaling Models. More accurate and faster than the classic version.
Show code
# Full Docs: https://github.com/pifroggi/vs_temporalfix#temporalfix-ai-model
strength = 2 # Suppression strength, 1-3. Higher = more aggressive, may oversmooth small motion.tiles = 1 # More tiles = less VRAM, slower. Only increase on low-end hardware.backend = "tensorrt" # "cpu", "cuda", or "tensorrt". tensorrt is fastest (Nvidia RTX), cuda needs any Nvidia GPU.num_streams = 1 # Parallel TensorRT streams. Higher can be faster on high-end GPUs. TensorRT backend only.exclude = None # Optionally exclude scenes, e.g. "[10 20] [600 900]"
import vs_temporalfixclip = core.resize.Bilinear(clip, format=vs.RGBH, matrix_in_s="709")clip = vs_temporalfix.model(clip, strength=strength, tiles=tiles, backend=backend, num_streams=num_streams, exclude=exclude)clip = core.resize.Point(clip, format=vs.YUV444P16, matrix_s="709")TemporalFix (Classic)
Section titled “TemporalFix (Classic)”Adds Temporal Coherence to Single Image AI Upscaling Models. This is the older cpu based version.
Show code
# Full Docs: https://github.com/pifroggi/vs_temporalfix#temporalfix-classic# Increase strength if the effect is not strong enough. Check the docs for a full explanation.
strength = 500tr = 6denoise = Falseexclude = None
import vs_temporalfixclip = vs_temporalfix.classic(clip, strength=strength, tr=tr, denoise=denoise, exclude=exclude)Undistort (PyTorch)
Section titled “Undistort (PyTorch)”Removes distortions, turbulance, heat haze, or similar. PyTorch is slower, but has extra controls.
Show code
# Full Docs: https://github.com/pifroggi/vs_undistort?tab=readme-ov-file#pytorch-backend
temp_window = 10tile_width = Nonetile_height = Noneoverlap = Noneinterpolation = "bilinear"scales = [True, True, True]
import vs_undistortclip = core.resize.Bilinear(clip, format=vs.RGBH, matrix_in_s=709)clip = vs_undistort.pytorch(clip, temp_window=temp_window, tile_width=tile_width, tile_height=tile_height, overlap=overlap, scales=scales, interpolation=interpolation, device="cuda")clip = core.resize.Point(clip, format=vs.YUV444P16, matrix_s=709)Undistort (TensorRT)
Section titled “Undistort (TensorRT)”Removes distortions, turbulance, heat haze, or similar. TensorRT is faster, but has less controls.
Show code
# Full Docs: https://github.com/pifroggi/vs_undistort?tab=readme-ov-file#tensorrt-backend
temp_window = 10tile_width = Nonetile_height = Noneoverlap = Nonenum_streams = 1activate = False # When True, a TensorRT engine will be build and the filter activated the next time the script is evaluated. This may take a few minutes.
import vs_undistortclip = core.resize.Bilinear(clip, format=vs.RGBH, matrix_in_s=709)if activate: clip = vs_undistort.tensorrt(clip, temp_window=temp_window, tile_width=tile_width, tile_height=tile_height, overlap=overlap, num_streams=num_streams)clip = core.resize.Point(clip, format=vs.YUV444P16, matrix_s=709)Sharpening
Section titled “Sharpening”CAS Sharpen (bundled template)
Section titled “CAS Sharpen (bundled template)”Contrast Adaptive Sharpening Filter.
Show code
# Full Docs: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-CAS
clip = core.cas.CAS(clip, sharpness=0.5, planes=0)Contra Sharpening
Section titled “Contra Sharpening”Applies contra-sharpening to limit sharpening and prevent over-sharpening artifacts
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/contra/
from vsrgtools import contrasharpening
# Apply contra-sharpening to prevent over-sharpening# Typically used after upscalingoriginal = clip # Store original or downscaled version# sharpened = your_sharpen_filter(clip)# clip = contrasharpening(sharpened, original)
# For demonstrationclip = contrasharpening(clip, clip)Fast Line Darken
Section titled “Fast Line Darken”Sharpens by selectively darkening lines while protecting dark areas
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/sharp/
from vsrgtools import fast_line_darken
# Sharpen by darkening linesstrength = 48 # Line darkening amountprotection = 5 # Protect darkest linesclip = fast_line_darken(clip, strength=strength, protection=protection)Fine Sharp
Section titled “Fine Sharp”Applies FineSharp - fast realtime sharpening optimized for 1080p
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/sharp/
from vsrgtools import fine_sharp
# Apply FineSharp - realtime sharpening for high quality sourcesmode = 0 # 0 or 1, weakest to strongestsstr = 2.0 # Sharpening strengthclip = fine_sharp(clip, mode=mode, sstr=sstr)LSFmod Sharpen
Section titled “LSFmod Sharpen”Limited sharpening with range and nonlinear modes to avoid oversharpening
Show code
# Limited sharpening with multiple modes# From hybrid_filters/sharpen.pyimport syssys.path.insert(0, r'hybrid_filters')from sharpen import LSFmod
clip = LSFmod(clip, strength=100, Smode=2, Lmode=1, edgemode=1, overshoot=1, undershoot=1)SBR Sharpening
Section titled “SBR Sharpening”Applies SBR sharpening - high-pass filter with re-blurred difference subtraction
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/blur/
from vsrgtools import sbr
# Apply SBR (Subtract Blurred, then Re-blur) sharpeningradius = 1clip = sbr(clip, radius=radius)Unsharp Mask
Section titled “Unsharp Mask”Applies classic unsharp mask sharpening with adjustable strength
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/sharp/
from vsrgtools import unsharpen
# Apply unsharp mask sharpeningstrength = 1.0clip = unsharpen(clip, strength=strength)Warp Sharp
Section titled “Warp Sharp”Aggressive edge-based sharpening using warp algorithm
Show code
# Warp-based sharpening (strong effect)# Full Docs: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-AWarpSharp2
from vstools import vs, core
blur = 2 # Pre-blur amount (0-3)depth = 16 # Warp depth (strength)
clip = core.warp.AWarpSharp2(clip, blur=blur, depth=depth)Stabilization
Section titled “Stabilization”Stabilize
Section titled “Stabilize”CURRENTLY BROKEN - Stabilizes shaky video using motion estimation and compensation
Show code
# Video stabilization using motion compensation# From hybrid_filters/stabilize.pyimport syssys.path.insert(0, r'hybrid_filters')from stabilize import Stab
clip = Stab(clip, range=1, dxmax=4, dymax=4, mirror=0)Undistort (PyTorch)
Section titled “Undistort (PyTorch)”Removes distortions, turbulance, heat haze, or similar. PyTorch is slower, but has extra controls.
Show code
# Full Docs: https://github.com/pifroggi/vs_undistort?tab=readme-ov-file#pytorch-backend
temp_window = 10tile_width = Nonetile_height = Noneoverlap = Noneinterpolation = "bilinear"scales = [True, True, True]
import vs_undistortclip = core.resize.Bilinear(clip, format=vs.RGBH, matrix_in_s=709)clip = vs_undistort.pytorch(clip, temp_window=temp_window, tile_width=tile_width, tile_height=tile_height, overlap=overlap, scales=scales, interpolation=interpolation, device="cuda")clip = core.resize.Point(clip, format=vs.YUV444P16, matrix_s=709)Undistort (TensorRT)
Section titled “Undistort (TensorRT)”Removes distortions, turbulance, heat haze, or similar. TensorRT is faster, but has less controls.
Show code
# Full Docs: https://github.com/pifroggi/vs_undistort?tab=readme-ov-file#tensorrt-backend
temp_window = 10tile_width = Nonetile_height = Noneoverlap = Nonenum_streams = 1activate = False # When True, a TensorRT engine will be build and the filter activated the next time the script is evaluated. This may take a few minutes.
import vs_undistortclip = core.resize.Bilinear(clip, format=vs.RGBH, matrix_in_s=709)if activate: clip = vs_undistort.tensorrt(clip, temp_window=temp_window, tile_width=tile_width, tile_height=tile_height, overlap=overlap, num_streams=num_streams)clip = core.resize.Point(clip, format=vs.YUV444P16, matrix_s=709)Telecine
Section titled “Telecine”Inverse telecine to convert 30i/60i back to original 24p film
Show code
# Inverse telecine (30i to 24p conversion)# Converts to 8 bit colors to function# Full Docs: https://github.com/vapoursynth/vivtc
from vstools import vs, core
order = 1 # Field order (0=bottom first, 1=top first)
# Convert to YUV420P8 if needed (VFM only supports specific formats)original_clip = clipif clip.format.id not in [vs.YUV420P8, vs.YUV422P8, vs.YUV440P8, vs.YUV444P8, vs.GRAY8]: clip = core.resize.Bicubic(clip, format=vs.YUV422P8)
clip = core.vivtc.VFM(clip, order=order)clip = core.vivtc.VDecimate(clip)
# Convert back to original format if it was changedif original_clip.format.id != clip.format.id: clip = core.resize.Bicubic(clip, format=original_clip.format)Temporal Smoothing
Section titled “Temporal Smoothing”Clense
Section titled “Clense”Removes temporal outliers (pixels that differ significantly from adjacent frames)
Show code
# Temporal cleaning to remove outlier pixels
from vstools import vs, core
clip = core.rgvs.Clense(clip)Flux Smooth
Section titled “Flux Smooth”Applies temporal and spatial smoothing to reduce flickering and noise
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vsrgtools/blur/
from vsrgtools import flux_smooth
# Apply temporal and spatial smoothingtemporal_threshold = 7spatial_threshold = 7clip = flux_smooth(clip, temporal_threshold=temporal_threshold, spatial_threshold=spatial_threshold)Temporal Median
Section titled “Temporal Median”Applies temporal median filtering to remove outlier frames/pixels
Show code
# Temporal median filter (removes outliers)
from vstools import vs, core
radius = 1 # Temporal radius (frames before/after)
clip = core.tmedian.TemporalMedian(clip, radius=radius)TemporalFix (AI)
Section titled “TemporalFix (AI)”Adds Temporal Coherence to Single Image AI Upscaling Models. More accurate and faster than the classic version.
Show code
# Full Docs: https://github.com/pifroggi/vs_temporalfix#temporalfix-ai-model
strength = 2 # Suppression strength, 1-3. Higher = more aggressive, may oversmooth small motion.tiles = 1 # More tiles = less VRAM, slower. Only increase on low-end hardware.backend = "tensorrt" # "cpu", "cuda", or "tensorrt". tensorrt is fastest (Nvidia RTX), cuda needs any Nvidia GPU.num_streams = 1 # Parallel TensorRT streams. Higher can be faster on high-end GPUs. TensorRT backend only.exclude = None # Optionally exclude scenes, e.g. "[10 20] [600 900]"
import vs_temporalfixclip = core.resize.Bilinear(clip, format=vs.RGBH, matrix_in_s="709")clip = vs_temporalfix.model(clip, strength=strength, tiles=tiles, backend=backend, num_streams=num_streams, exclude=exclude)clip = core.resize.Point(clip, format=vs.YUV444P16, matrix_s="709")TemporalFix (Classic)
Section titled “TemporalFix (Classic)”Adds Temporal Coherence to Single Image AI Upscaling Models. This is the older cpu based version.
Show code
# Full Docs: https://github.com/pifroggi/vs_temporalfix#temporalfix-classic# Increase strength if the effect is not strong enough. Check the docs for a full explanation.
strength = 500tr = 6denoise = Falseexclude = None
import vs_temporalfixclip = vs_temporalfix.classic(clip, strength=strength, tr=tr, denoise=denoise, exclude=exclude)Tiling
Section titled “Tiling”Splits each frame into tiles of fixed dimensions.
Show code
# Full Docs: https://github.com/pifroggi/vs_tiletools?tab=readme-ov-file#tile# Padding can be mirror, repeat, fillmargins, black, a custom color in 8-bit scale [128, 128, 128], or discard to remove tiles that are too small.
import vs_tiletoolsclip = vs_tiletools.tile(clip, width=256, height=256, overlap=16, padding="mirror")Untile
Section titled “Untile”Automatically reassembles a clip tiled with the Tile filter, even if tiles were since resized.
Show code
# Full Docs: https://github.com/pifroggi/vs_tiletools?tab=readme-ov-file#untile# If fade is True, the overlap will be used to feather/blend between the tiles to remove visible seams. If False, it will simply be cropped.
import vs_tiletoolsclip = vs_tiletools.untile(clip, fade=True)Transform
Section titled “Transform”Flip Horizontal
Section titled “Flip Horizontal”Flips the clip horizontally (mirrors left to right)
Show code
# Flip clip horizontally (mirror left-right)
clip = core.std.FlipHorizontal(clip)Flip Vertical
Section titled “Flip Vertical”Flips the clip vertically (mirrors top to bottom)
Show code
# Flip clip vertically (mirror top-bottom)
clip = core.std.FlipVertical(clip)Transpose
Section titled “Transpose”Transposes the clip (rotates 90 degrees and flips)
Show code
# Transpose clip (swap width and height)
clip = core.std.Transpose(clip)Turn 180
Section titled “Turn 180”Rotates the clip 180 degrees (upside down)
Show code
# Rotate clip 180 degrees
clip = core.std.Turn180(clip)Unresize
Section titled “Unresize”Debicubic
Section titled “Debicubic”Reverses bicubic upscaling to restore original resolution
Show code
# Reverse bicubic upscaling# From hybrid_filters/descale.pyimport syssys.path.insert(0, r'hybrid_filters')from descale import Debicubic
clip = Debicubic(clip, width=1280, height=720, b=0.0, c=0.5, yuv444=False, gray=False)Debilinear
Section titled “Debilinear”Reverses bilinear upscaling to restore original resolution
Show code
# Reverse bilinear upscaling# From hybrid_filters/descale.pyimport syssys.path.insert(0, r'hybrid_filters')from descale import Debilinear
clip = Debilinear(clip, width=1280, height=720, yuv444=False, gray=False)Delanczos
Section titled “Delanczos”Reverses Lanczos upscaling to restore original resolution
Show code
# Reverse Lanczos upscaling# From hybrid_filters/descale.pyimport syssys.path.insert(0, r'hybrid_filters')from descale import Delanczos
clip = Delanczos(clip, width=1280, height=720, taps=3, yuv444=False, gray=False)Despline36
Section titled “Despline36”Reverses Spline36 upscaling to restore original resolution
Show code
# Reverse Spline36 upscaling# From hybrid_filters/descale.pyimport syssys.path.insert(0, r'hybrid_filters')from descale import Despline36
clip = Despline36(clip, width=1280, height=720, yuv444=False, gray=False)Utility
Section titled “Utility”Blank Clip
Section titled “Blank Clip”Generates a blank clip with solid color
Show code
# Generate blank/solid color clip# Full Docs: https://www.vapoursynth.com/doc/functions/video/blankclip.html
from vstools import vs, core
width = 1920height = 1080length = 240 # Framescolor = [0, 128, 128] # YUV color values
clip = core.std.BlankClip(clip, width=width, height=height, length=length, color=color)Blend Clips
Section titled “Blend Clips”Blends two clips together with adjustable weight
Show code
# Blend two clips together# Full Docs: https://www.vapoursynth.com/doc/functions/video/merge.html
clip_a = clipclip_b = clip # Replace with your second clipweight = 0.5 # 0.0 = all clip_a, 1.0 = all clip_b
clip = core.std.Merge(clip_a, clip_b, weight=weight)Convolution
Section titled “Convolution”Applies custom convolution kernel for custom filtering effects
Show code
# Custom convolution kernel# Full Docs: https://www.vapoursynth.com/doc/functions/video/convolution.html
from vstools import vs, core
# Example: Edge detection kernelmatrix = [1, 1, 1, 1, -8, 1, 1, 1, 1]divisor = 1bias = 128
clip = core.std.Convolution(clip, matrix=matrix, divisor=divisor, bias=bias)Expression
Section titled “Expression”Applies custom mathematical expressions to pixel values
Show code
# Apply custom expression to pixels# Full Docs: https://www.vapoursynth.com/doc/functions/video/expr.html
# Example: increase brightness by 10%expr = "x 1.1 *"
clip = core.std.Expr(clip, expr=[expr])Loop Clip
Section titled “Loop Clip”Loops the clip a specified number of times
Show code
# Loop a clip N times# Full Docs: https://www.vapoursynth.com/doc/functions/video/loop.html
times = 2 # Number of times to loop
clip = core.std.Loop(clip, times=times)Move Original Clip Reference
Section titled “Move Original Clip Reference”Moves the “original_clip” variable to here. That means, if it is later used (for example in the Color Fix filter), it will refer to this position in the workflow. Else it will refer to the very start of the workflow.
Show code
original_clip = clipRead Image
Section titled “Read Image”Loads an image and converts it to a clip.
Show code
# Full Docs: https://github.com/dnjulek/vapoursynth-zip/wiki/ImageRead# Length is how long the image clip should be in frames.
image_path = "path\to\image.png"length = 100
image = core.vszip.ImageRead(path=image_path)image = core.resize.Bilinear(image, format=vs.YUV444P16, primaries_in_s="709", transfer_in_s="srgb", matrix_s="709", primaries_s="709", transfer_s="709")clip = core.std.Loop(image, times=length)Reverse Clip
Section titled “Reverse Clip”Reverses the clip to play backwards
Show code
# Reverse the clip (play backwards)# Full Docs: https://www.vapoursynth.com/doc/functions/video/reverse.html
clip = core.std.Reverse(clip)Scene Change Detection
Section titled “Scene Change Detection”Detects scene changes and adds _SceneChangePrev and _SceneChangeNext frame properties
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vstools/functions/clips/
from vstools import sc_detect
# Detect scene changes and add frame propertiesthreshold = 0.1 # Higher = less sensitiveclip = sc_detect(clip, threshold=threshold)Set Frame Props
Section titled “Set Frame Props”Sets frame properties (metadata) on clip
Show code
# Set frame properties# Full Docs: https://www.vapoursynth.com/doc/functions/video/setframeprops.html
from vstools import vs, core
# Example: Mark as progressiveclip = core.std.SetFrameProp(clip, prop="_FieldBased", intval=0)Shift Clip
Section titled “Shift Clip”Shifts clip forward or backward by N frames for temporal operations
Show code
# Full Docs: https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vstools/functions/clips/
from vstools import shift_clip
# Shift clip forward or backward by N framesoffset = 1 # Positive = forward, negative = backwardclip = shift_clip(clip, offset=offset)Side by Side
Section titled “Side by Side”Stacks the current clip next to the original clip.
Show code
# Full Docs: https://www.vapoursynth.com/doc/functions/video/stackvertical_stackhorizontal.html
original_clip_resized = core.resize.Bilinear(original_clip, format=clip.format, width=clip.width, height=clip.height)clip = core.std.StackHorizontal([original_clip_resized, clip])Splice Clips
Section titled “Splice Clips”Splices/concatenates multiple clips together end-to-end
Show code
# Concatenate clips end-to-end# Full Docs: https://www.vapoursynth.com/doc/functions/video/splice.html
clip_a = clipclip_b = clip # Replace with your second clip
clip = core.std.Splice([clip_a, clip_b])Trim Clip
Section titled “Trim Clip”Trims clip to keep only specified frame range
Show code
# Trim clip to specific frame range# Full Docs: https://www.vapoursynth.com/doc/functions/video/trim.html
from vstools import vs, core
first_frame = 0 # First frame to keeplast_frame = 1000 # Last frame to keep
clip = core.std.Trim(clip, first=first_frame, last=last_frame)