Skip to main content

VapourSynth wrappers for denoising, masking and edge fixing

Project description

vs-dirty

A collection of VapourSynth wrappers and utility functions focused on advanced denoising, masking, and edge fixing.

Follow the docstring for more information about the parameters.

Installation

You can install vsdirty via pip:

pip install vsdirty

Or build from source:

git clone https://github.com/r74mi/vs-dirty.git
cd vs-dirty
pip install .

Dependencies

This package relies on several external VapourSynth plugins. Ensure these are installed and available in your VapourSynth plugins folder.

Plugin URL
fmtc GitLab
akarin GitHub
cas GitHub
bore GitHub
mvtools GitHub
BM3DCuda GitHub
nlm-cuda GitHub
vsmlrt GitHub

adenoise

Designed specifically for film content, this intensive adaptive denoiser removes noise while carefully preserving fine textures and small elements. It combines mc_degrain (luma), NLMeans/CBM3D (chroma), and BM3D (luma), all modulated by adaptive masking.

Presets:

  • scan65mm (Light)
  • scan35mm (Medium)
  • scan16mm (Heavy)
  • scan8mm (Very Heavy)
  • digital (Optimized for digital sources)
  • default (Generic)

Parameters:

adenoise.default(
  clip: vs.VideoNode, 
  thsad: int = 500, 
  tr: int = 2, 
  sigma: float = 6, 
  luma_mask_weaken: float = 0.75, 
  luma_mask_thr: float = 0.196, 
  chroma_denoise: float | str | tuple[float, str] = [1.0, "nlm"], 
  precision: bool = True, 
  chroma_masking: bool = False, 
  luma_over_texture: float = 0.4, 
  kwargs_flatmask: dict = {},
  show_mask: int = 0
)
  • clip: Clip to process (YUV or GRAY).

  • thsad: Luma and chroma ref denoise strength. Recommended values: 300-800

  • tr: Temporal radius for temporal consistency. Recommended values: 2-3 (1 means no temporal denoise).

  • sigma: Sigma for BM3D (luma denoise strength). Recommended values: 2-10.

  • luma_mask_weaken: Controls how much dark spots should be denoised. Lower values mean stronger overall denoise. Recommended values: 0.6-0.9

  • luma_mask_thr: Threshold that determines what is considered bright and what is dark in the luma mask. Recommended values: 0.15-0.25

  • chroma_denoise: Denoiser strength and type for chroma. NLMeans/CBM3D/ArtCNN. Reccomended strength values: 0.5-2. Accepted denoiser types: "nlm", "cbm3d", "artcnn".

  • precision: If True, a flat mask is created to enhance the denoise strenght avoiding textured area.

  • chroma_masking: If True, enables specific chroma masking for U/V planes.

  • luma_over_texture: Lower value means more importance to textured areas, higher value means more importance to luma levels. Accepted values: 0.0-1.0

  • kwargs_flatmask: Additional arguments. dict values (check hd_flatmask's docstring for more info):

    • sigma1: This value should be decided based on the details level of the clip and how much grain and noise is present. Recommended values: 1-5
    • texture_strength: Texture strength for mask (0-inf). Values above 1 decrease the strength of the texture in the mask.
    • edges_strength: Edges strength for mask (0-1). Basic multiplier for edges strength.
  • show_mask: 1 = First luma mask, 2 = Textured luma mask, 3 = Complete luma mask, 4 = Show the Chroma U Plane mask (if chroma_masking = True), 5 = Show the Chroma V Plane mask (if chroma_masking = True).

  • return: 16bit denoised clip. If show_mask is set, returns a tuple (denoised_clip, mask).

Usage:

from vsdirty import adenoise

denoised = adenoise.scan16mm(clip)

bore

A powerful edge cleaner (dirty line fixer) that processes borders at their native resolution to avoid scaling artifacts.

Parameters:

def bore(
  clip : vs.VideoNode,
  ythickness: List[int] = None,
  uthickness: List[int] = None,
  vthickness: List[int] = None,
  planes: PlanesT = 0,
  singlePlane = True
)
  • clip: Input clip (YUV or GRAY).
  • ythickness: Luma border thicknesses to process. [top, bottom, left, right].
  • uthickness: Chroma U border thicknesses to process. [top, bottom, left, right].
  • vthickness: Chroma V border thicknesses to process. [top, bottom, left, right]. If None, uses ythickness or uthickness.
  • planes: Plane(s) to process.
  • singlePlane: If True uses bore.SinglePlane, otherwise bore.MultiPlane. MultiPlane works only on 444 clips.
  • return: Processed clip with corrected borders, same format as input.

Usage:

from vsdirty import bore

# Fix dirty lines: Top=1px, Bottom=1px, Left=2px, Right=2px
clean = bore(clip, ythickness=[1, 1, 2, 2])

msaa2x

An antialiaser based on ArtCNN that targets edges.

Parameters:

def msaa2x(
    clip: vs.VideoNode,
    ref: Optional[vs.VideoNode] = None,
    mask: bool = False,
    sigma: float = 2,
    thr: float = None,
    planes: PlanesT = 0,
    **kwargs
)
  • clip: Clip to process (YUV or GRAY).
  • ref: Reference clip used to create the edgemask (clean and denoised).
  • mask: If True will return the mask used.
  • sigma: Sigma used for edge fixing during antialiasing only if ref is None.
  • thr: Threshold used for Binarize the clip, only 0-1 value area allowed. If None, no Binarize will be applied.
  • planes: Which planes to process. Defaults to Y.
  • kwargs: Accepts advanced_edgemask arguments.

Usage:

from vsdirty import msaa2x

aa_clip = msaa2x(clip)

advanced_edgemask

Generates a high-quality edge mask by combining Retinex preprocessing with multiple edge detectors (Kirsch, Sobel) to capture faint and complex edges.

from vsdirty import admask

emask = admask.advanced_edgemask(clip, luma_scaling=10)

hd_flatmask

A specialized mask for flat areas, useful for protecting textures or targeting specific flat regions for filtering.

from vsdirty import admask

flat_mask = admask.hd_flatmask(clip)

diff_and_swap

A utility to repair damaged frames in a "base" clip using a "correction" clip. It compares frames and swaps them if the difference exceeds a threshold.

from vsdirty import adutils

# automated patching
repaired, _ = adutils.diff_and_swap(correction_clip, base_clip, thr=30000)

License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vsdirty-0.1.2.tar.gz (19.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vsdirty-0.1.2-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

Details for the file vsdirty-0.1.2.tar.gz.

File metadata

  • Download URL: vsdirty-0.1.2.tar.gz
  • Upload date:
  • Size: 19.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for vsdirty-0.1.2.tar.gz
Algorithm Hash digest
SHA256 93108cec2df7af744b693ba52b7e6090c7a014fe6c536cf21ed64ced5116b324
MD5 92e0181bd3f463701fe5474986ee9f0f
BLAKE2b-256 fcd77538f1f45929cd28520a509bff359467668e3084bceed080c34c65409ec8

See more details on using hashes here.

File details

Details for the file vsdirty-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: vsdirty-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 20.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for vsdirty-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c1f480ca06bb5fd8e43e788404ce55b275b9bca24d49d4acd1086598ff6ac6db
MD5 28b4e41640d2b439c9403da832ebf185
BLAKE2b-256 4b0b1b957c4d9226f06c9cd1be9cc8e599b665c796119c00517bb03da4f30599

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page