Log in

View Full Version : Vapoursynth


Pages : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 [101] 102

Myrsloik
26th March 2026, 11:46
R74-RC2 is out. The new thing is that it can be installed from pip and a long list of changes to adapt to the coming future with pip as the only package manager.

Read the full blog post here BEFORE UPGRADING (https://www.vapoursynth.com/2026/03/26/new-packaging-and-install-methods-in-r74/)!!!!!111111

vcmohan
26th March 2026, 12:39
I am using windows installer and all my plugins are in C++ of visual studio. It is not clear to me. if I choose to install the newer version will my plugins still work or I need to change since the API has only 5 members. I am 92years old and learning new things is becoming a bit difficult. Further the last time I updated vapoursynth plugins due to some problem I had to forward them through Google drive to Wilbert who kindly uploaded them to my site at avisynth.

Myrsloik
26th March 2026, 22:25
I am using windows installer and all my plugins are in C++ of visual studio. It is not clear to me. if I choose to install the newer version will my plugins still work or I need to change since the API has only 5 members. I am 92years old and learning new things is becoming a bit difficult. Further the last time I updated vapoursynth plugins due to some problem I had to forward them through Google drive to Wilbert who kindly uploaded them to my site at avisynth.

All existing plugins will keep working. All you have to do is move them to the new plugin location. Use the start menu shortcut to open the right location.

vcmohan
27th March 2026, 12:37
Thanks.

Are_
27th March 2026, 17:57
Sorry for the late catch-up, so now all the installation scripts for the plugins that have been not updated will install them in a location Vapoursynth is not searching for, and will stop working, right?

And the only way to keep the plugins working is fixing the installation script for all of them or set an environment variable like for example on Linux: export VAPOURSYNTH_EXTRA_PLUGIN_PATH=/usr/lib64/vapoursynth/ ?

Myrsloik
27th March 2026, 21:32
Sorry for the late catch-up, so now all the installation scripts for the plugins that have been not updated will install them in a location Vapoursynth is not searching for, and will stop working, right?

And the only way to keep the plugins working is fixing the installation script for all of them or set an environment variable like for example on Linux: export VAPOURSYNTH_EXTRA_PLUGIN_PATH=/usr/lib64/vapoursynth/ ?



Yes
Yes


The end goal is however to get as much as possible on pypi so you can install everything with pip. R74 is truly a release for early adopters.

Selur
6th April 2026, 19:09
Small question about portable Vapoursynth R74 (installed via .bat/.ps1 script) on Windows.
When using vspipe and a library which is in Lib/site-packages I get a ModuleNotFoundError message.
"pip list", does list the library and python312._pth does include "Lib\site-packages".
Explicitly adding (to my script):
import sys
sys.path.append(r"PATH TO Vapoursynth\Lib\site-packages")

does fix this for me, but is this like it should be now?

Cu Selur

Myrsloik
7th April 2026, 09:00
Small question about portable Vapoursynth R74 (installed via .bat/.ps1 script) on Windows.
When using vspipe and a library which is in Lib/site-packages I get a ModuleNotFoundError message.
"pip list", does list the library and python312._pth does include "Lib\site-packages".
Explicitly adding (to my script):
import sys
sys.path.append(r"PATH TO Vapoursynth\Lib\site-packages")

does fix this for me, but is this like it should be now?

Cu Selur

So "import vapoursynth" doesn't work in scripts? I only tested with python 3.14 so maybe that's part of the problem.

Note that the exe files in Scripts (like the vspipe.exe) have hardcoded paths to python so you need to reinstall the wheel if you move the folder.

Or directly call the vspipe.exe in lib\site-packages\vapoursynth.

I'm thinking about how to improve the user experience for portable but python itself hates being oved around.

Selur
7th April 2026, 13:13
have hardcoded paths to python so you need to reinstall the wheel if you move the folder.
ARGH,... okay that is probably the issue

Or directly call the vspipe.exe in lib\site-packages\vapoursynth.
I'll give that a try.

will report back later after work

Selur
7th April 2026, 13:41
Using vspipe.exe from lib\site-packages\vapoursynth fixes the problem. :)

Cu Selur

Myrsloik
8th April 2026, 09:59
Using vspipe.exe from lib\site-packages\vapoursynth fixes the problem. :)

Cu Selur

The portable version will have some improvements in the next release to make things less bad.

Selur
10th April 2026, 13:09
@Myrsloik:
did a quick test with on installing some of the plugins:

"pip install vapoursynth-mvtools" places libmvtools into the "Lib/site-packages"-folder (!!!! this seems wrong !!!!)
"pip install vapoursynth-fillborders" places fillborders into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-hysteresis", fails (https://github.com/sgt0/vapoursynth-hysteresis/issues/121)
"pip install vapoursynth-sangnom" places sangnom into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-subtext" places subtext into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-d2vsource" places d2vsource into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-vivtc" places vivtc into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-dotkill" places dotkill into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-descratch" places descratch into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-deblock" places deblock into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-awarp" places awarp into the "Lib/site-packages/vapoursynth/plugins"-folder

=> Would be nice if lbmvtools, could also be placed in "Lib/site-packages/vapoursynth/plugins"-folder

Cu Selur

Myrsloik
10th April 2026, 15:21
@Myrsloik:
did a quick test with on installing some of the plugins:

"pip install vapoursynth-mvtools" places libmvtools into the "Lib/site-packages"-folder (!!!! this seems wrong !!!!)
"pip install vapoursynth-fillborders" places fillborders into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-hysteresis", fails (https://github.com/sgt0/vapoursynth-hysteresis/issues/121)
"pip install vapoursynth-sangnom" places sangnom into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-subtext" places subtext into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-d2vsource" places d2vsource into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-vivtc" places vivtc into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-dotkill" places dotkill into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-descratch" places descratch into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-deblock" places deblock into the "Lib/site-packages/vapoursynth/plugins"-folder
"pip install vapoursynth-awarp" places awarp into the "Lib/site-packages/vapoursynth/plugins"-folder

