vapoursynth-analog
VapourSynth source and filters plugin for working with digitized analog video and signals.
See documentation for full details including API reference.
High-level Python API
If installed as a Python distribution (e.g. with pip), the vsanalog Python
module wraps the plugin's lower-level API with a type-hinted interface that
loads the plugin automatically.
The primary function provided by the high-level API is
vsanalog.decode_4fsc_video(…), which decodes 4𝑓𝑠𝑐-sampled analog video
signals to digital video clips. It reads time-base-corrected captures from
ld-decode and
vhs-decode (.tbc) as well as the
newer CVBS format (.cvbs, or .cvbsy/.cvbsc), detected by file extension,
and returns 32-bit float clips: YUV444PS (default), RGBS, GRAYS, or
YUV440PS for SECAM. Analytical (NTSC/PAL/SECAM/mono) and neural-network composite
decoders are available.
Example:
import vapoursynth as vs
import vsanalog
import vsdeinterlace # from vsjetpack
src = vsanalog.decode_4fsc_video(
'./Sources/my_home_video.luma.tbc',
'./Sources/my_home_movie.chroma.tbc',
decoder='ntsc3d'
)
editable = src.resize.Point(format=vs.YUV444P16)
deinterlaced = vsdeinterlace.QTempGaussMC(editable).deinterlace()
deinterlaced.set_output(0)
Low-level VapourSynth Plugin API
Whether installed as a Python distribution or if the plugin library is dropped
in a VapourSynth plugins directory, the plugin exposes a namespace named
analog available on the vapoursynth.core object. Example:
import vapoursynth as vs
src = vs.core.analog.decode_4fsc_video(
'my_big_production.tbc',
dropout_correct=True
)
editable = src.resize.Point(format=vs.YUV444P16)
field_match_ref = src.resize.Point(format=vs.YUV444P8)
field_matched = field_match_ref.vivtc.VFM(clip2=editable)
detelecined = field_matched.vivtc.VDecimate()
Installing
The simplest way to install is via pip into a Python environment such as a venv:
pip install vsanalog
This installs both the native plugin and a Python module with type-hinted
wrappers like vsanalog.decode_4fsc_video. The plugin is automatically loaded
when you use the Python module.
The wheel bundles the model weights and whatever shared libraries the plugin
needs, so VapourSynth (>= R55) is the only thing you install alongside it.
It runs the neural decoders on the CPU (Linux), on any DirectX 12 GPU via
DirectML with CPU fallback (Windows), or on Apple CoreML (macOS); the
CUDA/TensorRT and MIGraphX wheels are too large for PyPI and are published on
GitHub Releases
instead — CUDA/TensorRT for Linux and Windows, MIGraphX for Linux. They
require a CUDA or ROCm 7.x installation to load at all. CUDA ships as a 0cuda12 and a
0cuda13 build, one per toolkit major — pre-Turing cards need 0cuda12, which
is as far as NVIDIA's own support for them goes.
Alternatively, obtain or build the plugin for your operating system and place vsanalog.dll, vsanalog.dylib, or vsanalog.so into your VapourSynth plugins directory. The released plugin binaries need only VapourSynth, but they bundle no models and, off macOS, no neural-network decoders.
Implementation Notes
Signal decoding functionality comes from libchromadec, a Qt-free C-ABI library extracted from ld-chroma-decoder. It's pulled in as a Meson git wrap and linked statically, along with the trimmed SQLite it bundles, so this plugin has no Qt or system-SQLite dependency at all. libchromadec supplies the composite separation/transformation decoders (NTSC/PAL/SECAM/mono), the CVBS and TBC readers, dropout masks and corrections, and the neural-network decoders.
To ease legal distribution, this project is available under the GPL 3 license (or a compatible one), matching libchromadec.
Machine learning (Claude Opus 4.5 model) was heavily leveraged in the early development of this plugin to reduce the tedium of gluing the various components together.
Alternatives
- jsaowji’s ldzeug2 is an excellent
alternative VapourSynth video source for TBC files that pioneered the neural
network approaches to separating composited luma and chroma components.
vapoursynth-analog now exposes those models too (via libchromadec’s
ldzeug2_color_cnn/ldzeug2_luma_sepdecoders), alongside asdfqazsnbb’s nnTransform3D. ldzeug2 moves more 4𝑓𝑠𝑐 processing to the Python domain for flexible scripting; it focuses on composite NTSC, ST 170, and Japan format signals. - ld-decode-tools comes with an
ld-chroma-decodertool to decode TBC files to component R′G′B′ or Y′Cb′Cr′ stream output for use in command line workflows and anld-dropout-correcttool for generating a pre-corrected intermediate based on upstream dropout detection. - tbc-video-export is a convenient wrapper around ld-chroma-decoder and ffmpeg for producing digital video files from TBC files. It’s handy if you need to deliver a lossless interlaced intermediate to someone else for filtering or color grading.
Metadata
Release files for vsanalog 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vsanalog-0.3.0.tar.gz | 198.2 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| vsanalog-0.3.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| vsanalog-0.3.0-py3-none-manylinux_2_34_aarch64.whl | Python 3 | none | Linux glibc 2.34+ ARM64 | Details |
| vsanalog-0.3.0-py3-none-manylinux_2_28_x86_64.whl | Python 3 | none | Linux glibc 2.28+ x86-64 | Details |
| vsanalog-0.3.0-py3-none-macosx_15_0_x86_64.whl | Python 3 | none | macOS 15.0+ x86-64 | Details |
| vsanalog-0.3.0-py3-none-macosx_14_0_arm64.whl | Python 3 | none | macOS 14.0+ ARM64 | Details |
Total release size: 92.9 MB
Release files / vsanalog-0.3.0.tar.gz
| Download URL | vsanalog-0.3.0.tar.gz |
|---|---|
| Size | 198.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7b127ed1e29e60c1828938b785b42e98e2d6ae30af74c1fdcae1abc5a6e695ed
|
|
BLAKE2b-256 checksum How to use checksums |
860a3a15c3883213052d283b37ec67142f034a1cb1f4a4a297b142c778772d11
|
| 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 Aug 16, 2026.
Transparency logRelease files / vsanalog-0.3.0-py3-none-win_amd64.whl
| Download URL | vsanalog-0.3.0-py3-none-win_amd64.whl |
|---|---|
| Size | 30.0 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
701715c0a04b3fbc2dbe2f2e8e741fdb55bca0151fe0eb3c431e47b1bb4f6380
|
|
BLAKE2b-256 checksum How to use checksums |
f0a578f127a08cacd1f601a6d8fdd4c5bb162c0bde45d9033a18e5184453779b
|
| 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 Aug 16, 2026.
Transparency logRelease files / vsanalog-0.3.0-py3-none-manylinux_2_34_aarch64.whl
| Download URL | vsanalog-0.3.0-py3-none-manylinux_2_34_aarch64.whl |
|---|---|
| Size | 18.2 MB |
| Tags | Linux glibc 2.34+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
26d5b4365c90e58c8b186420e8297a0d2d78784e34cf8e41b61510c3b8129d04
|
|
BLAKE2b-256 checksum How to use checksums |
18cc9ddfd8383a1e697918ab07b8d56299b6f941197fde598b1ac6c81f6f58c6
|
| 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 Aug 16, 2026.
Transparency logRelease files / vsanalog-0.3.0-py3-none-manylinux_2_28_x86_64.whl
| Download URL | vsanalog-0.3.0-py3-none-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 22.5 MB |
| Tags | Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
927a4d18c5cec3c18446d480cff0cc0ba44c88892e7a6beee8f77da62378ff26
|
|
BLAKE2b-256 checksum How to use checksums |
82394e16d22e256d3655a8a604cb2a5935334667a39fcb22a32d3615e2552086
|
| 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 Aug 16, 2026.
Transparency logRelease files / vsanalog-0.3.0-py3-none-macosx_15_0_x86_64.whl
| Download URL | vsanalog-0.3.0-py3-none-macosx_15_0_x86_64.whl |
|---|---|
| Size | 11.5 MB |
| Tags | Python 3 macOS 15.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
9cb03d811d78591506c38af44cea856cac184081838d2371d44942385320a496
|
|
BLAKE2b-256 checksum How to use checksums |
409de46923b4db1beac7061466c69cee572e038ee7805bbb7e11c4e4fc80ff6e
|
| 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 Aug 16, 2026.
Transparency logRelease files / vsanalog-0.3.0-py3-none-macosx_14_0_arm64.whl
| Download URL | vsanalog-0.3.0-py3-none-macosx_14_0_arm64.whl |
|---|---|
| Size | 10.5 MB |
| Tags | Python 3 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
bae971bbc14f6ff44c966e06b74112761f05413e978344c9bb36b8a5082b8d56
|
|
BLAKE2b-256 checksum How to use checksums |
755f21ad26ee15b2b8c01733b7a97e1337c53f7d4560edaab718fab84b70c0df
|
| 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 Aug 16, 2026.
Transparency log