Vapoursynth Portable Installation Tutorial for Windows (R73 or older)
July 17, 2026 ยท View on GitHub
A short Guide to install Vapoursynth Portable, as well as everything one needs to get started.
1. Install Vapoursynth Portable
- Download the latest
Install-Portable-VapourSynth-RXX.ps1from the official Vapoursynth GitHub. - Place the file in the directory where you want your Vapoursynth Portable folder to be.
- Execute the file by right-clicking it and selecting "Run with PowerShell". This will first install Python, followed by Vapoursynth. Since everything is portable, it will not interfere with any other Python versions you may have installed on your system.
- Follow the instructions in the console.
- That's it! A new folder named
vapoursynth-portableshould appear. You can now delete the.ps1file.
2. Install a Source Plugin
Source plugins are required to read video files. Bestsource is the most commonly used option.
- Download the latest
BestSource-RX.7zfrom the official BestSource GitHub. - Unzip if needed and place the
.dllfile in yourvapoursynth-portable/vs-pluginsfolder.
Tip
To ensure exact frame perfect reading, an index will be automatically build for new video files. This may take a minute for very large files, but has to be done only once. No worries if nothing seems to happen at first or your previewer seems to freeze.
3. Install an Encoder
Encoders are required to write video files. FFmpeg is the most commonly used option.
- Download the latest version of FFmpeg from the official FFmpeg website. In the "Get packages & executable files" section, click on Windows and choose a distributor. Ensure the file you download does not have "shared" in its name.
- Unzip if needed and place the
ffmpeg.exeinto yourvapoursynth-portablefolder. - That's it! You can delete any other files that came with FFmpeg.
Tip
Example command to encode a Vapoursynth script. You must be in the same folder as your vspipe.exe:
vspipe -c y4m "example_script.vpy" - | ffmpeg -i - -c:v libx264 -crf 16 -preset slow "output.mkv"
Warning: This command is for cmd and will not work in powershell.
Tip
If you add vspipe.exe and ffmpeg.exe to your Windows PATH, you can use them from any directory.
4. Install Vapoursynth Editor and Previewer
- Download the latest
VapourSynth.Editor-r19-mod-X.X.zipandVC_redist.x64.exefrom GitHub. - Install
VC_redist.x64.exe, then unzip all files from the zip into thevapoursynth-portablefolder. - That's it! You can now delete the zip file and run the editor using the
vsedit.exe.
Tip
Some nice functionality:
- Press
F5in the editor to open or refresh the preview window. (A working Vapoursynth script is required to open the preview.) - You can
right clickon the preview >Save imageorCopy to clipboard - You can
scrolltrough the frames if your mouse is on the frame counter or timeline Middle mouse clickon preview changes the viewing mode betweennative to your screen,zoom, andfill preview window. Zoom factor and scaling algorithm is adjustable in the bottom right.- Output clip properties are shown at the very bottom of the preview window. For more info on each individual frame,
right clickon the preview >Toggle frame properties panel - If you set additional output clips like this, you can quickly compare them by
scrollingon the bottom leftIndexdropdown:
clip.set_output(0)
clip_denoised.set_output(1)
clip_upscaled.set_output(2)
5. Your first Vapoursynth Project
Every Vapoursynth script needs a few things. Shown here in this simple example. Save it as either a .vpy or .py file and try previewing it with the Vapoursynth Editor.
### 1. initialize vapoursynth
# imports vapoursynth into this script
import vapoursynth as vs
# get the core object, which acts like the engine for all vapoursynth operations
core = vs.core
### 2. load video clips
# load a video clip into the script and give it the name "clip"
# let's assume it is a common video in YUV format, 420 chroma subsampling and a bit depth of 8.
# if you don't know what this is, chatgpt can help to explain the basics.
clip = core.bs.VideoSource(source="path/to/your_video.mp4")
### 3. tag the clip
# it is important to let vapoursynth know how to interpret the colorimetry information of the clip
# to do that, choose ONE of the following lines. 709 is usually HD content, 601 NTSC for american SD, and 601 PAL for european SD
# see the bottom of the resize documentation for a full list of all possible values: http://www.vapoursynth.com/doc/functions/video/resize.html
clip = clip.std.SetFrameProps(_Matrix=vs.MATRIX_BT709, _Transfer=vs.TRANSFER_BT709, _Primaries=vs.PRIMARIES_BT709) # Rec.709
clip = clip.std.SetFrameProps(_Matrix=vs.MATRIX_ST170_M, _Transfer=vs.TRANSFER_BT601, _Primaries=vs.PRIMARIES_ST170_M) # BT.601 NTSC
clip = clip.std.SetFrameProps(_Matrix=vs.MATRIX_BT470_BG, _Transfer=vs.TRANSFER_BT601, _Primaries=vs.PRIMARIES_BT470_BG) # BT.601 PAL
### 4. filter the clip
# you can now filter the clip in various ways.
# as an example we will do a few format conversions, resize to 1280x720, and add a blur.
# for more information on each filter, check the official documentation: http://www.vapoursynth.com/doc/functions/video/resize.html
# it is good common pratice to convert the clip to 16bit first. doing filtering in bit depths higher than 8 reduces banding and other artifacts.
# this converts the input clip from YUV420P8 to YUV420P16. YUV is the format, 420 the chroma subsampling, and 16 is the bit depth.
# a list of all available formats can be found here: https://www.vapoursynth.com/doc/pythonreference.html#format
clip = core.resize.Point(clip, format=vs.YUV420P16)
# resize the clip to 1280x720
clip = core.resize.Bilinear(clip, width=1280, height=720)
# add a simple box blur to the clip
clip = core.std.BoxBlur(clip, hradius=10, hpasses=3, vradius=10, vpasses=3)
# some filters require the input clip to be in RGB format. this converts to float RGB.
clip = core.resize.Bilinear(clip, format=vs.RGBS)
# convert from RGB back to YUV. a YUV clip always needs a matrix coefficient.
clip = core.resize.Bilinear(clip, format=vs.YUV420P16, matrix_s="709")
### 5. output the video clip
# first convert it to the output format we want
clip = core.resize.Bilinear(clip, format=vs.YUV420P8)
# and lastly specify that the clip called "clip" is what the script should output
clip.set_output()
6. Install Additional Vapoursynth Plugins
Installing Vapoursynth plugins is straightforward: download and place them in the correct folder.
If you are looking for specific plugins, or just want to see what is available, the Vapoursynth Database (VSDB) makes it very easy. Not everything is listed there, but a lot!
- Download the plugin. You can download directly from VSDB, but it's recommended to check the GitHub link for potentially more up-to-date versions. On GitHub, you can find download links on the right in the "Releases" section.
- Unzip if needed and place the
.dllfile in yourvapoursynth-portable/vs-pluginsfolder. - That's it! You can now use the plugin in Vapoursynth.
Tip
Rarely a plugin has additional dependencies, or special installation instructions. These are usually detailed in the GitHub README or on the download page.
Tip
If you are seeing an error message similar to this one, you are missing a plugin, or one of its dependencies:
AttributeError: No attribute with the name mv exists. Did you mistype a plugin namespace?
In this case we are missing mvtools indicated by the mv.
7. Install Additional Vapoursynth Scripts
Installing Vapoursynth scripts is similar to plugin installation.
If you are looking for specific scripts, or just want to see what is available, the Vapoursynth Database (VSDB) makes it very easy. Not everything is listed there, but a lot!
- Download the script. You can download directly from VSDB, but it's recommended to check the GitHub link for potentially more up-to-date versions. On GitHub, you can find download links on the right in the "Releases" section. If no "Releases" section exists, click the green "Code" button and select "Download Zip".
- If the script comes in a zip file, unzip it.
- If it's a single
.pyfile, place it directly in thevapoursynth-portable/vs-scriptsfolder.
If it's a folder containing multiple.pyfiles or subfolders, place the entire folder in thevapoursynth-portable/vs-scriptsfolder. - Scripts often depend on plugins, python packages, or other scripts. Check the GitHub README or download page for details.
- That's it! You can now use the script in Vapoursynth.
Tip
Scripts often have additional dependencies. These are usually detailed in the GitHub README or on the download page.
Tip
If you are seeing an error message similar to this one, you are missing a script, python package, or one of its dependencies:
ModuleNotFoundError: No module named 'numpy'
In this case we are missing the python package numpy.
8. Install Additional Python Packages for Vapoursynth
Some scripts require additional Python packages to work. As an example we will use the numpy package, which is often needed.
- Open your vapoursynth-portable folder.
- Click on the address bar at the top (where the folder path is shown), type
cmd, and press Enter. This will open the console at the location of the vapoursynth-portable folder. - Since we are using a portable Python, we need to adjust the common pip commands you will find on the internet a little.
Common:pip install numpy
Adjusted:python -m pip install numpy
By adding "python -m" in front, we point to the python version inside the vapoursynth-portable folder. - That's it! You can now use the python package in Vapoursynth.
Tip
Here is an additional example with pytorch:
common: pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
adjusted: python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
Tip
Some people make their scripts installable as packages too. If you see this and would like to do that, adjust those commands too:
common: pip install -U git+https://github.com/pifroggi/vs_colorfix.git
adjusted: python -m pip install -U git+https://github.com/pifroggi/vs_colorfix.git
Scripts installed this way will be located in \Lib\site-packages instead of your scripts folder.
9. Common Errors
Some common issues when trying to use Vapoursynth.
Failed to initialize VSScript when trying to encode a video using vspipe and ffmpeg.
- Explanation: The error can have many causes, but in this specific situation it may be that you are accidentaly using a command made for CMD in Powershell. Powershell does not support everything CMD does and sometimes needs different commands.
- Solution: Try using CMD instead.
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position XX-XX: truncated \uXXXX escape when trying to read a video file.
- Explanation: The file path is written using backslashes
\and Python interprets them as escape characters. - Solution: Prefix the path with r
r"C:\path\to\video.mp4"or replace backslashes with normal slashes"C:/path/to/video.mp4".
AttributeError: module 'vapoursynth' has no attribute 'get_core' when trying to import or use a function from a Vapoursynth script.
- Explanation: You are using an old Vapoursynth script, which still uses
vs.get_core()to initialize the Vapoursynth core. This was changed tovs.corein newer versions. - Solution: Open the script in question and replace
vs.get_core()withvs.core. The line should be somewhere near the top and likely sayscore = vs.get_core()in full.
Analyse: Function does not take argument(s) named _global or Analyse: Function does not take argument(s) named _lambda when trying to use a function from a Vapoursynth script.
- Explanation: Some words like "global" are reserved in the Python language and can not be used as function arguments. In the past to circumvent this issue, an underscore was put in front of such arguments. But at some point this was changed to a trailing underscore like this:
global_. Common accurances are when trying to use older versions of theG41Funorhavsfuncscripts. - Solution: Open the script in question and replace all instances of
_globalwithglobal_. Do the same if it happens with other arguments like_lambda.