From Avisynth wiki
Jump to: navigation, search
Author tp7, pinterf
Version v1.0
Download RgTools-1.0.7z
Category Denoisers
License MIT but binaries are GPLv2
Discussion Doom9 Thread



RgTools is a modern rewrite of RemoveGrain, Repair, BackwardClense, Clense, ForwardClense, VerticalCleaner and TemporalRepair all in a single plugin. RgTools is mostly backward compatible with the original plugins, incompatibilities mainly come from deprecated parameters in the original filters, read filter documentation for full details. Some routines might be slightly less efficient than original, some are faster. Output of some RemoveGrain modes are not exactly identical to the original due to some minor rounding differences; these differences will not affect your output in any significant way (it might make it better)[1]. Other functions should be identical.


  • AVX2 support requires AviSynth+ (also OS dependent, AVX2 needs at least Windows7 SP1)

*** vcredist_x86.exe is required for RgTools-x86
*** vcredist_x64.exe is required for RgTools-x64


Filter Description Color format

Modified version of Clense that works on current and previous frames.

Y8, YV12, YV16, YV24, YV411, all 8-32bit planar YUV/RGB for AVS+

Temporal median of three frames.

Y8, YV12, YV16, YV24, YV411, all 8-32bit planar YUV/RGB for AVS+

Modified version of Clense that works on current and next frames.

Y8, YV12, YV16, YV24, YV411, all 8-32bit planar YUV/RGB for AVS+

Repairs unwanted artifacts from (but not limited to) RemoveGrain, includes 28 modes.

Y8, YV12, YV16, YV24, YV411, all 8-32bit planar YUV/RGB for AVS+

Purely spatial denoising function, includes 28 (-1) modes.

Y8, YV12, YV16, YV24, YV411, all 8-32bit planar YUV/RGB for AVS+

A very fast vertical median, it only has 2 modes.

Y8, YV12, YV16, YV24, YV411, all 8-32bit planar YUV/RGB for AVS+

TemporalRepair is a temporal filter, primarily useful for restoring static (non moving) details of spatial filters like RemoveGrain. Since 0.98.

Y8, YV12, YV16, YV24, YV411, all 8-32bit planar YUV/RGB for AVS+


Version      Date            Changes
v1.0 20200427 - RemoveGrain mode 26-28, (C, up to SSE4.1) by the original author: Mode 26 SmartRGC: 26 = medianblur. Based off mode 17, but preserves corners, but not thin lines. Mode 27 SmartRGCL: 27 = medianblur. Same as mode 26 but preserves thin lines. Mode 28 SmartRGCL2 Though mode 28 has different code from mode 27 so far no clips found producing different results :) - Repair mode 26-28 (25 is nonexisting, only exists in RemoveGrain) - add "opt" debug parameter to Repair. 0:auto, 1:c 2:SSE2 3:SSE4.1 4:AVX2 (latter is not used here atm) v0.99 20200426 - RemoveGrain mode 25 ("nondestructivesharpen") finally reverse engineered and ported from the original RemoveGrain package. (no-no, Repair has still 24 modes) Plus: 10-32 bits, Plus: sse4.1, avx2 - RemoveGrain: Revised, more correct 32 bit float in mode 6,7,8,9,15,16,23,24 (proper clamping, chroma part specially treated) - General: make C reference more similar to actual SIMD code - fix: width<32 (or 16) with horizontal subsampling would use AVX2 (SSE2) on chroma - (noticed: RemoveGrain: mode 11 and 12 SSE is simply avaraging instead of really do 1/4 1/2 1/4 kernel blur like C (todo). This is written in docs but even very old RemoveGrainSSE2 acts like this) - Avisynth+ V8 header, frame property copy support - opt debug parameter to RemoveGrain. 0:auto, 1:c 2:SSE2 3:SSE4.1 4:AVX2. Replaces bool "optAvx2" v0.98 08/14/2019 - Include "TemporalRepair" filter from old RemoveGrainT package (rewritten C and SIMD intrinsics from pure inline asm) Add Y8, YV16, YV24 besides YV12, drop YUY2 support. Add 10-32 bit support for Y, YUV and planar RGB formats Add int "opt" parameter (mainly for debug: 0=C 1=SSE2 2=SSE4.1) for testing specific code paths - Codes for different processor targets (SSSE3 and SSE4.1) are now separated and are compiled using function attributes (clang, gcc). - Other source changes for errorless gcc and clang build - LLVM support, see howto in RgTools.txt Note: use at least LLVM 9.0 build 21 June 2019 due to a clang compiler bug (_mm_avg_epu8 related, fixed on April 14 2019) older versions are up-to 1/3 slower than the Microsoft build. See latest snapshot builds at https://llvm.org/builds/ - GCC 8.3 support, CMakeFiles.txt, see howto in RgTools.txt - RemoveGrain/Repair different code paths for SSE2/SSE4.1/AVX2 instead of SSE2/SSE3/AVX2. - Add documentation (from old docs, new part: gcc/clang howto) - todo: Overview 32 bit float parts for some RemoveGrain modes (6, 7, 8, 9, 15, 16, 23, 24) v0.97 07/02/2018 - Remove some inherited clipping to 0..1 range for 32bit float. In general we do not clamp in 32 bit float colorspaces, especially that U/V range is -0.5..+0.5 from Avisynth+ r2728 v0.96 06/09/2017 - RemoveGrain: AVX2. Available when Avisynth+ reports AVX2 usability Can be disabled with new parameter: optAvx2=false - Clense, ForwardClense, BackwardClense: ignore planar colorspace checking when planar=true. Like in RemoveGrain and Repair. - Fix: Mode 11 and 13 for 32 bit float colorspaces (which worked like mode 10 and 12) v0.95 03/14/2017 - Fix: RemoveGrain Mode 20: overflow at 14 and 16 bit depths in SSE4 (stripes) - Repair: error on unaligned frames (unaligned crop) instead of access violation error v0.94 01/26/2017 - Clense: new parameter (from v0.9): bool reduceflicker (default false) - Clense: dummy compatibility parameters: bool planar, int cache - autoregister filter MT modes as NICE_FILTER for Avisynth+ except for Clense: when reduceflicker is true, MULTI_INSTANCE MT mode is reported - alignment check in Repair and RemoveGrain (anti-unaligned crop measures) v0.93 11/27/2016 - Same functionality as 0.92.1 - New bit depths 10, 12, 14, 16 bits and 32 bit float - New formats: Planar RGB, Planar RGBA and YUVA support - Use aligned loads if possible, internally - 10+ bit formats require SSE4 for fast processing - XP Support - Built with VS2015, requires Visual Studio Redistributable Update 3 or newer - Of course it works with classic Avisynth for 8 bit videos.
v0.92.1 02/10/2014 - Planar parameter added to VerticalCleaner registration function. It worked before but apparently not.
v0.92 02/10/2014 - Planar parameter added to VerticalCleaner for compatibility with QTGMC. Same behavior as in RemoveGrain.
v0.91 11/30/2013 - Planar parameter is added to RemoveGrain and Repair. It allows to skip any colorspace checks whatsoever, making the filter always assume that planar input is passed.
v0.9 11/26/2013 - Initial release - 24 modes of RemoveGrain, 24 modes of Repair, both modes of VerticalCleaner, and three variations of Clense implemented.

Back to External Filters

Personal tools