=> Would be nice if lbmvtools, could also be placed in "Lib/site-packages/vapoursynth/plugins"-folder

Cu Selur

Will fix mvtools. Hysteresis is because whoever put it that was lazy and only made linux binaries. Send hate mail to the maintainer listed at https://pypi.org/project/vapoursynth-hysteresis/ and tell him to do it properly.

Real encoding requires pain!

Selur
10th April 2026, 18:54
vapoursynth-hysteresis and vapoursynth-mytools it fixed too.
Thanks.

Cu Selur

Selur
15th April 2026, 17:35
Small question:
using a portable Vapoursynth R74 I installed vapoursynth-zsmooth and then in a script called:
core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/ZSmooth/zsmooth.dll") (this is not the version installed through 'vapoursynth-zsmooth')
since I assumed that no autoloading would take place and I still could load whatever dll I want and could if need be use something like 'import vapoursynth-zsmooth' if need be, but I got:
Python exception: Plugin F:/Hybrid/64bit/vsfilters/DenoiseFilter/ZSmooth/zsmooth.dll already loaded (com.adub.zsmooth) from f:/hybrid/64bit/vapoursynth/Lib/site-packages/vapoursynth/plugins/zsmooth/zsmooth.v4.dll
=> Is there a way to stop autoloading, or do I have to stay away from 'pip install', in case I don't want autoloading?

Cu Selur

Myrsloik
15th April 2026, 17:49
Small question:
<big question>
Cu Selur

You're probably better off using python virtual environments if you want that level of control. The easiest way is to create one with "python -m venv <path to where it should be>" run <venv path>\scripts\activate.bat and off you go with a completely separate python environment where you can choose to install or not install things for your specific script.

That way you get even better separation than simply selectively loading things. What's the real issue with autoloading anyway? What does it stop you from doing?

Selur
15th April 2026, 20:23
That way you get even better separation than simply selectively loading things. What's the real issue with autoloading anyway? What does it stop you from doing?
I often like to test different versions when bug/problem hunting and having full control over what is loaded makes it easier to use stuff (manual loading isn't really a problem, since I don't write that part of the script usually manually)
In example zsmooth loads different versions of the library depending on the cpu capabilities, when running into problems I want to be able to load a specific version.
side note: Personally I like to group my filters into sub-folders (in a totally separate folder) based on what they do i.e. resize/nnedi3/znedi3.dll or similar and then autoloading doesn't work anyway. But seeing that installing through pip more and more becomes an option, I thought it might be nice to use it, but I had to realize it kills my flexibility.

Sure setting up totally separate environments would be an option but seems to be tedious. :)
I could also rename/move/.. the vapoursynth/plugins folder,... to avoid the autoloading.
I could map/symlink the vapoursynth/plugins-folder to another folder just before the 'pip install', so that a new installed library would not end up in it.

I understand that most folks when using "pip install vapoursynth-XXX" expect the installed libary to be directly available in their script, so I'm aware that my preferences are not for convenience of use.
I just hoped it would be something as easy as setting some environment flag or similar to disable the autoloading.

Autoloading works just like manual loading, with the exception that any errors encountered while loading a plugin are silently ignored.
Silently ignored errors,... that just sound like a bad idea to me.

No, worries, I'm probably one of just a few users who prefer to be aware of what is used and get an error when something isn't used.
=> I'll probably use a dummy portable install (or a venv when on Linux or MacOS) to download the latest libraries and then copy those into my working environment into separate folders outside the vapoursynth/plugins-folder, so autoloading doesn't load anything.


Cu Selur

Myrsloik
15th April 2026, 21:15
I often like to test different versions when bug/problem hunting and having full control over what is loaded makes it easier to use stuff (manual loading isn't really a problem, since I don't write that part of the script usually manually)
In example zsmooth loads different versions of the library depending on the cpu capabilities, when running into problems I want to be able to load a specific version.
side note: Personally I like to group my filters into sub-folders (in a totally separate folder) based on what they do i.e. resize/nnedi3/znedi3.dll or similar and then autoloading doesn't work anyway. But seeing that installing through pip more and more becomes an option, I thought it might be nice to use it, but I had to realize it kills my flexibility.

Sure setting up totally separate environments would be an option but seems to be tedious. :)
I could also rename/move/.. the vapoursynth/plugins folder,... to avoid the autoloading.
I could map/symlink the vapoursynth/plugins-folder to another folder just before the 'pip install', so that a new installed library would not end up in it.

I understand that most folks when using "pip install vapoursynth-XXX" expect the installed libary to be directly available in their script, so I'm aware that my preferences are not for convenience of use.
I just hoped it would be something as easy as setting some environment flag or similar to disable the autoloading.

Silently ignored errors,... that just sound like a bad idea to me.

No, worries, I'm probably one of just a few users who prefer to be aware of what is used and get an error when something isn't used.
=> I'll probably use a dummy portable install (or a venv when on Linux or MacOS) to download the latest libraries and then copy those into my working environment into separate folders outside the vapoursynth/plugins-folder, so autoloading doesn't load anything.


Cu Selur

Silently ignoring errors is what you have to do. Some plugins have support dlls that obviously will fail to load. A proper plugin will never fail to load unless it has a duplicate id/namespace.

I think there's some obscure python magic you can do to disable autoloading but I forget it myself. I'll look it up and document it somewhere.

Selur
16th April 2026, 14:43
I'll look it up and document it somewhere.
That would be nice. :)

Cu Selur

Selur
22nd April 2026, 19:34
Small question, in regard to "plugins can now ship with multiple copies targeting different optimization levels on x64 and have the best one automatically loaded" is there a pattern to this, so that when manually loading files to know which to load? Or does this 'autoloading' also work when not using autoloading? (so when using LoadPlugin("...dll") will LoadPlugin automatically load the 'best' dll?)

