r47.2 fixed broken merge intrinsics r47.1: fixed linux and non-x86 builds r47: fixed a crash in vdecimate when both dryrun and clip2 is set (no1d) updated zimg to 2.9.2 to fix a crash that would happen on certain invalid input combinations removed dependency on nasm improved message handler api and core info api various installer improvements including a warning if the vs2019 runtimes aren't installed r46: updated windows projects to use vs2019, inno setup 6 and zimg 2.9.1 the python module is now installed as a proper python package using pip the registry entries in windows have now been changed for the 32 bit version in order to better handle the windows installer now supports installs without administrator privileges and has been split into a 32 and 64 bit version the windows installer no longer puts a copy of vsscript.dll in the system directory and no longer writes the legacy registry entries, deprecated since r31 the windows installer will no longer offer to install the visual studio 2013 runtime since it hasn't been required by vapoursynth for a very long time the portable install now includes all the sdk files added a fallback to how the appdata path is retrieved which works even if %USERPROFILE% isn't set the default number of threads used is now based on the process affinity on windows, linux and bsd added an option to vspipe to make it not modify the current working directory added a better equality check for the Format class in python fixed doubleweave sometimes using the opposite field order (dubhater) fixed broken output when stride wasn't equal to width in the python output function (stuxcrystal) relaxed mask clip requirements in maskedmerge (dubhater) fixed overflow with int16 in maskedmerge (dubhater) fixed swapped fields in doubleweave (dubhater) fixed selectevery breaking and leaking when there are no frames to return r45: updated to zimg v2.8 updated visual studio runtimes in installer avfs now uses utf8 filename support when available in avs+ avfs now prints the used mount point windows binaries now use python 3.7 removed accept_lowecase setting from the python bindings fixed frame duration calculation in clipinfo (dubhater) fixed bug that prevented adding vertical margins in subtext (dubhater) documentation updates r44: fixed crop with compatbgr32 format where top and bottom crop would be switched fixed crash in scdetect with one frame clips, now it simply returns an error since the operation is pointless fixed potential multithreading issues in vsscript (stuxcrystal) the resizer will now properly apply a shift even if no actual resizing/format conversion is being done updated to zimg v2.7.4 to fix crash that only happens on core2 quad cpus updated visual studio runtimes in installer updated pismo runtime added experimental large page support and changed cache logic (sekrit-twc) minor documentation updates r43: updated to zimg v2.7.3 all vsscript functions are now internally guarded by a mutex to make them threadsafe changed boxblur defaults to hradius and vradius=1, this makes more sense than having it throw an error with default arguments added xyz as an alias for st428 in resize add vsscript_getvsapi2 function which takes the required vapoursynth api version into account a tuple is now only returned from get_output in python when alpha actually exist, this undoes the python syntax change in r41 fixed a possible hang on error in vspipe, regression introduced with the alpha support in r41 r42.1 fixed a crash in the optimized transpose for certain resolutions, regression introduced in r42 r42: updated to zimg v2.7.1 vapoursynth.dll is now simply symlinked into the python directory, makes it less confusing to replace the dll since there's only one real copy fixed regression introduced in r41 that would make setting a node using vsscript_setvariable silently fail resize no longer pointlessly copies frames when no processing is needed (that dude) optimized transpose filter even more (that dude) r41: updated to zimg v2.7 fixed boxblur needlessly touching planes that aren't processed fixed a bug that would make avisource crash when opening an avisynth script with errors in it added an altsearchpath argument to loadplugin, setting it to true alters the search path for dll dependencies to be equivalent to the normal loadlibrary path, experimental and may be removed at any time added convenient alpha output to vspipe and vsscript, set_output() in python now takes a second optional alpha clip which will be used for this fixed avisource leaking one frame reference on destruction updated plugin list to be more consistent with links to source/binaries and doom9 discussion thread fixed lut triggering a fatal error when the bits argument is used fixed regression that prevented alpha output from working in avisource removed dependency on the now deprecated codecvt header fixed memory leak where modifyframe wouldn't release the function reference when done fixed a rare memory leak that could happen if the core was freed before the last frame fixed a memory leak that would happen if a python videoframe object was instantiated added overwrite argument to imwri to control if already existing files are overwritten or not imwri will no longer write alpha to images unless an alpha clip is specified improved imwri's input and output format guessing, now integer and float image formats will most likely be returned in native precision imwri now requires hdri support since it's enabled by default in version 7, as a result of there only being one major configuration the namespace is now always imwri, the new float_output option can force everything to be output as floating point stackvertical now properly rejects compat formats instead of producing unexpected output the default initial cache size now also depends on the number of threads used fixed negative frame request error listing the parent node name instead of the correct name fixed expr clamping of 9-15 bit output, previously it would clamp to 16bit fixed corrupted output in expr when mixing int and float for input and output (pinterf) r40: updated to zimg v2.6.2 fixed blankclip format check to not reject substituted format compat clips improved expr asm slightly made the framebuffer memory pool size a percentage of the total allowed memory usage instead of a fixed size, this should scale better when processing 8k and larger resolutions fixed rgb output sometimes being flipped in avisource added alpha output settings to avisource, the default is no alpha output fixed gamma being infinite if not set in levels, bug introduced in r39 removed the hack needed to support avisynth mvtools, the native mvtools has been superior for several years now and removing the hack makes avisynth filter creation much faster added avisynth+ compatibility only do prefetching in avfs with vs script when linear access is detected, fixes excessive prefetching that could make opening scripts very slow r39: updated to zimg v2.6 updated pismo file mount runtime to build 188 added offline documentation to the installer fixed clamping issues in levels filter renamed the croprel function to crop, croprel will still be kept as an alias for for compatibility with existing scripts fixed missing max value clamping for 9-15 bit input with convolution optimized prewitt and sobel removed the min and max arguments from sobel and prewitt because they interact very oddly with float formats avisynth compatibility can now handle functions with multiple overloads added float support to boxblur removed subtext file size limit fixed missing fps correction in avisource that would produce an error with some files switched to nasm as the assembler visual studio runtime detection is improved in the installer, it should no longer attempt re-installs when a newer version is present minor optimization in vspipe, you can now output blankclip into the void much faster memory will now be 64 byte aligned on systems with avx512 support added swapn and dupn operators to expr reverted the argument handling in levels, arguments no longer take a 3 plane list due it making no sense when combined with the planes argument optimized levels, the integer version is now implemented with a lut and the floating point version is faster when gamma=1.0 improved get_outputs() in python (stuxcrystal) format objects can now be cast to int which will return the format id (stuxcrystal) added method to make it easier to query formats from python (stuxcrystal) made it possible to install the python part as a module (stuxcrystal) r38: updated to zimg v2.5.1 removed the pointless subsampling requirements of transpose updated imwri to use imagemagick 7 added srt support to subtext (jackoneill) added boxblur filter various fixes to averageframes averageframes can now use up to 31 weights increased the number of allowed constants in h and v convolution modes to 25 added new constants to clipinfo fixed several subtext corruption and crash bugs (jackoneill) added y410 and r210 output to avfs and vsvfw added constants for 12 and 14 bit yuv formats fixed a one pixel offset error only happening in vertical convolution with a 3 element vector switched to vs2017 in windows projects r37: updated to zimg v2.5 fixed occasional crashes on startup in avfs when used with avisynth scripts fixed blankclip and addborders sometimes rejecting valid floating point color values (jackoneill) vdecimate no longer stores the metrics for all frames, thus saving a lot of memory for long clips (jackoneill) changed get_read* functions in python so their memory no longer incorrectly is writable (Kamekameha) added rational number fps property to clips in python (Kamekameha) mostly worked around an issue where python would replace the sigint handler fixed bug that could sometimes cause false memory leak warnings when freeing core fixed possible corruption on frames without subtitles in subtext (jackoneill) added a proxy object to avoid referencing the wrong core in scripts (stuxcrystal) r36: updated zimg library packed format output now has alpha set instead of being zeroed added asynchronous getframe support to python (stuxcrystal) fixed several mac compilation issues frame.props can now also behave like a proper python dict (stuxcrystal) added morpho filter to windows installer fixed planestats bug that could sometimes affect non-mod8 calculation added leak warning for functions added __signature__ attribute to python function objects (stuxcrystal) in python function objects now have name, signature and plugin attributes, plugin objects now have a namespace attribute corresponding to the namespace added misc filters to included vapoursynth plugins fixed several edge cases when specifying color values for blankclip and addborders, inf and nan are now always rejected and floating point values can be any finite value vspipe will now properly report floating point formats in y4m instead of incorrectly making them look like integer, for example C420ps and C420ph will be used to mark single and half precision respectively avfs will now reject scripts that don't have an avs or vpy extension to avoid pointless error mounts fixed blankclip handling of color for compat formats added sample type to vspipe info output improved a few installer error messages when python can't be found now uses python 3.6 in windows fixed potential crash when two clips are added together (Kamekameha) r35: fixed avfs frame packing so it matches vfw behavior fixed one frame leak on script reload in avfs fixed 8bit 3x3 convolution where the upper left pixel wouldn't be taken into account correctly on x86 r34: avfs can now output the same high bitdepth formats for avisynth+ as for vapoursynth it's now possible to skip installing the visual studio runtimes in the installer to reduce online dependency of installer (installation may not work until manually installed, obviously) temporalsoften plugin is no longer included in the windows installer, it has been replaced by the misc plugin containing various functions useful for avisynth compatibility the default max memory usage is now 4GB on 64bit systems fixed several unpacking issues in avisource introduced in the previous version added warning if there are any nodes or frames still in use when the core is freed improved avfs prefetch logic for vpy added premultiplied blending mode to maskedmerge added premultiply filter to premultiply a clip with alpha makediff and adddiff no longer pointlessly clamp float to a limited range since there's no good reason to do so fixed memory leak when the core is freed introduced in the previous version fixed memory leak in avfs introduced in the previous version removed rshift and replaced it with a scale argument in sobel and prewitt fixed sobel and prewitt wrongly passing through the input pixel values added support for hdr formats and dci-p3 in zimg optimized planestats added float support to pemverifier fixes active region offset and height for interlaced resizing added support for more different subsampled input formats for vfm (jackoneill) r33: calling getFrame from a getFrameAsync callback no longer deadlocks, but you probably shouldn't have been doing it anyway minmax is now split into two separate properties in planestats added autoadjust to prefetch list the resizers can now have the active image region specified to do things like subpixel shifts and cropping genericfilters is no longer included with the installer and has been deprecated for a long time, if you for some reason miss canny simply use the tcanny plugin instead for a better implementation assvapour was renamed to sub and now supports bitmap subtitles as well (jackoneill) alternative python installations can now be selected when installing on windows, note that there many pitfalls when not using python from python.org the rshift argument of sobel/prewitt is now deprecated because it's pointless, simply scale the min and max args as appropriate optimized minimum, maximum, median, deflate, inflate, convolution (1x3, 3x1 and 3x3) on x86 cpus added float support to minimum, maximum, median, deflate, inflate, convolution, prewitt, sobel, invert, limiter, binarize and levels functions, note that most of the arguments have been changed from int to float the whole project can now be compiled with clang-cl under windows directshowsource from recent avs+ can now be used fixed swapped uv planes with yuv411 output in vsvfw and avfs merged vsfs with the latest version of avfs, avfs now work for both vapoursynth and avisynth scripts and no longer has shell integration avisource can now open all formats vsvfw can output plus b48r fixed corrupted output in vfm when clip2 isn't 8 bit fixed crash due to stack overflow if an extremely long filter graph is freed now installs the vs2015 update 3 runtimes on windows vsvfw will now automatically convert rgb24 to packed bgra for convenience added b64a and P416 output to vsvfw updated to zimg v2.2 branch mixed imwri fixes fixed rare access violation in expr when ternary operator is used (jackoneill) r32: fixed raw rgb sometimes being upside down in avisource fixed cache not being automatically added for filters with nfmakelinear flag set (jackoneill) assvapour now has integrated blending (jackoneill) added the experimental function setfieldbased for convenience, expect it to change in the future the tff argument is now optional and ignored for doubleweave when the _field property is present in a valid combination, _fieldbased will also be properly set now the tff argument is now optional and ignored for separatefields when the _fieldbased property is present added support for interlaced resizing extended avisynth mvtools compatibility hack to work for 64bit version as well fixed regression from r29 that would make compatyuy2 conversions vertically flipped vspipe now outputs planar rgb in gbr plane order to better match what other software expects as input now has a slightly more informative error message when the wrong type is passed as an argument in python vsvfw now prints per frame errors on the corresponding frame splicing two incompatible clips could sometimes give a confusing error message removed planeaverage r31: the nfmakelinear handling now takes the number of used threads into consideration, this makes it work properly with hundreds of threads the imwri namespace will now be imwrif when compiled against a hdri imagemagick, this is to properly distinguish it from the integer version which has distincly different input and output support the installer now also writes the path to vapoursynth.dll and vsscript.dll to the registry to make them easier to locate, vsscript.dll will probably stop being installed in the system dir in r33 changed registry entry structure to make more sense (no more 32/64 suffix, instead writes to HKLM32 or 64 as appropriate), the old entries will be kept for a few versions portable version now includes vsfs and vsvfw to be more complete the resize matrix check will no longer reject several valid combinations more zimg bug fixes, to/from float conversions will no longer sometimes get stuck r30: fixed imwri bug related to detecting the bitdepth and dimensions of an image zimg bug fixes changed behavior of resize, now matrix_in, transfer_in, primaries_in, range_in and chromaloc_in take precendence over frame properties by default, the new prefer_props argument restores old behavior added the possibility to make portable builds on windows added half precision float input/output to expr on cpus that have the f16c extension (ivy bridge or later) added the possibility for plugins to print messages through the standard logging as well, don't use it unless you really have to the build system should now autodetect which optional libraries are available fixed ycocg conversions planeaverage is now deprecated, use planestats instead added planestats, a function that calculates min, max, average and difference of a frame at the same time removed planedifference, deprecated since r28 added avisynth 2.6 and x64 support, note that x64 can only load 2.6 but not 2.5 plugins no longer installs vsvfw.dlls into system dirs added nfMakeLinear, this flag will make the immediately following cache do its best to make requests more linear, set it on source filters where seeking is slow the installer will no longer fail if a newer than expected version of the visual studio runtimes are installed vspipe now displays the correct number of total frames when -s is used r29: fixed bug where vfm wouldn't set _Combed property properly unless micout=true or micmatch=2 used vfm now sets _fieldbased=0 after matching added XLENGTH field to y4m headers so the total number of frames can be automatically passed to encoders imwri will now always output a float image when built against a hdri imagemagick imwri now supports QD32 with and without hdri added . as a special output filename to vspipe, specifying it will simply skip all output writing maskedmerge should now properly resize the mask without truncating it to limited range made zimg the default resizer, swscale is no longer used fixed crash in vdecimate (nodame) now internally prioritizes frames based on original request order, should improve speed and frame time consistency in certain conditions more specific error messages in many filters (nodame) fixed the shown matrix names in clipinfo fixed compilation on non x86 targets, in imwri and vshelper.h without c++11 enabled, all introduced in r28 fixed vsfatal corrupt output (nodame) fixed uninitialized value in frame pool r28: fixed eedi3 image corruption with dh=true (nodame) planedifference is now considered deprecated, it can be replaced with one or two calls to planeaverage which will also yield a sign fpu state check now doesn't mind if precision is set to more than double VFM now uses the _FieldBased flag added float support to imwri, can now input and output float when compiled against a hdri enabled q16 imagemagick added an argument to set the compression type in imwri the installer will now download and install the vs2013 and vs2015 runtimes if needed now uses python 3.5 fixed vdecimate parallel mode pow is now accepted in expr expressions expr now accepts up to 26 inputs (x-z, a-w) expr now has runtime code generation on x86 cpus using jitasm now normalizes the framerate returned from avisynth filters it is now a fatal error to set the videoinfo of a filter to a non-normalized framerate added a few more checks for proper api usage get_core() can now be used in callbacks and other external functions in python now returns an error message saying that windows needs to be updated in certain cases when plugin loading fails fixed loop filter (nodame) lut and lut2 can now output float as well now accepts scripts that start with a BOM as well fixed an image corruption bug with 9-16 bit input to rgvs when the c++ code is used fixed division by zero issues in muldivrational in vshelper.h blankclip can now create 0 (unknown/variable) fps clips added float support to planedifference and planeaverage added half support to addborders relevant compile time options are now in the version string r27: improved clipinfo so it shows more relevant information fixed proptoclip crash on certain errors added a rewritten version of genericfilters to the core (nodame) fixed the not (required two operands instead of one, asm broken) and swap (only required one operand instead of two) operators in the expr filter renamed the x and y arguments in cropabs to left and top to be clearer and match croprel addborders now rejects negative borders properly and passes through clips unchanged when all borders are 0 several bugfixes to the bundled genericfilters added compile time option to have additional guard memory around frames to detect out of bounds writes in filters added setframeprop filter (nodame) the framerate and the frame duration property should now be a normalized number all internal filters now return an error if the returned clip is longer than INT_MAX instead of undefined behavior "unknown" length clips have been deprecated and a fatal error will happen if any plugin returns them, this change is because it was complicated, annoying and accomplished nothing compared to INT_MAX length clips freezeframes now doesn't need to have the ranges specified in ascending order interleave, separatefield and selectevery now properly adjusts the framerate including the durations changed the meaning of _FieldBased to be able to signal progressive/bff/tff material, this is now used by ffms2, eedi3 and separatefields fixed memory leak in assvapour destructor the identifiers used for keys in vsmap can only be alphanumeric and _, anything else will be rejected the expr filter now does constant folding which makes it faster in many cases (nodame) vspipe can now output timecode v2 files (nodame) splice and interleave now properly reject clips with mismatched fps unless mismatch is set fixed possible bad behavior/crash in FrameEval under rare circumstances fixed truncation of last digit of integers in text.FrameProps r26: fixed that frame error messages would sometimes become lost fixed dropped frame handling in avisource which was broken by accident when adapting the code for vapoursynth fixed crash on undecodable frames in avisource installer creation has been streamlined fixed assumefps when using a clip as the fps source (nodame) improved the performance of vsmap operations the c version of the expr filter now clamps 16bit output properly (nobody noticed this bug because everyone used the x86 asm version of the code) expr filter now always uses . as the decimal separator in expressions, previously it would wrongly use the current locale's separator there is now a minor api version as well that will be bumped when features are added expr filter can now run fully in parallel now returns an error if nodes are passed between different cores modifyframe is now properly set to parallelrequests which should speed it up slightly added half precision float support to blankclip improved documentation a lot, every single python and c api function is now documented properly (nodame) now uses tcmalloc instead of the normal malloc implementation to increase performance on windows r25: now requires vista/2008 or later because there are no relevant xp users left now uses loadlibraryex to search the loaded dll path as well for dependencies to make plugin loading saner the windows installer now comes with pdb files for vapoursynth.dll to make plugin debugging easier added an alternative autotools based build system, it will probably become the default in the next release (nodame) the public headers are now mostly C89 compliant added simple compilation instructions for osx/some linux distros to the docs DuplicateFrames and DeleteFrames no longer needs to have the frame number argument sorted fixed handling of indeterminate length clips in DuplicateFrames and DeleteFrames added experimental . syntax, for example core.BlankClip().VFM(order=1) will now work, if multiple functions have the same name they still need to be prefixed with the namespace now uses the proper python exception for missing attributes added getPluginPath function to the api so it's possible for plugins to load resources in relative paths in a reliable way, the returned paths are always absolute and use forward slashes registerFormat now returns null instead of terminating the program on invalid formats, this is so plugin developers won't have to duplicate logic and instead can simply try if a format is valid frame data is now exposed in a more python friendly way, use the get_read_frame and get_write_frame methods to get fast and efficient arrays enabled x86 mmx state checks on all platforms fixed a filter error propagation issue that could lead to crashes fixed a race condition that could lead to too many threads being spawned to do nothing added verticalcleaner and missing repair modes to rgvs (HolyWu) fixed negative single frame indexing of clips in python vspipe now reports the correct number of frames as output when a non-zero start frame is specified fixed ctrl-c handling in clip.output() and some other small adjustments clip.output() now accepts normal python file-like objects automatically generated names for runtime registered yuv formats now make sense r24: fixed rare crashes in 64 bit windows asm in a few filters core.max_cache_size should now be used instead of core.set_max_cache_size() num_threads, add_cache and accept_lowercase can now be set at any time in python and not only during the first call to get_core() fixed reference leak in FrameEval more functions in the vsscript api now return success or failure improved handling of the vsfunc type in python, it should now have all the functionality originally intended removed r21 argument compatibility since all scripts should have been changed by now include file paths in the windows sdk have been changed to better match linux and osx the core will no longer be completely freed until all filter instances belonging to it have been released, this prevents crashes in some circumstances vsvfw now properly returns an error message when no output has been set instead of silently failing fixed a reference leak in vsscript vspipe has a new argument for passing on values to the script environment from the command line vspipe now has improved command line parsing and short forms, however old command lines will have to be modified to work re-added clip.output() fixed a filter error propagation issue mixed improvements to vivtc (nodame) fixed mac compilation of genericfilters added FreezeFrames, DuplicateFrames and DeleteFrames, they can all delete/duplicate/freeze multiple frames with one command (nodame) mixed documentation improvements (nodame) fixed tracking of memory usage that was broken in r22 (nodame) vivtc now uses framedifference internally and runs completely in parallel, also minor metric reporting fixes (nodame) r23: fixed an issue with rearranging old order arguments for Lut2, Merge and MaskedMerge fixed bugs in rgvs mode 20, eedi3 crash on windows and genericfilters crash in canny the frame range to output can now be set in vspipe as well using -start and -end documentation fixes minor build system improvement/fix (Zor) removed debug printfs in windows x64 build, fixes piping to stdout fixed tests installer improvements r22: chikuzen's genericfilters plugin is now bundled with the installer the installer will now refuse to run if the 32 and 64 bit python installation directory is the same or if python wasn't installed for all users fixed a rare bug on x64 windows that could cause crashes in a few internal functions with asm list_functions() now sorts function names alphabetically and plugins by their unique identifier fixed memory leaks when per frame errors happen in several filters the resize filter now reports more errors at construction time shuffleplanes format argument renamed to colorfamily to make more sense it's now possible to set a custom debug message handler from python, also a bug happening when setting a custom handler was fixed added makediff and mergediff functions the installer will no longer prompt about closing applications unless it's really necessary vspipe now prints the fps as well now arguments that are None in python aren't passed on to functions, this makes supplying defaults a lot easier added core.version_number() so scripts can easily check for a supported core version improved multithreaded locking, almost all functions in the vsscript and core API should be completely thread-safe now Lut2, Merge and MaskedMerge functions changed, they now take two clip arguments named clipa and clipb instead of a 2 clip array, the old version is accepted as well for now, do vs.get_core(r21_arg_compat=False) to disable backward compatibility minor API change, filters will no longer receive requests for frames beyond the end of a clip, instead the requested frame number is truncated, unknown length clip behavior is unchanged simplified the vsscript api sample to use getFrame() and to be pure C code added VS2013 projects runtime registered formats now get automatically generated names so they're easier to identify there should longer be "an exception happened when handling an exception" errors in python to keep the backtrace clearer the python module now accepts any iterable as an array input completely removed the Qt dependency (with some help from nodame on linux) added clense and the missing modes to removegrainvs switched to C++11/C99 and VS2013, this means that both the VS2010 and VS2013 runtimes are both installed added a port of vinverse (lachs0r) r21: added additional checks to verify that plugin writers don't do things wrong code cleanups and reorganization, simplefilters.c was split into several files the fpn_num and fps_den clip properties are no longer truncated to int in python fixed setting maximum memory use over 2GB from python added an additional output format argument to modifyframe, also added checks to prevent crashes now completely rejects adding known to be hopelessly broken functions from avisynth plugins (removegrain/repair/iscombed/colormatrix) now properly flips compatrgb32 when converting, previously conversions to/from would make the picture upside down optimized 8 bit merge and maskedmerge fixed crash bugs in planeaverage/difference/cliptoprop/proptoclip introduced in r20 now flattens frame properties as well, this is the proper documented behavior merged all selectclip functionality into frameeval, selectclip was removed as a separate function vsvfw now returns a clip with the error message if there's an error added a basic text printing filter to the core, code written by nodame it's now possible to use dir() on frame.props and core.namespace in python to list interesting properties and attributes added a compiled version of assvapour, it's probably a bit broken when it comes to font selection at the moment ported removegrain/repair based on dither tools' code, support 8-16 bit input fixed a cache issues where it would shrink to far too small sizes fixed several bugs in shuffleplanes, now it will correctly deduce the dimensions of the output in more cases and properly reject variable size/format input fixed a rare hang that could happen in avisynth compatibility when only using one thread adjusted avisynth compat prefetching lists, specifically MCompensate should be faster now r20: minor api change, a copy of all filter arguments is no longer kept around unless cleared, shouldn't affect any existing filters fixed a bug that would cause avisynth filters without specified prefetching to crash renamed the api functions getPluginNs/Id to getPluginByNs/Id since they make more sense rewrote the ugliest threading code, the locking is now a bit more fine grained in general added frameeval, a function to allow per frame filter evaluation blankclip now generates a new frame on every request to keep memory usage down, added the keep argument to optionally always return the same frame the message handler now takes an extra user data pointer, the handler and data pointer is still per process instead of per core though added plugin autoloading for linux (jackoneill) added plugin autoloading for windows, autoloaded plugins for all users go into \plugins and per user autoloaded plugins go into \vapoursynth\plugins include the python backtrace in errors when available fixed a bug in the propagation of filter errors, requesting a frame with an error twice no longer makes vapoursynth hang fixed the error that happens when avisource is used to open a vs script inside a vs script added override support to vdecimate (nodame) added -version option to vspipe and other small fixes addborders now properly rejects clips where the colorspace can change addborders and blankclip now properly default to black for all colorspaces added tdeint properly to the prefetch list fixed a cache bug that would make caches adapt too slowly/not at all only output the first 200 slow warnings per avisynth filter don't prefetch any frames by default for avisynth filters r19: lut/lut2 now processes all planes by default ported to work on arm and powerpc (Zor) fixed 9-16 bit format support in Expr properly initialize color in addborders to 0 calls to the getFrame() function inside vapoursynth can never deadlock now, the thread handling is also slightly improved fixed a bug in the cache that would stop it from freeing all its frames when memory is needed, fixes an out of memory error reported by Chikuzen output is no longer determined by setting the last variable in __main__, instead clip.set_output(int index = 0) is used to set which clip(s) are exported fixed some memory leaks in the internal filters when they're freed (jackoneill) now properly initializes blankclips to all 0 when no values are given added proper const declarations now that cython supports it, cython 0.18 or later required to build the extension now fixed get_write_ptr() in python to actually return a write pointer fixed the lut and lut2 filters for > 8 bit formats (ADub) various minor fixes to vivtc removed clip.output() since it's a bad design decision, now a command-line program called vspipe can be used to pipe or write raw video output renamed newMap() to createMap() to match the naming of all other functions added core.get_plugins() for the core and core.namepace.get_functions() for namespaces, it works similarly to list_functions() but instead returns the information in a dict removed the unmentioned and unused link option for filter arguments as it is completely pointless and similar functionality may be implemented anyway there's now a sane external api available for embedding in other applications, see vsscript.h and vsvfw for an example now a singleton pattern is used for the core in python scripts, use vs.get_core() to get a reference to it clip.get_frame() now throws an exception when out of bounds frames are requested fixes a reference leak in the VideoProps python class now ignores functions with . in their argument string for avisynth compatibility, this makes warpsharp mostly compatible r18: the installer no longer asks for the installation type since there's only one option anyway vdecimate now returns and decimates the frames in the last incomplete cycle as well fixed a bug that prevented mask scaling from working in MaskedMerge fixed a bug in VSFS that made the module crash on script errors, the full error message is now reported in a log file just like AVFS improved the error message when the last variable hasn't been set in a script changed default interleave behavior to match avisynth, the old and in some cases desirable behavior can be selected with the extend argument added color argument to addborders fixed addborders for formats with over 8 bits per sample blankclip can now produce float clips fixed/at least greatly reduced the big memory leak when reopening a script through vfw r17: the installer will now register and unregister the vsfs dll if selected (pismo file mount must of course be installed at the time for it to work) cleaned up the asm in the transpose filter fixed python detection in the installer if it was installed for a single user vdecimate can now accept up to 16 bit integer input and all color formats (jackoneill) fixed a bug that made the array for storing metrics uninitialized at the end in vdecimate leading to random decisions (jackoneill) added an inappropriately named subtitle filter based on libass (lachs0r) EEDI3 has now been changed into pure C (jackoneill) it is now possible to have the warning/error messages handled by a user specified callback function added a check for the SSE state so plugins cannot modify it without it being noticed (similar to the FPU and MMX checks) fixed that two plugins could be loaded into the same namespace fixed some issues with argument handling in python due to exceptions not being propagated properly added the Expr filter, it can evaluate an expression per pixel during runtime for 1-3 input clips fixed a clip reference leak introduced in R15 with the multiple clip output changes fixed AVISource crashes due to RGB output not being properly initialized fixed the upper memory limit check fixed callback functions hanging in vfw and vsfs changed the license of all files to LGPL, previously a few of them were MIT licensed r16: fixed a MaskedMerge reference leak under some rare conditions added a check for CPU features on x86, will now return an error if SSE2 isn't present fixed an issue in avisynth compatibility caused by stricter internal checks r15: documented all the predefined frame properties and all important python classes fixed iterating over clips in python allocate memory per plane instead of in one big lump, this allows planes to be copied by reference using the newVideoFrame2() function and will also reduce memory usage slightly for filters that use it fixed infinite loop in lut and lut2 when used with 9 bit input or more added ClipToProp and PropToClip functions, they allow one clip to be attached to another clip as frame properties fixed a reference leak in vivtc ported avisource from avisynth, it has been thoroughly upgraded and can understand several high bitdepth formats including v210 which many "professional" codecs use, it is also based on the latest vdub parser code now added len() support for clips in python fixed a bug with plugin functions having array output in python improved the api so that a single node/filter can produce several output clips, this bumps the api version to r3 (r2 plugins are still binary compatible but the r2 abi will also be removed in a version or two) r14: fixed setting the pixel values in blankclip a collection of ported/new filters are now bundled (eedi3, vivtc, histogram and temporalsoften) all examples and headers needed to write a new filter are now included in the installer fixed a frame data alignment issue in VSFS added vivtc (aka tivtc lite) to the included filters the fpu state check now only outputs a warning instead of terminating (this is until I've been able to locate why certain people trigger it) users can now set the cache size limit over which vs aggressively starts to decrease cache size, use core.set_max_cache_size(number of MB) (the memory use is calculated from the combined size of all framebuffers allocated) fixed memory leaks in PlaneDifference and PlaneAverage r13: enabled another part of the cache size adjustment, cache sizes will now be aggressively reduced to keep framebuffer memory use below 1GB filters can now get passed zero length arrays, the rewritten parts also improves argument handling in python (integer types now get converted to float implicitly when passed as a function argument) added right click\new\vapoursynth script shortcut to the installer make the number of frames in progress equal the number of threads, this should always be the upper beneficial value for any script, previously it was fixed at 10 fixed a rowsize bug in avisynth compatibility and implemented the subframe functions added PEMVerify, a function to check for out of bounds values in filter output for developers added PlaneDifference and PlaneAverage functions for use in conditional filtering added copy(), and get_write_ptr() to clips in python, renamed get_data() to get_read_ptr() greatly improved the handling of SelectClip and ModifyFrame (formerly ModifyProps), conditional filtering is now something that's usable using ModifyFrame and a bit of cleverness it is now possible to implement fairly complex filters in python r12: fixed a scheduling error for fmParallelRequests filters (all avisynth filters and several internal ones) added a bit more documentation, this time a bit about python and the classes found there added vsfs, a port of avfs v210 output support, add enable_v210=True to use it removed support for clips with unknown length from vfw can now open files with unicode filenames in vfw fixed some minor bugs and compiler warnings r11: switched the precompiled module to python 3.3 vfw now also has several frame requests going at once, this should make the throughput get close to clip.output() vfw now returns some colorful bars on error because refusing to open crashes too many applications vfw now has support for the P010, P016, P210, P216 formats, tested in mpc-hc with madvr removed some stray debug prints r10: fixed an issue where python could deadlock on the GIL now comes in an installer added a skeleton filter and a heavily commented invert example filter to the sdk dir added a vfw module fixed slicing/indexing in python module list_functions() can now be used on a namespace (core.resize.list_functions()) improved and documented build system, see INSTALL other small fixes relating to the python bindings r9: to get around keyword conflicts all function arguments names can be specified with both name and _name (Loop(_clip=a) is the same as Loop(clip=a)) works under linux and probably osx too full source released under LGPL it is now possible to use + to splice clips and the slicing operator to perform Trim, Reverse and SelectEvery operations on a clip documentation of all user functions lots of included filter fixes minor fixes to other things r8: portability fixes for linux minor api additions to make filters that consume 20+ input frames/scan a whole clip feasible added cpu state checks after filter calls added a function type, plugins may now take a python function and evaluate it for every frame implemented the final planned standard functions (transpose, croprel, clipselect, modifyprops) fixed the huge memory leak in cropabs other small fixes r7: includes the source for all of the std functions and the header needed to write plugins (more source coming soon) unnamed arguments are now accepted y4m headers now specify the colorspace for all yuv formats and gives an error when used with non-yuv added a new B tag to y4m output that specifies the number of bits per sample (B8/B10/B16) more minor fixes r6: now drops all crop calls to env->invoke(), fixes dgdecode compatibility but you have to crop yourself now all 64bit issues fixed added several checks to prevent the compat formats from being used by new filters minor fixes and extra checks for everything r5: more python output fixes added accept_lowercase as a setting for the core constructor python module refinement, now all objects have a string representation with more information other minor fixes r4: fixed the bad frame output from the python module added a callback to the output function so progress can be reported ported ffms2 raw frame data can be accessed from python r3: fixes even more threading and performance issues adds special support for yuy2 and rgb32 so most avisynth filters should work added hacks to make mvtools2 work r2: fixes a large number of threading issues removed the stupid clip.vi.width thing in python, now it's simply clip.width fixed the frame reordering in the python bindings, now frames pop out in the expected order r1: buggy first version