nvidia-vfx Python Wheel README
nvidia-vfx
nvidia-vfx provides Python bindings for the NVIDIA VFX SDK. It includes the VideoSuperRes, VideoFrameGeneration, and TrueHDR effects for GPU-accelerated video enhancement, frame interpolation, and SDR-to-HDR10 conversion from Python.
Features
- Video Frame Generation – generate intermediate frames between consecutive frames for smoother playback or slow motion.
- Video Super Resolution – upscale and enhance SDR video up to 4x while reducing compression artifacts.
- TrueHDR – convert SDR frames to HDR10 with configurable contrast, saturation, middle gray, target luminance, and debanding.
- Same-resolution denoise/deblur – set output dimensions equal to input and use denoise or deblur quality levels to clean noisy or blurry footage without changing resolution.
- RGB10A2 image encoding - pass packed 10-bit RGBA frames to VideoSuperRes or VideoFrameGeneration as
(H, W)CUDAuint32DLPack tensors and receive packeduint32output. - Zero-copy interop – exchange data with PyTorch, CuPy, and other frameworks via the DLPack protocol.
- GPU-accelerated – runs entirely on NVIDIA GPUs with Tensor Cores for real-time or near-real-time performance on supported hardware.
Requirements
- Python: 3.10 or later
- GPU: NVIDIA GPU with Tensor Cores (Turing, Ampere, Ada, Blackwell, or Hopper architecture)
- GPU driver:
- Windows: 570.65 or later (for Tesla Compute Cluster (TCC) devices, 595 or later is required)
- Linux: 570.190+, 580.82+, or 590.44+
- OS:
- Windows: 64-bit Windows 10 or later
- Linux: Ubuntu 20.04, 22.04, 24.04, Debian 12, or RHEL 8/9
Installation
pip install nvidia-vfx
This installs the Python bindings; at runtime nvidia-vfx loads the NVIDIA VFX libraries bundled in the wheel.
Video Super Resolution
PyTorch
import torch
from nvvfx import VideoSuperRes
# Example input: 1080p RGB frame on CUDA in [0, 1] range
frame = torch.rand(3, 1080, 1920, device="cuda", dtype=torch.float32)
# Create effect with standard HIGH quality (default)
vsr = VideoSuperRes(quality=VideoSuperRes.QualityLevel.HIGH)
# Set output dimensions (e.g. 2x upscale)
vsr.output_width = 3840 # 1920 * 2
vsr.output_height = 2160 # 1080 * 2
vsr.load()
# Run Video Super Resolution; returns DLPack capsule
result = vsr.run(frame)
# IMPORTANT: convert and clone before reusing the effect
out = torch.from_dlpack(result.image).clone()
print(out.shape) # -> (3, 2160, 3840)
CuPy
import cupy as cp
from nvvfx import VideoSuperRes
# Example input: 720p RGB frame on CUDA in [0, 1] range
frame = cp.random.rand(3, 720, 1280, dtype=cp.float32)
# Same-resolution denoise: output dimensions = input dimensions
vsr = VideoSuperRes(quality=VideoSuperRes.QualityLevel.DENOISE_HIGH)
vsr.output_width = 1280
vsr.output_height = 720
vsr.load()
result = vsr.run(frame)
# IMPORTANT: convert and copy before the next call
out = cp.from_dlpack(result.image).copy()
print(out.shape) # -> (3, 720, 1280)
RGB10A2 Input
For packed 10-bit input, use
VideoSuperRes(image_encoding=VideoSuperRes.ImageEncoding.RGB10A2).
Input must be a contiguous (H, W) CUDA uint32 tensor; output is a packed
uint32 tensor with shape (output_height, output_width).
Packed pixel layout is R in bits [9:0], G in [19:10], B in [29:20], and A
in [31:30].
Output Dimensions and Quality Overview
- Set
output_widthandoutput_height(in pixels), then callload()beforerun(). Input size is inferred from each frame; use output size to control upscaling or same-resolution processing. - Upscaling (2x, 3x, 4x): Set
output_widthandoutput_heightto the desired size (e.g. 2x input width and height). Use standard quality levels (e.g.VideoSuperRes.QualityLevel.HIGH) or high-bitrate levels for clean sources. - Same-resolution (denoise/deblur): Set
output_widthandoutput_heightequal to the input dimensions. Use aDENOISE_*orDEBLUR_*quality level. QualityLevelis anIntEnum(e.g.VideoSuperRes.QualityLevel) with values grouped into:- Standard upscaling modes (BICUBIC through ULTRA)
- Denoise modes (
DENOISE_LOW...DENOISE_ULTRA) - Deblur modes (
DEBLUR_LOW...DEBLUR_ULTRA) - High-bitrate upscaling modes (
HIGHBITRATE_LOW...HIGHBITRATE_ULTRA) - Streaming modes (
STREAMING_MEDIUM,STREAMING_ULTRA)
Pass a QualityLevel enum member to the quality argument (e.g. VideoSuperRes.QualityLevel.HIGH).
Best Practices
- For
ImageEncoding.RGB8, keep tensors on the GPU and in channels-first RGB(3, H, W)format withfloat32values in[0.0, 1.0]. ForImageEncoding.RGB10A2, pass packed(H, W)CUDAuint32tensors. - Use moderate quality levels for interactive previews, and then switch to ULTRA or high-bitrate variants for final renders.
run()returns aVideoSuperResOutputwhose.imageis a DLPack capsule. Convert withtorch.from_dlpack(result.image).clone()orcp.from_dlpack(result.image).copy()and keep that copy before the nextrun()so the underlying buffer is not overwritten.
Video Frame Generation
import torch
from nvvfx import VideoFrameGeneration
previous_frame = torch.rand(3, 1080, 1920, device="cuda", dtype=torch.float32)
current_frame = torch.rand(3, 1080, 1920, device="cuda", dtype=torch.float32)
with VideoFrameGeneration(VideoFrameGeneration.Mode.MEDIUM) as vfg:
vfg.input_width = 1920
vfg.input_height = 1080
vfg.load()
result = vfg.run(previous_frame, current_frame)
generated_frame = torch.from_dlpack(result.image).clone()
Set frame_multiplier to N and call run() with each one-based index from 1 through N - 1 for uniform interpolation. Use run_at_timestep(previous_frame, current_frame, timestep) for an explicit position in (0.0, 1.0). Pass shot_change=True for known shot changes, or set automatic_shot_change_detection_enabled before load().
RGB10A2 Input
For packed 10-bit frame generation, use
VideoFrameGeneration(image_encoding=VideoFrameGeneration.ImageEncoding.RGB10A2).
Both inputs must be contiguous (H, W) CUDA uint32 tensors; the output uses the
same packed shape and dtype.
Packed pixel layout is R in bits [9:0], G in [19:10], B in [29:20], and A
in [31:30].
TrueHDR
import torch
from nvvfx import TrueHDR
# SDR input: RGB channels-first, float32, CUDA, [0, 1]
frame = torch.rand(3, 1080, 1920, device="cuda", dtype=torch.float32)
with TrueHDR(luminance=1000) as thdr:
result = thdr.run(frame)
hdr10 = torch.from_dlpack(result.image).clone()
print(hdr10.shape, hdr10.dtype) # -> (1080, 1920) torch.uint32
TrueHDR is same-resolution (output shape matches the input) and lazy-loading (load() runs on the first run(), or call it explicitly to prewarm). Tunables (contrast, saturation, middle_gray, luminance, debanding_off) may be set at construction or reassigned between calls.
The output is a packed (H, W) CUDA uint32 tensor. Packed pixel layout is R in bits [9:0], G in [19:10], B in [29:20], and A in [31:30].
Documentation
For the complete API reference, parameter details, and advanced usage, refer to the NVIDIA Video Effects (VFX) Python Bindings Guide.
Changelog
0.2.0.0
- Internal VFX SDK version: 1.3.0.0.
- Video Frame Generation – interpolate frames via the
VideoFrameGenerationeffect. - TrueHDR – convert SDR frames to HDR10 (packed R10G10B10A2 output) via the
TrueHDReffect. - Added
VideoFrameGeneration.ImageEncoding.RGB10A2for packed 10-bit input pairs and output. - Added
VideoSuperRes.ImageEncoding.RGB10A2for packed 10-bit RGBA input and output via DLPackuint32tensors.
0.1.0.1 (first release)
- Initial release of the
nvidia-vfxPython wheel. - Internal VFX SDK version: 1.2.0.0.
- Video Super Resolution – upscale, denoise, and deblur via the
VideoSuperReseffect. - Zero-copy interop with PyTorch, CuPy, and other frameworks via the DLPack protocol.
Metadata
Release files for nvidia-vfx 0.2.0.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 | Provenance | |
|---|---|---|---|---|
| nvidia_vfx-0.2.0.0.tar.gz | 3.7 kB | Without provenance | Details |
Release files / nvidia_vfx-0.2.0.0.tar.gz
| Download URL | nvidia_vfx-0.2.0.0.tar.gz |
|---|---|
| Size | 3.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
20860a9453aae850a7f890b06698b3f40e14a564a3044f0c3386f54cd69dd0d8
|
|
BLAKE2b-256 checksum How to use checksums |
2ea619292f4ec21e44dce7fbd982612c2f9bd4b1c24414af8d5870b77db9198f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for nvidia-vfx 0.2.0.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.