diff --git a/vodesfunc/rescale.py b/vodesfunc/rescale.py index 2f9e559..e74307c 100644 --- a/vodesfunc/rescale.py +++ b/vodesfunc/rescale.py @@ -83,7 +83,8 @@ def descale( You can also pass your own function to generate a mask using all arguments and for both steps.\n See the aforementioned function for how this works. :param sample_grid_model: See the [vs-jetpack docs](https://jaded-encoding-thaumaturgy.github.io/vs-jetpack/api/vskernels/types/#vskernels.types.SampleGridModel) for this.\n - This param will only be used as a fallback if the kernel doesn't have one passed to it. + This param will only be used as a fallback if the kernel doesn't have one passed to it.\n + Do note that this will always show up as `MATCH_EDGES` in `descale_func_args` and `rescale_args` since shifts are handled internally in ScalingArgs. """ clip = self.funcutil.work_clip diff --git a/vodesfunc/rescale_ext/regular_rescale.py b/vodesfunc/rescale_ext/regular_rescale.py index a769b3f..6f91602 100644 --- a/vodesfunc/rescale_ext/regular_rescale.py +++ b/vodesfunc/rescale_ext/regular_rescale.py @@ -1,7 +1,7 @@ from jetpytools import KwargsT from typing import Any from vstools import vs -from vskernels import BorderHandling +from vskernels import BorderHandling, SampleGridModel from vsscale import ScalingArgs from .base import RescaleBase @@ -18,6 +18,11 @@ def _scaling_args(self, **kwargs: Any) -> ScalingArgs: kwargs = kwargs | dict(sample_grid_model=self.sample_grid_model) return ScalingArgs.from_args(**kwargs) + def _kernel_kwargs(self, kwargs: KwargsT) -> KwargsT: + if self.sample_grid_model: + kwargs = kwargs | dict(sample_grid_model=SampleGridModel.MATCH_EDGES) + return kwargs + def _non_fieldbased_descale( self, clip: vs.VideoNode, @@ -37,6 +42,8 @@ def _non_fieldbased_descale( if isinstance(self.ignore_mask, vs.VideoNode): args = args | dict(ignore_mask=self.ignore_mask) + args = self._kernel_kwargs(args) + self.post_crop = sc_args.kwargs(2) self.rescale_args = sc_args.kwargs() @@ -67,7 +74,9 @@ def _descale_step(workclip: vs.VideoNode, order: str) -> vs.VideoNode: return self.kernel.descale( workclip, - **(sc_args_direction.kwargs() | dict(border_handling=self.border_handling, ignore_mask=ignore_mask) | direction), + **self._kernel_kwargs( + sc_args_direction.kwargs() | dict(border_handling=self.border_handling, ignore_mask=ignore_mask) | direction + ), ) self.descaled = clip @@ -79,7 +88,8 @@ def _descale_step(workclip: vs.VideoNode, order: str) -> vs.VideoNode: self.descaled = self.kernel.descale(clip, **args) self.rescaled = self.kernel.rescale( - self.descaled, **(self.rescale_args | dict(width=clip.width, height=clip.height, border_handling=self.border_handling)) + self.descaled, + **self._kernel_kwargs(self.rescale_args | dict(width=clip.width, height=clip.height, border_handling=self.border_handling)), ) def _raw_non_fieldbased_descale(