Myrsloik
22nd April 2026, 19:55
Small question, in regard to "plugins can now ship with multiple copies targeting different optimization levels on x64 and have the best one automatically loaded" is there a pattern to this, so that when manually loading files to know which to load? Or does this 'autoloading' also work when not using autoloading? (so when using LoadPlugin("...dll") will LoadPlugin automatically load the 'best' dll?)

Manual LoadPlugin will also pick the best dll.

Selur
23rd April 2026, 15:14
Nice! Thanks!

hydra3333
24th April 2026, 03:40
Manual LoadPlugin will also pick the best dll.

Thanks !

I must read the manual to find out how to do that properly (using portable vapoursynth).

Until now I have manually loaded a specific filename since I do not autoload ... hmm, I must check I that am actually not :) now that I use the new vsrepo and it may be putting them in an autoload folder by default.

Also, I manually load others not in vsrepo and which reside in other folders, eg DGDecodeNV_AVX2.dll rather than DGDecodeNV.dll.

Selur
24th April 2026, 17:56
@hydra3333: What you can do with a portable Vapoursynth.

setup the portable Vapoursynth
install the plugins you can get through pip (which will end up in Vapoursynth/Lib/site-packages/vapoursynth/plugins/
after installing, rename the plugins-folder to plugins2 and create an empty plugins-folder (this way no autoloading is happening)
when loading a plugin use something like:
core.std.LoadPlugin(path="F:/Hybrid/64bit/Vapoursynth/Lib/site-packages/vapoursynth/plugins2/zsmooth/zsmooth.dll")
when you want to up-date plugins via pip, delete plugins-folder, rename plugins2-folder, run update, undo the renaming


Cu Selur

Ps.: Here (https://pastebin.com/XzaQVaJb) is an example of a full script, loading from different folders.

_Al_
24th April 2026, 22:36
Wow, I was thinking the same as hydra3333 what I need to do with this new setup to make it portable and all. Selur thank You very much.

hydra3333
25th April 2026, 00:00
Uh oh, I must be doing something wrong.

I install dependencies using:
call :do_install_vsrepo_dependency adjust
call :do_install_vsrepo_dependency AssRender
call :do_install_vsrepo_dependency AWarp
call :do_install_vsrepo_dependency AWarpSharp2
call :do_install_vsrepo_dependency BestSource
call :do_install_vsrepo_dependency Cnr2
call :do_install_vsrepo_dependency dctf
call :do_install_vsrepo_dependency Deblock
call :do_install_vsrepo_dependency dfttest
call :do_install_vsrepo_dependency eedi2
call :do_install_vsrepo_dependency EEDI3m
call :do_install_vsrepo_dependency EEDI3VK
call :do_install_vsrepo_dependency ffms2
call :do_install_vsrepo_dependency fftw3_library
call :do_install_vsrepo_dependency Histogram
call :do_install_vsrepo_dependency lsmas
call :do_install_vsrepo_dependency mv
call :do_install_vsrepo_dependency mvsf
call :do_install_vsrepo_dependency mvmulti
call :do_install_vsrepo_dependency Subtext
call :do_install_vsrepo_dependency sangnom
call :do_install_vsrepo_dependency LGhost
call :do_install_vsrepo_dependency yadifmod
call :do_install_vsrepo_dependency vapoursynth-dghdrtosdr
goto :eof

".\scripts/vsrepo.exe" -f -t win64 install %*
goto :eof


And I see:
dir /s /b
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\avscompat.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\assrender.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\AWarp.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\bestsource.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\DCTFilter.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\Deblock.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\DFTTest.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\EEDI2.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\EEDI3m.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\ffms2.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\LGhost.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\libawarpsharp2.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\libcnr2.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\libeedi3vk.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\libfftw3-3.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\libfftw3f-3.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\libfftw3l-3.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\libhistogram.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\libmvtools.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\libmvtools_sf_em64t.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\libsangnom.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\LSMASHSource.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\MediaInfo.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\MediaInfoDLL.py
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\MediaInfoDLL3.py
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\SubText.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins\vsrepo\Yadifmod.dll
and

dir /s /b *dghdrtosdr*
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth_dghdrtosdr
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth_dghdrtosdr-1.16.dist-info
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth_dghdrtosdr\DGHDRtoSDR.dll
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth_dghdrtosdr\DGHDRtoSDR_1.16.txt

dir /s /b *mvmulti*
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\mvmulti-9.dist-info
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\mvmulti.py


which is not quite what I anticipated,
- most plugin .dll files in a subfolder vsrepo
- mvmulti.py somewhere else, although I guess perhaps I should have known that
- DGHDRtoSDR somewhere else

I wonder what I did wrong ?

lansing
25th April 2026, 02:24
In R74, can I retrieve the plugins file path using the vsscript api?

hydra3333
25th April 2026, 02:45
In R74, can I retrieve the plugins file path using the vsscript api?
Yes.
>>> import vapoursynth as vs
>>> print(vs.get_plugin_dir())
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins


Though, in my portable R74 "install" I noticed (see the post above) that
- nearly all plugins went into the subfolder 'vsrepo' of the folder returned by vs.get_plugin_dir() and I do not know if they autoload or not from that subfolder
- "plugin script" mvmulti went into a different folder (thus not expecting autoloading)
- DGHDRtoSDR went into a separate folder altogether (thus not expecting autoloading)

I did not want autoloading anyway :) but is there perhaps some switch or something I need to use to get them to all go into the standard place in a portable vapoursynth install ?
I could post the question as an issue over at vsrepo github 'issues' if you recommend that instead.

Ps.: url=https://pastebin.com/XzaQVaJb]Here[/url] is an example of a full script, loading from different folders.
Thanks !!! I will look at it closely, it does some stuff I am interested in.
In R74, can I retrieve the plugins file path using the vsscript api?
Yes.
>>> import vapoursynth as vs
>>> print(vs.get_plugin_dir())
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins


Though, in my portable R74 "install" I noticed (see the post above) that
- nearly all plugins went into the subfolder 'vsrepo' of the folder returned by vs.get_plugin_dir() and I do not know if they autoload or not from that subfolder
- "plugin script" mvmulti went into a different folder (thus not expecting autoloading)
- DGHDRtoSDR went into a separate folder altogether (thus not expecting autoloading)

I did not want autoloading anyway :) but is there perhaps some switch or something I need to use to get them to all go into the standard place in a portable vapoursynth install ?
I could post the question as an issue over at vsrepo github 'issues' if you recommend that instead.

