This module provides classes to encode and stream frames from a VTK OpenGL render window using video codecs. It supports video encoding with VP9 (through libvpx) and H.264/H.265 (through NVENC).
VTKStreaming is available on PyPi on the following platforms:
- Linux x86_64 for python 3.10 to 3.13 included.
- Windows x86_64 for python 3.10 to 3.13 included.
- MacOSX arm64 for python 3.10 to 3.13 included.
It is currently based on VTK 9.6.0.
pip install vtk-streamingThere are two build flows:
- Development build: an editable install into a local virtual environment,
built without build isolation. Rebuilds are fast and the generated
compile_commands.jsonstays valid, so clangd/IDE tooling works. - Release build: cibuildwheel produces the exact same distributable wheel as CI, in an isolated environment.
Requirements (both flows):
- Linux: A C++ compiler (GCC 11.4+ or any other compiler supported by VTK.)
- Windows: MSVC (Visual Studio Build Tools). (ensure visual studio environment is initialized)
- macOS: Xcode command line tools. (
xcode-select --installshould have completed successfully)
We recommend uv; it reads the vtk-sdk package
index from pyproject.toml, so no extra index flags are needed.
The editable install runs with --no-build-isolation, so the build
requirements (scikit-build-core, vtk-sdk, vtk-sdk-python-wheel-helper)
must be present in the environment first, the dev dependency group installs
them along with the test dependencies.
Linux/macOS:
uv venv -p 3.13
. .venv/bin/activate
uv pip install --group dev
uv pip install -e . --no-build-isolationWindows (open a PowerShell with MSVC initialized, e.g. Visual Studio Developer PowerShell):
uv venv -p 3.13
.venv\Scripts\Activate.ps1
uv pip install --group dev
uv pip install -e . --no-build-isolationAfter changing C++ sources, rebuild by re-running the editable install:
uv pip install -e . --no-build-isolationThe CMake build tree persists under build/<wheel_tag>/, which keeps generated
module headers on disk and compile_commands.json valid.
Run the tests with:
pytest tests/ -vWheels are built with cibuildwheel in an
isolated environment; all configuration lives in [tool.cibuildwheel] in
pyproject.toml.
Requirements:
- Linux: Docker (the build runs in a manylinux container).
- Windows: MSVC (Visual Studio Build Tools). (ensure visual studio environment is initialized)
- macOS: Xcode command line tools. (
xcode-select --installshould have completed successfully)
Build a wheel for one Python/platform target:
# Linux
uvx cibuildwheel --only cp310-manylinux_x86_64
# Windows
uvx cibuildwheel --only cp310-win_amd64
# macOS
uvx cibuildwheel --only cp310-macosx_arm64uvx comes with uv; alternatively
pipx run cibuildwheel or if you use pip:
pip install cibuildwheel
# Linux
cibuildwheel --only cp310-manylinux_x86_64
# Windows
cibuildwheel --only cp310-win_amd64
# macOS
cibuildwheel --only cp310-macosx_arm64Substitute cp310/cp311/cp312/cp313 to target other Python versions. The wheel is
written to wheelhouse/ and can be installed directly:
pip install wheelhouse/vtk_streaming-*.whl- examples/simple_encoder_decoder.py - Live VP9 encode/decode round-trip with two render windows side by side.
- examples/resize_encoder_decoder.py - VP9 encode/decode round-trip that survives window resizes.
- examples/simple_nvenc_record.py - Record a render window for later playback using NVENC. This needs
ffplayto playback the .h264 file.
- For issues with the API, usage or bugs in VTKStreaming libraries, please report them on the original repository.
- For issues with wheel installation, supported Python and VTK versions or Python-side issues, please report them on the GitHub Fork.