Functions and Methods

kernels while ensuring the interface will always remain the same, even across different plugins with their own settings and expected behavior.

For example, if you want to downscale a video clip to 1280x720 using Bicubic (b=0, c=1), you can call the preset, vskernels.kernels.SharpBicubic, like so:

kernels.SharpBicubic().scale(clip, width=1280, height=720)

Of course, there is also a generic Bicubic class should you want to assign the values manually.

kernels.Bicubic(b=0, c=1).scale(clip, width=1280, height=720)

This allows for easy customizability, and every kernel can be given unique parameters if required.

kernels.Bicubic(b=0, c=0.5)
kernels.Lanczos(taps=3)
kernels.Impulse(impulse, oversample=8, taps=1)

Using this interface allows for consistency, which makes supporting a wide array of kernels in your own function very simple.

Supporting Kernels in Your Own Function

vskernels.kernels.get_kernel(name)

Get a kernel by name.

vskernels.kernels.get_all_kernels()

Get all kernels as a list.

Kernels are very flexible, so if you want to use them as-is, they’re simple enough to add. However, you should also consider newer users and their inexperience with Kernels, but potential exposure to abusing strings for “presets”.

With that in mind, we believe the most optimal method to implement kernels is by allowing your function to accept both a Kernel object and a string. This allows users who want to make full use of kernels to do so while not making it any harder for newer users to rely on strings.

Below is some example code for implementing kernel support into a simple descaling function:

from vskernels import Kernel, get_kernel

def descale(clip: vs.VideoNode,
            width: int = 1280, height: int = 720,
            kernel: Kernel | str = 'bicubic') -> vs.VideoNode:
    """A simple descaling function"""

    if isinstance(kernel, str):
        kernel = get_kernel(kernel)()

    descaled_clip = kernel.descale(clip, width, height)
    return descaled_clip

Which in turn allows users to call the function in multiple ways:

import vskernels as kernels

example1 = descale(clip, 1280, 720, kernels.Bicubic())
example2 = descale(clip, 1280, 720, 'bicubic')

Easy as pie!

Functions

class vskernels.kernels.get_kernel(name)

Get a kernel by name.

Parameters

name (str) – Kernel name.

Return type

Type[Kernel]

Returns

Kernel class.

class vskernels.kernels.get_all_kernels

Get all kernels as a list.

Return type

List[Type[Kernel]]

Methods

Every Kernel class comes with a set of methods:

class vskernels.kernels.Example.scale(self, clip, width, height, shift=(0, 0))

Perform a regular scaling operation

Parameters
  • clip (VideoNode) – Input clip

  • width (int) – Output width

  • height (int) – Output height

  • shift (Tuple[float, float]) – Shift clip during the operation. Expects a tuple of (src_top, src_left).

Return type

VideoNode

class vskernels.kernels.Example.descale(self, clip, width, height, shift=(0, 0))

Perform a regular descaling operation

Parameters
  • clip (VideoNode) – Input clip

  • width (int) – Output width

  • height (int) – Output height

  • shift (Tuple[float, float]) – Shift clip during the operation. Expects a tuple of (src_top, src_left).

Return type

VideoNode

class vskernels.kernels.Example.shift(self, clip, shift=(0, 0))

Perform a regular shifting operation

Parameters
  • clip (VideoNode) – Input clip

  • shift (Tuple[float, float]) – Shift clip during the operation. Expects a tuple of (src_top, src_left).

Return type

VideoNode

class vskernels.kernels.Example.resample(self, clip, format, matrix=None, matrix_in=None)

Perform a regular resampling operation

Parameters
  • clip (vs.VideoNode) – Input clip

  • format (vs.PresetFormat | vs.VideoFormat) – Output format

  • matrix (vs.MatrixCoefficients | Matrix | None) – Output matrix. If None, will take the matrix from the input clip’s frameprops.

  • matrix_in (vs.MatrixCoefficients | Matrix | None) – Input matrix. If None, will take the matrix from the input clip’s frameprops.

Return type

VideoNode

All Available Kernels

class vskernels.kernels.BSpline(**kwargs)

Bases: vskernels.kernels.Bicubic

Bicubic b=1, c=0

