lvsfunc.kernels
Kernels are a collection of wrappers pertaining to (de)scaling, format conversion, and other related operations, all while providing a consistent and clean interface. This allows for easy expansion and ease of use for any other maintainers who wishes to use them in their own functions.
You can create presets for common scaling algorithms or settings, 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, lvsfunc.kernels.SharpBicubic, like so:
lvf.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.
lvf.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.
lvf.kernels.Bicubic(b=0, c=0.5)
lvf.kernels.Lanczos(taps=3)
lvf.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
Get a kernel by name. |
|
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 lvsfunc.kernels 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 lvsfunc as lvf
example1 = descale(clip, 1280, 720, lvf.kernels.Bicubic())
example2 = descale(clip, 1280, 720, 'bicubic')
Easy as pie!
Functions
- class lvsfunc.kernels.get_kernel(name)
Get a kernel by name.
- Parameters
name (
str) – Kernel name.- Return type
Type[Kernel]- Returns
Kernel class.
- class lvsfunc.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 lvsfunc.kernels.Example.scale(self, clip, width, height, shift=(0, 0))
Perform a regular scaling operation
- Parameters
clip (
VideoNode) – Input clipwidth (
int) – Output widthheight (
int) – Output heightshift (
Tuple[float,float]) – Shift clip during the operation. Expects a tuple of (src_top, src_left).
- Return type
VideoNode
- class lvsfunc.kernels.Example.descale(self, clip, width, height, shift=(0, 0))
Perform a regular descaling operation
- Parameters
clip (
VideoNode) – Input clipwidth (
int) – Output widthheight (
int) – Output heightshift (
Tuple[float,float]) – Shift clip during the operation. Expects a tuple of (src_top, src_left).
- Return type
VideoNode
- class lvsfunc.kernels.Example.shift(self, clip, shift=(0, 0))
Perform a regular shifting operation
- Parameters
clip (
VideoNode) – Input clipshift (
Tuple[float,float]) – Shift clip during the operation. Expects a tuple of (src_top, src_left).
- Return type
VideoNode
- class lvsfunc.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 | None) – Output matrix. If None, will take the matrix from the input clip’s frameprops.
matrix_in (vs.MatrixCoefficients | None) – Input matrix. If None, will take the matrix from the input clip’s frameprops.
- Return type
VideoNode
All Available Kernels
Note
- class lvsfunc.kernels.BSpline(**kwargs)
Bases:
lvsfunc.kernels.BicubicBicubic b=1, c=0
- class lvsfunc.kernels.Bessel(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseBessel kernel.
- class lvsfunc.kernels.Bicubic(b=0, c=0.5, **kwargs)
Bases:
lvsfunc.kernels.KernelBuilt-in bicubic resizer. b=0, c=0.5
Dependencies:
VapourSynth-descale
- Parameters
b (
float) – B-param for bicubic kernelc (
float) – C-param for bicubic kernel
- class lvsfunc.kernels.BicubicDidee(**kwargs)
Bases:
lvsfunc.kernels.BicubicKernel 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 lvsfunc.kernels.BicubicDogWay(**kwargs)
Bases:
lvsfunc.kernels.BicubicKernel inspired by DogWay.
Bicubic b=-0.6, c=0.4
This is useful for downscaling content with ringing.
- class lvsfunc.kernels.BicubicSharp(**kwargs)
Bases:
lvsfunc.kernels.BicubicBicubic b=0, c=1
- class lvsfunc.kernels.Bilinear(**kwargs)
Bases:
lvsfunc.kernels.KernelBuilt-in bilinear resizer.
- class lvsfunc.kernels.BlackHarris(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseBlack-Harris kernel.
- class lvsfunc.kernels.BlackMan(taps=4, **kwargs)
Bases:
lvsfunc.kernels.FmtConvfmtconv’s blackman resizer.
- class lvsfunc.kernels.BlackManMinLobe(taps=4, **kwargs)
Bases:
lvsfunc.kernels.FmtConvfmtconv’s blackmanminlobe resizer.
- class lvsfunc.kernels.BlackNuttall(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseBlackNuttall kernel.
- class lvsfunc.kernels.Bohman(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseBohman kernel.
- class lvsfunc.kernels.Box(taps=4, **kwargs)
Bases:
lvsfunc.kernels.FmtConvfmtconv’s box resizer.
- class lvsfunc.kernels.Catrom(**kwargs)
Bases:
lvsfunc.kernels.BicubicBicubic b=0, c=0.5
- class lvsfunc.kernels.Cosine(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseCosine kernel.
- class lvsfunc.kernels.FlatTop(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseFlatTop kernel.
- class lvsfunc.kernels.FmtConv(taps=4, **kwargs)
Bases:
lvsfunc.kernels.KernelAbstract fmtconv’s resizer.
Dependencies:
fmtconv
- class lvsfunc.kernels.Gaussian(curve=30, **kwargs)
Bases:
lvsfunc.kernels.FmtConvfmtconv’s gaussian resizer.
- class lvsfunc.kernels.Ginseng(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseGinseng kernel.
- class lvsfunc.kernels.Hamming(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseHamming kernel.
- class lvsfunc.kernels.Hann(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseHann kernel.
- class lvsfunc.kernels.Hermite(**kwargs)
Bases:
lvsfunc.kernels.BicubicBicubic b=0, c=0
- class lvsfunc.kernels.Impulse(impulse, oversample=8, taps=1, **kwargs)
Bases:
lvsfunc.kernels.FmtConvfmtconv’s impulse resizer.
- class lvsfunc.kernels.Kaiser(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseKaiser kernel.
- class lvsfunc.kernels.Lanczos(taps=3, **kwargs)
Bases:
lvsfunc.kernels.KernelBuilt-in lanczos resizer.
Dependencies:
VapourSynth-descale
- Parameters
taps (
int) – taps param for lanczos kernel
- class lvsfunc.kernels.MinSide(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseMinSide kernel.
- class lvsfunc.kernels.Mitchell(**kwargs)
Bases:
lvsfunc.kernels.BicubicBicubic b=1/3, c=1/3
- class lvsfunc.kernels.NearestNeighbour(**kwargs)
Bases:
lvsfunc.kernels.GaussianNearest Neighbour kernel.
- class lvsfunc.kernels.Parzen(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseParzen kernel.
- class lvsfunc.kernels.Point(**kwargs)
Bases:
lvsfunc.kernels.KernelBuilt-in point resizer.
- class lvsfunc.kernels.Quadratic(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseQuadratic kernel.
- class lvsfunc.kernels.Robidoux(**kwargs)
Bases:
lvsfunc.kernels.BicubicBicubic b=0.37822, c=0.31089
- class lvsfunc.kernels.RobidouxSharp(**kwargs)
Bases:
lvsfunc.kernels.BicubicBicubic b=0.26201, c=0.36899
- class lvsfunc.kernels.RobidouxSoft(**kwargs)
Bases:
lvsfunc.kernels.BicubicBicubic b=0.67962, c=0.16019
- class lvsfunc.kernels.Sinc(taps=4, **kwargs)
Bases:
lvsfunc.kernels.FmtConvfmtconv’s sinc resizer.
- class lvsfunc.kernels.Spline16(**kwargs)
Bases:
lvsfunc.kernels.KernelBuilt-in spline16 resizer.
Dependencies:
VapourSynth-descale
- class lvsfunc.kernels.Spline36(**kwargs)
Bases:
lvsfunc.kernels.KernelBuilt-in spline36 resizer.
Dependencies:
VapourSynth-descale
- class lvsfunc.kernels.Spline64(**kwargs)
Bases:
lvsfunc.kernels.KernelBuilt-in spline64 resizer.
Dependencies:
VapourSynth-descale
- class lvsfunc.kernels.Welch(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseWelch kernel.
- class lvsfunc.kernels.Wiener(oversample, **kwargs)
Bases:
lvsfunc.kernels.ImpulseWiener kernel.