GPU-accelerated VHS RF signal decoder. Takes raw RF captures (.u8 files from an RF capture device) and produces timebase-corrected (.tbc) output compatible with ld-tools for video export.
Status: Early development. NTSC only for now — support for additional video standards is planned.
cuVHS replaces the decode step of vhs-decode, running the full signal processing pipeline on the GPU:
- FM demodulation
- Sync pulse detection
- Line location + hsync refinement
- TBC luma resampling
- Chroma decode (VHS color-under)
- Dropout detection
The output is a pair of .tbc files (luma + chroma) plus a .tbc.json metadata file. To get viewable video, you still need tbc-video-export and ld-tools from the vhs-decode ecosystem.
~85 FPS on an RTX 3090.
- NVIDIA GPU (compute capability 6.0+)
- CUDA toolkit
- CMake 3.25+
- cuFFT (included with CUDA toolkit)
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)./build/cuvhs -f <sample_rate_mhz> --overwrite <input.u8> <output_base>Example with a 28 MHz capture:
./build/cuvhs -f 28 --overwrite tape.u8 tape_outputThis produces tape_output.tbc, tape_output_chroma.tbc, and tape_output.tbc.json.
Install tbc-video-export and ld-tools, then:
tbc-video-export tape_output tape_output.mkvBSD 3-Clause. See LICENSE.
If you use cuVHS in published work, please cite this repository. See CITATION.cff.