r75:
multiple improvements to the portable version experience where vsrepo is now installed by default again and forwarding bat files are provided to closer match pre R74 paths
the frame pool is now enabled on all platforms since it's been proven that it greatly reduces memory fragmentation at high resolutions

r74:
avfs has been moved to a separate repository/download
configuration and and handling of autoloading directories has been completely reworked, see documentation for a full explanation
the whole application can now be installed with "pip install vapoursynth" on windows, osx and linux (HolyWu)
greatly improved support for python virtual environments
added ccfEnableFrameRefDebug core creation flag that will log all frame allocations to help find memory leaks
added getCoreInfo2 function which also returns the core creation flags used
added the new _Range property which follows the H.273 numbering (0 and 1 switched) instead of the now deprecated _ColorRange property, all filters compiled against api version 4.2 and later must only use the _Range property
fixed crash in vspipe when using --info with multiple output clips set and discarding all output (--)
removed remaining leftovers of 32 bit windows support from the source code
windows binaries now require windows 10
dropped support for python versions older than 3.12 in order to make vsscript python version independent as well
now requires visual studio 2026, python 3.14 and inno setup 6.6+ on windows to build

r73:
many minor python improvements (ichunjo)
the api r3 headers are no longer distributed with the windows binaries, general api r3 support for plugins remains for now
vsscript r3 api support has been completely removed since nobody has used it for 3+ years
fixed mirroring at edges in convolution filters to be more consistent
fixed cache state not being updated properly for nodes with no consumers ever and no calls to setcache

r72:
added named pipe output support to vspipe in windows by specifying \\.\pipe\<pipename>
fixed a bug that could lead to wrong timecodes being output by vspipe when a clip contains many different frame durations
the portable install script now allows the installed python version to be specified using the PythonVersionMajor and PythonVersionMinor arguments, it can also handle pre-releases properly now for easier testing
by default a limited python api compatible module will be compiled when python 3.12+ is used on all platforms
now supports python 3.12 and later in addition to 3.8 on windows

r71:
fixed vertical mirroring at edges in convolution filters
improved trim and audiotrim error messages
updated the supported python versions to 3.13 and 3.8 on windows
updated visual studio 2022 runtime version

r70:
the inspectable core flag is now correctly detected by the vsscript python environment when an external core is supplied
fixed a potential crash that could happen when more than 2 audio clips are spliced at the same time

r69:
added YUV420PS/H and YUV422PS/H constants for convenience
vspipe --info will now output information for all set output nodes
added a new function to to the vsscript api to get a list of all set output indices, since most users don't need vsscript api 4.2 you now have to define VSSCRIPT_USE_LATEST_API or VSSCRIPT_USE_API_42 to actually require it
the python module will now warn if it doesn't match the core library version when creating a core
updated zimg to fix a rare resizing bug that only happens around 0.5x scaling with avx512 optimizations
now always sets console output codepage to utf8 in windows

r68:
fixed portable base path detection, was broken in r67
fixed is_inspectable, was broken in r67
reverted widestring print changes in vspipe from r67

r67:
since most plugins don't need api 4.1 you now have to define VS_USE_LATEST_API or VS_USE_API_41 to actually require it
fixed a minor performance issue
all suitable constants are now IntEnum type instead of IntFlag when compiled with cython 3.x
fixed constants in vapoursynth module not being correctly coerced to int type when used passed to plugin functions due to cython 3.x changes
vfw and avfs will now output YUV420P12 and YUV422P12 as P016 and P216 fourcc (16 bit) to make things more convenient
fixed 19-24 bit audio output in vfw
fixed handling of audio decoding errors in vfw
fixed the reported plugin path being empty
improved the portable install script

r66:
updated the supported python versions to 3.12 and 3.8
added an option to write a full filter graph with time information to file when done processing in vspipe
clarified where different information will be output in vspipe
fixed backslashes and linebreaks not being properly escaped in dot graph output
copyframeprops can now optionally copy only a subset of properties
removeframeprops function now accepts wildcards in property names
added prop_src argument to shuffleplanes
added an access pattern mode when only repeatedly requesting the last frame of a clip
added approximate_gamma option to resizers (saindriches)
added plugin_path property to plugin object in python
audio is now clamped instead of wrapped around in audiomix and audiogain, these functions can also now warn when clipping happens
the vfw wrapper now provides simple waveformatex information automatically if the audio is mono or flagged as plain stereo and samples contain no padding bits
increased the get_frame error message buffer size in python, fewer messages should be truncated now
added missing st428 transfer characteristics to resize
made most graph information functions part of the stable api and bumped the version to 4.1
added new frame request pattern where only the last frame is requested multiple times to further improve cache usage
added new api functions for cache clearing
fixed request pattern set for selectevery with multiple identical offsets
fixed request pattern set for premultiply
expose number of bytes used by cache in python and clean up version and str representations of things (setsugennoao)
fixed modifyframe filter not properly copying its own videoinfo which may cause crashes if nothing else references the format node (jsaowji)
fixed setcache function leaking a node reference (jsaowji)

