New Packaging and Install Methods in R74

Everything has changed! Your old installations will break! Encodings will fail!

But in the end you’ll be able to install VapourSynth EVERYWHERE by typing pip install vapoursynth followed by vapoursynth config.

After that there are a few more optional commands you can find detailed in the updated installation instructions.

No more installers needed. Things will be neatly separated in every Python virtual environment. Everything will just work. Apart from migrating from your old installation. Plugins are now stored in a a subdirectory of the VapourSynth Python package. To get the new location run vapoursynth.get_plugin_dir() in Python. This will in the future allow all plugins and scripts to be installed through pip instead of VSRepo which over time will be phased out. NO PLUGINS WILL BE LOADED FROM THE PREVIOUS LOCATIONS!

Other Important Things

If you want to use VSRepo you now have to install it separately using pip (yes, pip install vsrepo is now possible). Likewise AVFS has been split off into its own repository and is now a separate download.

There still is a normal windows installer and the portable version install script if you prefer to still use them. Do however note that simply “upgrading” from R73 or earlier probably will break a lot of things due to the changes.

Why this didn’t happen earlier

This change has been requested for many years. Almost from the start ever since the Python module was packaged into a proper wheel. Due to a lot of factors this wasn’t even technically possible until recently. Or at least not without an insane testing workload.

The main improvement to Python that made this possible was the limited API which allows binary wheels to work on multiple Python versions without needing to compile a separate version for every release. This reduces the number of packages from over a gazillion to about 5. The limited API did however not have enough features until around Python 3.11-3.12 to accomplish this since VapourSynth uses memory views and such in its bindings.

And even if the pre-requisites are there you still have to figure out how to do it. VapourSynth is split into two main components, the core library written in C++ and VSScript, a library that embeds Python and abstracts script evaluation which is very hard to get right. If you’re paying attention you’ve now realized that VapourSynth is a library used by a Python module that is used by another library (VSScript) that embeds Python and is then in turn loaded by vspipe.

This is an almost circular dependency. Probably nothing else in existence does this. There are no Python tutorials covering this. Embedding Python is in and of itself something that feels more like an afterthought than something intended and creates many problems. Or to put it simply: it took this long to figure it out after Python 3.12 was released.