New discord server and no more discussion page

The discussion page never really worked well. I forgot to check it and so did the people posting there if I asked something. So now it’s gone. It’s instead been replaced by the “Help and Chat” page (name may change later) which lists a few places where VapourSynth users usually hang out.

I also started a discord server for VapourSynth since the other ones I was in died. Find the link in the “Help and Chat” page. That’s a bad name. I’ll change it later.

R66 & R65 – Installation Scripts and Many Small Improvements

Lots of people have asked for an installer that also sets up Python and all other basic components so they can get started quickly. Because of this I have now created a PowerShell script that will set up a complete portable environment. Just grab Install-Portable-VapourSynth-R*.ps1 from the release and run it. Everything will be installed into the current directory. It will probably be expanded upon further in the next release and install even more things so feel free to suggest the additional things you want. Maybe an optional editor or the option to directly install the most common plugins and scripts. Or even optional VFW integration?

Now to the small things. Python 3.12.x is now required. Several rare memory leaks and crashes were fixed. There’s a new graph output mode in vspipe that also includes filter times. Audio headers in VFW have been improved so normal DirectShow media players can be used for audio preview.

R64 – New things break old things

This release fixes a lot of new things, Zen4 CPUs, Cython 3.x and OSX (not so new) compilation broken in R63.

It’s also the end for 32 bit binaries compiled by me. These binaries get almost no downloads and x64 was first introduced 24 years ago. At this point all x86 fans have a 64 bit CPU. And if you don’t you probably shouldn’t be processing video at all. 32 bit builds are also a lot less useful now that most Avisynth plugins have either been ported or have 64 bit support.

Next thing to go will probably be optimizations for x86 CPUs with less than AVX2. It’s already been 10 years since AVX2 was introduced and 8 years since all CPUs have shipped with support for it. These are more or less the same numbers SSE2 had back when I originally released VapourSynth with a SSE2 minimum requirement.

I bet many doom9 users will rage when that day comes, just like when XP support was removed.

R60 – Fix bugs and remove deprecated functions in Python

Not much to say about this release apart from the fact that it finally removes all functions that got deprecated with the release of the API4 branch. If you were still using these you were doing things wrong anyway. May break some old scripts but most already have updated versions. The removed functions are:

  • get_frame_async_raw
  • get_plugins
  • get_functions
  • list_functions
  • get_format
  • register_format

R56 – Testing by a thousand monkeys

As usual all major new releases have a lot of bugs. Now there are a lot fewer.

  • Performance fix for large resolution (4k+)
  • Fix memory leak in VFW when reloading script
  • Make working dir behavior match API3 again
  • Lots of other small fixes

Now only those pesky people who use the output() function in Python have poor performance.

R55 – Audio support and improved performance

After years of development the next major update to VapourSynth is ready. Finally Avisynth(+) is truly obsolete and the remaining 5 audio users can safely migrate.

Audio

Despite being a fairly big feature there isn’t that much to say about audio. In addition to video nodes there are now audio nodes. They mostly work like video nodes. Simple, right? So instead I’ll list the biggest points.

  • Audio output with video in VFW and AVFS can be done with audionode.set_output(1). Note that these always use index 0 for video and 1 as audio source.
  • Frame properties are not really a thing due to audio frames in VapourSynth being an arbitrary lump of samples. Generally you shouldn’t use them.
  • Audio can’t have variable sample rate or format. Almost nobody uses variable format in video and it keeps the complexity down.

Performance

A lot of work has gone into improving performance and scripts like QTGMC can run up to 10% faster on modern CPUs. The memory usage has also been greatly reduced and a scripts like QTGMC (once again) will usually no longer reach the upper limit and warn about memory usage. Note that as a general rule script memory usage decreases with the number of plugins used that are updated to the new API version.

Compatibility and breaking changes

As usual with all big updates there are breaking changes to clean up past mistakes and remove unused features. While the core itself is more or less fully compatible with the old API a few features were removed which can cause issues with less than 1% of all plugins.

  • YCoCg – never became popular and everything else treats it as degenerate YUV so now we do too)
  • COMPAT formats – existed to make loading Avisynth plugins possible but in the 9 years or so since the first release Avisynth+ has appeared and just about all Avisynth filters support planar formats so it’s pointless and adds complexity to core functions)
  • Many script functions were marked as obsolete or removed. The most common construct is probably vs.get_core() that no longer works. Use vs.core instead you lazy script writers! Many other functions like plugin/function enumeration were changed but the old functions simply have deprecation warnings. For now.
  • Many plugins are no longer bundled/in the source tree. If your script needs subtext or histogram you have to install them yourself separately. The easiest way to do this is with vsrepo on windows.
  • The alpha handling has changed and attaching the alpha as an additional frame is now the preferred method.

What this means in practice is that 99% of all plugins works properly. The only known ones that don’t work well are FFMS2 and IMWRI when outputting alpha. Update your plugins and there shouldn’t be any surprises.

For scripts it’s a bit more complicated. For example all scripts by pedantic internet users (most public scripts that is) had YCoCg support which would error out in the new version. Fortunately just about all scripts have been updated to work on both old and new VapourSynth versions. Update your scripts and there shouldn’t be any surprises here either.

Where things seem to have broken a lot is however applications that use VSScript like VSEdit. Apparently all of them used the COMPATBGR32 format because it’s convenient for output. UPDATE NOW!