r65:
fixed inspection api sometimes causing memory corruption when used from python (jsaowji)
frame properties in python are now returned as str type instead of bytes when hinted as utf8 printable
fixed how unprintable data is returned from plugin functions in python, previously it would leak a ctypes pointer with no length instead of returning a bytes object
fixed a bug in the avx2 maskedmerge float premultiplied code path that would switch the two input clips
reverted the from_chars code a bit more to make no locale affects float parsing
fixed the sar adjustment for real this time

r64:
fixed compilation on osx where the default standard library doesn't have a full implementation of std::from_chars
fixed SAR adjustment in resizer when source cropping is used
added -- as an alternate to . to indicate no output in vspipe since shells have a tendency to expand .
added json output of video frame properties to vspipe
fixed clearMap function, previously it would forget to properly clear the error state in maps which could cause crashes in frameeval and other filters
32 bit binaries are no longer provided for windows
updated zimg to fix issues on zen4 cpus
added support for cython 3.x

r63:
updated all api documentation for api4
switched to C++17 for the entire project
added a warning every time the deprecated cache filter is instantiated and ignored
fixed a regression with alpha nodes in vspipe introduced in r62

r62:
updated the supported python versions to 3.11 and 3.8
now up to 500 log messages are cached when no log handler is attached
improvements to repr, audio channel handling and other python fixes (setsugennoao)
added a class Local for environment-local values

r61:
fixed error message when splicing mismatched clips so it's actually helpful
fixed a memory leak when freeing setframeprops filter (Endill)
fixed planestats being broken for float format (Endill)
fixed makefulldiff for 16 bit clips, previously it used too small intermediate variables
blankclip can now emit variable size and variable format clips
libraries can now register clean up callbacks when a core gets destroyed

r60:
fixed blankclip crashing when fpsnum or fpsden is 0 despite it being allowed
fixed invalid format ids sometimes being treated as api3 values when passed to resize 
fixed error message frame generation in vfw
fixed writing beyond end out output buffer for audio in vfw
blankaudio now takes an array of channel constants since this better matches how most other functions work
fixed splitchannels crash on certain channel configurations (YomikoR)
added makefulldiff and mergefulldiff, these are versions of makediff and mergediff that don't clamp the difference to half range and instead use a higher precision diff clip
better error messages when filters get unsupported input formats or combinations thereof
freezeframes now accepts empty arrays and simply passes through the source clip
you can directly assign to frame-props
removed all deprecated (and replaced by better versions) functions in python: get_frame_async_raw, get_plugins, get_functions, list_functions, get_format, register_format
fixed convolution output for 9-15 bit material

r59:
fixed several convolution crashes
fixed averageframes weights with float input
fixed rare cython memory leak on error

r58:
updated the supported python versions to 3.10 and 3.8
updated visual studio 2022 runtime version
updated projects to visual studio 2022
updated zimg to 3.0.4
out of range requests getFrame() are now properly rejected instead of possibly crashing later
removed the prefer_props argument from resizers, trying to use it will result in a warning message
fixed certain expressions failing to compile in expr filter
fixed averageframes not respecting scenechange property (sekrit-twc)
added bob filter (sekrit-twc)
added support for separable convolutions and optimized convolution in general (sekrit-twc)
fixed audionode get_frame() in python
enabled cache for nodes with no registered dependencies, this means nodes returned by getoutput won't need to manually have the cache enabled if they have no filter consumers

r57:
added close method for frames in python (cid-chan)
arguments names will no longer have leading _ stripped in python, append _ to the end or argument names instead to avoid python keywords
fixed nodes never being marked as nfnocache/nfiscache in api3 which caused some older applications to enter an infinite cache insertion loop
fixed memory bloat in python due to circular references when dealing with frame objects
fixed vsrepo missing genstubs files
fixed vfw and avfs speed regression from r55
fixed mismatched format clips not working regression from r55