Ps.: url=https://pastebin.com/XzaQVaJb]Here[/url] is an example of a full script, loading from different folders.
Thanks !!! I will look at it closely, it does some stuff I am interested in.
edit:ah, i see, cheers for the R74 Range fiddling example in that.

lansing
25th April 2026, 04:11
Yes.
>>> import vapoursynth as vs
>>> print(vs.get_plugin_dir())
C:\SOFTWARE\Vapoursynth-x64\Lib\site-packages\vapoursynth\plugins



This is from the python side. I'm looking for the one calling it in C++. I don't see a similar get_plugin_dir function for it in the doc.

Selur
25th April 2026, 05:42
@hydra3333: happy that helped.
and I do not know if they autoload or not from that subfolder
they are (Vapoursynth autoloads everything inside it's plugins-subfolder)
is there perhaps some switch or something I need to use to get them to all go into the standard place in a portable vapoursynth install ?
no

i see, cheers for the R74 Range fiddling example in that.
didn't think, that this:
prop_name = '_Range' if core.core_version.release_major >= 74 else '_ColorRange'
clip = core.std.SetFrameProps(clip=clip, **{prop_name: vs.RANGE_LIMITED})
would be that interessting since folks usually don't jump between Vapoursynth versions. ;)

Cu Selur

Myrsloik
1st May 2026, 14:07
R75 is out. It can now load plugins compiled for different instruction sets automatically. See the post here (https://www.vapoursynth.com/2026/04/30/r75-sanding-of-the-r74-edges-and-plugin-manifests/) for a longer explanation of why the levels are what they are.

The only plugin that currently does this is zsmooth (https://pypi.org/project/vapoursynth-zsmooth/) which you can check out if you want an example of how it's done.

And a bit of a warning in advance R76 will most likely completely change how the max cache size works and be much more strict to less often accidentally trigger out of memory killing on Linux. In many current scripts the value is more or less ignored if it's set too low.

You can now also suggest additional plugins and scripts that should go on pypi since most of us have now finished our pypi queues. Some plugins and scripts should however just die since they have better replacements and are completely unmaintained. I have marked most of my own obsolete things as archived on github to show this. This isn't a competition to put everything on pypi. ONLY THE STILL USEFUL THINGS to reduce confusion.

I've also got access to the old dubhater catalog (https://github.com/orgs/dubhatervapoursynth/repositories) which contains a bunch of things I'm not sure are still relevant and as such are neither archived nor uploaded to pypi. It has a fairly big collection of derainbowers and such. Are these still useful?

Also feel free to say which things are completely useless now so I can archive them forever.

Adub
1st May 2026, 19:11
You can now also suggest additional plugins and scripts that should go on pypi since most of us have now finished our pypi queues.

Where should we send these requests? This forum thread, or GitHub discussions, etc?

Myrsloik
1st May 2026, 19:21
Where should we send these requests? This forum thread, or GitHub discussions, etc?

Both are fine I guess.

Myrsloik
12th May 2026, 17:06
R76RC2 (https://github.com/vapoursynth/vapoursynth/releases/tag/R76RC2) is out and no more changes are planed before the actual release.

Note that R76 has extensive changes to how max_cache_size and num_threads is handled. Previous VS versions would in some cases happily use far more memory than max_cache_size allowed and more or less ignore it. That time is over and now the setting is more important than ever before if you're processing 4k+ material. Since the limit is now being obeyed this may result in some scripts slowing down noticeably without setting more resonable limits.

Another thing that can greatly drive up memory usage is having many threads running. Therefore VS will now use up to num_threads but if the running script is memory constrained the actually used number will be decreased. This has to be done because in a script like mc_degrain with 4k material every additional thread can require ~500MB more memory.

Report your findings. Overall it should be faster and manage to avoid the worst cases.

Selur
13th May 2026, 15:30
Side note: I went through all my filters and noticed aside from a few:

AddGrain: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-AddGrain (read-only since Apr 17, 2026)
-> https://github.com/wwww-wwww/vs-noise which also isn't available through pip
Adaptive Grain: https://github.com/Irrational-Encoding-Wizardry/adaptivegrain
Bore: https://github.com/OpusGang/bore
MiscFilters: https://github.com/vapoursynth/vs-miscfilters-obsolete (read-only since May 8, 2026)
-> https://github.com/sgt0/vapoursynth-hysteresis is listed as drop-in, but only ports hysteresis not SCDetect.
RemoveDirt: https://github.com/handaimaoh/removedirtvs, https://github.com/Jaded-Encoding-Thaumaturgy/vapoursynth-removedirt (read-only since Feb 13, 2025)
VInverse: https://github.com/Asd-g/vinverse
Grayworld: https://github.com/Asd-g/AviSynthPlus-grayworld
Retinex: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-Retinex
SoftLight: https://github.com/ArturAlekseev/AVS_SoftLight
ToneMap: https://github.com/ifb/vapoursynth-tonemap
DeblockPP7: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-DeblockPP7
Dedot: https://github.com/dubhatervapoursynth/vapoursynth-dedot
DFTTest: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-DFTTest
CTMF: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-CTMF
HQDN3D: https://github.com/Hinterwaeldlers/vapoursynth-hqdn3d
TCanny: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-TCanny (read-only since Apr 17, 2026), lists https://github.com/HolyWu/VapourSynth-EdgeMasks, but that doesn't seem to be a replacement for TCanny.
LGhost: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-LGhost

all others are available via pip now! Nice!

Cu Selur

Myrsloik
13th May 2026, 16:25
AddGrain: replacement is available here: https://pypi.org/project/vsnoise If you see workflow that uploads to pypi in the .github/workflows dir you know it's probably available
Adaptive Grain: https://pypi.org/p/vapoursynth-adaptivegrain
MiscFilters: SCDetect is trivial to write as a 3 line script or so. I've warned people for maaaaany years now but nobody cares until things stop working. It's dead DEAD DEAHAHAHAHAEAEAD
HQDN3D: NONONONO. This one never worked properly due to using feedback in its filtering rendering it more or less useless in threaded environments. Just replace it with something else. Porting it was a mistake. DEAD.
VInverse: There exists a bunch of script implementations that have more or less the same speed. Use those. I'm not against it being uploaded as a plugin as well if you manage to convince the author but there's not much point to it.
DFTTest: Will happen at some point soon. We've been discussing whether DFTTest2 actually implements everything DFTTest does and if the original version should be uploaded. It's going to happen. Probably sooner rather than later.
Dedot: Will add to my todo list.
RemoveDirt: The vsrepo removedirt comes from here: https://github.com/pinterf/RemoveDirt I suggest asking pinterf nicely for this one
Bore: rumors say it'll be on pypi within a few weeks


I don't have any particular opinion about these. And no particular insight. Create an issue and see if the authors are alive and interested and putting them pypi. If not we can set it up and/or adopt abandoned plugins.


Grayworld: https://github.com/Asd-g/AviSynthPlus-grayworld
SoftLight: https://github.com/ArturAlekseev/AVS_SoftLight
ToneMap: https://github.com/ifb/vapoursynth-tonemap


The HolyWu section. I shall try to summon him.

TCanny: Generally you don't actually need canny as such and in those cases other edge detection methods are just fine. You could also ask HolyWu to implement canny in his plugin. Maybe it'll happen.
DeblockPP7: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-DeblockPP7
CTMF: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-CTMF
LGhost: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-LGhost
Retinex: https://github.com/HomeOfVapourSynthEvolution/VapourSynth-Retinex


Note that when we (me and the secret cabal of plugin authors) started the pypi migration we decided to not simply put everything there and instead deprecate and intentionally leave out plugins that have better replacements. And by better replacements we mean not just a simple drop-in one but also for example if there are many other better denoisers there's no reason to carry it over. This makes it harder to discover the good scripts and plugins. Likewise we agreed to not put any API3 plugin there which has resulted in lots of old plugin upgrades.

Selur
13th May 2026, 17:13
Thanks for that.
Likewise we agreed to not put any API3 plugin there which has resulted in lots of old plugin upgrades.
On that note, I just noticed:

Plugin fft3dfilter.dll is using API3 which is deprecated and will be removed shortly.
Plugin neo-fft3d.dll is using API3 which is deprecated and will be removed shortly.
Plugin libmvtools_sf_em64t.dll is using API3 which is deprecated and will be removed shortly.

¯\_(ツ)_/¯ fingers crossed these get updates before the support for API3 gets removed. :)

Cu Selur

Ps.: also found another one that is not available through pip https://github.com/Vapoursynth-Plugins-Gitify/DePan which I use in Stab (https://github.com/Selur/VapoursynthScriptsInHybrid/blob/eb3dc8126cde0956f622ceef1fe5a04f6fb8a89d/stabilize.py#L13)

Pss.: Another one missing: https://github.com/dubhatervapoursynth/vapoursynth-cnr2

Adub
14th May 2026, 03:14
https://github.com/HomeOfVapourSynthEvolution/VapourSynth-CAS is another. Likely needs an update to API v4 as well, just based on a quick glance.

hello_hello
14th May 2026, 07:31
MiscFilters: SCDetect is trivial to write as a 3 line script or so. I've warned people for maaaaany years now but nobody cares until things stop working. It's dead DEAD DEAHAHAHAHAEAEAD

Is there an example SCDetect script somewhere?

Selur
14th May 2026, 07:51
@hello_hello: Here's a suggestion I came up with:
def SCDetect(clip: vs.VideoNode, threshold: float = 0.1, plane: int = 0) -> vs.VideoNode:
"""
Scene change detection with _SceneChangePrev/_SceneChangeNext frame properties.
Uses core.misc.SCDetect if available (plane=0 only), otherwise falls back to
a std.PlaneStats-based reimplementation.

Args:
clip : Input clip
threshold : Scene change threshold (default: 0.1, must be 0.0–1.0)
plane : Plane to analyze; only honoured in fallback path —
misc.SCDetect always uses plane 0

Returns:
Clip with _SceneChangePrev and _SceneChangeNext frame properties set.
"""
if not isinstance(clip, vs.VideoNode):
raise vs.Error('SCDetect: this is not a clip')
if not (0.0 <= threshold <= 1.0):
raise vs.Error('SCDetect: threshold must be between 0.0 and 1.0')
if clip.num_frames < 2:
raise vs.Error('SCDetect: clip must have more than one frame')

if hasattr(core, 'misc') and plane == 0:
if clip.format.color_family == vs.RGB:
sc = clip.resize.Point(format=vs.GRAY8, matrix_s='709')
sc = core.misc.SCDetect(sc, threshold=threshold)

def _copy_props(n: int, f: list[vs.VideoFrame]) -> vs.VideoFrame:
fout = f[0].copy()
fout.props['_SceneChangePrev'] = f[1].props['_SceneChangePrev']
fout.props['_SceneChangeNext'] = f[1].props['_SceneChangeNext']
return fout

return clip.std.ModifyFrame(clips=[clip, sc], selector=_copy_props)

return core.misc.SCDetect(clip, threshold=threshold)

# prev_stats[n] = diff(frame_{n-1}, frame_n) → SceneChangePrev
# next_stats[n] = diff(frame_n, frame_{n+1}) → SceneChangeNext
prev_shifted = clip.std.DuplicateFrames(0).std.Trim(last=clip.num_frames - 1)
prev_stats = core.std.PlaneStats(prev_shifted, clip, plane=plane)
next_stats = core.std.PlaneStats(clip, clip.std.Trim(first=1), plane=plane)

def _set_sc_props(n: int, f: list[vs.VideoFrame]) -> vs.VideoFrame:
fout = f[0].copy()
fout.props['_SceneChangePrev'] = int(float(f[1].props.get('PlaneStatsDiff', 0.0)) > threshold)
fout.props['_SceneChangeNext'] = int(float(f[2].props.get('PlaneStatsDiff', 0.0)) > threshold)
return fout

return clip.std.ModifyFrame(
clips=[clip, prev_stats, next_stats],
selector=_set_sc_props
)
source: https://pastebin.com/Bn2qBT8d
Not quite that short,...

hello_hello
14th May 2026, 10:45
Thanks.

Myrsloik
14th May 2026, 17:42
R76 is out.

READ THE BLOG POST ABOUT MEMORY LIMITS (https://www.vapoursynth.com/2026/05/14/r76-respecting-cache-limits/)

Selur
16th May 2026, 14:09
Using R76 on Windows 11pro, I called:
vspipe.exe c:\Users\Selur\Desktop\test.vpy -c y4m --filter-time NUL
and only got:
Error: Failed to retrieve frame 0 with error:
Traceback (most recent call last):
File "vapoursynth.pyx", line 3353, in vapoursynth.publicFunction
File "vapoursynth.pyx", line 3355, in vapoursynth.publicFunction
File "vapoursynth.pyx", line 818, in vapoursynth.FuncData.__call__
File "c:\Users\Selur\Desktop\test.vpy", line 73, in colorize_paired
result = proxy.colorize_frame_pair(png1, png2, PROMPT, 8)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "xmlrpc\client.py", line 1122, in __call__
File "xmlrpc\client.py", line 1461, in __request
File "xmlrpc\client.py", line 1166, in request
File "xmlrpc\client.py", line 1178, in single_request
File "xmlrpc\client.py", line 1291, in send_request
File "xmlrpc\client.py", line 1321, in send_content
File "http\client.py", line 1333, in endheaders
File "http\client.py", line 1093, in _send_output
File "http\client.py", line 1037, in send
File "http\client.py", line 1003, in connect
File "socket.py", line 865, in create_connection
File "socket.py", line 850, in create_connection
ConnectionRefusedError: [WinError 10061] Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte

Output 32 frames in 66.25 seconds (0.48 fps)
Filtername Filter mode Time (%) Time (s)
ModifyFrame parreq 99.98 66.24
Bicubic parallel 0.03 0.02
VideoSource unordered 0.02 0.01
Bicubic parallel 0.00 0.00
<Destroyed> <unknown> 0.00 0.00

and I made sure to disable my firewall, even disabled Windows Defender as a whole.
When using it without '--filter-time', I still see:
vspipe.exe c:\Users\Selur\Desktop\test.vpy -c y4m NUL
Error: Failed to retrieve frame 2 with error:
Traceback (most recent call last):
File "vapoursynth.pyx", line 3353, in vapoursynth.publicFunction
File "vapoursynth.pyx", line 3355, in vapoursynth.publicFunction
File "vapoursynth.pyx", line 818, in vapoursynth.FuncData.__call__
File "c:\Users\Selur\Desktop\test.vpy", line 73, in colorize_paired
result = proxy.colorize_frame_pair(png1, png2, PROMPT, 8)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "xmlrpc\client.py", line 1122, in __call__
File "xmlrpc\client.py", line 1461, in __request
File "xmlrpc\client.py", line 1166, in request
File "xmlrpc\client.py", line 1178, in single_request
File "xmlrpc\client.py", line 1291, in send_request
File "xmlrpc\client.py", line 1321, in send_content
File "http\client.py", line 1333, in endheaders
File "http\client.py", line 1093, in _send_output
File "http\client.py", line 1037, in send
File "http\client.py", line 1003, in connect
File "socket.py", line 865, in create_connection
File "socket.py", line 850, in create_connection
ConnectionRefusedError: [WinError 10061] Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte

Output 32 frames in 66.22 seconds (0.48 fps)
Preview works fine using vsViewer&co.
Even limiting my fiters to source filter + resize.Bob gives this effect and basically makes R76 not usable.

=> can anyone use R76 on Windows without problems?

Cu Selur

Ps.: In case it's relevant, I'm using the portable version and updated with 'python -m pip install -U vapoursynth'.

PPs.: Encoding with it does seem fine:
"F:\Hybrid\64bit\Vapoursynth\Lib\site-packages\vapoursynth\vspipe.exe" "J:\tmp\encodingTempSynthSkript_2026-05-16@17_56_10_2710_0.vpy" - --outputindex 0 -c y4m | F:\Hybrid\64bit\NVEncC.exe" --y4m -i - --fps 25.000 --codec av1 --sar 1:1 --lookahead 32 --output-depth 10 --vbr 0 --vbr-quality 23.00 --aq --aq-strength 5 --aq-temporal --gop-len 0 --ref 6 --multiref-l0 3 --multiref-l1 3 --bframes 3 --direct auto --bref-mode auto --no-b-adapt --mv-precision Q-pel --preset quality --colorrange limited --colormatrix smpte170m --colorrange limited --cuda-schedule sync --output "J:\tmp\test_new_1_2026-05-16@17_56_10_2710_02.av1"
just seems to be messed up in the windows command prompt

Z2697
16th May 2026, 17:09
But why is the script trying to make network connection?

Selur
16th May 2026, 17:46
my script:
# Imports
import sys
import os
import vapoursynth as vs
# getting Vapoursynth core
core = vs.core
# Limit frame cache to 48449MB
core.max_cache_size = 48449
core.std.LoadPlugin(path="F:/Hybrid/64bit/Vapoursynth/Lib/site-packages/vapoursynth/plugins2/fmtconv.dll")
core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/SourceFilter/DGDecNV/DGDecodeNV_AVX2.dll")
clip = core.dgdecodenv.DGSource("J:/tmp/m2v_478bc6d007ec94bfc67367d30d9093a4_853323747.dgi",fieldop=0) # 29.97 fps, scanorder: bottom field first
clip = core.resize.Bob(clip, tff=False)
clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_PROGRESSIVE) # scan type: progressive
clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P10)
clip = core.std.AssumeFPS(clip=clip, fpsnum=60000, fpsden=1001)
clip.set_output()

shouldn't cause this,...

Only code I saw that uses xmlrpc is from HAVC's colormnet (https://github.com/dan64/vs-deoldify/tree/05b10afd4ccffbf3b195190d09042ce871659d3f/vsdeoldify/colormnet), but I see no reason for it to be active with this script,... => atm. I suspect something with the autoloading is causing this,..
Nope, moving the vsdeolify folder out of the sites-packages folder and the issues is still there, so it's not HAVC.




ARGHGHGHG,.... my fault..... I loaded the wrong Vapoursynth file,... instead of test.vpy I should have used test1.vpy, but for some reason windows explorer didn't show the file on my desktop until I rebooted the system.

Z2697
17th May 2026, 14:37
It got me wondering, is there "actual science" behind colorization, or is it just educated guesses (automated by ML)?

Selur
17th May 2026, 15:10
Probably depends on the methods, used. Not really into it myself. The better methods nowadays rely on reference images, so it can be more than guesses if your reference isn't just a ml dream. :)

hydra3333
18th May 2026, 15:02
Thank you for the new pypi stuff and the latest vapoursynth R76.
I have attempted to test install the R76 portable version the along with some plugins from both pypi and vsrepo.
The portable install process looks to work and I have spotted what may be a couple of errors and have a query.

1. query ...

I had a number of very old family PAL VHS/VHSC captures, some 2+ generation copies where there may be significant ghosting.
A couple of years ago I used these plugins (amongst others) in attempting to fix them somewhat:

cnr2 - Temporal chroma noise reducer
yadifmod - deinterlacer Modification of Fizick's yadif avisynth filter
LGhost - Ghost reduction filter. Can be used for removing luminance ghost or edge ghost (ringing).
Also occasionally : AssRender - renders ASS / SSA and SRT (without the HTML-like markup) subtitles, uses libass to render the subtitles, which makes it the fastest, lower memory usage and most correct ASS renderer for Vapoursynth

Now I see a warning during vsrepo install indicating that each is deprecated since it uses the old v3 API in vapoursynth.
I looked for and could not readily find any pypi version.

Could you please recommend alternatives, or tell me where to ask ?


2. pypi plugin errors ...
A couple of pypi plugins throw errors during install, logs below.
I suppose I should raise an issue within those plugins github sites.

Install log for vapoursynth-ffms2 (vapoursynth-bestSource installs fine)
########## START do_install_pypi_vapoursynth_plugin vapoursynth-ffms2 ##########
########## START do_pip_install vapoursynth-ffms2 ##########
"D:\TEST\Vapoursynth_x64_R76\python.exe" -m pip install --disable-pip-version-check --no-cache-dir --upgrade --check-build-dependencies --upgrade-strategy eager --verbose --no-warn-script-location vapoursynth-ffms2
Using pip 26.1.1 from D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip (python 3.14)
Collecting vapoursynth-ffms2
Downloading vapoursynth_ffms2-5.2.1.tar.gz (3.2 kB)
Installing build dependencies: started
Running command installing build dependencies for vapoursynth-ffms2
Using pip 26.1.1 from D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip (python 3.14)
Collecting wheel-stub
Obtaining dependency information for wheel-stub from https://files.pythonhosted.org/packages/06/bc/a04db4c1ca8991c38d9cc4004adaa38309d5e236568c77965a0ea61601a0/wheel_stub-0.5.0-py3-none-any.whl.metadata
Using cached wheel_stub-0.5.0-py3-none-any.whl.metadata (2.9 kB)
Using cached wheel_stub-0.5.0-py3-none-any.whl (108 kB)
Installing collected packages: wheel-stub
Successfully installed wheel-stub-0.5.0
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Running command Getting requirements to build wheel
Getting requirements to build wheel: finished with status 'done'
ERROR: Exception:
Traceback (most recent call last):
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\cli\base_command.py", line 109, in _run_wrapper
status = _inner_run()
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\cli\base_command.py", line 102, in _inner_run
return self.run(options, args)
~~~~~~~~^^^^^^^^^^^^^^^
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\cli\req_command.py", line 101, in wrapper
return func(self, options, args)
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\commands\install.py", line 479, in run
requirement_set = resolver.resolve(
reqs, check_supported_wheels=not options.target_dir
)
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\resolution\resolvelib\resolver.py", line 99, in resolve
result = self._result = resolver.resolve(
~~~~~~~~~~~~~~~~^
collected.requirements, max_rounds=limit_how_complex_resolution_can_be
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
... etc ... (chopped for brevity to fit in this post)



Install log for vapoursynth-dfttest2-cuda (vapoursynth-dfttest2-cpu installs fine)

########## START do_install_pypi_vapoursynth_plugin vapoursynth-dfttest2-cuda ##########
########## START do_pip_install vapoursynth-dfttest2-cuda ##########
"D:\TEST\Vapoursynth_x64_R76\python.exe" -m pip install --disable-pip-version-check --no-cache-dir --upgrade --check-build-dependencies --upgrade-strategy eager --verbose --no-warn-script-location vapoursynth-dfttest2-cuda
Using pip 26.1.1 from D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip (python 3.14)
Collecting vapoursynth-dfttest2-cuda
Downloading vapoursynth_dfttest2_cuda-10.2.tar.gz (903 kB)
---------------------------------------- 903.5/903.5 kB 33.1 MB/s 0:00:00
Installing build dependencies: started
Running command installing build dependencies for vapoursynth-dfttest2-cuda
Using pip 26.1.1 from D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip (python 3.14)
Ignoring ninja: markers 'sys_platform != "win32"' don't match your environment
Collecting scikit-build-core>=0.12
Obtaining dependency information for scikit-build-core>=0.12 from https://files.pythonhosted.org/packages/07/49/b2f0fbe3165d55c02e7f9eec6a10685d518af0ef6e919ff2f589c2d15c85/scikit_build_core-0.12.2-py3-none-any.whl.metadata
Using cached scikit_build_core-0.12.2-py3-none-any.whl.metadata (16 kB)
Collecting setuptools-scm
Obtaining dependency information for setuptools-scm from https://files.pythonhosted.org/packages/5c/e1/342c4434df56aa537f6ce7647eefee521d96fbb828b08acd709865767652/setuptools_scm-10.0.5-py3-none-any.whl.metadata
Using cached setuptools_scm-10.0.5-py3-none-any.whl.metadata (6.5 kB)
Collecting packaging>=23.2 (from scikit-build-core>=0.12)
Obtaining dependency information for packaging>=23.2 from https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl.metadata
Using cached packaging-26.2-py3-none-any.whl.metadata (3.5 kB)
Collecting pathspec>=0.12.0 (from scikit-build-core>=0.12)
Obtaining dependency information for pathspec>=0.12.0 from https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl.metadata
Using cached pathspec-1.1.1-py3-none-any.whl.metadata (14 kB)
Collecting vcs-versioning>=1.0.0.dev0 (from setuptools-scm)
Obtaining dependency information for vcs-versioning>=1.0.0.dev0 from https://files.pythonhosted.org/packages/e6/60/73603fbcdbe5e803855bcce4414f94eaeed449083bd8183e67161af78188/vcs_versioning-1.1.1-py3-none-any.whl.metadata
Using cached vcs_versioning-1.1.1-py3-none-any.whl.metadata (1.6 kB)
Collecting setuptools (from setuptools-scm)
Obtaining dependency information for setuptools from https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl.metadata
Using cached setuptools-82.0.1-py3-none-any.whl.metadata (6.5 kB)
Using cached scikit_build_core-0.12.2-py3-none-any.whl (192 kB)
Using cached setuptools_scm-10.0.5-py3-none-any.whl (21 kB)
Using cached packaging-26.2-py3-none-any.whl (100 kB)
Using cached pathspec-1.1.1-py3-none-any.whl (57 kB)
Using cached vcs_versioning-1.1.1-py3-none-any.whl (79 kB)
Using cached setuptools-82.0.1-py3-none-any.whl (1.0 MB)
Installing collected packages: setuptools, pathspec, packaging, vcs-versioning, scikit-build-core, setuptools-scm
Creating C:\Users\u\AppData\Local\Temp\pip-build-env-8pkvrhlr\overlay\Scripts

Successfully installed packaging-26.2 pathspec-1.1.1 scikit-build-core-0.12.2 setuptools-82.0.1 setuptools-scm-10.0.5 vcs-versioning-1.1.1
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Running command Getting requirements to build wheel
Getting requirements to build wheel: finished with status 'done'
ERROR: Exception:
Traceback (most recent call last):
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\cli\base_command.py", line 109, in _run_wrapper
status = _inner_run()
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\cli\base_command.py", line 102, in _inner_run
return self.run(options, args)
~~~~~~~~^^^^^^^^^^^^^^^
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\cli\req_command.py", line 101, in wrapper
return func(self, options, args)
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\commands\install.py", line 479, in run
requirement_set = resolver.resolve(
reqs, check_supported_wheels=not options.target_dir
)
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\resolution\resolvelib\resolver.py", line 99, in resolve
result = self._result = resolver.resolve(
~~~~~~~~~~~~~~~~^
collected.requirements, max_rounds=limit_how_complex_resolution_can_be
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_vendor\resolvelib\resolvers\resolution.py", line 601, in resolve
state = resolution.resolve(requirements, max_rounds=max_rounds)
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_vendor\resolvelib\resolvers\resolution.py", line 434, in resolve
self._add_to_criteria(self.state.criteria, r, parent=None)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_vendor\resolvelib\resolvers\resolution.py", line 150, in _add_to_criteria
if not criterion.candidates:
^^^^^^^^^^^^^^^^^^^^
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_vendor\resolvelib\structs.py", line 194, in __bool__
return bool(self._sequence)
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 165, in __bool__
self._bool = any(self)
~~~^^^^^^
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 149, in <genexpr>
return (c for c in iterator if id(c) not in self._incompatible_ids)
^^^^^^^^
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 39, in _iter_built
candidate = func()
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 182, in _make_candidate_from_link
base: BaseCandidate | None = self._make_base_candidate_from_link(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
link, template, name, version
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "D:\TEST\Vapoursynth_x64_R76\Lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 228, in _make_base_candidate_from_link
self._link_candidate_cache[link] = LinkCandidate(
~~~~~~~~~~~~~^
link,
^^^^^
...<3 lines>...
version=version,
^^^^^^^^^^^^^^^^
)
... etc ... (chopped for brevity to fit in this post)

Myrsloik
18th May 2026, 15:19
1. You can still use them. The deprecation warning mostly means that nobody's gotten around to convert them to API4. Its actual death won't happen until there are at least 30+ more plugins available on pypi and a few long posts detailing what to use instead for deprecated things.

2. For some reason HolyWu uploaded vapoursynth-ffms2 to pypi without binaries. This gives a very cryptic and long error. Use vapoursynth-bestsource instead. It's the more reliable sequel.

No idea what the problem with vapoursynth-dfttest2-cuda is. Try creating a an issue on github.

hydra3333
22nd May 2026, 16:09
Thanks. Looking at cnr2, an AI tells me the algorithm definitely relies on serial. So:

On fmFrameState: deprecated or just discouraged?

The docs say:

fmFrameState:
For compatibility with other filtering architectures.
DO NOT USE IN NEW FILTERS.

They do not say “deprecated” in the formal API-removal sense. They say “do not use” as a strong design recommendation. The API4 docs still document it as a valid VSFilterMode, but the wording means new plugins are expected to use a different model where possible.

should I ask here if fmFrameState is a total no-no or over on github as an issue ?