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.

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 | tuple[float, str] = [1.0, "nlm"], 
    precision: bool = True, 
    chroma_masking: bool = False, 
    show_mask: int = 0, 
    luma_over_texture: float = 0.4, 
    kwargs_flatmask: dict = {})
  • clip: Clip to process (YUV or GRAY 16bit, if not will be internally converted in 16bit).

  • thsad: Thsad for mc_degrain (luma denoise strength and chroma ref). Recommended values: 300-800

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

  • sigma: Sigma for BM3D (luma denoise strength). Recommended values: 1-5.

  • 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. If not given, 1.0 is used (or none for ArtCNN). Accepted denoiser types: "nlm", "cbm3d", "artcnn". If not given, nlm is used.

  • precision: If True, a flat mask is created to enhance the denoise strenght on flat areas avoiding textured area (95% accuracy).

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

  • show_mask: 1 = Show the first luma mask, 2 = Show the textured luma mask, 3 = Show the 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). Any other value returns the denoised clip.

  • luma_over_texture: Multiplier for the luma mask in precision mode. 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 for flatmask creation. 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. Usually 1 for really textured clip, 2-3 for a normal clip, 4-5 for a clip with strong noise or grain.
    • texture_strength: Texture strength for mask (0-inf). Values above 1 decrese the strength of the texture in the mask, lower values increase it. The max value is theoretical infinite, but there is no gain after some point.
    • edges_strength: Edges strength for mask (0-1). Basic multiplier for edges strength.
  • return: 16bit denoised clip. If show_mask is 1, 2, 3, 4 or 5, returns a tuple (denoised_clip, mask).

Usage:

from vsdirty import adenoise

# Apply default adaptive denoising
denoised = adenoise.scan16mm(clip)

bore

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

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 specific edges to reduce aliasing without blurring textures.

from vsdirty import adfunc

# Apply antialiasing
aa_clip = adfunc.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.0.tar.gz (19.4 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.0-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: vsdirty-0.1.0.tar.gz
  • Upload date:
  • Size: 19.4 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.0.tar.gz
Algorithm Hash digest
SHA256 5b0d25d7a77be266a5ef5409ea7326a11c262d7a8963511c77f7e9a27eac36b2
MD5 c36ae373cb1153556aa9ce119488ed63
BLAKE2b-256 640944fc9cea7d7e366ed07517413a1a161c5a3abad11ceae3762dcd1be72f4b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: vsdirty-0.1.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7584be7dfe223f82c3983edb3b868f823a024580daf59611b3ddb3e331c94f45
MD5 5aea20eec6ddf357c1beb2a59bbbc794
BLAKE2b-256 7cc2027f0c6611de1b5afe562832e4d10318bb4ee2fbf2420c76d2f352ad0357

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