r56:
more or less a huge pile of bug/regression fixes for r55

r55:
updated visual studio 2019 runtime version
updated zimg to 3.0.3
fixed multiple python bugs related to output, copy on write and memory views (Kamekameha)
fixed expr pow behavior and more clearly documented what values are allowed (sekrit-twc)
fixed premultiplied behavior of maskedmerge (sekrit-twc)

r54:
updated visual studio 2019 runtime version
updated zimg to 3.0.2
cliptoprop now uses the length of the second clip instead of the first one
added sin and cos operator to the expr filter (AkarinVS)
made handling of floating point masks consistent (AkarinVS and more)
fixed memory leak on free in expr filter on linux (AkarinVS)

r53:
updated visual studio 2019 runtime version
updated to python 3.9 for windows
added scale argument to text filters (AkarinVS)
fixed length calculation in y4m header (djatom)
added long path support to vspipe (stax76)
fixed crash in text filter with small resolution clips (jackoneill)
fixed calling wrapped functions through python (IFeelBloated)

r52:
updated visual studio 2019 runtime version
updated zimg
updated vsrepo with support for python wheel packages
vsgenstubs is now included with vsrepo
fixed maximum for 16 bit input with diagonal filters and optimizations
fixed deadlock in fmserial filters introduced in r51
fixed more averageframes bugs (sekrit-twc)

r51:
updated visual studio 2019 runtime version
fixed a cache shrinking issue
fixed a crash when removing a message handler without a free function
fixed an extremely rare threading issue only affecting fmparallelrequests filters and arframeready events
fixed compilation when avs+ master is used
fixed lut and lut2 triggering a fatal error when invalid planes were specified
fixed property append operations on non-empty keys not properly copying the underlying data
fixed wave64 headers generated by avfs
fixed crash in averageframes with odd number of clips (sekrit-twc)
scale averageframes for integer chroma by distance from grey (sekrit-twc)
several fixes and improvements regarding handling of the active script environment in python (stuxcrystal)
plugin loading now has better error messages (jackoneill)
using get_core() in python now generates a deprecation warning since it's been deprecated for years

r50:
updated zimg to latest v2.9 so grayscale colorspace are supported
fixed several minor issues related to path handling in vsrepo
added __version__ and __api_version__ to python module to make detecting version mismatches easier
improved rounding in averageframes (sekrit-twc)
fixed averageframes not properly rejecting more than 31 weights or nodes
fixed crash in textfilter line wrapping introduced in r49 (sekrit-twc)
fixed regression introduced in r48 where expr, sobel and prewitt wouldn't clamp 9-15 bit output to valid range (sekrit-twc)
fixed crash due to null pointer dereference when instantiation many vapoursynth classes directly in python
fixed regression in r49 where the python dll could only be located when in the PATH on windows

r49:
updated to python 3.8 on windows
updated visual studio 2019 runtime version
updated zimg and added support for spline64 resize method
fixed transfer characteristics not being applied to gray format clips (sekrit-twc)
fixed vdecimate bugs when compiled on systems where char is unsigned by default
fixed a regression introduced in r48 in that could sometimes cause corrupt output from expr on cpus without sse4.1 (sekrit-twc)
fixed a savestring bug in avscompat (sekrit-twc)
interleave, selectevery and separate fields now have a modify_duration argument to determine if they modify frame durations and fps
addborders and crop now update the _fieldbased attribute properly when an odd number of lines are cut from the top
fixed add to path not working for single user installs
fixed compilation on non-x86 systems
fixed an infinite loop in the expr filter optimizer that was introduced in r48 (sekrit-twc)

r48:
it's now possible to select which optimized code path is used for internal filters (sekrit-twc)
avx2 optimization in many filters, previously the internal ones were mostly sse2 (sekrit-twc)
expr filter can now better optimize expressions (sekrit-twc)
the 7zip executable is now bundled with vsrepo
the portable version now includes the documentation as well
the portable version now includes all the plugins bundled with the normal installer again
fixed deadlock when setMessageHandler is called a second time
added an option to add vspipe, avfs and vsrepo to path in the installer
added registry entries for the path to vspipe and vsrepo
imwri is now included in the installer
the overwrite argument in imwri now also disables the requirement for output filenames to contain a number
fixed corrupt output from imwri when requesting alpha output but the read image doesn't have an alpha channel

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 precedence 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 <installdir>\plugins and per user autoloaded plugins go into <appdata>\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.namespace.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




