SmoothAdjust
Raffriff42 (Talk | contribs) (redirect for convenient searching) |
(→SmoothLevels - Limiting Settings: darkSTR works on Lmodes 1 & 3, brightSTR works on Lmode 2 only) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | + | {{FilterCat6|External_filters|Plugins|Plugins_x64|Adjustment_filters|Levels_and_Chroma_filters|Deep_color_tools}} | |
− | {{ | + | {{Filter3 |
+ | |{{Author/LaTo}} | ||
+ | |v3.20 | ||
+ | |3=[http://latoninf.free.fr/d9/SA/SmoothAdjust-v3.20.7z SmoothAdjust-v3.20.7z] | ||
+ | |4=Adjustment Filters | ||
+ | |5=Free for non-commercial use only | ||
+ | |6=[https://forum.doom9.org/showthread.php?t=154971 Doom9 Thread] | ||
+ | }} | ||
+ | == Description == | ||
+ | SmoothAdjust is a set of 5 filters to make YUV adjustements: | ||
+ | * <code>SmoothLevels</code> allows to change levels & gamma with optional limiting | ||
+ | * <code>SmoothTweak</code> allows to change brightness, contrast, saturation & hue | ||
+ | * <code>SmoothCurve</code> allows to change a plane according to a fixed curve | ||
+ | * <code>SmoothCustom</code> allows to change a plane according to a custom expression | ||
+ | * <code>SmoothTools</code> allows to use all the previous filters in one single pass | ||
+ | |||
+ | These 5 filters have a smoothing & dithering algorithm to avoid banding issue. Calculations are made in 32bits float to avoid rounding errors and artifacts. SmoothAdjust is multithreaded (up to 16 threads) and SSE2/AVX2 optimized. | ||
+ | |||
+ | For automatic adjustments, see the "[[AutoAdjust]]" standalone plugin. | ||
+ | <br> | ||
+ | <br> | ||
+ | |||
+ | == Requirements == | ||
+ | * [x86]: [[AviSynth+]] or [http://forum.doom9.org/showthread.php?t=168764 AviSynth 2.6] | ||
+ | * [x64]: [[AviSynth+]] | ||
+ | * Supported color formats: [[Y8]], [[YV12]], [[YV16]], [[YV24]], [[YV411]] | ||
+ | ** [[Stack16|Stacked 16-bit]] processing is also supported. | ||
+ | <br> | ||
+ | |||
+ | == [[Script variables|Syntax and Parameters]] == | ||
+ | |||
+ | ===Usage=== | ||
+ | <pre> | ||
+ | - SmoothLevels( input_low, gamma, input_high, output_low, output_high, chroma, limiter, TVrange, preset, | ||
+ | Lmode, darkSTR, brightSTR, Ecurve, Ecenter, protect, | ||
+ | interp, dither, HQ, useMT, useOPT, debug, screenW, screenH, scale ) | ||
+ | |||
+ | - SmoothTweak( brightness, contrast, saturation, hue1, hue2, limiter, TVrange, | ||
+ | Lmode, limitSTR, Ecenter, | ||
+ | interp, dither, HQ, useMT, useOPT, debug, screenW, screenH, scale ) | ||
+ | |||
+ | - SmoothCurve( Ycurve, Ucurve, Vcurve, mode, limiter, TVrange, | ||
+ | interp, dither, HQ, useMT, useOPT, debug, screenW, screenH, scale ) | ||
+ | |||
+ | - SmoothCustom( Yexpr, Uexpr, Vexpr, limiter, TVrange, | ||
+ | interp, dither, HQ, useMT, useOPT, debug, screenW, screenH, scale ) | ||
+ | |||
+ | - SmoothTools( filename, | ||
+ | interp, dither, HQ, useMT, useOPT, debug, screenW, screenH, scale ) | ||
+ | |||
+ | - SmoothLevels16(...), SmoothTweak16(...), SmoothCurve16(...), SmoothCustom16(...), SmoothTools16(...) for 16 bits | ||
+ | </pre> | ||
+ | <br> | ||
+ | ===Common Settings=== | ||
+ | <pre> | ||
+ | interp [default: 100] | ||
+ | --------------------- | ||
+ | Strength of the interpolation | ||
+ | 0 = disable (faster +++) | ||
+ | 1 = weak | ||
+ | xx = intermediary | ||
+ | 200 = strong | ||
+ | |||
+ | dither [default: 75] | ||
+ | -------------------- | ||
+ | Type of the dithering | ||
+ | -1 = dithering OFF | ||
+ | 0 = pattern | ||
+ | xx = intermediary | ||
+ | 100 = noise | ||
+ | |||
+ | HQ [default: false] | ||
+ | ------------------- | ||
+ | Enable high quality interpolation (slower) | ||
+ | |||
+ | useMT [default: 0] | ||
+ | ------------------ | ||
+ | Use multithreading (number of internal threads) | ||
+ | 0 = automatic choice (=cores in Avs2.6 and =1 in Avs+/AvsMT) | ||
+ | xx = xx threads (max = 16 threads) | ||
+ | |||
+ | useOPT [default: 0] | ||
+ | ------------------- | ||
+ | Use ASM optimization when available | ||
+ | 0 = automatic choice | ||
+ | 1 = use C code | ||
+ | 2 = use SSE2 code | ||
+ | 3 = use AVX2 code | ||
+ | |||
+ | debug [default: false] | ||
+ | ---------------------- | ||
+ | Show the debug view at fullscreen resolution | ||
+ | |||
+ | screenW / screenH [default: -1 / -1] | ||
+ | ------------------------------------ | ||
+ | Specific screen resolution for debug view | ||
+ | |||
+ | scale [default: true] | ||
+ | --------------------- | ||
+ | Auto-scale the size of parameters in debug viewn | ||
+ | </pre> | ||
+ | <br> | ||
+ | ===SmoothLevels - General Settings=== | ||
+ | <pre> | ||
+ | levels parameters [default: 16, 1.0, 235, 16, 235] | ||
+ | -------------------------------------------------- | ||
+ | input_low [0-255] | ||
+ | gamma [> 0.0] | ||
+ | input_high [0-255] | ||
+ | output_low [0-255] | ||
+ | output_high [0-255] | ||
+ | |||
+ | chroma [default: 100] | ||
+ | --------------------- | ||
+ | Strength for chroma (conversion based on levels parameters) | ||
+ | 0 = no chroma processing | ||
+ | xx = weak | ||
+ | 100 = normal chroma processing | ||
+ | xx = strong | ||
+ | 200 = maximum chroma processing | ||
+ | |||
+ | limiter [default: 0] | ||
+ | -------------------- | ||
+ | Clamp the output values | ||
+ | 0 = no limiter | ||
+ | 1 = clamp to output_low/output_high | ||
+ | 2 = clamp to 16-235 for luma & 16-240 for chroma | ||
+ | |||
+ | TVrange [default: true] | ||
+ | ----------------------- | ||
+ | Range of the clip (affects only limiting, see Lmode) | ||
+ | |||
+ | preset [default: "default"] | ||
+ | --------------------------- | ||
+ | "fullrange" = use "0, 1.0, 255, 0, 255" as default & set "TVrange = false" | ||
+ | "pc2tv" = PC -> TV conversion | ||
+ | "tv2pc" = TV -> PC conversion | ||
+ | </pre> | ||
+ | <br> | ||
+ | ===SmoothLevels - Limiting Settings=== | ||
+ | <pre> | ||
+ | Lmode [default: 0] | ||
+ | ------------------ | ||
+ | Mode to reduce conversion on special areas for better looking result | ||
+ | 0 = no limiting | ||
+ | 1 = limit conversion on dark areas (apply conversion @0% at luma=0 & @100% at luma=255) | ||
+ | 2 = limit conversion on bright areas (apply conversion @100% at luma=0 & @0% at luma=255) | ||
+ | 3 = limit conversion on dark & bright areas (apply conversion @0% at luma=0 & @100% at luma=Ecenter & @0% at luma=255) | ||
+ | (If TVrange=true, 16 & 235 are used instead of 0 & 255) | ||
+ | |||
+ | darkSTR [default: 100] | ||
+ | ---------------------- | ||
+ | Strength for limiting: the higher, the more conversion are reduced on dark areas (for Lmode=1&3) | ||
+ | 0 = OFF | ||
+ | 10 = weak limiting | ||
+ | 200 = strong limiting | ||
+ | |||
+ | brightSTR [default: 100] | ||
+ | ------------------------ | ||
+ | Strength for limiting: the higher, the more conversion are reduced on bright areas (for Lmode=2) | ||
+ | 0 = OFF | ||
+ | 10 = weak limiting | ||
+ | 200 = strong limiting | ||
+ | |||
+ | Ecurve [default: 0] | ||
+ | ------------------- | ||
+ | Type of curve used for limiting | ||
+ | 0 = sine curve | ||
+ | 1 = linear curve | ||
+ | |||
+ | Ecenter [default: 128] | ||
+ | ---------------------- | ||
+ | Center of expression for Lmode=3 (0~255) | ||
+ | |||
+ | protect [default: -1] | ||
+ | --------------------- | ||
+ | -1 = protecting off | ||
+ | >=0 = black zone protection | ||
+ | ---> don't apply conversion on pixels egal or below this value | ||
+ | (ex: with 16, the black areas like borders | ||
+ | and generic are untouched so they don't look washed out) | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | ===SmoothTweak - General Settings=== | ||
+ | <pre> | ||
+ | brigthness [default: 0] | ||
+ | ----------------------- | ||
+ | -255...0 = decrease the brigthness | ||
+ | 0...+255 = increase the brigthness | ||
+ | |||
+ | contrast [default: 1.0] | ||
+ | ----------------------- | ||
+ | 0.0...1.0 = decrease the contrast | ||
+ | 1.0...10.0 = increase the contrast | ||
+ | |||
+ | saturation [default: 1.0] | ||
+ | ------------------------- | ||
+ | 0.0...1.0 = decrease the saturation | ||
+ | 1.0...10.0 = increase the saturation | ||
+ | |||
+ | hue1 [default: 0] | ||
+ | ----------------- | ||
+ | -255...0 = shift the hue towards yellow | ||
+ | 0...+255 = shift the hue towards blue | ||
+ | |||
+ | hue2 [default: 0] | ||
+ | ----------------- | ||
+ | -255...0 = shift the hue towards green | ||
+ | 0...+255 = shift the hue towards red | ||
+ | |||
+ | limiter [default: false] | ||
+ | ------------------------ | ||
+ | Clamp the output to 16-235 for luma & 16-240 for chroma | ||
+ | false = OFF | ||
+ | true = ON | ||
+ | |||
+ | TVrange [default: true] | ||
+ | ----------------------- | ||
+ | Range of the clip (affects only contrast adjustment) | ||
+ | </pre> | ||
+ | <br> | ||
+ | ===SmoothTweak - Limiting Settings=== | ||
+ | <pre> | ||
+ | Lmode [default: 0] | ||
+ | ------------------ | ||
+ | Mode to reduce conversion on special areas for better looking result (vibrance effect) | ||
+ | 0 = no limiting | ||
+ | 1 = limit conversion on dark areas (for luma) and on low saturated areas (for chroma) | ||
+ | 2 = limit conversion on bright areas (for luma) and on high saturated areas (for chroma) | ||
+ | |||
+ | limitSTR [default: 100] | ||
+ | ----------------------- | ||
+ | Strength for limiting: the higher, the more conversion are reduced on specified areas | ||
+ | 0 = OFF | ||
+ | 10 = weak limiting | ||
+ | 200 = strong limiting | ||
+ | |||
+ | Ecurve [default: 0] | ||
+ | ------------------- | ||
+ | Type of curve used for limiting | ||
+ | 0 = sine curve | ||
+ | 1 = linear curve | ||
+ | </pre> | ||
+ | <br> | ||
+ | ===SmoothCurve Settings=== | ||
+ | <pre> | ||
+ | Ycurve [default: "0-0;255-255"] | ||
+ | ------------------------------- | ||
+ | Curve for the Y plane (luma) | ||
+ | Syntax: "a-b;c-d;e-f;..." a, c & e are source values and b, d & f are destination values | ||
+ | ---> Examples: "0-0;255-255" = do nothing | ||
+ | "0-255;255-0" = invert the clip | ||
+ | "0-16;255-235" = PC to TV conversion | ||
+ | "0-0;16-0;235-255;255-255" = TV to PC conversion | ||
+ | |||
+ | Ucurve [default: "0-0;255-255"] | ||
+ | ------------------------------- | ||
+ | Curve for the U plane (chroma) | ||
+ | |||
+ | Vcurve [default: "0-0;255-255"] | ||
+ | ------------------------------- | ||
+ | Curve for the V plane (chroma) | ||
+ | |||
+ | mode [default: 100] | ||
+ | ------------------- | ||
+ | Interpolation mode between control points | ||
+ | 0 = linear | ||
+ | xx = intermediary | ||
+ | 100 = cubic | ||
+ | |||
+ | limiter [default: false] | ||
+ | ------------------------ | ||
+ | Clamp the output to 16-235 for luma & 16-240 for chroma | ||
+ | false = OFF | ||
+ | true = ON | ||
+ | |||
+ | TVrange [default: 0] | ||
+ | -------------------- | ||
+ | Convert the curves to TVrange(16-235/16-240) before applying conversion | ||
+ | 0 = OFF | ||
+ | 1 = ON, clip values outside TVrange | ||
+ | 2 = ON, process values outside TVrange | ||
+ | </pre> | ||
+ | <br> | ||
+ | ===SmoothCustom Settings=== | ||
+ | <pre> | ||
+ | Yexpr [default: "Y"] | ||
+ | -------------------- | ||
+ | Expression for the Y plane (luma) | ||
+ | |||
+ | ---> OPERATORS: | ||
+ | ---------- | ||
+ | Arithmetic : ^ * / % + - | ||
+ | Comparison : ! > < >= <= == != && || | ||
+ | Ternary : ? : | ||
+ | Constant : pi | ||
+ | |||
+ | ---> FUNCTIONS: | ||
+ | ---------- | ||
+ | sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, exp, log, ln, sqrt, abs, round, floor, ceil | ||
+ | |||
+ | ---> Examples: "Y" = do nothing | ||
+ | "255-Y" = invert the clip | ||
+ | "Y+32" = adjust brightness | ||
+ | "Y*2" = adjust contrast | ||
+ | |||
+ | Uexpr [default: "U"] | ||
+ | -------------------- | ||
+ | Expression for the U plane (chroma) | ||
+ | |||
+ | ---> Example: "abs(U-128)+128" | ||
+ | |||
+ | Vexpr [default: "V"] | ||
+ | -------------------- | ||
+ | Expression for the V plane (chroma) | ||
+ | |||
+ | ---> Example: "round(V/16)*16" | ||
+ | |||
+ | limiter [default: false] | ||
+ | ------------------------ | ||
+ | Clamp the output to 16-235 for luma & 16-240 for chroma | ||
+ | false = OFF | ||
+ | true = ON | ||
+ | |||
+ | TVrange [default: 0] | ||
+ | -------------------- | ||
+ | Convert the expressions to TVrange(16-235/16-240) before applying conversion | ||
+ | 0 = OFF | ||
+ | 1 = ON, clip values outside TVrange | ||
+ | 2 = ON, process values outside TVrange | ||
+ | </pre> | ||
+ | <br> | ||
+ | ===SmoothTools Settings=== | ||
+ | <pre> | ||
+ | SmoothTools allows to use all the previous filters in one single pass. | ||
+ | The benefits are significant speedup, no rounding errors between each filters (internal 32-bits), | ||
+ | one pass smoothing/dithering (much better quality) and preset support (one file by settings). | ||
+ | |||
+ | |||
+ | filename [default: "default.smt"] | ||
+ | --------------------------------- | ||
+ | File used for processing | ||
+ | |||
+ | ---> SYNTAX: | ||
+ | ------- | ||
+ | The file syntax is the same as avisynth but all parameters must be named. | ||
+ | Common settings between filters (smooth, dither, useMT, useOPT, ...) should not be used. | ||
+ | There is no limit to the number of filters in one file (but only one filter by line). | ||
+ | 8-bits and 16-bits filters can not be mixed. | ||
+ | |||
+ | ---> EXAMPLES: | ||
+ | --------- | ||
+ | SmoothLevels(gamma=1.4,Lmode=1) | ||
+ | SmoothCurve(Ycurve="0-255;255-0") | ||
+ | OR | ||
+ | SmoothTweak16(saturation=1.6,Lmode=2) | ||
+ | SmoothCustom16(Yexpr="65535-Y") | ||
+ | </pre> | ||
+ | <br> | ||
+ | ===16-Bits Settings=== | ||
+ | <pre> | ||
+ | Some parameters must be mapped to the [0-65535] range before use: | ||
+ | |||
+ | - SmoothLevels: input_low, input_high, output_low, output_high, Ecenter, protect | ||
+ | - SmoothTweak: brightness, hue1, hue2 | ||
+ | - SmoothCurve: Ycurve, Ucurve, Vcurve | ||
+ | - SmoothCustom: Yexpr, Uexpr, Vexpr | ||
+ | - SmoothTools: * | ||
+ | |||
+ | For example: SmoothCurve("0-255;128-128;255-0") --> SmoothCurve16("0-65535;32768-32768;65535-0") | ||
+ | </pre> | ||
+ | <br> | ||
+ | ==MultiThreading== | ||
+ | SmoothAdjust is internally multithreaded with official Avisynth version. If AviSynthPlus or AviSynthMT is detected, internal multithreading is automatically disabled even if external multithreading isn't used (this can be reactivated in parameters). | ||
+ | |||
+ | SmoothAdjust is designed to work with external multithreading, so fastest MT mode can be used. With AviSynthPlus, this plugin is a [[MT_NICE_FILTER]] (automatic register, no need to call SetFilterMtMode). With AviSynthMT, SetMtMode(1) must be called before SmoothAdjust. | ||
+ | <br> | ||
+ | <br> | ||
+ | == Examples == | ||
+ | [[TODO]] | ||
+ | <br> | ||
+ | <br> | ||
+ | == Changelog == | ||
+ | <pre> | ||
+ | - v3.20: updated for Avs v2.6.0 final | ||
+ | fixed AVX2 crash with Win7 without SP1 | ||
+ | |||
+ | - v3.00: dropped Avs v2.5.x support | ||
+ | added AVX2 code (10% faster) | ||
+ | modified plugin to be thread-safe (MT_NICE_FILTER) | ||
+ | |||
+ | - v2.95: fixed minor things | ||
+ | tweaked multi-threading code | ||
+ | |||
+ | - v2.90: fixed possible freeze in MT code | ||
+ | added explicit error messages | ||
+ | |||
+ | - v2.85: fixed bugs inside multi-threading code | ||
+ | removed user32 dependency | ||
+ | added AVX2 detection (for future opt) | ||
+ | |||
+ | - v2.80: used new C++11 features | ||
+ | rewritten multi-threading (native) | ||
+ | speed optimization (40% faster) | ||
+ | exception-safe code | ||
+ | added a high quality interpolation mode | ||
+ | changed some parameter names | ||
+ | fixed bugs in SmoothTools parser | ||
+ | |||
+ | - v2.62: fixed minor things & bugs | ||
+ | dropped ICL builds support | ||
+ | |||
+ | - v2.60: used new interface for v2.6.x builds | ||
+ | |||
+ | - v2.55: added small optimizations | ||
+ | |||
+ | - v2.51: fixed crash in SmoothCurve | ||
+ | |||
+ | - v2.50: added SmoothTools | ||
+ | improved SmoothTweak | ||
+ | improved dithering | ||
+ | tweaked memory usage | ||
+ | tweaked multithreading | ||
+ | cleaned various stuff | ||
+ | |||
+ | - v2.00: added Avisynth 2.6.x support | ||
+ | added Y8, YV411, YV16, YV24 support | ||
+ | added 16bits support with stacked MSB/LSB | ||
+ | added SmoothCustom filter | ||
+ | added TVrange parameter | ||
+ | added AVX optimization | ||
+ | |||
+ | improved smoothing algorithm | ||
+ | improved debug view | ||
+ | improved startup delay | ||
+ | improved speed with smoothing OFF | ||
+ | |||
+ | added decimals support in SmoothCurve | ||
+ | fixed interp scaling in SmoothCurve | ||
+ | changed defaults in SmoothLevels | ||
+ | fixed gamma clamping bug in SmoothLevels | ||
+ | |||
+ | fixed crash with mod4 clip | ||
+ | fixed freeze in debug view | ||
+ | deleted Smode parameter | ||
+ | switched from ICL11 to ICL12 | ||
+ | cleaned a lot the code | ||
+ | updated the documentation | ||
+ | |||
+ | - v1.74: updated preset="tv2pc" & preset="pc2tv" | ||
+ | fixed a bug in smoothing algorithm | ||
+ | |||
+ | - v1.70: added curve in debug mode for SmoothLevels | ||
+ | |||
+ | - v1.68: improved multithreading | ||
+ | |||
+ | - v1.64: fixed cache problem with UV planes | ||
+ | |||
+ | - v1.62: fixed crash with misaligned clip | ||
+ | added MOD2 support | ||
+ | |||
+ | - v1.60: improved startup time | ||
+ | fixed MOD4 error message | ||
+ | tweaked various things | ||
+ | added ICC11 build | ||
+ | |||
+ | - v1.56: added SSSE3 code | ||
+ | changed CPU detection routine | ||
+ | |||
+ | - v1.52: added SSE2 code (Smode=1 is 2x faster & Smode=2 is 3x faster) | ||
+ | added useopt parameter | ||
+ | |||
+ | - v1.46: tweaked smoothing code | ||
+ | removed useless Smode=1 & Smode=2 | ||
+ | prepared support for YV16 & YV24 in Avisynth 2.6.x | ||
+ | switched from VS2008 to VS2010 | ||
+ | |||
+ | - v1.44: added screenW & screenH for debugview | ||
+ | fixed a bug in font drawing | ||
+ | cleaned code | ||
+ | |||
+ | - v1.40: added debugview (see show=true) | ||
+ | |||
+ | - v1.30: fixed a bug in spline interpolation | ||
+ | cleaned various stuff | ||
+ | |||
+ | - v1.26: Smode=3 is now the default (instead of Smode=1) | ||
+ | tweaked smoothing sensitivity | ||
+ | updated documentation about Smode | ||
+ | |||
+ | - v1.24: added new interpolation mode for SmoothCurve (see interp) | ||
+ | |||
+ | - v1.18: tweaked Smode 3 & 4 | ||
+ | updated avisynth header | ||
+ | |||
+ | - v1.16: replaced Smode 3 & 4 with stronger smoothing function | ||
+ | changed minors things | ||
+ | |||
+ | - v1.02: added x64 build | ||
+ | fixed a bug in SmoothLevels | ||
+ | |||
+ | - v1.00: first public release | ||
+ | </pre> | ||
+ | <br> | ||
+ | == Archived Downloads == | ||
+ | {| class="wikitable" border="1"; width="600px" | ||
+ | |- | ||
+ | !!width="100px"| Version | ||
+ | !!width="150px"| Download | ||
+ | !!width="150px"| Mirror | ||
+ | |- | ||
+ | !v3.20 | ||
+ | |[http://latoninf.free.fr/d9/SA/SmoothAdjust-v3.20.7z SmoothAdjust-v3.20.7z] | ||
+ | |[https://web.archive.org/web/20170627062408/http://latoninf.free.fr/d9/SA/SmoothAdjust-v3.20.7z SmoothAdjust-v3.20.7z] | ||
+ | |} | ||
+ | <br> | ||
+ | |||
+ | ==External Links == | ||
+ | <br> | ||
+ | <br> | ||
+ | ----------------------------------------------- | ||
+ | '''Back to [[External_filters#Levels_and_Chroma|External Filters]] ←''' |
Latest revision as of 23:08, 5 February 2022
Abstract | |
---|---|
Author | LaTo |
Version | v3.20 |
Download | SmoothAdjust-v3.20.7z |
Category | Adjustment Filters |
License | Free for non-commercial use only |
Discussion | Doom9 Thread |
Contents[hide] |
[edit] Description
SmoothAdjust is a set of 5 filters to make YUV adjustements:
-
SmoothLevels
allows to change levels & gamma with optional limiting -
SmoothTweak
allows to change brightness, contrast, saturation & hue -
SmoothCurve
allows to change a plane according to a fixed curve -
SmoothCustom
allows to change a plane according to a custom expression -
SmoothTools
allows to use all the previous filters in one single pass
These 5 filters have a smoothing & dithering algorithm to avoid banding issue. Calculations are made in 32bits float to avoid rounding errors and artifacts. SmoothAdjust is multithreaded (up to 16 threads) and SSE2/AVX2 optimized.
For automatic adjustments, see the "AutoAdjust" standalone plugin.
[edit] Requirements
- [x86]: AviSynth+ or AviSynth 2.6
- [x64]: AviSynth+
- Supported color formats: Y8, YV12, YV16, YV24, YV411
- Stacked 16-bit processing is also supported.
[edit] Syntax and Parameters
[edit] Usage
- SmoothLevels( input_low, gamma, input_high, output_low, output_high, chroma, limiter, TVrange, preset, Lmode, darkSTR, brightSTR, Ecurve, Ecenter, protect, interp, dither, HQ, useMT, useOPT, debug, screenW, screenH, scale ) - SmoothTweak( brightness, contrast, saturation, hue1, hue2, limiter, TVrange, Lmode, limitSTR, Ecenter, interp, dither, HQ, useMT, useOPT, debug, screenW, screenH, scale ) - SmoothCurve( Ycurve, Ucurve, Vcurve, mode, limiter, TVrange, interp, dither, HQ, useMT, useOPT, debug, screenW, screenH, scale ) - SmoothCustom( Yexpr, Uexpr, Vexpr, limiter, TVrange, interp, dither, HQ, useMT, useOPT, debug, screenW, screenH, scale ) - SmoothTools( filename, interp, dither, HQ, useMT, useOPT, debug, screenW, screenH, scale ) - SmoothLevels16(...), SmoothTweak16(...), SmoothCurve16(...), SmoothCustom16(...), SmoothTools16(...) for 16 bits
[edit] Common Settings
interp [default: 100] --------------------- Strength of the interpolation 0 = disable (faster +++) 1 = weak xx = intermediary 200 = strong dither [default: 75] -------------------- Type of the dithering -1 = dithering OFF 0 = pattern xx = intermediary 100 = noise HQ [default: false] ------------------- Enable high quality interpolation (slower) useMT [default: 0] ------------------ Use multithreading (number of internal threads) 0 = automatic choice (=cores in Avs2.6 and =1 in Avs+/AvsMT) xx = xx threads (max = 16 threads) useOPT [default: 0] ------------------- Use ASM optimization when available 0 = automatic choice 1 = use C code 2 = use SSE2 code 3 = use AVX2 code debug [default: false] ---------------------- Show the debug view at fullscreen resolution screenW / screenH [default: -1 / -1] ------------------------------------ Specific screen resolution for debug view scale [default: true] --------------------- Auto-scale the size of parameters in debug viewn
[edit] SmoothLevels - General Settings
levels parameters [default: 16, 1.0, 235, 16, 235] -------------------------------------------------- input_low [0-255] gamma [> 0.0] input_high [0-255] output_low [0-255] output_high [0-255] chroma [default: 100] --------------------- Strength for chroma (conversion based on levels parameters) 0 = no chroma processing xx = weak 100 = normal chroma processing xx = strong 200 = maximum chroma processing limiter [default: 0] -------------------- Clamp the output values 0 = no limiter 1 = clamp to output_low/output_high 2 = clamp to 16-235 for luma & 16-240 for chroma TVrange [default: true] ----------------------- Range of the clip (affects only limiting, see Lmode) preset [default: "default"] --------------------------- "fullrange" = use "0, 1.0, 255, 0, 255" as default & set "TVrange = false" "pc2tv" = PC -> TV conversion "tv2pc" = TV -> PC conversion
[edit] SmoothLevels - Limiting Settings
Lmode [default: 0] ------------------ Mode to reduce conversion on special areas for better looking result 0 = no limiting 1 = limit conversion on dark areas (apply conversion @0% at luma=0 & @100% at luma=255) 2 = limit conversion on bright areas (apply conversion @100% at luma=0 & @0% at luma=255) 3 = limit conversion on dark & bright areas (apply conversion @0% at luma=0 & @100% at luma=Ecenter & @0% at luma=255) (If TVrange=true, 16 & 235 are used instead of 0 & 255) darkSTR [default: 100] ---------------------- Strength for limiting: the higher, the more conversion are reduced on dark areas (for Lmode=1&3) 0 = OFF 10 = weak limiting 200 = strong limiting brightSTR [default: 100] ------------------------ Strength for limiting: the higher, the more conversion are reduced on bright areas (for Lmode=2) 0 = OFF 10 = weak limiting 200 = strong limiting Ecurve [default: 0] ------------------- Type of curve used for limiting 0 = sine curve 1 = linear curve Ecenter [default: 128] ---------------------- Center of expression for Lmode=3 (0~255) protect [default: -1] --------------------- -1 = protecting off >=0 = black zone protection ---> don't apply conversion on pixels egal or below this value (ex: with 16, the black areas like borders and generic are untouched so they don't look washed out)
[edit] SmoothTweak - General Settings
brigthness [default: 0] ----------------------- -255...0 = decrease the brigthness 0...+255 = increase the brigthness contrast [default: 1.0] ----------------------- 0.0...1.0 = decrease the contrast 1.0...10.0 = increase the contrast saturation [default: 1.0] ------------------------- 0.0...1.0 = decrease the saturation 1.0...10.0 = increase the saturation hue1 [default: 0] ----------------- -255...0 = shift the hue towards yellow 0...+255 = shift the hue towards blue hue2 [default: 0] ----------------- -255...0 = shift the hue towards green 0...+255 = shift the hue towards red limiter [default: false] ------------------------ Clamp the output to 16-235 for luma & 16-240 for chroma false = OFF true = ON TVrange [default: true] ----------------------- Range of the clip (affects only contrast adjustment)
[edit] SmoothTweak - Limiting Settings
Lmode [default: 0] ------------------ Mode to reduce conversion on special areas for better looking result (vibrance effect) 0 = no limiting 1 = limit conversion on dark areas (for luma) and on low saturated areas (for chroma) 2 = limit conversion on bright areas (for luma) and on high saturated areas (for chroma) limitSTR [default: 100] ----------------------- Strength for limiting: the higher, the more conversion are reduced on specified areas 0 = OFF 10 = weak limiting 200 = strong limiting Ecurve [default: 0] ------------------- Type of curve used for limiting 0 = sine curve 1 = linear curve
[edit] SmoothCurve Settings
Ycurve [default: "0-0;255-255"] ------------------------------- Curve for the Y plane (luma) Syntax: "a-b;c-d;e-f;..." a, c & e are source values and b, d & f are destination values ---> Examples: "0-0;255-255" = do nothing "0-255;255-0" = invert the clip "0-16;255-235" = PC to TV conversion "0-0;16-0;235-255;255-255" = TV to PC conversion Ucurve [default: "0-0;255-255"] ------------------------------- Curve for the U plane (chroma) Vcurve [default: "0-0;255-255"] ------------------------------- Curve for the V plane (chroma) mode [default: 100] ------------------- Interpolation mode between control points 0 = linear xx = intermediary 100 = cubic limiter [default: false] ------------------------ Clamp the output to 16-235 for luma & 16-240 for chroma false = OFF true = ON TVrange [default: 0] -------------------- Convert the curves to TVrange(16-235/16-240) before applying conversion 0 = OFF 1 = ON, clip values outside TVrange 2 = ON, process values outside TVrange
[edit] SmoothCustom Settings
Yexpr [default: "Y"] -------------------- Expression for the Y plane (luma) ---> OPERATORS: ---------- Arithmetic : ^ * / % + - Comparison : ! > < >= <= == != && || Ternary : ? : Constant : pi ---> FUNCTIONS: ---------- sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, exp, log, ln, sqrt, abs, round, floor, ceil ---> Examples: "Y" = do nothing "255-Y" = invert the clip "Y+32" = adjust brightness "Y*2" = adjust contrast Uexpr [default: "U"] -------------------- Expression for the U plane (chroma) ---> Example: "abs(U-128)+128" Vexpr [default: "V"] -------------------- Expression for the V plane (chroma) ---> Example: "round(V/16)*16" limiter [default: false] ------------------------ Clamp the output to 16-235 for luma & 16-240 for chroma false = OFF true = ON TVrange [default: 0] -------------------- Convert the expressions to TVrange(16-235/16-240) before applying conversion 0 = OFF 1 = ON, clip values outside TVrange 2 = ON, process values outside TVrange
[edit] SmoothTools Settings
SmoothTools allows to use all the previous filters in one single pass. The benefits are significant speedup, no rounding errors between each filters (internal 32-bits), one pass smoothing/dithering (much better quality) and preset support (one file by settings). filename [default: "default.smt"] --------------------------------- File used for processing ---> SYNTAX: ------- The file syntax is the same as avisynth but all parameters must be named. Common settings between filters (smooth, dither, useMT, useOPT, ...) should not be used. There is no limit to the number of filters in one file (but only one filter by line). 8-bits and 16-bits filters can not be mixed. ---> EXAMPLES: --------- SmoothLevels(gamma=1.4,Lmode=1) SmoothCurve(Ycurve="0-255;255-0") OR SmoothTweak16(saturation=1.6,Lmode=2) SmoothCustom16(Yexpr="65535-Y")
[edit] 16-Bits Settings
Some parameters must be mapped to the [0-65535] range before use: - SmoothLevels: input_low, input_high, output_low, output_high, Ecenter, protect - SmoothTweak: brightness, hue1, hue2 - SmoothCurve: Ycurve, Ucurve, Vcurve - SmoothCustom: Yexpr, Uexpr, Vexpr - SmoothTools: * For example: SmoothCurve("0-255;128-128;255-0") --> SmoothCurve16("0-65535;32768-32768;65535-0")
[edit] MultiThreading
SmoothAdjust is internally multithreaded with official Avisynth version. If AviSynthPlus or AviSynthMT is detected, internal multithreading is automatically disabled even if external multithreading isn't used (this can be reactivated in parameters).
SmoothAdjust is designed to work with external multithreading, so fastest MT mode can be used. With AviSynthPlus, this plugin is a MT_NICE_FILTER (automatic register, no need to call SetFilterMtMode). With AviSynthMT, SetMtMode(1) must be called before SmoothAdjust.
[edit] Examples
[edit] Changelog
- v3.20: updated for Avs v2.6.0 final fixed AVX2 crash with Win7 without SP1 - v3.00: dropped Avs v2.5.x support added AVX2 code (10% faster) modified plugin to be thread-safe (MT_NICE_FILTER) - v2.95: fixed minor things tweaked multi-threading code - v2.90: fixed possible freeze in MT code added explicit error messages - v2.85: fixed bugs inside multi-threading code removed user32 dependency added AVX2 detection (for future opt) - v2.80: used new C++11 features rewritten multi-threading (native) speed optimization (40% faster) exception-safe code added a high quality interpolation mode changed some parameter names fixed bugs in SmoothTools parser - v2.62: fixed minor things & bugs dropped ICL builds support - v2.60: used new interface for v2.6.x builds - v2.55: added small optimizations - v2.51: fixed crash in SmoothCurve - v2.50: added SmoothTools improved SmoothTweak improved dithering tweaked memory usage tweaked multithreading cleaned various stuff - v2.00: added Avisynth 2.6.x support added Y8, YV411, YV16, YV24 support added 16bits support with stacked MSB/LSB added SmoothCustom filter added TVrange parameter added AVX optimization improved smoothing algorithm improved debug view improved startup delay improved speed with smoothing OFF added decimals support in SmoothCurve fixed interp scaling in SmoothCurve changed defaults in SmoothLevels fixed gamma clamping bug in SmoothLevels fixed crash with mod4 clip fixed freeze in debug view deleted Smode parameter switched from ICL11 to ICL12 cleaned a lot the code updated the documentation - v1.74: updated preset="tv2pc" & preset="pc2tv" fixed a bug in smoothing algorithm - v1.70: added curve in debug mode for SmoothLevels - v1.68: improved multithreading - v1.64: fixed cache problem with UV planes - v1.62: fixed crash with misaligned clip added MOD2 support - v1.60: improved startup time fixed MOD4 error message tweaked various things added ICC11 build - v1.56: added SSSE3 code changed CPU detection routine - v1.52: added SSE2 code (Smode=1 is 2x faster & Smode=2 is 3x faster) added useopt parameter - v1.46: tweaked smoothing code removed useless Smode=1 & Smode=2 prepared support for YV16 & YV24 in Avisynth 2.6.x switched from VS2008 to VS2010 - v1.44: added screenW & screenH for debugview fixed a bug in font drawing cleaned code - v1.40: added debugview (see show=true) - v1.30: fixed a bug in spline interpolation cleaned various stuff - v1.26: Smode=3 is now the default (instead of Smode=1) tweaked smoothing sensitivity updated documentation about Smode - v1.24: added new interpolation mode for SmoothCurve (see interp) - v1.18: tweaked Smode 3 & 4 updated avisynth header - v1.16: replaced Smode 3 & 4 with stronger smoothing function changed minors things - v1.02: added x64 build fixed a bug in SmoothLevels - v1.00: first public release
[edit] Archived Downloads
Version | Download | Mirror |
---|---|---|
v3.20 | SmoothAdjust-v3.20.7z | SmoothAdjust-v3.20.7z |
[edit] External Links
Back to External Filters ←