class vskernels.kernels.Bessel(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Bessel kernel.

class vskernels.kernels.Bicubic(b=0, c=0.5, **kwargs)

Bases: vskernels.kernels.Kernel

Built-in bicubic resizer. b=0, c=0.5

Dependencies:

  • VapourSynth-descale

Parameters
  • b (float) – B-param for bicubic kernel

  • c (float) – C-param for bicubic kernel

class vskernels.kernels.BicubicDidee(**kwargs)

Bases: vskernels.kernels.Bicubic

Kernel inspired by a Didée post.

Bicubic b=-0.5, c=0.25

This is useful for downscaling content, but might not help much with upscaling.

class vskernels.kernels.BicubicDogWay(**kwargs)

Bases: vskernels.kernels.Bicubic

Kernel inspired by DogWay.

Bicubic b=-0.6, c=0.4

This is useful for downscaling content with ringing.

class vskernels.kernels.BicubicSharp(**kwargs)

Bases: vskernels.kernels.Bicubic

Bicubic b=0, c=1

class vskernels.kernels.Bilinear(**kwargs)

Bases: vskernels.kernels.Kernel

Built-in bilinear resizer.

class vskernels.kernels.BlackHarris(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Black-Harris kernel.

class vskernels.kernels.BlackMan(taps=4, **kwargs)

Bases: vskernels.kernels.FmtConv

fmtconv’s blackman resizer.

class vskernels.kernels.BlackManMinLobe(taps=4, **kwargs)

Bases: vskernels.kernels.FmtConv

fmtconv’s blackmanminlobe resizer.

class vskernels.kernels.BlackNuttall(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

BlackNuttall kernel.

class vskernels.kernels.Bohman(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Bohman kernel.

class vskernels.kernels.Box(taps=4, **kwargs)

Bases: vskernels.kernels.FmtConv

fmtconv’s box resizer.

class vskernels.kernels.Catrom(**kwargs)

Bases: vskernels.kernels.Bicubic

Bicubic b=0, c=0.5

class vskernels.kernels.Cosine(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Cosine kernel.

class vskernels.kernels.FlatTop(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

FlatTop kernel.

class vskernels.kernels.FmtConv(taps=4, **kwargs)

Bases: vskernels.kernels.Kernel

Abstract fmtconv’s resizer.

Dependencies:

  • fmtconv

class vskernels.kernels.Gaussian(curve=30, **kwargs)

Bases: vskernels.kernels.FmtConv

fmtconv’s gaussian resizer.

class vskernels.kernels.Ginseng(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Ginseng kernel.

class vskernels.kernels.Hamming(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Hamming kernel.

class vskernels.kernels.Hann(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Hann kernel.

class vskernels.kernels.Hermite(**kwargs)

Bases: vskernels.kernels.Bicubic

Bicubic b=0, c=0

class vskernels.kernels.Impulse(impulse, oversample=8, taps=1, **kwargs)

Bases: vskernels.kernels.FmtConv

fmtconv’s impulse resizer.

class vskernels.kernels.Kaiser(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Kaiser kernel.

class vskernels.kernels.Lanczos(taps=3, **kwargs)

Bases: vskernels.kernels.Kernel

Built-in lanczos resizer.

Dependencies:

  • VapourSynth-descale

Parameters

taps (int) – taps param for lanczos kernel

class vskernels.kernels.MinSide(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

MinSide kernel.

class vskernels.kernels.Mitchell(**kwargs)

Bases: vskernels.kernels.Bicubic

Bicubic b=1/3, c=1/3

class vskernels.kernels.NearestNeighbour(**kwargs)

Bases: vskernels.kernels.Gaussian

Nearest Neighbour kernel.

class vskernels.kernels.Parzen(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Parzen kernel.

class vskernels.kernels.Point(**kwargs)

Bases: vskernels.kernels.Kernel

Built-in point resizer.

class vskernels.kernels.Quadratic(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Quadratic kernel.

class vskernels.kernels.Robidoux(**kwargs)

Bases: vskernels.kernels.Bicubic

Bicubic b=0.37822, c=0.31089

class vskernels.kernels.RobidouxSharp(**kwargs)

Bases: vskernels.kernels.Bicubic

Bicubic b=0.26201, c=0.36899

class vskernels.kernels.RobidouxSoft(**kwargs)

Bases: vskernels.kernels.Bicubic

Bicubic b=0.67962, c=0.16019

class vskernels.kernels.Sinc(taps=4, **kwargs)

Bases: vskernels.kernels.FmtConv

fmtconv’s sinc resizer.

class vskernels.kernels.Spline16(**kwargs)

Bases: vskernels.kernels.Kernel

Built-in spline16 resizer.

Dependencies:

  • VapourSynth-descale

class vskernels.kernels.Spline36(**kwargs)

Bases: vskernels.kernels.Kernel

Built-in spline36 resizer.

Dependencies:

  • VapourSynth-descale

class vskernels.kernels.Spline64(**kwargs)

Bases: vskernels.kernels.Kernel

Built-in spline64 resizer.

Dependencies:

  • VapourSynth-descale

class vskernels.kernels.Welch(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Welch kernel.

class vskernels.kernels.Wiener(oversample, **kwargs)

Bases: vskernels.kernels.Impulse

Wiener kernel.