open-svpflow
open-svpflow is a drop-in open-source replacement for SVPFlow's VapourSynth plugins in Rust. It produces the same frames as SVPFlow (matched to version 4.3.0.168) and runs faster on both CPU and GPU.
It started as a side project, mostly to see if I could get couler's smoothie-rs running in a browser. The demo is the result:
This proof of concept runs open-svpflow client-side in the browser as WASM and renders with WebGPU, using WebCodecs. The browser version runs about 2-3x slower than the native plugins, since WASM can't use AVX2 or AVX-512. If it's a lot slower than that for you, check chrome://gpu (or about:support for Firefox) and make sure hardware acceleration and WebGPU are enabled, otherwise it falls back to rendering on the CPU.
What's implemented
svpflow1:SuperandAnalyse, including super-frame pyramids, multi-level predictors, SAD/SATD and chroma costs, and hex2, UMH, and exhaustive motion search.svpflow2:SmoothFpsrendering for algorithms 1, 2, 11, 13, 21, 22, and 23, with scene handling, masks, CPU rendering, and the GPU path.- Native I444 input and output, which the original SVPFlow doesn't support.
- VapourSynth API 4 support, so it works on current VapourSynth (R80 and newer can't load the original at all, since it only has API 3).
Output matches the original byte for byte in everything I've tested, on both CPU and GPU. But GPU algorithms 1 and 2 are the exception, since the original reads uninitialized memory there and doesn't even match its own previous run (±1 on about 0.01% of pixels, same as ours). So it should work anywhere SVPFlow already does, whether that's smoothie, SVP itself, mpv or your own scripts.
Benchmarked on a 1080p 200 fps Counter-Strike 2 clip interpolated to 1920 fps through smoothie's VapourSynth script (Ryzen 5 7600X, RTX 4060, Linux):
| Preset | Path | Original | open-svpflow | Speed vs original | Output |
|---|---|---|---|---|---|
faster |
CPU | 305.2 fps | 819.2 fps | 2.68x | identical |
faster |
GPU | 1110.8 fps | 1660.5 fps | 1.49x | identical |
medium (default) |
CPU | 225.1 fps | 535.7 fps | 2.38x | identical |
medium (default) |
GPU | 310.2 fps | 602.8 fps | 1.94x | identical |
The speedup mainly comes from AVX2/AVX-512 motion search, running part of that search on the GPU (when using GPU mode), and caching work the original redoes for every frame.
Install
pip install open-svpflow
It install with an assumption that you already have VapourSynth installed in the same Python environment (we deliberately not include it as a dependency). Wheels are available for Windows x64, Linux x64 and arm64, and macOS x64 and arm64.
Releases
Download latest nightly builds for Windows, Linux, and macOS from Releases. Versioned releases follow semver and are published to PyPI.
New releases are reproducible and immutable once published.
To reproduce the binaries, check out the release commit in a clean directory and use the matching build environment from the build workflow. Run bash .github/build.sh <target> with the target from the release's BUILD.txt, then compare the files in dist/ with the extracted release.
Build
Rust 1.88 or newer:
cargo build --release -p svpflow1 -p svpflow2
The plugins end up in target/release/: svpflow1_vs.dll and svpflow2_vs.dll on Windows, libsvpflow1_vs.so and libsvpflow2_vs.so on Linux, .dylib on macOS.
Licensed under Apache-2.0.
Metadata
Release files for open-svpflow 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| open_svpflow-0.1.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| open_svpflow-0.1.0-py3-none-manylinux_2_34_x86_64.whl | Python 3 | none | Linux glibc 2.34+ x86-64 | Details |
| open_svpflow-0.1.0-py3-none-manylinux_2_34_aarch64.whl | Python 3 | none | Linux glibc 2.34+ ARM64 | Details |
| open_svpflow-0.1.0-py3-none-macosx_11_0_x86_64.whl | Python 3 | none | macOS 11.0+ x86-64 | Details |
| open_svpflow-0.1.0-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
Total release size: 3.9 MB
Release files / open_svpflow-0.1.0-py3-none-win_amd64.whl
| Download URL | open_svpflow-0.1.0-py3-none-win_amd64.whl |
|---|---|
| Size | 701.3 kB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
80243947685fcd0b4f271ecd9a9777a204edff82ee08b1afe8039f4e5bf46943
|
|
BLAKE2b-256 checksum How to use checksums |
960b62d41969960e2caac802e44cfd065c2b392014e9b7f7e643217e3448c221
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency logRelease files / open_svpflow-0.1.0-py3-none-manylinux_2_34_x86_64.whl
| Download URL | open_svpflow-0.1.0-py3-none-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 921.0 kB |
| Tags | Linux glibc 2.34+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
803040a8c55f673ba347e6cb5099c1d6a7dd9af576ace377c76747db5ede8e58
|
|
BLAKE2b-256 checksum How to use checksums |
ed29d06883bce670912e2f54b37763124ec1ac4b7cf22e97267893e7af7523b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency logRelease files / open_svpflow-0.1.0-py3-none-manylinux_2_34_aarch64.whl
| Download URL | open_svpflow-0.1.0-py3-none-manylinux_2_34_aarch64.whl |
|---|---|
| Size | 746.9 kB |
| Tags | Linux glibc 2.34+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
39d1eae75db41555262788c61c14ff64d21262ae3f64276f3d7b8f5249405b3e
|
|
BLAKE2b-256 checksum How to use checksums |
7b8f4b7c471ae994e71893f28b065d41ead6028f6e6d921bf656766debf33c29
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency logRelease files / open_svpflow-0.1.0-py3-none-macosx_11_0_x86_64.whl
| Download URL | open_svpflow-0.1.0-py3-none-macosx_11_0_x86_64.whl |
|---|---|
| Size | 849.6 kB |
| Tags | Python 3 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
a6af98880a431cbf6966610230cea5c0d719a4d489f643cf8b24a1cc0208d9f9
|
|
BLAKE2b-256 checksum How to use checksums |
4969f09a0ce3a72eda9ef43b614c7279921cf6840265121ad748af133764c62e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency logRelease files / open_svpflow-0.1.0-py3-none-macosx_11_0_arm64.whl
| Download URL | open_svpflow-0.1.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 685.4 kB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
db5887da1b1b0bac4dcf14aba755c4d2ef05f14e5fb77d008df0f012de266955
|
|
BLAKE2b-256 checksum How to use checksums |
b914b7927a4390475bdb36dfa7c97800cfc465c8fce1c45b0d020d9ee6ed6178
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency log