noise ¶
Classes:
-
AddNoise
– -
GrainFactoryBicubic
–Bicubic scaler originally implemented in GrainFactory with a sharp parameter.
-
Grainer
–Enum representing different grain/noise generation algorithms.
-
ScalerTwoPasses
–Abstract scaler class that applies scaling in two passes.
Attributes:
-
LanczosTwoPasses
–Lanczos resizer that applies scaling in two passes.
EdgeLimits module-attribute
¶
Tuple representing lower and upper edge limits for each plane.
Format: (low, high)
Each element can be: - A float: the same limit is applied to all planes. - A sequence of floats: individual limits for each plane. - True: use the default legal range per plane. - False: no limits are applied.
GrainerLike module-attribute
¶
GrainerLike: TypeAlias = Grainer | GrainerPartial
Grainer-like type, which can be a single grainer or a partial grainer.
LanczosTwoPasses module-attribute
¶
LanczosTwoPasses = ScalerTwoPasses[Lanczos]
Lanczos resizer that applies scaling in two passes.
AbstractGrainer ¶
Abstract grainer base class.
Methods:
-
__call__
–
__call__ ¶
__call__(clip: VideoNode, /, **kwargs: Any) -> VideoNode | GrainerPartial
Source code
125 126 |
|
AddNoise ¶
AddNoise(
strength: float | tuple[float, float] = 0.25,
size: float | tuple[float, float] = (1.0, 1.0),
sharp: float | ScalerLike = Lanczos,
dynamic: bool = True,
temporal_average: int | tuple[float, int] = (0.0, 1),
postprocess: Any | None = None,
protect_chroma: bool = True,
luma_scaling: float | None = None,
fade_limits: bool | Any = True,
*,
matrix: Any | None = None,
kernel: Any = None,
neutral_out: bool = False,
**kwargs: Any
)
Bases: AddNoiseBase
Classes:
-
FBM_SIMPLEX
– -
GAUSS
– -
PERLIN
– -
POISSON
– -
SIMPLEX
–
Methods:
-
grain
–
Attributes:
-
dynamic
– -
fade_limits
– -
kwargs
– -
luma_scaling
– -
neutral_out
– -
postprocess
– -
protect_chroma
– -
sharp
– -
size
– -
strength
– -
temporal_average
–
Source code
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 |
|
FBM_SIMPLEX ¶
FBM_SIMPLEX(
strength: float | tuple[float, float] = 0.25,
size: float | tuple[float, float] = (1.0, 1.0),
sharp: float | ScalerLike = Lanczos,
dynamic: bool = True,
temporal_average: int | tuple[float, int] = (0.0, 1),
postprocess: Any | None = None,
protect_chroma: bool = True,
luma_scaling: float | None = None,
fade_limits: bool | Any = True,
*,
matrix: Any | None = None,
kernel: Any = None,
neutral_out: bool = False,
**kwargs: Any
)
Bases: AddNoiseBase
Methods:
-
grain
–
Attributes:
-
dynamic
– -
fade_limits
– -
kwargs
– -
luma_scaling
– -
neutral_out
– -
postprocess
– -
protect_chroma
– -
sharp
– -
size
– -
strength
– -
temporal_average
–
Source code
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 |
|
grain ¶
grain(
clip: VideoNode,
strength: float | tuple[float, float] | None = None,
dynamic: bool | None = None,
**kwargs: Any
) -> VideoNode
Source code
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 |
|
GAUSS ¶
GAUSS(
strength: float | tuple[float, float] = 0.25,
size: float | tuple[float, float] = (1.0, 1.0),
sharp: float | ScalerLike = Lanczos,
dynamic: bool = True,
temporal_average: int | tuple[float, int] = (0.0, 1),
postprocess: Any | None = None,
protect_chroma: bool = True,
luma_scaling: float | None = None,
fade_limits: bool | Any = True,
*,
matrix: Any | None = None,
kernel: Any = None,
neutral_out: bool = False,
**kwargs: Any
)
Bases: AddNoiseBase
Methods:
-
grain
–
Attributes:
-
dynamic
– -
fade_limits
– -
kwargs
– -
luma_scaling
– -
neutral_out
– -
postprocess
– -
protect_chroma
– -
sharp
– -
size
– -
strength
– -
temporal_average
–
Source code
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 |
|
grain ¶
grain(
clip: VideoNode,
strength: float | tuple[float, float] | None = None,
dynamic: bool | None = None,
**kwargs: Any
) -> VideoNode
Source code
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 |
|
PERLIN ¶
PERLIN(
strength: float | tuple[float, float] = 0.25,
size: float | tuple[float, float] = (1.0, 1.0),
sharp: float | ScalerLike = Lanczos,
dynamic: bool = True,
temporal_average: int | tuple[float, int] = (0.0, 1),
postprocess: Any | None = None,
protect_chroma: bool = True,
luma_scaling: float | None = None,
fade_limits: bool | Any = True,
*,
matrix: Any | None = None,
kernel: Any = None,
neutral_out: bool = False,
**kwargs: Any
)
Bases: AddNoiseBase
Methods:
-
grain
–
Attributes:
-
dynamic
– -
fade_limits
– -
kwargs
– -
luma_scaling
– -
neutral_out
– -
postprocess
– -
protect_chroma
– -
sharp
– -
size
– -
strength
– -
temporal_average
–
Source code
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 |
|
grain ¶
grain(
clip: VideoNode,
strength: float | tuple[float, float] | None = None,
dynamic: bool | None = None,
**kwargs: Any
) -> VideoNode
Source code
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 |
|
POISSON ¶
POISSON(
strength: float | tuple[float, float] = 0.25,
size: float | tuple[float, float] = (1.0, 1.0),
sharp: float | ScalerLike = Lanczos,
dynamic: bool = True,
temporal_average: int | tuple[float, int] = (0.0, 1),
postprocess: Any | None = None,
protect_chroma: bool = True,
luma_scaling: float | None = None,
fade_limits: bool | Any = True,
*,
matrix: Any | None = None,
kernel: Any = None,
neutral_out: bool = False,
**kwargs: Any
)
Bases: AddNoiseBase
Methods:
-
grain
–
Attributes:
-
dynamic
– -
fade_limits
– -
kwargs
– -
luma_scaling
– -
neutral_out
– -
postprocess
– -
protect_chroma
– -
sharp
– -
size
– -
strength
– -
temporal_average
–
Source code
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 |
|
grain ¶
grain(
clip: VideoNode,
strength: float | tuple[float, float] | None = None,
dynamic: bool | None = None,
**kwargs: Any
) -> VideoNode
Source code
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 |
|
SIMPLEX ¶
SIMPLEX(
strength: float | tuple[float, float] = 0.25,
size: float | tuple[float, float] = (1.0, 1.0),
sharp: float | ScalerLike = Lanczos,
dynamic: bool = True,
temporal_average: int | tuple[float, int] = (0.0, 1),
postprocess: Any | None = None,
protect_chroma: bool = True,
luma_scaling: float | None = None,
fade_limits: bool | Any = True,
*,
matrix: Any | None = None,
kernel: Any = None,
neutral_out: bool = False,
**kwargs: Any
)
Bases: AddNoiseBase
Methods:
-
grain
–
Attributes:
-
dynamic
– -
fade_limits
– -
kwargs
– -
luma_scaling
– -
neutral_out
– -
postprocess
– -
protect_chroma
– -
sharp
– -
size
– -
strength
– -
temporal_average
–
Source code
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 |
|
grain ¶
grain(
clip: VideoNode,
strength: float | tuple[float, float] | None = None,
dynamic: bool | None = None,
**kwargs: Any
) -> VideoNode
Source code
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 |
|
grain ¶
grain(
clip: VideoNode,
strength: float | tuple[float, float] | None = None,
dynamic: bool | None = None,
**kwargs: Any
) -> VideoNode
Source code
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 |
|
AddNoiseBase ¶
AddNoiseBase(
strength: float | tuple[float, float] = 0.25,
size: float | tuple[float, float] = (1.0, 1.0),
sharp: float | ScalerLike = Lanczos,
dynamic: bool = True,
temporal_average: int | tuple[float, int] = (0.0, 1),
postprocess: Any | None = None,
protect_chroma: bool = True,
luma_scaling: float | None = None,
fade_limits: bool | Any = True,
*,
matrix: Any | None = None,
kernel: Any = None,
neutral_out: bool = False,
**kwargs: Any
)
Methods:
-
grain
–
Attributes:
-
dynamic
– -
fade_limits
– -
kwargs
– -
luma_scaling
– -
neutral_out
– -
postprocess
– -
protect_chroma
– -
sharp
– -
size
– -
strength
– -
temporal_average
–
Source code
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 |
|
grain ¶
grain(
clip: VideoNode,
strength: float | tuple[float, float] | None = None,
dynamic: bool | None = None,
**kwargs: Any
) -> VideoNode
Source code
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 |
|
GrainFactoryBicubic ¶
Bases: BicubicAuto
Bicubic scaler originally implemented in GrainFactory with a sharp parameter.
Initialize the scaler with optional arguments.
Parameters:
-
sharp
¶float
, default:50
) –Sharpness of the scaler. Defaults to 50 which corresponds to Catrom scaling.
-
kwargs
¶Any
, default:{}
) –Keyword arguments that configure the internal scaling behavior.
Source code
112 113 114 115 116 117 118 119 |
|
Grainer ¶
Bases: AbstractGrainer
, CustomEnum
Enum representing different grain/noise generation algorithms.
Methods:
-
__call__
–Apply grain to a clip using the selected graining method.
Attributes:
-
FBM_SIMPLEX
–Fractional Brownian Motion based on Simplex noise.
-
GAUSS
–Gaussian noise. Built-in
noise
plugin. vs-noise -
PERLIN
–Perlin noise. Built-in
noise
plugin. vs-noise -
PLACEBO
–Grain effect provided by the
libplacebo
rendering library. -
POISSON
–Poisson-distributed noise. Built-in
noise
plugin. vs-noise -
SIMPLEX
–Simplex noise. Built-in
noise
plugin. vs-noise
FBM_SIMPLEX class-attribute
instance-attribute
¶
FBM_SIMPLEX = 3
Fractional Brownian Motion based on Simplex noise. Built-in noise
plugin. vs-noise
GAUSS class-attribute
instance-attribute
¶
GAUSS = 0
Gaussian noise. Built-in noise
plugin. vs-noise
PERLIN class-attribute
instance-attribute
¶
PERLIN = 1
Perlin noise. Built-in noise
plugin. vs-noise
PLACEBO class-attribute
instance-attribute
¶
PLACEBO = auto()
Grain effect provided by the libplacebo
rendering library.
POISSON class-attribute
instance-attribute
¶
POISSON = 4
Poisson-distributed noise. Built-in noise
plugin. vs-noise
SIMPLEX class-attribute
instance-attribute
¶
SIMPLEX = 2
Simplex noise. Built-in noise
plugin. vs-noise
__call__ ¶
__call__(
clip: VideoNode,
/,
strength: float | tuple[float, float] = ...,
static: bool = False,
scale: float | tuple[float, float] = 1.0,
scaler: ScalerLike = LanczosTwoPasses,
temporal: float | tuple[float, int] = (0.0, 0),
post_process: _PostProcessFunc | Iterable[_PostProcessFunc] | None = None,
protect_edges: bool | EdgeLimits = True,
protect_neutral_chroma: bool | None = None,
luma_scaling: float | None = None,
**kwargs: Any,
) -> VideoNode
__call__(
*,
strength: float | tuple[float, float] = ...,
static: bool = False,
scale: float | tuple[float, float] = 1.0,
scaler: ScalerLike = LanczosTwoPasses,
temporal: float | tuple[float, int] = (0.0, 0),
post_process: _PostProcessFunc | Iterable[_PostProcessFunc] | None = None,
protect_edges: bool | EdgeLimits = True,
protect_neutral_chroma: bool | None = None,
luma_scaling: float | None = None,
**kwargs: Any
) -> GrainerPartial
__call__(
clip: VideoNode,
/,
strength: float | tuple[float, float] = ...,
static: bool = False,
scale: float | tuple[float, float] = 1.0,
scaler: ScalerLike = LanczosTwoPasses,
temporal: float | tuple[float, int] = (0.0, 0),
post_process: _PostProcessFunc | Iterable[_PostProcessFunc] | None = None,
protect_edges: bool | EdgeLimits = True,
protect_neutral_chroma: bool | None = None,
luma_scaling: float | None = None,
*,
size: int | tuple[float | None, float | None] | None = (2.0, 2.0),
**kwargs: Any,
) -> VideoNode
__call__(
*,
strength: float | tuple[float, float] = ...,
static: bool = False,
scale: float | tuple[float, float] = 1.0,
scaler: ScalerLike = LanczosTwoPasses,
temporal: float | tuple[float, int] = (0.0, 0),
post_process: _PostProcessFunc | Iterable[_PostProcessFunc] | None = None,
protect_edges: bool | EdgeLimits = True,
protect_neutral_chroma: bool | None = None,
luma_scaling: float | None = None,
size: int | tuple[float | None, float | None] | None = (2.0, 2.0),
**kwargs: Any
) -> GrainerPartial
__call__(
clip: VideoNode,
/,
strength: float | Sequence[float] = ...,
*,
scale: float | tuple[float, float] = 1.0,
scaler: ScalerLike = LanczosTwoPasses,
temporal: float | tuple[float, int] = (0.0, 0),
post_process: _PostProcessFunc | Iterable[_PostProcessFunc] | None = None,
protect_edges: bool | EdgeLimits = True,
protect_neutral_chroma: bool | None = None,
luma_scaling: float | None = None,
**kwargs: Any,
) -> VideoNode
__call__(
*,
strength: float | Sequence[float] = ...,
scale: float | tuple[float, float] = 1.0,
scaler: ScalerLike = LanczosTwoPasses,
temporal: float | tuple[float, int] = (0.0, 0),
post_process: _PostProcessFunc | Iterable[_PostProcessFunc] | None = None,
protect_edges: bool | EdgeLimits = True,
protect_neutral_chroma: bool | None = None,
luma_scaling: float | None = None,
**kwargs: Any
) -> GrainerPartial
__call__(
clip: VideoNode,
/,
strength: float | tuple[float, float] = ...,
static: bool = False,
scale: float | tuple[float, float] = 1.0,
scaler: ScalerLike = LanczosTwoPasses,
temporal: float | tuple[float, int] = (0.0, 0),
post_process: _PostProcessFunc | Iterable[_PostProcessFunc] | None = None,
protect_edges: bool | EdgeLimits = True,
protect_neutral_chroma: bool | None = None,
luma_scaling: float | None = None,
**kwargs: Any,
) -> VideoNode
__call__(
*,
strength: float | tuple[float, float] = ...,
static: bool = False,
scale: float | tuple[float, float] = 1.0,
scaler: ScalerLike = LanczosTwoPasses,
temporal: float | tuple[float, int] = (0.0, 0),
post_process: _PostProcessFunc | Iterable[_PostProcessFunc] | None = None,
protect_edges: bool | EdgeLimits = True,
protect_neutral_chroma: bool | None = None,
luma_scaling: float | None = None,
**kwargs: Any
) -> GrainerPartial
__call__(
clip: VideoNode | MissingT = MISSING,
/,
strength: float | Sequence[float] = 0,
static: bool = False,
scale: float | tuple[float, float] = 1.0,
scaler: ScalerLike = LanczosTwoPasses,
temporal: float | tuple[float, int] = (0.0, 0),
post_process: _PostProcessFunc | Iterable[_PostProcessFunc] | None = None,
protect_edges: bool | EdgeLimits = True,
protect_neutral_chroma: bool | None = None,
luma_scaling: float | None = None,
**kwargs: Any,
) -> VideoNode | GrainerPartial
Apply grain to a clip using the selected graining method.
If no clip is passed, a partially applied grainer with the provided arguments is returned instead.
Example usage:
# For PERLIN, SIMPLEX, and FBM_SIMPLEX, it is recommended to use `size` instead of `scale`,
# as `size` allows for direct internal customization of each grain type.
grained = Grainer.PERLIN(clip, (1.65, 0.65), temporal=(0.25, 2), luma_scaling=4, size=3.0, seed=333)
Parameters:
-
clip
¶VideoNode | MissingT
, default:MISSING
) –The input clip to apply grain to. If omitted, returns a partially applied grainer.
-
strength
¶float | Sequence[float]
, default:0
) –Grain strength. A single float applies uniform strength to all planes. A sequence allows per-plane control.
-
static
¶bool
, default:False
) –If True, the grain pattern is static (unchanging across frames).
-
scale
¶float | tuple[float, float]
, default:1.0
) –Scaling divisor for the grain layer. Can be a float (uniform scaling) or a tuple (width, height scaling).
-
scaler
¶ScalerLike
, default:LanczosTwoPasses
) –Scaler used to resize the grain layer when
scale
is not 1.0. -
temporal
¶float | tuple[float, int]
, default:(0.0, 0)
) –Temporal grain smoothing parameters. Either a float (weight) or a tuple of (weight, radius).
-
post_process
¶_PostProcessFunc | Iterable[_PostProcessFunc] | None
, default:None
) –One or more functions applied after grain generation (and temporal smoothing, if used).
-
protect_edges
¶bool | EdgeLimits
, default:True
) –Protects edge regions of each plane from graining. - True: Use legal range based on clip format. - False: Disable edge protection. - Tuple: Specify custom edge limits per plane (see
EdgeLimits
). -
protect_neutral_chroma
¶bool | None
, default:None
) –Whether to disable graining on neutral chroma.
-
luma_scaling
¶float | None
, default:None
) –Sensitivity of the luma-adaptive graining mask. Higher values reduce grain in brighter areas; negative values invert behavior.
-
kwargs
¶Any
, default:{}
) –Additional arguments to pass to the graining function or additional advanced options: -
temporal_avg_func
: Temporal average function to use instead of the default standard mean. -protect_edges_blend
: Blend range (float) to soften edge protection thresholds. -protect_neutral_chroma_blend
: Blend range (float) for neutral chroma protection. -neutral_out
: (Boolean) Output the neutral layer instead of the merged clip.
Returns:
-
VideoNode | GrainerPartial
–Grained video clip, or a
GrainerPartial
ifclip
is not provided.
Source code
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 |
|
GrainerPartial ¶
Bases: AbstractGrainer
A partially-applied grainer wrapper.
Stores a grainer function, allowing it to be reused with different clips.
Parameters:
-
grainer
¶Grainer
) –Grainer enumeration.
-
kwargs
¶Any
, default:{}
) –Arguments for the specified grainer.
Methods:
-
__call__
–Apply the grainer to the given clip with optional argument overrides.
Attributes:
Source code
550 551 552 553 554 555 556 557 558 |
|
__call__ ¶
Apply the grainer to the given clip with optional argument overrides.
Parameters:
-
clip
¶VideoNode
) –Clip to be processed.
-
kwargs
¶Any
, default:{}
) –Additional keyword arguments to override or extend the stored ones.
Returns:
-
VideoNode
–Processed clip.
Source code
560 561 562 563 564 565 566 567 568 |
|
ScalerTwoPasses ¶
Bases: BaseScalerSpecializer[_ScalerT]
, Scaler
Abstract scaler class that applies scaling in two passes.
Methods:
-
scale
–
scale ¶
scale(
clip: VideoNode,
width: int | None = None,
height: int | None = None,
shift: tuple[TopShift, LeftShift] = (0, 0),
**kwargs: Any
) -> VideoNode | ConstantFormatVideoNode
Source code
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
|