vigilo-stream
Zero-copy multi-modal stream fusion engine for real-time AI pipelines in Python.
vigilo-stream provides Python bindings for the stream fusion engine in vigilo-core. It gives Python vision and proctoring pipelines direct access to video frames and temporal rule evaluation without copying memory across the FFI boundary.
- Zero-copy buffer sharing: Frame memory allocated in Rust is exposed directly to NumPy and PyTorch through
__array_interface__and the buffer protocol. - Lock-free frame exchange: Capture workers publish frames through
ArcSwapslots, discarding stale frames automatically instead of building queues. - Deterministic temporal fusion: The
FusionEngineprocesses detection signals through configurable hysteresis bands, hold timers, and score accumulators. Given the same input, replay produces identical events. - Multimodal detection: Wraps the
vigilo-coreinference pipeline for face detection (YuNet), head pose (MobileNetV3), gaze estimation (MobileGaze), object detection (YOLOX-Nano), and identity matching (ArcFace).
Installation
pip install vigilo-stream
You can import the library using either vigilo_stream or the rustream alias.
Quick start
import vigilo_stream
import numpy as np
# 1. Zero-copy frame operations (no neural model files required)
frame = vigilo_stream.create_synthetic_frame(1280, 720, seq=1, r=255, g=0, b=0)
print(frame.width, frame.height, frame.shape) # 1280 720 (720, 1280, 3)
# Expose Rust memory directly as a NumPy array without copying
arr = np.asarray(frame)
assert arr.__array_interface__["data"][0] == frame.__array_interface__["data"][0]
# 2. Vision and proctoring pipeline
# Pipeline automatically downloads default model weights on first run
with vigilo_stream.Pipeline(models_dir="models") as pipe:
pipe.start("camera:0") # Accepts "camera:0", "file:clip.mp4", or "dir:frames/"
while pipe.is_running():
frame = pipe.poll_frame()
if frame:
img = np.asarray(frame)
snapshot = pipe.snapshot()
if snapshot:
print(f"Faces: {snapshot.face_count}, Pose: {snapshot.head_pose}")
events = pipe.events()
for event in events:
print(f"Violation: {event}")
# 3. Headless deterministic stream fusion (no neural models or camera required)
engine = vigilo_stream.FusionEngine()
events = engine.replay("recorded_session.jsonl")
print(f"Replayed session produced {len(events)} events.")
Model weights
The neural pipeline uses ONNX Runtime models:
- Face detection: YuNet (
face_detection_yunet_2023mar.onnx) - Head pose: MobileNetV3 (
headpose_mobilenetv3_small.onnx) - Gaze estimation: MobileGaze (
mobileone_s0_gaze.onnx) - Object detection: YOLOX-Nano (
yolox_nano.onnx)
By default, Pipeline(models_dir="models") downloads missing models on first use. You can also download them explicitly:
import vigilo_stream
vigilo_stream.download_models("models")
Alternatively, download them using curl:
mkdir -p models
curl -sSL -o models/face_detection_yunet_2023mar.onnx https://github.com/opencv/opencv_zoo/raw/main/models/face_detection_yunet/face_detection_yunet_2023mar.onnx
curl -sSL -o models/headpose_mobilenetv3_small.onnx https://github.com/yakhyo/head-pose-estimation/releases/download/weights/mobilenetv3_small.onnx
curl -sSL -o models/mobileone_s0_gaze.onnx https://github.com/yakhyo/gaze-estimation/releases/download/weights/mobileone_s0_gaze.onnx
curl -sSL -o models/yolox_nano.onnx https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_nano.onnx
Architecture
Camera / Video File / Image Directory
│
▼
FrameSource (DirectShow / FFmpeg)
│
▼
ArcSwap Latest-Frame Slot ◄── Zero-copy pointer sharing with NumPy
┌────────┴────────┐
▼ ▼
Face Worker Object Worker
YuNet+Pose+Gaze YOLOX-Nano
└────────┬────────┘
▼
Signals ──► FusionEngine ──► Events / Violations
Building from source
Requirements:
- Rust 1.80 or newer
- Python 3.9 or newer
- C++ build tools (MSVC on Windows, GCC/Clang on Linux and macOS)
# Set up a virtual environment and install build tools
uv venv
uv pip install maturin pytest numpy
# Build and install the extension into the active environment
uv run maturin develop
# Run the test suite
uv run pytest -v tests/
Release notes
v0.1.1
- Added
download_models()helper to fetch default ONNX model weights automatically. - Enhanced
Pipelineto download missing model files automatically on first use (auto_download=True). - Added
MODEL_URLSmapping and updated documentation.
v0.1.0
- Initial release of
vigilo-stream(withrustreambackward-compatibility alias) targeting Python 3.9 through 3.13. - Implemented
Framewith__array_interface__andmemoryview()support for zero-copy NumPy interop. - Implemented
FusionEnginewith single-frame stepping and deterministic JSONL log replay. - Implemented
Pipelinecontext manager wrapping camera capture, detection workers, and event polling. - Added data bindings for
BBox,FaceDetection,HeadPose,Gaze,ObjectDetection,Signals,Violation, andEvent. - Multi-platform CI testing across Windows, Ubuntu, and macOS.
License
AGPL-3.0. See LICENSE for details.
Release files for vigilo-stream 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vigilo_stream-0.1.1.tar.gz | 73.1 kB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vigilo_stream-0.1.1-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| vigilo_stream-0.1.1-cp39-abi3-manylinux_2_28_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| vigilo_stream-0.1.1-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
Total release size: 28.8 MB
Release files / vigilo_stream-0.1.1.tar.gz
| Download URL | vigilo_stream-0.1.1.tar.gz |
|---|---|
| Size | 73.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
791a9acf931b284600fe908bab83ca6ee3644ce2a08e217fcff6fc984c59206e
|
|
BLAKE2b-256 checksum How to use checksums |
ecf7fd76ad90409433879f8720057320f0599431bcd03f2ab5d6efef0628b861
|
| 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 16, 2026.
Transparency logRelease files / vigilo_stream-0.1.1-cp39-abi3-win_amd64.whl
| Download URL | vigilo_stream-0.1.1-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 9.2 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
3278ef1f4022775e594914f15bea32778b33208a520978a81ed537fb8a5bcd31
|
|
BLAKE2b-256 checksum How to use checksums |
3aea8a247522908ff5399dfebf58ae577a4c48af74ae5811ee68dff9c6c96f60
|
| 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 16, 2026.
Transparency logRelease files / vigilo_stream-0.1.1-cp39-abi3-manylinux_2_28_x86_64.whl
| Download URL | vigilo_stream-0.1.1-cp39-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 10.7 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
8731e4cc539befd8f03d6a55bf7a4f683e50fc5ee232e93b92884d089b411f46
|
|
BLAKE2b-256 checksum How to use checksums |
4610135dac4e926510b4ac9f98af67b26967ae86b8c643f50c2f9523cf4ffb86
|
| 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 16, 2026.
Transparency logRelease files / vigilo_stream-0.1.1-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | vigilo_stream-0.1.1-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.9 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
df9f43abd2d35c705f6a0937b422bb652d510b9e86a72cdfad32d12444feceb4
|
|
BLAKE2b-256 checksum How to use checksums |
367d102e39dbc1eb55f66857712829b2083d558c7fbdd6c53fda15a67c405f39
|
| 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 16, 2026.
Transparency log